From b0ed7431e83ab778f2faa74382642763767f8aeb Mon Sep 17 00:00:00 2001 From: Hayet Date: Mon, 8 Jun 2026 19:54:16 +0000 Subject: [PATCH] Week 6 ends - Python --- Python/__pycache__/pyttsx3.cpython-312.pyc | Bin 0 -> 340 bytes Python/cow.py | 4 + Python/exit.py | 8 + Python/greet.py | 8 + Python/integer.py | 13 + Python/integer1.py | 15 + Python/mario1.py | 4 + Python/phonebook.csv | 1 + Python/phonebook.py | 12 + Python/phonebook_new.py | 13 + Python/phonebookv1.py | 20 + Python/phonebookv1_list.py | 27 + Python/pyttsx3.py | 5 + Python/qr.png | Bin 0 -> 581 bytes Python/qr.py | 5 + Python/scores.py | 7 + Python/venv/bin/Activate.ps1 | 247 + Python/venv/bin/activate | 70 + Python/venv/bin/activate.csh | 27 + Python/venv/bin/activate.fish | 69 + Python/venv/bin/pip | 8 + Python/venv/bin/pip3 | 8 + Python/venv/bin/pip3.12 | 8 + Python/venv/bin/python | 1 + Python/venv/bin/python3 | 1 + Python/venv/bin/python3.12 | 1 + Python/venv/bin/qr | 8 + .../site-packages/PIL/AvifImagePlugin.py | 293 + .../site-packages/PIL/BdfFontFile.py | 123 + .../site-packages/PIL/BlpImagePlugin.py | 498 + .../site-packages/PIL/BmpImagePlugin.py | 514 + .../site-packages/PIL/BufrStubImagePlugin.py | 72 + .../site-packages/PIL/ContainerIO.py | 173 + .../site-packages/PIL/CurImagePlugin.py | 75 + .../site-packages/PIL/DcxImagePlugin.py | 84 + .../site-packages/PIL/DdsImagePlugin.py | 625 ++ .../site-packages/PIL/EpsImagePlugin.py | 481 + .../python3.12/site-packages/PIL/ExifTags.py | 384 + .../site-packages/PIL/FitsImagePlugin.py | 153 + .../site-packages/PIL/FliImagePlugin.py | 184 + .../python3.12/site-packages/PIL/FontFile.py | 159 + .../site-packages/PIL/FpxImagePlugin.py | 258 + .../site-packages/PIL/FtexImagePlugin.py | 115 + .../site-packages/PIL/GbrImagePlugin.py | 103 + .../site-packages/PIL/GdImageFile.py | 103 + .../site-packages/PIL/GifImagePlugin.py | 1223 +++ .../site-packages/PIL/GimpGradientFile.py | 154 + .../site-packages/PIL/GimpPaletteFile.py | 75 + .../site-packages/PIL/GribStubImagePlugin.py | 72 + .../site-packages/PIL/Hdf5StubImagePlugin.py | 72 + .../site-packages/PIL/IcnsImagePlugin.py | 401 + .../site-packages/PIL/IcoImagePlugin.py | 396 + .../site-packages/PIL/ImImagePlugin.py | 390 + .../lib/python3.12/site-packages/PIL/Image.py | 4381 +++++++++ .../site-packages/PIL/ImageChops.py | 311 + .../python3.12/site-packages/PIL/ImageCms.py | 1076 +++ .../site-packages/PIL/ImageColor.py | 320 + .../python3.12/site-packages/PIL/ImageDraw.py | 1035 ++ .../site-packages/PIL/ImageDraw2.py | 244 + .../site-packages/PIL/ImageEnhance.py | 113 + .../python3.12/site-packages/PIL/ImageFile.py | 935 ++ .../site-packages/PIL/ImageFilter.py | 607 ++ .../python3.12/site-packages/PIL/ImageFont.py | 1309 +++ .../python3.12/site-packages/PIL/ImageGrab.py | 231 + .../python3.12/site-packages/PIL/ImageMath.py | 314 + .../python3.12/site-packages/PIL/ImageMode.py | 85 + .../site-packages/PIL/ImageMorph.py | 317 + .../python3.12/site-packages/PIL/ImageOps.py | 746 ++ .../site-packages/PIL/ImagePalette.py | 290 + .../python3.12/site-packages/PIL/ImagePath.py | 20 + .../python3.12/site-packages/PIL/ImageQt.py | 219 + .../site-packages/PIL/ImageSequence.py | 88 + .../python3.12/site-packages/PIL/ImageShow.py | 362 + .../python3.12/site-packages/PIL/ImageStat.py | 167 + .../python3.12/site-packages/PIL/ImageText.py | 508 + .../python3.12/site-packages/PIL/ImageTk.py | 266 + .../site-packages/PIL/ImageTransform.py | 136 + .../python3.12/site-packages/PIL/ImageWin.py | 247 + .../site-packages/PIL/ImtImagePlugin.py | 103 + .../site-packages/PIL/IptcImagePlugin.py | 226 + .../site-packages/PIL/Jpeg2KImagePlugin.py | 460 + .../site-packages/PIL/JpegImagePlugin.py | 889 ++ .../site-packages/PIL/JpegPresets.py | 242 + .../site-packages/PIL/McIdasImagePlugin.py | 78 + .../site-packages/PIL/MicImagePlugin.py | 103 + .../site-packages/PIL/MpegImagePlugin.py | 84 + .../site-packages/PIL/MpoImagePlugin.py | 203 + .../site-packages/PIL/MspImagePlugin.py | 200 + .../python3.12/site-packages/PIL/PSDraw.py | 238 + .../site-packages/PIL/PaletteFile.py | 54 + .../site-packages/PIL/PalmImagePlugin.py | 217 + .../site-packages/PIL/PcdImagePlugin.py | 68 + .../site-packages/PIL/PcfFontFile.py | 258 + .../site-packages/PIL/PcxImagePlugin.py | 232 + .../site-packages/PIL/PdfImagePlugin.py | 311 + .../python3.12/site-packages/PIL/PdfParser.py | 1081 +++ .../site-packages/PIL/PixarImagePlugin.py | 72 + .../site-packages/PIL/PngImagePlugin.py | 1563 +++ .../site-packages/PIL/PpmImagePlugin.py | 375 + .../site-packages/PIL/PsdImagePlugin.py | 337 + .../site-packages/PIL/QoiImagePlugin.py | 235 + .../site-packages/PIL/SgiImagePlugin.py | 231 + .../site-packages/PIL/SpiderImagePlugin.py | 332 + .../site-packages/PIL/SunImagePlugin.py | 145 + .../lib/python3.12/site-packages/PIL/TarIO.py | 61 + .../site-packages/PIL/TgaImagePlugin.py | 280 + .../site-packages/PIL/TiffImagePlugin.py | 2353 +++++ .../python3.12/site-packages/PIL/TiffTags.py | 566 ++ .../site-packages/PIL/WalImageFile.py | 129 + .../site-packages/PIL/WebPImagePlugin.py | 317 + .../site-packages/PIL/WmfImagePlugin.py | 183 + .../site-packages/PIL/XVThumbImagePlugin.py | 83 + .../site-packages/PIL/XbmImagePlugin.py | 98 + .../site-packages/PIL/XpmImagePlugin.py | 157 + .../python3.12/site-packages/PIL/__init__.py | 87 + .../python3.12/site-packages/PIL/__main__.py | 7 + .../AvifImagePlugin.cpython-312.pyc | Bin 0 -> 11575 bytes .../__pycache__/BdfFontFile.cpython-312.pyc | Bin 0 -> 4211 bytes .../BlpImagePlugin.cpython-312.pyc | Bin 0 -> 24129 bytes .../BmpImagePlugin.cpython-312.pyc | Bin 0 -> 18064 bytes .../BufrStubImagePlugin.cpython-312.pyc | Bin 0 -> 2579 bytes .../__pycache__/ContainerIO.cpython-312.pyc | Bin 0 -> 7008 bytes .../CurImagePlugin.cpython-312.pyc | Bin 0 -> 2342 bytes .../DcxImagePlugin.cpython-312.pyc | Bin 0 -> 2927 bytes .../DdsImagePlugin.cpython-312.pyc | Bin 0 -> 24281 bytes .../EpsImagePlugin.cpython-312.pyc | Bin 0 -> 16032 bytes .../PIL/__pycache__/ExifTags.cpython-312.pyc | Bin 0 -> 11578 bytes .../FitsImagePlugin.cpython-312.pyc | Bin 0 -> 6241 bytes .../FliImagePlugin.cpython-312.pyc | Bin 0 -> 7167 bytes .../PIL/__pycache__/FontFile.cpython-312.pyc | Bin 0 -> 5562 bytes .../FpxImagePlugin.cpython-312.pyc | Bin 0 -> 7771 bytes .../FtexImagePlugin.cpython-312.pyc | Bin 0 -> 5344 bytes .../GbrImagePlugin.cpython-312.pyc | Bin 0 -> 3764 bytes .../__pycache__/GdImageFile.cpython-312.pyc | Bin 0 -> 3409 bytes .../GifImagePlugin.cpython-312.pyc | Bin 0 -> 45711 bytes .../GimpGradientFile.cpython-312.pyc | Bin 0 -> 5530 bytes .../GimpPaletteFile.cpython-312.pyc | Bin 0 -> 2738 bytes .../GribStubImagePlugin.cpython-312.pyc | Bin 0 -> 2667 bytes .../Hdf5StubImagePlugin.cpython-312.pyc | Bin 0 -> 2585 bytes .../IcnsImagePlugin.cpython-312.pyc | Bin 0 -> 16835 bytes .../IcoImagePlugin.cpython-312.pyc | Bin 0 -> 15334 bytes .../__pycache__/ImImagePlugin.cpython-312.pyc | Bin 0 -> 13134 bytes .../PIL/__pycache__/Image.cpython-312.pyc | Bin 0 -> 180750 bytes .../__pycache__/ImageChops.cpython-312.pyc | Bin 0 -> 11228 bytes .../PIL/__pycache__/ImageCms.cpython-312.pyc | Bin 0 -> 42608 bytes .../__pycache__/ImageColor.cpython-312.pyc | Bin 0 -> 12477 bytes .../PIL/__pycache__/ImageDraw.cpython-312.pyc | Bin 0 -> 38681 bytes .../__pycache__/ImageDraw2.cpython-312.pyc | Bin 0 -> 9785 bytes .../__pycache__/ImageEnhance.cpython-312.pyc | Bin 0 -> 5390 bytes .../PIL/__pycache__/ImageFile.cpython-312.pyc | Bin 0 -> 35932 bytes .../__pycache__/ImageFilter.cpython-312.pyc | Bin 0 -> 23159 bytes .../PIL/__pycache__/ImageFont.cpython-312.pyc | Bin 0 -> 68318 bytes .../PIL/__pycache__/ImageGrab.cpython-312.pyc | Bin 0 -> 8377 bytes .../PIL/__pycache__/ImageMath.cpython-312.pyc | Bin 0 -> 14447 bytes .../PIL/__pycache__/ImageMode.cpython-312.pyc | Bin 0 -> 2572 bytes .../__pycache__/ImageMorph.cpython-312.pyc | Bin 0 -> 13041 bytes .../PIL/__pycache__/ImageOps.cpython-312.pyc | Bin 0 -> 30384 bytes .../__pycache__/ImagePalette.cpython-312.pyc | Bin 0 -> 12367 bytes .../PIL/__pycache__/ImagePath.cpython-312.pyc | Bin 0 -> 338 bytes .../PIL/__pycache__/ImageQt.cpython-312.pyc | Bin 0 -> 8015 bytes .../__pycache__/ImageSequence.cpython-312.pyc | Bin 0 -> 3405 bytes .../PIL/__pycache__/ImageShow.cpython-312.pyc | Bin 0 -> 13866 bytes .../PIL/__pycache__/ImageStat.cpython-312.pyc | Bin 0 -> 7555 bytes .../PIL/__pycache__/ImageText.cpython-312.pyc | Bin 0 -> 20236 bytes .../PIL/__pycache__/ImageTk.cpython-312.pyc | Bin 0 -> 9366 bytes .../ImageTransform.cpython-312.pyc | Bin 0 -> 5371 bytes .../PIL/__pycache__/ImageWin.cpython-312.pyc | Bin 0 -> 11851 bytes .../ImtImagePlugin.cpython-312.pyc | Bin 0 -> 2537 bytes .../IptcImagePlugin.cpython-312.pyc | Bin 0 -> 8273 bytes .../Jpeg2KImagePlugin.cpython-312.pyc | Bin 0 -> 18538 bytes .../JpegImagePlugin.cpython-312.pyc | Bin 0 -> 33536 bytes .../__pycache__/JpegPresets.cpython-312.pyc | Bin 0 -> 8117 bytes .../McIdasImagePlugin.cpython-312.pyc | Bin 0 -> 2215 bytes .../MicImagePlugin.cpython-312.pyc | Bin 0 -> 3700 bytes .../MpegImagePlugin.cpython-312.pyc | Bin 0 -> 3617 bytes .../MpoImagePlugin.cpython-312.pyc | Bin 0 -> 8866 bytes .../MspImagePlugin.cpython-312.pyc | Bin 0 -> 5985 bytes .../PIL/__pycache__/PSDraw.cpython-312.pyc | Bin 0 -> 7938 bytes .../__pycache__/PaletteFile.cpython-312.pyc | Bin 0 -> 1920 bytes .../PalmImagePlugin.cpython-312.pyc | Bin 0 -> 9155 bytes .../PcdImagePlugin.cpython-312.pyc | Bin 0 -> 2461 bytes .../__pycache__/PcfFontFile.cpython-312.pyc | Bin 0 -> 10001 bytes .../PcxImagePlugin.cpython-312.pyc | Bin 0 -> 7567 bytes .../PdfImagePlugin.cpython-312.pyc | Bin 0 -> 9734 bytes .../PIL/__pycache__/PdfParser.cpython-312.pyc | Bin 0 -> 53073 bytes .../PixarImagePlugin.cpython-312.pyc | Bin 0 -> 1955 bytes .../PngImagePlugin.cpython-312.pyc | Bin 0 -> 63089 bytes .../PpmImagePlugin.cpython-312.pyc | Bin 0 -> 14185 bytes .../PsdImagePlugin.cpython-312.pyc | Bin 0 -> 11238 bytes .../QoiImagePlugin.cpython-312.pyc | Bin 0 -> 11353 bytes .../SgiImagePlugin.cpython-312.pyc | Bin 0 -> 8018 bytes .../SpiderImagePlugin.cpython-312.pyc | Bin 0 -> 12573 bytes .../SunImagePlugin.cpython-312.pyc | Bin 0 -> 3409 bytes .../PIL/__pycache__/TarIO.cpython-312.pyc | Bin 0 -> 2031 bytes .../TgaImagePlugin.cpython-312.pyc | Bin 0 -> 8902 bytes .../TiffImagePlugin.cpython-312.pyc | Bin 0 -> 102373 bytes .../PIL/__pycache__/TiffTags.cpython-312.pyc | Bin 0 -> 18903 bytes .../__pycache__/WalImageFile.cpython-312.pyc | Bin 0 -> 4171 bytes .../WebPImagePlugin.cpython-312.pyc | Bin 0 -> 12966 bytes .../WmfImagePlugin.cpython-312.pyc | Bin 0 -> 6303 bytes .../XVThumbImagePlugin.cpython-312.pyc | Bin 0 -> 2651 bytes .../XbmImagePlugin.cpython-312.pyc | Bin 0 -> 4098 bytes .../XpmImagePlugin.cpython-312.pyc | Bin 0 -> 6148 bytes .../PIL/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 2038 bytes .../PIL/__pycache__/__main__.cpython-312.pyc | Bin 0 -> 382 bytes .../PIL/__pycache__/_binary.cpython-312.pyc | Bin 0 -> 3425 bytes .../__pycache__/_deprecate.cpython-312.pyc | Bin 0 -> 2565 bytes .../_tkinter_finder.cpython-312.pyc | Bin 0 -> 749 bytes .../PIL/__pycache__/_typing.cpython-312.pyc | Bin 0 -> 1613 bytes .../PIL/__pycache__/_util.cpython-312.pyc | Bin 0 -> 1569 bytes .../PIL/__pycache__/_version.cpython-312.pyc | Bin 0 -> 254 bytes .../PIL/__pycache__/features.cpython-312.pyc | Bin 0 -> 13503 bytes .../PIL/__pycache__/report.cpython-312.pyc | Bin 0 -> 316 bytes .../PIL/_avif.cpython-312-x86_64-linux-gnu.so | Bin 0 -> 91985 bytes .../python3.12/site-packages/PIL/_avif.pyi | 3 + .../python3.12/site-packages/PIL/_binary.py | 113 + .../site-packages/PIL/_deprecate.py | 72 + .../_imaging.cpython-312-x86_64-linux-gnu.so | Bin 0 -> 3365761 bytes .../python3.12/site-packages/PIL/_imaging.pyi | 31 + ...imagingcms.cpython-312-x86_64-linux-gnu.so | Bin 0 -> 157841 bytes .../site-packages/PIL/_imagingcms.pyi | 143 + ..._imagingft.cpython-312-x86_64-linux-gnu.so | Bin 0 -> 331169 bytes .../site-packages/PIL/_imagingft.pyi | 70 + ...magingmath.cpython-312-x86_64-linux-gnu.so | Bin 0 -> 167696 bytes .../site-packages/PIL/_imagingmath.pyi | 3 + ...agingmorph.cpython-312-x86_64-linux-gnu.so | Bin 0 -> 38448 bytes .../site-packages/PIL/_imagingmorph.pyi | 3 + ..._imagingtk.cpython-312-x86_64-linux-gnu.so | Bin 0 -> 47000 bytes .../site-packages/PIL/_imagingtk.pyi | 3 + .../site-packages/PIL/_tkinter_finder.py | 20 + .../python3.12/site-packages/PIL/_typing.py | 45 + .../lib/python3.12/site-packages/PIL/_util.py | 29 + .../python3.12/site-packages/PIL/_version.py | 4 + .../PIL/_webp.cpython-312-x86_64-linux-gnu.so | Bin 0 -> 108849 bytes .../python3.12/site-packages/PIL/_webp.pyi | 3 + .../python3.12/site-packages/PIL/features.py | 343 + .../lib/python3.12/site-packages/PIL/py.typed | 0 .../python3.12/site-packages/PIL/report.py | 5 + .../pillow-12.2.0.dist-info/INSTALLER | 1 + .../pillow-12.2.0.dist-info/METADATA | 175 + .../pillow-12.2.0.dist-info/RECORD | 238 + .../pillow-12.2.0.dist-info/REQUESTED | 0 .../pillow-12.2.0.dist-info/WHEEL | 6 + .../pillow-12.2.0.dist-info/licenses/LICENSE | 1523 +++ .../sboms/auditwheel.cdx.json | 1 + .../pillow-12.2.0.dist-info/top_level.txt | 1 + .../pillow-12.2.0.dist-info/zip-safe | 1 + .../pillow.libs/libXau-154567c4.so.6.0.0 | Bin 0 -> 22081 bytes .../pillow.libs/libavif-a883386a.so.16.4.1 | Bin 0 -> 5183009 bytes .../libbrotlicommon-785b7a00.so.1.2.0 | Bin 0 -> 144425 bytes .../libbrotlidec-08d35d18.so.1.2.0 | Bin 0 -> 62337 bytes .../libfreetype-d2d71ad9.so.6.20.6 | Bin 0 -> 1459513 bytes .../libharfbuzz-ef65cc8a.so.0.61321.0 | Bin 0 -> 933009 bytes .../pillow.libs/libjpeg-8296d2fa.so.62.4.0 | Bin 0 -> 836273 bytes .../pillow.libs/liblcms2-545f6561.so.2.0.18 | Bin 0 -> 519073 bytes .../pillow.libs/liblzma-3c942967.so.5.8.3 | Bin 0 -> 266369 bytes .../pillow.libs/libopenjp2-f3576751.so.2.5.4 | Bin 0 -> 585849 bytes .../pillow.libs/libpng16-65c953c0.so.16.56.0 | Bin 0 -> 278001 bytes .../pillow.libs/libsharpyuv-0bacc318.so.0.1.2 | Bin 0 -> 46113 bytes .../pillow.libs/libtiff-f4bc73ff.so.6.2.0 | Bin 0 -> 754729 bytes .../pillow.libs/libwebp-67ee3789.so.7.2.0 | Bin 0 -> 731209 bytes .../libwebpdemux-eeb71312.so.2.0.17 | Bin 0 -> 30217 bytes .../pillow.libs/libwebpmux-20a90b09.so.3.1.2 | Bin 0 -> 58617 bytes .../pillow.libs/libxcb-bac6ebc8.so.1.1.0 | Bin 0 -> 251425 bytes .../pillow.libs/libzstd-6ea785c0.so.1.5.7 | Bin 0 -> 1800497 bytes .../pip-24.0.dist-info/AUTHORS.txt | 760 ++ .../pip-24.0.dist-info/INSTALLER | 1 + .../pip-24.0.dist-info/LICENSE.txt | 20 + .../site-packages/pip-24.0.dist-info/METADATA | 88 + .../site-packages/pip-24.0.dist-info/RECORD | 1005 ++ .../pip-24.0.dist-info/REQUESTED | 0 .../site-packages/pip-24.0.dist-info/WHEEL | 5 + .../pip-24.0.dist-info/entry_points.txt | 4 + .../pip-24.0.dist-info/top_level.txt | 1 + .../python3.12/site-packages/pip/__init__.py | 13 + .../python3.12/site-packages/pip/__main__.py | 24 + .../site-packages/pip/__pip-runner__.py | 50 + .../pip/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 684 bytes .../pip/__pycache__/__main__.cpython-312.pyc | Bin 0 -> 840 bytes .../__pip-runner__.cpython-312.pyc | Bin 0 -> 2203 bytes .../site-packages/pip/_internal/__init__.py | 18 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 786 bytes .../__pycache__/build_env.cpython-312.pyc | Bin 0 -> 14293 bytes .../__pycache__/cache.cpython-312.pyc | Bin 0 -> 12664 bytes .../__pycache__/configuration.cpython-312.pyc | Bin 0 -> 17665 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 0 -> 33283 bytes .../__pycache__/main.cpython-312.pyc | Bin 0 -> 669 bytes .../__pycache__/pyproject.cpython-312.pyc | Bin 0 -> 4970 bytes .../self_outdated_check.cpython-312.pyc | Bin 0 -> 10551 bytes .../__pycache__/wheel_builder.cpython-312.pyc | Bin 0 -> 13648 bytes .../site-packages/pip/_internal/build_env.py | 311 + .../site-packages/pip/_internal/cache.py | 290 + .../pip/_internal/cli/__init__.py | 4 + .../cli/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 277 bytes .../autocompletion.cpython-312.pyc | Bin 0 -> 8464 bytes .../__pycache__/base_command.cpython-312.pyc | Bin 0 -> 10454 bytes .../__pycache__/cmdoptions.cpython-312.pyc | Bin 0 -> 30373 bytes .../command_context.cpython-312.pyc | Bin 0 -> 1780 bytes .../cli/__pycache__/main.cpython-312.pyc | Bin 0 -> 2297 bytes .../__pycache__/main_parser.cpython-312.pyc | Bin 0 -> 4904 bytes .../cli/__pycache__/parser.cpython-312.pyc | Bin 0 -> 15021 bytes .../__pycache__/progress_bars.cpython-312.pyc | Bin 0 -> 2619 bytes .../__pycache__/req_command.cpython-312.pyc | Bin 0 -> 18851 bytes .../cli/__pycache__/spinners.cpython-312.pyc | Bin 0 -> 7839 bytes .../__pycache__/status_codes.cpython-312.pyc | Bin 0 -> 374 bytes .../pip/_internal/cli/autocompletion.py | 172 + .../pip/_internal/cli/base_command.py | 236 + .../pip/_internal/cli/cmdoptions.py | 1074 ++ .../pip/_internal/cli/command_context.py | 27 + .../site-packages/pip/_internal/cli/main.py | 79 + .../pip/_internal/cli/main_parser.py | 134 + .../site-packages/pip/_internal/cli/parser.py | 294 + .../pip/_internal/cli/progress_bars.py | 68 + .../pip/_internal/cli/req_command.py | 505 + .../pip/_internal/cli/spinners.py | 159 + .../pip/_internal/cli/status_codes.py | 6 + .../pip/_internal/commands/__init__.py | 132 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 4001 bytes .../__pycache__/cache.cpython-312.pyc | Bin 0 -> 9710 bytes .../__pycache__/check.cpython-312.pyc | Bin 0 -> 2089 bytes .../__pycache__/completion.cpython-312.pyc | Bin 0 -> 5191 bytes .../__pycache__/configuration.cpython-312.pyc | Bin 0 -> 13211 bytes .../__pycache__/debug.cpython-312.pyc | Bin 0 -> 10160 bytes .../__pycache__/download.cpython-312.pyc | Bin 0 -> 7588 bytes .../__pycache__/freeze.cpython-312.pyc | Bin 0 -> 4415 bytes .../commands/__pycache__/hash.cpython-312.pyc | Bin 0 -> 2982 bytes .../commands/__pycache__/help.cpython-312.pyc | Bin 0 -> 1672 bytes .../__pycache__/index.cpython-312.pyc | Bin 0 -> 6719 bytes .../__pycache__/inspect.cpython-312.pyc | Bin 0 -> 3974 bytes .../__pycache__/install.cpython-312.pyc | Bin 0 -> 28912 bytes .../commands/__pycache__/list.cpython-312.pyc | Bin 0 -> 15655 bytes .../__pycache__/search.cpython-312.pyc | Bin 0 -> 7620 bytes .../commands/__pycache__/show.cpython-312.pyc | Bin 0 -> 9727 bytes .../__pycache__/uninstall.cpython-312.pyc | Bin 0 -> 4725 bytes .../__pycache__/wheel.cpython-312.pyc | Bin 0 -> 8955 bytes .../pip/_internal/commands/cache.py | 225 + .../pip/_internal/commands/check.py | 54 + .../pip/_internal/commands/completion.py | 130 + .../pip/_internal/commands/configuration.py | 280 + .../pip/_internal/commands/debug.py | 201 + .../pip/_internal/commands/download.py | 147 + .../pip/_internal/commands/freeze.py | 109 + .../pip/_internal/commands/hash.py | 59 + .../pip/_internal/commands/help.py | 41 + .../pip/_internal/commands/index.py | 139 + .../pip/_internal/commands/inspect.py | 92 + .../pip/_internal/commands/install.py | 774 ++ .../pip/_internal/commands/list.py | 370 + .../pip/_internal/commands/search.py | 174 + .../pip/_internal/commands/show.py | 189 + .../pip/_internal/commands/uninstall.py | 113 + .../pip/_internal/commands/wheel.py | 183 + .../pip/_internal/configuration.py | 383 + .../pip/_internal/distributions/__init__.py | 21 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 940 bytes .../__pycache__/base.cpython-312.pyc | Bin 0 -> 2861 bytes .../__pycache__/installed.cpython-312.pyc | Bin 0 -> 1699 bytes .../__pycache__/sdist.cpython-312.pyc | Bin 0 -> 8487 bytes .../__pycache__/wheel.cpython-312.pyc | Bin 0 -> 2247 bytes .../pip/_internal/distributions/base.py | 51 + .../pip/_internal/distributions/installed.py | 29 + .../pip/_internal/distributions/sdist.py | 156 + .../pip/_internal/distributions/wheel.py | 40 + .../site-packages/pip/_internal/exceptions.py | 728 ++ .../pip/_internal/index/__init__.py | 2 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 231 bytes .../__pycache__/collector.cpython-312.pyc | Bin 0 -> 21885 bytes .../package_finder.cpython-312.pyc | Bin 0 -> 40734 bytes .../index/__pycache__/sources.cpython-312.pyc | Bin 0 -> 12603 bytes .../pip/_internal/index/collector.py | 507 + .../pip/_internal/index/package_finder.py | 1027 ++ .../pip/_internal/index/sources.py | 285 + .../pip/_internal/locations/__init__.py | 467 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 16775 bytes .../__pycache__/_distutils.cpython-312.pyc | Bin 0 -> 6855 bytes .../__pycache__/_sysconfig.cpython-312.pyc | Bin 0 -> 8010 bytes .../__pycache__/base.cpython-312.pyc | Bin 0 -> 3780 bytes .../pip/_internal/locations/_distutils.py | 172 + .../pip/_internal/locations/_sysconfig.py | 213 + .../pip/_internal/locations/base.py | 81 + .../site-packages/pip/_internal/main.py | 12 + .../pip/_internal/metadata/__init__.py | 128 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 5881 bytes .../__pycache__/_json.cpython-312.pyc | Bin 0 -> 2874 bytes .../metadata/__pycache__/base.cpython-312.pyc | Bin 0 -> 35711 bytes .../__pycache__/pkg_resources.cpython-312.pyc | Bin 0 -> 15789 bytes .../pip/_internal/metadata/_json.py | 84 + .../pip/_internal/metadata/base.py | 702 ++ .../_internal/metadata/importlib/__init__.py | 6 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 357 bytes .../__pycache__/_compat.cpython-312.pyc | Bin 0 -> 3332 bytes .../__pycache__/_dists.cpython-312.pyc | Bin 0 -> 13424 bytes .../__pycache__/_envs.cpython-312.pyc | Bin 0 -> 11179 bytes .../_internal/metadata/importlib/_compat.py | 55 + .../_internal/metadata/importlib/_dists.py | 227 + .../pip/_internal/metadata/importlib/_envs.py | 189 + .../pip/_internal/metadata/pkg_resources.py | 278 + .../pip/_internal/models/__init__.py | 2 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 265 bytes .../__pycache__/candidate.cpython-312.pyc | Bin 0 -> 1904 bytes .../__pycache__/direct_url.cpython-312.pyc | Bin 0 -> 11198 bytes .../format_control.cpython-312.pyc | Bin 0 -> 4226 bytes .../models/__pycache__/index.cpython-312.pyc | Bin 0 -> 1693 bytes .../installation_report.cpython-312.pyc | Bin 0 -> 2271 bytes .../models/__pycache__/link.cpython-312.pyc | Bin 0 -> 26001 bytes .../models/__pycache__/scheme.cpython-312.pyc | Bin 0 -> 1168 bytes .../__pycache__/search_scope.cpython-312.pyc | Bin 0 -> 5087 bytes .../selection_prefs.cpython-312.pyc | Bin 0 -> 1850 bytes .../__pycache__/target_python.cpython-312.pyc | Bin 0 -> 4953 bytes .../models/__pycache__/wheel.cpython-312.pyc | Bin 0 -> 5779 bytes .../pip/_internal/models/candidate.py | 30 + .../pip/_internal/models/direct_url.py | 235 + .../pip/_internal/models/format_control.py | 78 + .../pip/_internal/models/index.py | 28 + .../_internal/models/installation_report.py | 56 + .../pip/_internal/models/link.py | 579 ++ .../pip/_internal/models/scheme.py | 31 + .../pip/_internal/models/search_scope.py | 132 + .../pip/_internal/models/selection_prefs.py | 51 + .../pip/_internal/models/target_python.py | 122 + .../pip/_internal/models/wheel.py | 92 + .../pip/_internal/network/__init__.py | 2 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 253 bytes .../network/__pycache__/auth.cpython-312.pyc | Bin 0 -> 21995 bytes .../network/__pycache__/cache.cpython-312.pyc | Bin 0 -> 6517 bytes .../__pycache__/download.cpython-312.pyc | Bin 0 -> 8552 bytes .../__pycache__/lazy_wheel.cpython-312.pyc | Bin 0 -> 11662 bytes .../__pycache__/session.cpython-312.pyc | Bin 0 -> 18773 bytes .../network/__pycache__/utils.cpython-312.pyc | Bin 0 -> 2252 bytes .../__pycache__/xmlrpc.cpython-312.pyc | Bin 0 -> 2948 bytes .../pip/_internal/network/auth.py | 561 ++ .../pip/_internal/network/cache.py | 106 + .../pip/_internal/network/download.py | 186 + .../pip/_internal/network/lazy_wheel.py | 210 + .../pip/_internal/network/session.py | 520 + .../pip/_internal/network/utils.py | 96 + .../pip/_internal/network/xmlrpc.py | 62 + .../pip/_internal/operations/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 196 bytes .../__pycache__/check.cpython-312.pyc | Bin 0 -> 7578 bytes .../__pycache__/freeze.cpython-312.pyc | Bin 0 -> 10116 bytes .../__pycache__/prepare.cpython-312.pyc | Bin 0 -> 25746 bytes .../_internal/operations/build/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 202 bytes .../__pycache__/build_tracker.cpython-312.pyc | Bin 0 -> 7822 bytes .../__pycache__/metadata.cpython-312.pyc | Bin 0 -> 1879 bytes .../metadata_editable.cpython-312.pyc | Bin 0 -> 1913 bytes .../metadata_legacy.cpython-312.pyc | Bin 0 -> 3064 bytes .../build/__pycache__/wheel.cpython-312.pyc | Bin 0 -> 1683 bytes .../wheel_editable.cpython-312.pyc | Bin 0 -> 2024 bytes .../__pycache__/wheel_legacy.cpython-312.pyc | Bin 0 -> 3928 bytes .../operations/build/build_tracker.py | 139 + .../_internal/operations/build/metadata.py | 39 + .../operations/build/metadata_editable.py | 41 + .../operations/build/metadata_legacy.py | 74 + .../pip/_internal/operations/build/wheel.py | 37 + .../operations/build/wheel_editable.py | 46 + .../operations/build/wheel_legacy.py | 102 + .../pip/_internal/operations/check.py | 187 + .../pip/_internal/operations/freeze.py | 255 + .../_internal/operations/install/__init__.py | 2 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 265 bytes .../editable_legacy.cpython-312.pyc | Bin 0 -> 1816 bytes .../install/__pycache__/wheel.cpython-312.pyc | Bin 0 -> 33858 bytes .../operations/install/editable_legacy.py | 46 + .../pip/_internal/operations/install/wheel.py | 734 ++ .../pip/_internal/operations/prepare.py | 730 ++ .../site-packages/pip/_internal/pyproject.py | 179 + .../pip/_internal/req/__init__.py | 92 + .../req/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 3742 bytes .../__pycache__/constructors.cpython-312.pyc | Bin 0 -> 21581 bytes .../req/__pycache__/req_file.cpython-312.pyc | Bin 0 -> 21460 bytes .../__pycache__/req_install.cpython-312.pyc | Bin 0 -> 38413 bytes .../req/__pycache__/req_set.cpython-312.pyc | Bin 0 -> 7217 bytes .../__pycache__/req_uninstall.cpython-312.pyc | Bin 0 -> 32976 bytes .../pip/_internal/req/constructors.py | 576 ++ .../pip/_internal/req/req_file.py | 554 ++ .../pip/_internal/req/req_install.py | 923 ++ .../pip/_internal/req/req_set.py | 119 + .../pip/_internal/req/req_uninstall.py | 649 ++ .../pip/_internal/resolution/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 196 bytes .../__pycache__/base.cpython-312.pyc | Bin 0 -> 1184 bytes .../pip/_internal/resolution/base.py | 20 + .../_internal/resolution/legacy/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 203 bytes .../__pycache__/resolver.cpython-312.pyc | Bin 0 -> 22438 bytes .../_internal/resolution/legacy/resolver.py | 598 ++ .../resolution/resolvelib/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 207 bytes .../__pycache__/base.cpython-312.pyc | Bin 0 -> 8336 bytes .../__pycache__/candidates.cpython-312.pyc | Bin 0 -> 30397 bytes .../__pycache__/factory.cpython-312.pyc | Bin 0 -> 32113 bytes .../found_candidates.cpython-312.pyc | Bin 0 -> 6207 bytes .../__pycache__/provider.cpython-312.pyc | Bin 0 -> 10377 bytes .../__pycache__/reporter.cpython-312.pyc | Bin 0 -> 4934 bytes .../__pycache__/requirements.cpython-312.pyc | Bin 0 -> 11428 bytes .../__pycache__/resolver.cpython-312.pyc | Bin 0 -> 12350 bytes .../_internal/resolution/resolvelib/base.py | 141 + .../resolution/resolvelib/candidates.py | 597 ++ .../resolution/resolvelib/factory.py | 812 ++ .../resolution/resolvelib/found_candidates.py | 155 + .../resolution/resolvelib/provider.py | 255 + .../resolution/resolvelib/reporter.py | 80 + .../resolution/resolvelib/requirements.py | 166 + .../resolution/resolvelib/resolver.py | 317 + .../pip/_internal/self_outdated_check.py | 248 + .../pip/_internal/utils/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 191 bytes .../__pycache__/_jaraco_text.cpython-312.pyc | Bin 0 -> 4532 bytes .../utils/__pycache__/_log.cpython-312.pyc | Bin 0 -> 1862 bytes .../utils/__pycache__/appdirs.cpython-312.pyc | Bin 0 -> 2406 bytes .../utils/__pycache__/compat.cpython-312.pyc | Bin 0 -> 2209 bytes .../compatibility_tags.cpython-312.pyc | Bin 0 -> 5557 bytes .../__pycache__/datetime.cpython-312.pyc | Bin 0 -> 680 bytes .../__pycache__/deprecation.cpython-312.pyc | Bin 0 -> 4182 bytes .../direct_url_helpers.cpython-312.pyc | Bin 0 -> 3559 bytes .../__pycache__/egg_link.cpython-312.pyc | Bin 0 -> 3222 bytes .../__pycache__/encoding.cpython-312.pyc | Bin 0 -> 2154 bytes .../__pycache__/entrypoints.cpython-312.pyc | Bin 0 -> 3989 bytes .../__pycache__/filesystem.cpython-312.pyc | Bin 0 -> 7454 bytes .../__pycache__/filetypes.cpython-312.pyc | Bin 0 -> 1160 bytes .../utils/__pycache__/glibc.cpython-312.pyc | Bin 0 -> 2338 bytes .../utils/__pycache__/hashes.cpython-312.pyc | Bin 0 -> 7550 bytes .../utils/__pycache__/logging.cpython-312.pyc | Bin 0 -> 13553 bytes .../utils/__pycache__/misc.cpython-312.pyc | Bin 0 -> 34117 bytes .../utils/__pycache__/models.cpython-312.pyc | Bin 0 -> 2708 bytes .../__pycache__/packaging.cpython-312.pyc | Bin 0 -> 2579 bytes .../setuptools_build.cpython-312.pyc | Bin 0 -> 4546 bytes .../__pycache__/subprocess.cpython-312.pyc | Bin 0 -> 8714 bytes .../__pycache__/temp_dir.cpython-312.pyc | Bin 0 -> 12058 bytes .../__pycache__/unpacking.cpython-312.pyc | Bin 0 -> 11104 bytes .../utils/__pycache__/urls.cpython-312.pyc | Bin 0 -> 2401 bytes .../__pycache__/virtualenv.cpython-312.pyc | Bin 0 -> 4476 bytes .../utils/__pycache__/wheel.cpython-312.pyc | Bin 0 -> 5922 bytes .../pip/_internal/utils/_jaraco_text.py | 109 + .../site-packages/pip/_internal/utils/_log.py | 38 + .../pip/_internal/utils/appdirs.py | 52 + .../pip/_internal/utils/compat.py | 63 + .../pip/_internal/utils/compatibility_tags.py | 165 + .../pip/_internal/utils/datetime.py | 11 + .../pip/_internal/utils/deprecation.py | 120 + .../pip/_internal/utils/direct_url_helpers.py | 87 + .../pip/_internal/utils/egg_link.py | 80 + .../pip/_internal/utils/encoding.py | 36 + .../pip/_internal/utils/entrypoints.py | 84 + .../pip/_internal/utils/filesystem.py | 153 + .../pip/_internal/utils/filetypes.py | 27 + .../pip/_internal/utils/glibc.py | 88 + .../pip/_internal/utils/hashes.py | 151 + .../pip/_internal/utils/logging.py | 348 + .../site-packages/pip/_internal/utils/misc.py | 783 ++ .../pip/_internal/utils/models.py | 39 + .../pip/_internal/utils/packaging.py | 57 + .../pip/_internal/utils/setuptools_build.py | 146 + .../pip/_internal/utils/subprocess.py | 260 + .../pip/_internal/utils/temp_dir.py | 296 + .../pip/_internal/utils/unpacking.py | 257 + .../site-packages/pip/_internal/utils/urls.py | 62 + .../pip/_internal/utils/virtualenv.py | 104 + .../pip/_internal/utils/wheel.py | 134 + .../pip/_internal/vcs/__init__.py | 15 + .../vcs/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 530 bytes .../vcs/__pycache__/bazaar.cpython-312.pyc | Bin 0 -> 5022 bytes .../vcs/__pycache__/git.cpython-312.pyc | Bin 0 -> 18991 bytes .../vcs/__pycache__/mercurial.cpython-312.pyc | Bin 0 -> 7611 bytes .../__pycache__/subversion.cpython-312.pyc | Bin 0 -> 12483 bytes .../versioncontrol.cpython-312.pyc | Bin 0 -> 29009 bytes .../site-packages/pip/_internal/vcs/bazaar.py | 112 + .../site-packages/pip/_internal/vcs/git.py | 526 + .../pip/_internal/vcs/mercurial.py | 163 + .../pip/_internal/vcs/subversion.py | 324 + .../pip/_internal/vcs/versioncontrol.py | 705 ++ .../pip/_internal/wheel_builder.py | 354 + .../site-packages/pip/_vendor/__init__.py | 121 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 4692 bytes .../_vendor/__pycache__/six.cpython-312.pyc | Bin 0 -> 41269 bytes .../typing_extensions.cpython-312.pyc | Bin 0 -> 122049 bytes .../pip/_vendor/cachecontrol/__init__.py | 28 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 902 bytes .../__pycache__/_cmd.cpython-312.pyc | Bin 0 -> 2646 bytes .../__pycache__/adapter.cpython-312.pyc | Bin 0 -> 6464 bytes .../__pycache__/cache.cpython-312.pyc | Bin 0 -> 3809 bytes .../__pycache__/controller.cpython-312.pyc | Bin 0 -> 16167 bytes .../__pycache__/filewrapper.cpython-312.pyc | Bin 0 -> 4347 bytes .../__pycache__/heuristics.cpython-312.pyc | Bin 0 -> 6694 bytes .../__pycache__/serialize.cpython-312.pyc | Bin 0 -> 6405 bytes .../__pycache__/wrapper.cpython-312.pyc | Bin 0 -> 1674 bytes .../pip/_vendor/cachecontrol/_cmd.py | 70 + .../pip/_vendor/cachecontrol/adapter.py | 161 + .../pip/_vendor/cachecontrol/cache.py | 74 + .../_vendor/cachecontrol/caches/__init__.py | 8 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 435 bytes .../__pycache__/file_cache.cpython-312.pyc | Bin 0 -> 7710 bytes .../__pycache__/redis_cache.cpython-312.pyc | Bin 0 -> 2738 bytes .../_vendor/cachecontrol/caches/file_cache.py | 181 + .../cachecontrol/caches/redis_cache.py | 48 + .../pip/_vendor/cachecontrol/controller.py | 494 + .../pip/_vendor/cachecontrol/filewrapper.py | 119 + .../pip/_vendor/cachecontrol/heuristics.py | 154 + .../pip/_vendor/cachecontrol/serialize.py | 206 + .../pip/_vendor/cachecontrol/wrapper.py | 43 + .../pip/_vendor/certifi/__init__.py | 4 + .../pip/_vendor/certifi/__main__.py | 12 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 318 bytes .../__pycache__/__main__.cpython-312.pyc | Bin 0 -> 645 bytes .../certifi/__pycache__/core.cpython-312.pyc | Bin 0 -> 3327 bytes .../pip/_vendor/certifi/cacert.pem | 4635 +++++++++ .../site-packages/pip/_vendor/certifi/core.py | 119 + .../pip/_vendor/chardet/__init__.py | 115 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 4568 bytes .../__pycache__/big5freq.cpython-312.pyc | Bin 0 -> 27199 bytes .../__pycache__/big5prober.cpython-312.pyc | Bin 0 -> 1387 bytes .../chardistribution.cpython-312.pyc | Bin 0 -> 9638 bytes .../charsetgroupprober.cpython-312.pyc | Bin 0 -> 4122 bytes .../__pycache__/charsetprober.cpython-312.pyc | Bin 0 -> 5018 bytes .../codingstatemachine.cpython-312.pyc | Bin 0 -> 3878 bytes .../codingstatemachinedict.cpython-312.pyc | Bin 0 -> 789 bytes .../__pycache__/cp949prober.cpython-312.pyc | Bin 0 -> 1396 bytes .../chardet/__pycache__/enums.cpython-312.pyc | Bin 0 -> 2996 bytes .../__pycache__/escprober.cpython-312.pyc | Bin 0 -> 4566 bytes .../chardet/__pycache__/escsm.cpython-312.pyc | Bin 0 -> 15310 bytes .../__pycache__/eucjpprober.cpython-312.pyc | Bin 0 -> 4383 bytes .../__pycache__/euckrfreq.cpython-312.pyc | Bin 0 -> 12082 bytes .../__pycache__/euckrprober.cpython-312.pyc | Bin 0 -> 1390 bytes .../__pycache__/euctwfreq.cpython-312.pyc | Bin 0 -> 27204 bytes .../__pycache__/euctwprober.cpython-312.pyc | Bin 0 -> 1390 bytes .../__pycache__/gb2312freq.cpython-312.pyc | Bin 0 -> 19126 bytes .../__pycache__/gb2312prober.cpython-312.pyc | Bin 0 -> 1403 bytes .../__pycache__/hebrewprober.cpython-312.pyc | Bin 0 -> 5822 bytes .../__pycache__/jisfreq.cpython-312.pyc | Bin 0 -> 22155 bytes .../__pycache__/johabfreq.cpython-312.pyc | Bin 0 -> 83003 bytes .../__pycache__/johabprober.cpython-312.pyc | Bin 0 -> 1394 bytes .../__pycache__/jpcntx.cpython-312.pyc | Bin 0 -> 39549 bytes .../langbulgarianmodel.cpython-312.pyc | Bin 0 -> 83122 bytes .../langgreekmodel.cpython-312.pyc | Bin 0 -> 76988 bytes .../langhebrewmodel.cpython-312.pyc | Bin 0 -> 77499 bytes .../langhungarianmodel.cpython-312.pyc | Bin 0 -> 83076 bytes .../langrussianmodel.cpython-312.pyc | Bin 0 -> 105251 bytes .../__pycache__/langthaimodel.cpython-312.pyc | Bin 0 -> 77677 bytes .../langturkishmodel.cpython-312.pyc | Bin 0 -> 77516 bytes .../__pycache__/latin1prober.cpython-312.pyc | Bin 0 -> 7002 bytes .../macromanprober.cpython-312.pyc | Bin 0 -> 7182 bytes .../mbcharsetprober.cpython-312.pyc | Bin 0 -> 3903 bytes .../mbcsgroupprober.cpython-312.pyc | Bin 0 -> 1588 bytes .../__pycache__/mbcssm.cpython-312.pyc | Bin 0 -> 38645 bytes .../__pycache__/resultdict.cpython-312.pyc | Bin 0 -> 632 bytes .../sbcharsetprober.cpython-312.pyc | Bin 0 -> 6387 bytes .../sbcsgroupprober.cpython-312.pyc | Bin 0 -> 2357 bytes .../__pycache__/sjisprober.cpython-312.pyc | Bin 0 -> 4495 bytes .../universaldetector.cpython-312.pyc | Bin 0 -> 12269 bytes .../__pycache__/utf1632prober.cpython-312.pyc | Bin 0 -> 9979 bytes .../__pycache__/utf8prober.cpython-312.pyc | Bin 0 -> 3175 bytes .../__pycache__/version.cpython-312.pyc | Bin 0 -> 488 bytes .../pip/_vendor/chardet/big5freq.py | 386 + .../pip/_vendor/chardet/big5prober.py | 47 + .../pip/_vendor/chardet/chardistribution.py | 261 + .../pip/_vendor/chardet/charsetgroupprober.py | 106 + .../pip/_vendor/chardet/charsetprober.py | 147 + .../pip/_vendor/chardet/cli/__init__.py | 0 .../cli/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 195 bytes .../__pycache__/chardetect.cpython-312.pyc | Bin 0 -> 4012 bytes .../pip/_vendor/chardet/cli/chardetect.py | 112 + .../pip/_vendor/chardet/codingstatemachine.py | 90 + .../_vendor/chardet/codingstatemachinedict.py | 19 + .../pip/_vendor/chardet/cp949prober.py | 49 + .../pip/_vendor/chardet/enums.py | 85 + .../pip/_vendor/chardet/escprober.py | 102 + .../pip/_vendor/chardet/escsm.py | 261 + .../pip/_vendor/chardet/eucjpprober.py | 102 + .../pip/_vendor/chardet/euckrfreq.py | 196 + .../pip/_vendor/chardet/euckrprober.py | 47 + .../pip/_vendor/chardet/euctwfreq.py | 388 + .../pip/_vendor/chardet/euctwprober.py | 47 + .../pip/_vendor/chardet/gb2312freq.py | 284 + .../pip/_vendor/chardet/gb2312prober.py | 47 + .../pip/_vendor/chardet/hebrewprober.py | 316 + .../pip/_vendor/chardet/jisfreq.py | 325 + .../pip/_vendor/chardet/johabfreq.py | 2382 +++++ .../pip/_vendor/chardet/johabprober.py | 47 + .../pip/_vendor/chardet/jpcntx.py | 238 + .../pip/_vendor/chardet/langbulgarianmodel.py | 4649 +++++++++ .../pip/_vendor/chardet/langgreekmodel.py | 4397 +++++++++ .../pip/_vendor/chardet/langhebrewmodel.py | 4380 +++++++++ .../pip/_vendor/chardet/langhungarianmodel.py | 4649 +++++++++ .../pip/_vendor/chardet/langrussianmodel.py | 5725 +++++++++++ .../pip/_vendor/chardet/langthaimodel.py | 4380 +++++++++ .../pip/_vendor/chardet/langturkishmodel.py | 4380 +++++++++ .../pip/_vendor/chardet/latin1prober.py | 147 + .../pip/_vendor/chardet/macromanprober.py | 162 + .../pip/_vendor/chardet/mbcharsetprober.py | 95 + .../pip/_vendor/chardet/mbcsgroupprober.py | 57 + .../pip/_vendor/chardet/mbcssm.py | 661 ++ .../pip/_vendor/chardet/metadata/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 200 bytes .../__pycache__/languages.cpython-312.pyc | Bin 0 -> 9755 bytes .../pip/_vendor/chardet/metadata/languages.py | 352 + .../pip/_vendor/chardet/resultdict.py | 16 + .../pip/_vendor/chardet/sbcharsetprober.py | 162 + .../pip/_vendor/chardet/sbcsgroupprober.py | 88 + .../pip/_vendor/chardet/sjisprober.py | 105 + .../pip/_vendor/chardet/universaldetector.py | 362 + .../pip/_vendor/chardet/utf1632prober.py | 225 + .../pip/_vendor/chardet/utf8prober.py | 82 + .../pip/_vendor/chardet/version.py | 9 + .../pip/_vendor/colorama/__init__.py | 7 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 492 bytes .../colorama/__pycache__/ansi.cpython-312.pyc | Bin 0 -> 3950 bytes .../__pycache__/ansitowin32.cpython-312.pyc | Bin 0 -> 16421 bytes .../__pycache__/initialise.cpython-312.pyc | Bin 0 -> 3550 bytes .../__pycache__/win32.cpython-312.pyc | Bin 0 -> 8126 bytes .../__pycache__/winterm.cpython-312.pyc | Bin 0 -> 9088 bytes .../pip/_vendor/colorama/ansi.py | 102 + .../pip/_vendor/colorama/ansitowin32.py | 277 + .../pip/_vendor/colorama/initialise.py | 121 + .../pip/_vendor/colorama/tests/__init__.py | 1 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 198 bytes .../__pycache__/ansi_test.cpython-312.pyc | Bin 0 -> 5467 bytes .../ansitowin32_test.cpython-312.pyc | Bin 0 -> 18103 bytes .../initialise_test.cpython-312.pyc | Bin 0 -> 11748 bytes .../__pycache__/isatty_test.cpython-312.pyc | Bin 0 -> 4904 bytes .../tests/__pycache__/utils.cpython-312.pyc | Bin 0 -> 2488 bytes .../__pycache__/winterm_test.cpython-312.pyc | Bin 0 -> 6612 bytes .../pip/_vendor/colorama/tests/ansi_test.py | 76 + .../colorama/tests/ansitowin32_test.py | 294 + .../_vendor/colorama/tests/initialise_test.py | 189 + .../pip/_vendor/colorama/tests/isatty_test.py | 57 + .../pip/_vendor/colorama/tests/utils.py | 49 + .../_vendor/colorama/tests/winterm_test.py | 131 + .../pip/_vendor/colorama/win32.py | 180 + .../pip/_vendor/colorama/winterm.py | 195 + .../pip/_vendor/distlib/__init__.py | 33 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1269 bytes .../__pycache__/compat.cpython-312.pyc | Bin 0 -> 45605 bytes .../__pycache__/database.cpython-312.pyc | Bin 0 -> 66027 bytes .../distlib/__pycache__/index.cpython-312.pyc | Bin 0 -> 24366 bytes .../__pycache__/locators.cpython-312.pyc | Bin 0 -> 60158 bytes .../__pycache__/manifest.cpython-312.pyc | Bin 0 -> 15125 bytes .../__pycache__/markers.cpython-312.pyc | Bin 0 -> 7682 bytes .../__pycache__/metadata.cpython-312.pyc | Bin 0 -> 41799 bytes .../__pycache__/resources.cpython-312.pyc | Bin 0 -> 17325 bytes .../__pycache__/scripts.cpython-312.pyc | Bin 0 -> 19580 bytes .../distlib/__pycache__/util.cpython-312.pyc | Bin 0 -> 88256 bytes .../__pycache__/version.cpython-312.pyc | Bin 0 -> 30366 bytes .../distlib/__pycache__/wheel.cpython-312.pyc | Bin 0 -> 51861 bytes .../pip/_vendor/distlib/compat.py | 1138 +++ .../pip/_vendor/distlib/database.py | 1359 +++ .../pip/_vendor/distlib/index.py | 508 + .../pip/_vendor/distlib/locators.py | 1303 +++ .../pip/_vendor/distlib/manifest.py | 384 + .../pip/_vendor/distlib/markers.py | 167 + .../pip/_vendor/distlib/metadata.py | 1068 ++ .../pip/_vendor/distlib/resources.py | 358 + .../pip/_vendor/distlib/scripts.py | 452 + .../site-packages/pip/_vendor/distlib/util.py | 2025 ++++ .../pip/_vendor/distlib/version.py | 751 ++ .../pip/_vendor/distlib/wheel.py | 1099 +++ .../pip/_vendor/distro/__init__.py | 54 + .../pip/_vendor/distro/__main__.py | 4 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 960 bytes .../__pycache__/__main__.cpython-312.pyc | Bin 0 -> 292 bytes .../distro/__pycache__/distro.cpython-312.pyc | Bin 0 -> 53754 bytes .../pip/_vendor/distro/distro.py | 1399 +++ .../pip/_vendor/idna/__init__.py | 44 + .../idna/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 881 bytes .../idna/__pycache__/codec.cpython-312.pyc | Bin 0 -> 4633 bytes .../idna/__pycache__/compat.cpython-312.pyc | Bin 0 -> 887 bytes .../idna/__pycache__/core.cpython-312.pyc | Bin 0 -> 16023 bytes .../idna/__pycache__/idnadata.cpython-312.pyc | Bin 0 -> 99497 bytes .../__pycache__/intranges.cpython-312.pyc | Bin 0 -> 2638 bytes .../__pycache__/package_data.cpython-312.pyc | Bin 0 -> 216 bytes .../__pycache__/uts46data.cpython-312.pyc | Bin 0 -> 158870 bytes .../site-packages/pip/_vendor/idna/codec.py | 112 + .../site-packages/pip/_vendor/idna/compat.py | 13 + .../site-packages/pip/_vendor/idna/core.py | 400 + .../pip/_vendor/idna/idnadata.py | 4246 ++++++++ .../pip/_vendor/idna/intranges.py | 54 + .../pip/_vendor/idna/package_data.py | 2 + .../pip/_vendor/idna/uts46data.py | 8600 +++++++++++++++++ .../pip/_vendor/msgpack/__init__.py | 57 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1831 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 0 -> 2025 bytes .../msgpack/__pycache__/ext.cpython-312.pyc | Bin 0 -> 8668 bytes .../__pycache__/fallback.cpython-312.pyc | Bin 0 -> 43576 bytes .../pip/_vendor/msgpack/exceptions.py | 48 + .../site-packages/pip/_vendor/msgpack/ext.py | 193 + .../pip/_vendor/msgpack/fallback.py | 1010 ++ .../pip/_vendor/packaging/__about__.py | 26 + .../pip/_vendor/packaging/__init__.py | 25 + .../__pycache__/__about__.cpython-312.pyc | Bin 0 -> 630 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 466 bytes .../__pycache__/_manylinux.cpython-312.pyc | Bin 0 -> 12076 bytes .../__pycache__/_musllinux.cpython-312.pyc | Bin 0 -> 6910 bytes .../__pycache__/_structures.cpython-312.pyc | Bin 0 -> 3241 bytes .../__pycache__/markers.cpython-312.pyc | Bin 0 -> 14058 bytes .../__pycache__/requirements.cpython-312.pyc | Bin 0 -> 6946 bytes .../__pycache__/specifiers.cpython-312.pyc | Bin 0 -> 31247 bytes .../__pycache__/tags.cpython-312.pyc | Bin 0 -> 18956 bytes .../__pycache__/utils.cpython-312.pyc | Bin 0 -> 5868 bytes .../__pycache__/version.cpython-312.pyc | Bin 0 -> 19939 bytes .../pip/_vendor/packaging/_manylinux.py | 301 + .../pip/_vendor/packaging/_musllinux.py | 136 + .../pip/_vendor/packaging/_structures.py | 61 + .../pip/_vendor/packaging/markers.py | 304 + .../pip/_vendor/packaging/requirements.py | 146 + .../pip/_vendor/packaging/specifiers.py | 802 ++ .../pip/_vendor/packaging/tags.py | 487 + .../pip/_vendor/packaging/utils.py | 136 + .../pip/_vendor/packaging/version.py | 504 + .../pip/_vendor/pkg_resources/__init__.py | 3361 +++++++ .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 146474 bytes .../pip/_vendor/platformdirs/__init__.py | 566 ++ .../pip/_vendor/platformdirs/__main__.py | 53 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 18029 bytes .../__pycache__/__main__.cpython-312.pyc | Bin 0 -> 1946 bytes .../__pycache__/android.cpython-312.pyc | Bin 0 -> 9444 bytes .../__pycache__/api.cpython-312.pyc | Bin 0 -> 9672 bytes .../__pycache__/macos.cpython-312.pyc | Bin 0 -> 5637 bytes .../__pycache__/unix.cpython-312.pyc | Bin 0 -> 12441 bytes .../__pycache__/version.cpython-312.pyc | Bin 0 -> 311 bytes .../__pycache__/windows.cpython-312.pyc | Bin 0 -> 12999 bytes .../pip/_vendor/platformdirs/android.py | 210 + .../pip/_vendor/platformdirs/api.py | 223 + .../pip/_vendor/platformdirs/macos.py | 91 + .../pip/_vendor/platformdirs/unix.py | 223 + .../pip/_vendor/platformdirs/version.py | 4 + .../pip/_vendor/platformdirs/windows.py | 255 + .../pip/_vendor/pygments/__init__.py | 82 + .../pip/_vendor/pygments/__main__.py | 17 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 3489 bytes .../__pycache__/__main__.cpython-312.pyc | Bin 0 -> 735 bytes .../__pycache__/cmdline.cpython-312.pyc | Bin 0 -> 26606 bytes .../__pycache__/console.cpython-312.pyc | Bin 0 -> 2627 bytes .../__pycache__/filter.cpython-312.pyc | Bin 0 -> 3233 bytes .../__pycache__/formatter.cpython-312.pyc | Bin 0 -> 4570 bytes .../__pycache__/lexer.cpython-312.pyc | Bin 0 -> 38330 bytes .../__pycache__/modeline.cpython-312.pyc | Bin 0 -> 1569 bytes .../__pycache__/plugin.cpython-312.pyc | Bin 0 -> 3397 bytes .../__pycache__/regexopt.cpython-312.pyc | Bin 0 -> 4082 bytes .../__pycache__/scanner.cpython-312.pyc | Bin 0 -> 4757 bytes .../__pycache__/sphinxext.cpython-312.pyc | Bin 0 -> 11047 bytes .../__pycache__/style.cpython-312.pyc | Bin 0 -> 6675 bytes .../__pycache__/token.cpython-312.pyc | Bin 0 -> 8143 bytes .../__pycache__/unistring.cpython-312.pyc | Bin 0 -> 32989 bytes .../pygments/__pycache__/util.cpython-312.pyc | Bin 0 -> 13982 bytes .../pip/_vendor/pygments/cmdline.py | 668 ++ .../pip/_vendor/pygments/console.py | 70 + .../pip/_vendor/pygments/filter.py | 71 + .../pip/_vendor/pygments/filters/__init__.py | 940 ++ .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 37937 bytes .../pip/_vendor/pygments/formatter.py | 124 + .../_vendor/pygments/formatters/__init__.py | 158 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 6927 bytes .../__pycache__/_mapping.cpython-312.pyc | Bin 0 -> 4216 bytes .../__pycache__/bbcode.cpython-312.pyc | Bin 0 -> 4195 bytes .../__pycache__/groff.cpython-312.pyc | Bin 0 -> 7265 bytes .../__pycache__/html.cpython-312.pyc | Bin 0 -> 40573 bytes .../__pycache__/img.cpython-312.pyc | Bin 0 -> 27044 bytes .../__pycache__/irc.cpython-312.pyc | Bin 0 -> 6066 bytes .../__pycache__/latex.cpython-312.pyc | Bin 0 -> 19955 bytes .../__pycache__/other.cpython-312.pyc | Bin 0 -> 6885 bytes .../__pycache__/pangomarkup.cpython-312.pyc | Bin 0 -> 2931 bytes .../__pycache__/rtf.cpython-312.pyc | Bin 0 -> 6127 bytes .../__pycache__/svg.cpython-312.pyc | Bin 0 -> 9067 bytes .../__pycache__/terminal.cpython-312.pyc | Bin 0 -> 5830 bytes .../__pycache__/terminal256.cpython-312.pyc | Bin 0 -> 15158 bytes .../_vendor/pygments/formatters/_mapping.py | 23 + .../pip/_vendor/pygments/formatters/bbcode.py | 108 + .../pip/_vendor/pygments/formatters/groff.py | 170 + .../pip/_vendor/pygments/formatters/html.py | 989 ++ .../pip/_vendor/pygments/formatters/img.py | 645 ++ .../pip/_vendor/pygments/formatters/irc.py | 154 + .../pip/_vendor/pygments/formatters/latex.py | 521 + .../pip/_vendor/pygments/formatters/other.py | 161 + .../pygments/formatters/pangomarkup.py | 83 + .../pip/_vendor/pygments/formatters/rtf.py | 146 + .../pip/_vendor/pygments/formatters/svg.py | 188 + .../_vendor/pygments/formatters/terminal.py | 127 + .../pygments/formatters/terminal256.py | 338 + .../pip/_vendor/pygments/lexer.py | 943 ++ .../pip/_vendor/pygments/lexers/__init__.py | 362 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 14653 bytes .../__pycache__/_mapping.cpython-312.pyc | Bin 0 -> 64405 bytes .../lexers/__pycache__/python.cpython-312.pyc | Bin 0 -> 42640 bytes .../pip/_vendor/pygments/lexers/_mapping.py | 559 ++ .../pip/_vendor/pygments/lexers/python.py | 1198 +++ .../pip/_vendor/pygments/modeline.py | 43 + .../pip/_vendor/pygments/plugin.py | 88 + .../pip/_vendor/pygments/regexopt.py | 91 + .../pip/_vendor/pygments/scanner.py | 104 + .../pip/_vendor/pygments/sphinxext.py | 217 + .../pip/_vendor/pygments/style.py | 197 + .../pip/_vendor/pygments/styles/__init__.py | 103 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 4449 bytes .../pip/_vendor/pygments/token.py | 213 + .../pip/_vendor/pygments/unistring.py | 153 + .../pip/_vendor/pygments/util.py | 330 + .../pip/_vendor/pyparsing/__init__.py | 322 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 7912 bytes .../__pycache__/actions.cpython-312.pyc | Bin 0 -> 8396 bytes .../__pycache__/common.cpython-312.pyc | Bin 0 -> 13415 bytes .../__pycache__/core.cpython-312.pyc | Bin 0 -> 267709 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 0 -> 12995 bytes .../__pycache__/helpers.cpython-312.pyc | Bin 0 -> 48502 bytes .../__pycache__/results.cpython-312.pyc | Bin 0 -> 34111 bytes .../__pycache__/testing.cpython-312.pyc | Bin 0 -> 17189 bytes .../__pycache__/unicode.cpython-312.pyc | Bin 0 -> 13185 bytes .../__pycache__/util.cpython-312.pyc | Bin 0 -> 14905 bytes .../pip/_vendor/pyparsing/actions.py | 217 + .../pip/_vendor/pyparsing/common.py | 432 + .../pip/_vendor/pyparsing/core.py | 6115 ++++++++++++ .../pip/_vendor/pyparsing/diagram/__init__.py | 656 ++ .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 26814 bytes .../pip/_vendor/pyparsing/exceptions.py | 299 + .../pip/_vendor/pyparsing/helpers.py | 1100 +++ .../pip/_vendor/pyparsing/results.py | 796 ++ .../pip/_vendor/pyparsing/testing.py | 331 + .../pip/_vendor/pyparsing/unicode.py | 361 + .../pip/_vendor/pyparsing/util.py | 284 + .../pip/_vendor/pyproject_hooks/__init__.py | 23 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 614 bytes .../__pycache__/_compat.cpython-312.pyc | Bin 0 -> 375 bytes .../__pycache__/_impl.cpython-312.pyc | Bin 0 -> 14726 bytes .../pip/_vendor/pyproject_hooks/_compat.py | 8 + .../pip/_vendor/pyproject_hooks/_impl.py | 330 + .../pyproject_hooks/_in_process/__init__.py | 18 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1081 bytes .../__pycache__/_in_process.cpython-312.pyc | Bin 0 -> 14398 bytes .../_in_process/_in_process.py | 353 + .../pip/_vendor/requests/__init__.py | 182 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 5454 bytes .../__pycache__/__version__.cpython-312.pyc | Bin 0 -> 585 bytes .../_internal_utils.cpython-312.pyc | Bin 0 -> 2025 bytes .../__pycache__/adapters.cpython-312.pyc | Bin 0 -> 21281 bytes .../requests/__pycache__/api.cpython-312.pyc | Bin 0 -> 7205 bytes .../requests/__pycache__/auth.cpython-312.pyc | Bin 0 -> 13924 bytes .../__pycache__/certs.cpython-312.pyc | Bin 0 -> 923 bytes .../__pycache__/compat.cpython-312.pyc | Bin 0 -> 1508 bytes .../__pycache__/cookies.cpython-312.pyc | Bin 0 -> 25247 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 0 -> 7048 bytes .../requests/__pycache__/help.cpython-312.pyc | Bin 0 -> 4313 bytes .../__pycache__/hooks.cpython-312.pyc | Bin 0 -> 1053 bytes .../__pycache__/models.cpython-312.pyc | Bin 0 -> 35449 bytes .../__pycache__/packages.cpython-312.pyc | Bin 0 -> 773 bytes .../__pycache__/sessions.cpython-312.pyc | Bin 0 -> 27758 bytes .../__pycache__/status_codes.cpython-312.pyc | Bin 0 -> 5960 bytes .../__pycache__/structures.cpython-312.pyc | Bin 0 -> 5618 bytes .../__pycache__/utils.cpython-312.pyc | Bin 0 -> 36076 bytes .../pip/_vendor/requests/__version__.py | 14 + .../pip/_vendor/requests/_internal_utils.py | 50 + .../pip/_vendor/requests/adapters.py | 538 ++ .../site-packages/pip/_vendor/requests/api.py | 157 + .../pip/_vendor/requests/auth.py | 315 + .../pip/_vendor/requests/certs.py | 24 + .../pip/_vendor/requests/compat.py | 67 + .../pip/_vendor/requests/cookies.py | 561 ++ .../pip/_vendor/requests/exceptions.py | 141 + .../pip/_vendor/requests/help.py | 131 + .../pip/_vendor/requests/hooks.py | 33 + .../pip/_vendor/requests/models.py | 1034 ++ .../pip/_vendor/requests/packages.py | 16 + .../pip/_vendor/requests/sessions.py | 833 ++ .../pip/_vendor/requests/status_codes.py | 128 + .../pip/_vendor/requests/structures.py | 99 + .../pip/_vendor/requests/utils.py | 1088 +++ .../pip/_vendor/resolvelib/__init__.py | 26 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 635 bytes .../__pycache__/providers.cpython-312.pyc | Bin 0 -> 6852 bytes .../__pycache__/reporters.cpython-312.pyc | Bin 0 -> 2655 bytes .../__pycache__/resolvers.cpython-312.pyc | Bin 0 -> 25898 bytes .../__pycache__/structs.cpython-312.pyc | Bin 0 -> 10507 bytes .../pip/_vendor/resolvelib/compat/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 201 bytes .../collections_abc.cpython-312.pyc | Bin 0 -> 421 bytes .../resolvelib/compat/collections_abc.py | 6 + .../pip/_vendor/resolvelib/providers.py | 133 + .../pip/_vendor/resolvelib/reporters.py | 43 + .../pip/_vendor/resolvelib/resolvers.py | 547 ++ .../pip/_vendor/resolvelib/structs.py | 170 + .../pip/_vendor/rich/__init__.py | 177 + .../pip/_vendor/rich/__main__.py | 274 + .../rich/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 7016 bytes .../rich/__pycache__/__main__.cpython-312.pyc | Bin 0 -> 10305 bytes .../__pycache__/_cell_widths.cpython-312.pyc | Bin 0 -> 7822 bytes .../__pycache__/_emoji_codes.cpython-312.pyc | Bin 0 -> 205977 bytes .../_emoji_replace.cpython-312.pyc | Bin 0 -> 1730 bytes .../_export_format.cpython-312.pyc | Bin 0 -> 2322 bytes .../__pycache__/_extension.cpython-312.pyc | Bin 0 -> 538 bytes .../rich/__pycache__/_fileno.cpython-312.pyc | Bin 0 -> 856 bytes .../rich/__pycache__/_inspect.cpython-312.pyc | Bin 0 -> 12078 bytes .../__pycache__/_log_render.cpython-312.pyc | Bin 0 -> 4148 bytes .../rich/__pycache__/_loop.cpython-312.pyc | Bin 0 -> 1886 bytes .../__pycache__/_null_file.cpython-312.pyc | Bin 0 -> 3621 bytes .../__pycache__/_palettes.cpython-312.pyc | Bin 0 -> 5161 bytes .../rich/__pycache__/_pick.cpython-312.pyc | Bin 0 -> 727 bytes .../rich/__pycache__/_ratio.cpython-312.pyc | Bin 0 -> 6580 bytes .../__pycache__/_spinners.cpython-312.pyc | Bin 0 -> 13180 bytes .../rich/__pycache__/_stack.cpython-312.pyc | Bin 0 -> 966 bytes .../rich/__pycache__/_timer.cpython-312.pyc | Bin 0 -> 866 bytes .../_win32_console.cpython-312.pyc | Bin 0 -> 28977 bytes .../rich/__pycache__/_windows.cpython-312.pyc | Bin 0 -> 2491 bytes .../_windows_renderer.cpython-312.pyc | Bin 0 -> 3574 bytes .../rich/__pycache__/_wrap.cpython-312.pyc | Bin 0 -> 2361 bytes .../rich/__pycache__/abc.cpython-312.pyc | Bin 0 -> 1609 bytes .../rich/__pycache__/align.cpython-312.pyc | Bin 0 -> 12323 bytes .../rich/__pycache__/ansi.cpython-312.pyc | Bin 0 -> 9107 bytes .../rich/__pycache__/bar.cpython-312.pyc | Bin 0 -> 4273 bytes .../rich/__pycache__/box.cpython-312.pyc | Bin 0 -> 11859 bytes .../rich/__pycache__/cells.cpython-312.pyc | Bin 0 -> 5619 bytes .../rich/__pycache__/color.cpython-312.pyc | Bin 0 -> 26571 bytes .../__pycache__/color_triplet.cpython-312.pyc | Bin 0 -> 1702 bytes .../rich/__pycache__/columns.cpython-312.pyc | Bin 0 -> 8588 bytes .../rich/__pycache__/console.cpython-312.pyc | Bin 0 -> 113794 bytes .../__pycache__/constrain.cpython-312.pyc | Bin 0 -> 2259 bytes .../__pycache__/containers.cpython-312.pyc | Bin 0 -> 9227 bytes .../rich/__pycache__/control.cpython-312.pyc | Bin 0 -> 10930 bytes .../default_styles.cpython-312.pyc | Bin 0 -> 10374 bytes .../rich/__pycache__/diagnose.cpython-312.pyc | Bin 0 -> 1488 bytes .../rich/__pycache__/emoji.cpython-312.pyc | Bin 0 -> 4210 bytes .../rich/__pycache__/errors.cpython-312.pyc | Bin 0 -> 1846 bytes .../__pycache__/file_proxy.cpython-312.pyc | Bin 0 -> 3578 bytes .../rich/__pycache__/filesize.cpython-312.pyc | Bin 0 -> 3083 bytes .../__pycache__/highlighter.cpython-312.pyc | Bin 0 -> 9899 bytes .../rich/__pycache__/json.cpython-312.pyc | Bin 0 -> 6036 bytes .../rich/__pycache__/jupyter.cpython-312.pyc | Bin 0 -> 5210 bytes .../rich/__pycache__/layout.cpython-312.pyc | Bin 0 -> 20221 bytes .../rich/__pycache__/live.cpython-312.pyc | Bin 0 -> 19144 bytes .../__pycache__/live_render.cpython-312.pyc | Bin 0 -> 4895 bytes .../rich/__pycache__/logging.cpython-312.pyc | Bin 0 -> 13555 bytes .../rich/__pycache__/markup.cpython-312.pyc | Bin 0 -> 9299 bytes .../rich/__pycache__/measure.cpython-312.pyc | Bin 0 -> 6377 bytes .../rich/__pycache__/padding.cpython-312.pyc | Bin 0 -> 7135 bytes .../rich/__pycache__/pager.cpython-312.pyc | Bin 0 -> 1821 bytes .../rich/__pycache__/palette.cpython-312.pyc | Bin 0 -> 5315 bytes .../rich/__pycache__/panel.cpython-312.pyc | Bin 0 -> 12098 bytes .../rich/__pycache__/pretty.cpython-312.pyc | Bin 0 -> 40057 bytes .../rich/__pycache__/progress.cpython-312.pyc | Bin 0 -> 75079 bytes .../__pycache__/progress_bar.cpython-312.pyc | Bin 0 -> 10390 bytes .../rich/__pycache__/prompt.cpython-312.pyc | Bin 0 -> 14782 bytes .../rich/__pycache__/protocol.cpython-312.pyc | Bin 0 -> 1793 bytes .../rich/__pycache__/region.cpython-312.pyc | Bin 0 -> 568 bytes .../rich/__pycache__/repr.cpython-312.pyc | Bin 0 -> 6627 bytes .../rich/__pycache__/rule.cpython-312.pyc | Bin 0 -> 6569 bytes .../rich/__pycache__/scope.cpython-312.pyc | Bin 0 -> 3831 bytes .../rich/__pycache__/screen.cpython-312.pyc | Bin 0 -> 2485 bytes .../rich/__pycache__/segment.cpython-312.pyc | Bin 0 -> 28162 bytes .../rich/__pycache__/spinner.cpython-312.pyc | Bin 0 -> 6065 bytes .../rich/__pycache__/status.cpython-312.pyc | Bin 0 -> 6069 bytes .../rich/__pycache__/style.cpython-312.pyc | Bin 0 -> 33515 bytes .../rich/__pycache__/styled.cpython-312.pyc | Bin 0 -> 2140 bytes .../rich/__pycache__/syntax.cpython-312.pyc | Bin 0 -> 39613 bytes .../rich/__pycache__/table.cpython-312.pyc | Bin 0 -> 43585 bytes .../terminal_theme.cpython-312.pyc | Bin 0 -> 3349 bytes .../rich/__pycache__/text.cpython-312.pyc | Bin 0 -> 58964 bytes .../rich/__pycache__/theme.cpython-312.pyc | Bin 0 -> 6341 bytes .../rich/__pycache__/themes.cpython-312.pyc | Bin 0 -> 315 bytes .../__pycache__/traceback.cpython-312.pyc | Bin 0 -> 31549 bytes .../rich/__pycache__/tree.cpython-312.pyc | Bin 0 -> 11440 bytes .../pip/_vendor/rich/_cell_widths.py | 451 + .../pip/_vendor/rich/_emoji_codes.py | 3610 +++++++ .../pip/_vendor/rich/_emoji_replace.py | 32 + .../pip/_vendor/rich/_export_format.py | 76 + .../pip/_vendor/rich/_extension.py | 10 + .../site-packages/pip/_vendor/rich/_fileno.py | 24 + .../pip/_vendor/rich/_inspect.py | 270 + .../pip/_vendor/rich/_log_render.py | 94 + .../site-packages/pip/_vendor/rich/_loop.py | 43 + .../pip/_vendor/rich/_null_file.py | 69 + .../pip/_vendor/rich/_palettes.py | 309 + .../site-packages/pip/_vendor/rich/_pick.py | 17 + .../site-packages/pip/_vendor/rich/_ratio.py | 160 + .../pip/_vendor/rich/_spinners.py | 482 + .../site-packages/pip/_vendor/rich/_stack.py | 16 + .../site-packages/pip/_vendor/rich/_timer.py | 19 + .../pip/_vendor/rich/_win32_console.py | 662 ++ .../pip/_vendor/rich/_windows.py | 72 + .../pip/_vendor/rich/_windows_renderer.py | 56 + .../site-packages/pip/_vendor/rich/_wrap.py | 56 + .../site-packages/pip/_vendor/rich/abc.py | 33 + .../site-packages/pip/_vendor/rich/align.py | 311 + .../site-packages/pip/_vendor/rich/ansi.py | 240 + .../site-packages/pip/_vendor/rich/bar.py | 94 + .../site-packages/pip/_vendor/rich/box.py | 517 + .../site-packages/pip/_vendor/rich/cells.py | 154 + .../site-packages/pip/_vendor/rich/color.py | 622 ++ .../pip/_vendor/rich/color_triplet.py | 38 + .../site-packages/pip/_vendor/rich/columns.py | 187 + .../site-packages/pip/_vendor/rich/console.py | 2633 +++++ .../pip/_vendor/rich/constrain.py | 37 + .../pip/_vendor/rich/containers.py | 167 + .../site-packages/pip/_vendor/rich/control.py | 225 + .../pip/_vendor/rich/default_styles.py | 190 + .../pip/_vendor/rich/diagnose.py | 37 + .../site-packages/pip/_vendor/rich/emoji.py | 96 + .../site-packages/pip/_vendor/rich/errors.py | 34 + .../pip/_vendor/rich/file_proxy.py | 57 + .../pip/_vendor/rich/filesize.py | 89 + .../pip/_vendor/rich/highlighter.py | 232 + .../site-packages/pip/_vendor/rich/json.py | 140 + .../site-packages/pip/_vendor/rich/jupyter.py | 101 + .../site-packages/pip/_vendor/rich/layout.py | 443 + .../site-packages/pip/_vendor/rich/live.py | 375 + .../pip/_vendor/rich/live_render.py | 113 + .../site-packages/pip/_vendor/rich/logging.py | 289 + .../site-packages/pip/_vendor/rich/markup.py | 246 + .../site-packages/pip/_vendor/rich/measure.py | 151 + .../site-packages/pip/_vendor/rich/padding.py | 141 + .../site-packages/pip/_vendor/rich/pager.py | 34 + .../site-packages/pip/_vendor/rich/palette.py | 100 + .../site-packages/pip/_vendor/rich/panel.py | 308 + .../site-packages/pip/_vendor/rich/pretty.py | 994 ++ .../pip/_vendor/rich/progress.py | 1702 ++++ .../pip/_vendor/rich/progress_bar.py | 224 + .../site-packages/pip/_vendor/rich/prompt.py | 376 + .../pip/_vendor/rich/protocol.py | 42 + .../site-packages/pip/_vendor/rich/region.py | 10 + .../site-packages/pip/_vendor/rich/repr.py | 149 + .../site-packages/pip/_vendor/rich/rule.py | 130 + .../site-packages/pip/_vendor/rich/scope.py | 86 + .../site-packages/pip/_vendor/rich/screen.py | 54 + .../site-packages/pip/_vendor/rich/segment.py | 739 ++ .../site-packages/pip/_vendor/rich/spinner.py | 137 + .../site-packages/pip/_vendor/rich/status.py | 132 + .../site-packages/pip/_vendor/rich/style.py | 796 ++ .../site-packages/pip/_vendor/rich/styled.py | 42 + .../site-packages/pip/_vendor/rich/syntax.py | 948 ++ .../site-packages/pip/_vendor/rich/table.py | 1002 ++ .../pip/_vendor/rich/terminal_theme.py | 153 + .../site-packages/pip/_vendor/rich/text.py | 1307 +++ .../site-packages/pip/_vendor/rich/theme.py | 115 + .../site-packages/pip/_vendor/rich/themes.py | 5 + .../pip/_vendor/rich/traceback.py | 756 ++ .../site-packages/pip/_vendor/rich/tree.py | 251 + .../site-packages/pip/_vendor/six.py | 998 ++ .../pip/_vendor/tenacity/__init__.py | 608 ++ .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 27087 bytes .../__pycache__/_asyncio.cpython-312.pyc | Bin 0 -> 4807 bytes .../__pycache__/_utils.cpython-312.pyc | Bin 0 -> 2316 bytes .../__pycache__/after.cpython-312.pyc | Bin 0 -> 1625 bytes .../__pycache__/before.cpython-312.pyc | Bin 0 -> 1465 bytes .../__pycache__/before_sleep.cpython-312.pyc | Bin 0 -> 2303 bytes .../tenacity/__pycache__/nap.cpython-312.pyc | Bin 0 -> 1413 bytes .../__pycache__/retry.cpython-312.pyc | Bin 0 -> 14282 bytes .../tenacity/__pycache__/stop.cpython-312.pyc | Bin 0 -> 5569 bytes .../__pycache__/tornadoweb.cpython-312.pyc | Bin 0 -> 2587 bytes .../tenacity/__pycache__/wait.cpython-312.pyc | Bin 0 -> 12414 bytes .../pip/_vendor/tenacity/_asyncio.py | 94 + .../pip/_vendor/tenacity/_utils.py | 76 + .../pip/_vendor/tenacity/after.py | 51 + .../pip/_vendor/tenacity/before.py | 46 + .../pip/_vendor/tenacity/before_sleep.py | 71 + .../site-packages/pip/_vendor/tenacity/nap.py | 43 + .../pip/_vendor/tenacity/retry.py | 272 + .../pip/_vendor/tenacity/stop.py | 103 + .../pip/_vendor/tenacity/tornadoweb.py | 59 + .../pip/_vendor/tenacity/wait.py | 228 + .../pip/_vendor/tomli/__init__.py | 11 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 385 bytes .../tomli/__pycache__/_parser.cpython-312.pyc | Bin 0 -> 26928 bytes .../tomli/__pycache__/_re.cpython-312.pyc | Bin 0 -> 3909 bytes .../tomli/__pycache__/_types.cpython-312.pyc | Bin 0 -> 367 bytes .../pip/_vendor/tomli/_parser.py | 691 ++ .../site-packages/pip/_vendor/tomli/_re.py | 107 + .../site-packages/pip/_vendor/tomli/_types.py | 10 + .../pip/_vendor/truststore/__init__.py | 13 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 619 bytes .../__pycache__/_api.cpython-312.pyc | Bin 0 -> 15798 bytes .../__pycache__/_macos.cpython-312.pyc | Bin 0 -> 16663 bytes .../__pycache__/_openssl.cpython-312.pyc | Bin 0 -> 2216 bytes .../_ssl_constants.cpython-312.pyc | Bin 0 -> 1100 bytes .../__pycache__/_windows.cpython-312.pyc | Bin 0 -> 15507 bytes .../pip/_vendor/truststore/_api.py | 302 + .../pip/_vendor/truststore/_macos.py | 501 + .../pip/_vendor/truststore/_openssl.py | 66 + .../pip/_vendor/truststore/_ssl_constants.py | 31 + .../pip/_vendor/truststore/_windows.py | 554 ++ .../pip/_vendor/typing_extensions.py | 3072 ++++++ .../pip/_vendor/urllib3/__init__.py | 102 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 3406 bytes .../__pycache__/_collections.cpython-312.pyc | Bin 0 -> 16489 bytes .../__pycache__/_version.cpython-312.pyc | Bin 0 -> 219 bytes .../__pycache__/connection.cpython-312.pyc | Bin 0 -> 20408 bytes .../connectionpool.cpython-312.pyc | Bin 0 -> 36443 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 0 -> 13494 bytes .../__pycache__/fields.cpython-312.pyc | Bin 0 -> 10414 bytes .../__pycache__/filepost.cpython-312.pyc | Bin 0 -> 4019 bytes .../__pycache__/poolmanager.cpython-312.pyc | Bin 0 -> 20801 bytes .../__pycache__/request.cpython-312.pyc | Bin 0 -> 7295 bytes .../__pycache__/response.cpython-312.pyc | Bin 0 -> 33969 bytes .../pip/_vendor/urllib3/_collections.py | 355 + .../pip/_vendor/urllib3/_version.py | 2 + .../pip/_vendor/urllib3/connection.py | 572 ++ .../pip/_vendor/urllib3/connectionpool.py | 1137 +++ .../pip/_vendor/urllib3/contrib/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 199 bytes .../_appengine_environ.cpython-312.pyc | Bin 0 -> 1849 bytes .../__pycache__/appengine.cpython-312.pyc | Bin 0 -> 11565 bytes .../__pycache__/ntlmpool.cpython-312.pyc | Bin 0 -> 5720 bytes .../__pycache__/pyopenssl.cpython-312.pyc | Bin 0 -> 24451 bytes .../securetransport.cpython-312.pyc | Bin 0 -> 35557 bytes .../contrib/__pycache__/socks.cpython-312.pyc | Bin 0 -> 7512 bytes .../urllib3/contrib/_appengine_environ.py | 36 + .../contrib/_securetransport/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 216 bytes .../__pycache__/bindings.cpython-312.pyc | Bin 0 -> 17428 bytes .../__pycache__/low_level.cpython-312.pyc | Bin 0 -> 14802 bytes .../contrib/_securetransport/bindings.py | 519 + .../contrib/_securetransport/low_level.py | 397 + .../pip/_vendor/urllib3/contrib/appengine.py | 314 + .../pip/_vendor/urllib3/contrib/ntlmpool.py | 130 + .../pip/_vendor/urllib3/contrib/pyopenssl.py | 518 + .../urllib3/contrib/securetransport.py | 921 ++ .../pip/_vendor/urllib3/contrib/socks.py | 216 + .../pip/_vendor/urllib3/exceptions.py | 323 + .../pip/_vendor/urllib3/fields.py | 274 + .../pip/_vendor/urllib3/filepost.py | 98 + .../pip/_vendor/urllib3/packages/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 200 bytes .../packages/__pycache__/six.cpython-312.pyc | Bin 0 -> 41320 bytes .../urllib3/packages/backports/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 210 bytes .../__pycache__/makefile.cpython-312.pyc | Bin 0 -> 1826 bytes .../weakref_finalize.cpython-312.pyc | Bin 0 -> 7332 bytes .../urllib3/packages/backports/makefile.py | 51 + .../packages/backports/weakref_finalize.py | 155 + .../pip/_vendor/urllib3/packages/six.py | 1076 +++ .../pip/_vendor/urllib3/poolmanager.py | 556 ++ .../pip/_vendor/urllib3/request.py | 191 + .../pip/_vendor/urllib3/response.py | 879 ++ .../pip/_vendor/urllib3/util/__init__.py | 49 + .../util/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1147 bytes .../__pycache__/connection.cpython-312.pyc | Bin 0 -> 4757 bytes .../util/__pycache__/proxy.cpython-312.pyc | Bin 0 -> 1553 bytes .../util/__pycache__/queue.cpython-312.pyc | Bin 0 -> 1353 bytes .../util/__pycache__/request.cpython-312.pyc | Bin 0 -> 4184 bytes .../util/__pycache__/response.cpython-312.pyc | Bin 0 -> 2990 bytes .../util/__pycache__/retry.cpython-312.pyc | Bin 0 -> 21719 bytes .../util/__pycache__/ssl_.cpython-312.pyc | Bin 0 -> 15104 bytes .../ssl_match_hostname.cpython-312.pyc | Bin 0 -> 5072 bytes .../__pycache__/ssltransport.cpython-312.pyc | Bin 0 -> 10773 bytes .../util/__pycache__/timeout.cpython-312.pyc | Bin 0 -> 11140 bytes .../util/__pycache__/url.cpython-312.pyc | Bin 0 -> 15796 bytes .../util/__pycache__/wait.cpython-312.pyc | Bin 0 -> 4404 bytes .../pip/_vendor/urllib3/util/connection.py | 149 + .../pip/_vendor/urllib3/util/proxy.py | 57 + .../pip/_vendor/urllib3/util/queue.py | 22 + .../pip/_vendor/urllib3/util/request.py | 137 + .../pip/_vendor/urllib3/util/response.py | 107 + .../pip/_vendor/urllib3/util/retry.py | 622 ++ .../pip/_vendor/urllib3/util/ssl_.py | 495 + .../urllib3/util/ssl_match_hostname.py | 159 + .../pip/_vendor/urllib3/util/ssltransport.py | 221 + .../pip/_vendor/urllib3/util/timeout.py | 271 + .../pip/_vendor/urllib3/util/url.py | 435 + .../pip/_vendor/urllib3/util/wait.py | 152 + .../site-packages/pip/_vendor/vendor.txt | 24 + .../pip/_vendor/webencodings/__init__.py | 342 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 12002 bytes .../__pycache__/labels.cpython-312.pyc | Bin 0 -> 7133 bytes .../__pycache__/mklabels.cpython-312.pyc | Bin 0 -> 2700 bytes .../__pycache__/tests.cpython-312.pyc | Bin 0 -> 9252 bytes .../x_user_defined.cpython-312.pyc | Bin 0 -> 3296 bytes .../pip/_vendor/webencodings/labels.py | 231 + .../pip/_vendor/webencodings/mklabels.py | 59 + .../pip/_vendor/webencodings/tests.py | 153 + .../_vendor/webencodings/x_user_defined.py | 325 + .../lib/python3.12/site-packages/pip/py.typed | 4 + .../qrcode-8.2.dist-info/INSTALLER | 1 + .../qrcode-8.2.dist-info/LICENSE | 48 + .../qrcode-8.2.dist-info/METADATA | 668 ++ .../site-packages/qrcode-8.2.dist-info/RECORD | 76 + .../qrcode-8.2.dist-info/REQUESTED | 0 .../site-packages/qrcode-8.2.dist-info/WHEEL | 4 + .../qrcode-8.2.dist-info/entry_points.txt | 3 + .../python3.12/site-packages/qrcode/LUT.py | 223 + .../site-packages/qrcode/__init__.py | 30 + .../qrcode/__pycache__/LUT.cpython-312.pyc | Bin 0 -> 1718 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 1071 bytes .../qrcode/__pycache__/base.cpython-312.pyc | Bin 0 -> 9409 bytes .../console_scripts.cpython-312.pyc | Bin 0 -> 7935 bytes .../__pycache__/constants.cpython-312.pyc | Bin 0 -> 300 bytes .../__pycache__/exceptions.cpython-312.pyc | Bin 0 -> 374 bytes .../qrcode/__pycache__/main.cpython-312.pyc | Bin 0 -> 23493 bytes .../__pycache__/release.cpython-312.pyc | Bin 0 -> 1991 bytes .../qrcode/__pycache__/util.cpython-312.pyc | Bin 0 -> 22784 bytes .../python3.12/site-packages/qrcode/base.py | 313 + .../site-packages/qrcode/compat/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 185 bytes .../compat/__pycache__/etree.cpython-312.pyc | Bin 0 -> 351 bytes .../compat/__pycache__/png.cpython-312.pyc | Bin 0 -> 309 bytes .../site-packages/qrcode/compat/etree.py | 4 + .../site-packages/qrcode/compat/png.py | 7 + .../site-packages/qrcode/console_scripts.py | 181 + .../site-packages/qrcode/constants.py | 5 + .../site-packages/qrcode/exceptions.py | 2 + .../site-packages/qrcode/image/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 184 bytes .../image/__pycache__/base.cpython-312.pyc | Bin 0 -> 7819 bytes .../image/__pycache__/pil.cpython-312.pyc | Bin 0 -> 2604 bytes .../image/__pycache__/pure.cpython-312.pyc | Bin 0 -> 3032 bytes .../__pycache__/styledpil.cpython-312.pyc | Bin 0 -> 6914 bytes .../image/__pycache__/svg.cpython-312.pyc | Bin 0 -> 8574 bytes .../site-packages/qrcode/image/base.py | 164 + .../site-packages/qrcode/image/pil.py | 57 + .../site-packages/qrcode/image/pure.py | 56 + .../site-packages/qrcode/image/styledpil.py | 120 + .../qrcode/image/styles/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 191 bytes .../__pycache__/colormasks.cpython-312.pyc | Bin 0 -> 10723 bytes .../qrcode/image/styles/colormasks.py | 226 + .../image/styles/moduledrawers/__init__.py | 10 + .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 545 bytes .../__pycache__/base.cpython-312.pyc | Bin 0 -> 1763 bytes .../__pycache__/pil.cpython-312.pyc | Bin 0 -> 16505 bytes .../__pycache__/svg.cpython-312.pyc | Bin 0 -> 8628 bytes .../qrcode/image/styles/moduledrawers/base.py | 33 + .../qrcode/image/styles/moduledrawers/pil.py | 265 + .../qrcode/image/styles/moduledrawers/svg.py | 139 + .../site-packages/qrcode/image/svg.py | 175 + .../python3.12/site-packages/qrcode/main.py | 541 ++ .../site-packages/qrcode/release.py | 42 + .../site-packages/qrcode/tests/__init__.py | 0 .../__pycache__/__init__.cpython-312.pyc | Bin 0 -> 184 bytes .../tests/__pycache__/consts.cpython-312.pyc | Bin 0 -> 310 bytes .../__pycache__/test_example.cpython-312.pyc | Bin 0 -> 693 bytes .../__pycache__/test_qrcode.cpython-312.pyc | Bin 0 -> 15795 bytes .../test_qrcode_pil.cpython-312.pyc | Bin 0 -> 9399 bytes .../test_qrcode_pypng.cpython-312.pyc | Bin 0 -> 2244 bytes .../test_qrcode_svg.cpython-312.pyc | Bin 0 -> 3440 bytes .../__pycache__/test_release.cpython-312.pyc | Bin 0 -> 2693 bytes .../__pycache__/test_script.cpython-312.pyc | Bin 0 -> 6689 bytes .../__pycache__/test_util.cpython-312.pyc | Bin 0 -> 802 bytes .../site-packages/qrcode/tests/consts.py | 4 + .../qrcode/tests/test_example.py | 13 + .../site-packages/qrcode/tests/test_qrcode.py | 271 + .../qrcode/tests/test_qrcode_pil.py | 157 + .../qrcode/tests/test_qrcode_pypng.py | 35 + .../qrcode/tests/test_qrcode_svg.py | 54 + .../qrcode/tests/test_release.py | 43 + .../site-packages/qrcode/tests/test_script.py | 97 + .../site-packages/qrcode/tests/test_util.py | 11 + .../python3.12/site-packages/qrcode/util.py | 584 ++ Python/venv/lib64 | 1 + Python/venv/pyvenv.cfg | 5 + 1344 files changed, 233907 insertions(+) create mode 100644 Python/__pycache__/pyttsx3.cpython-312.pyc create mode 100644 Python/cow.py create mode 100644 Python/exit.py create mode 100644 Python/greet.py create mode 100644 Python/integer.py create mode 100644 Python/integer1.py create mode 100644 Python/mario1.py create mode 100644 Python/phonebook.csv create mode 100644 Python/phonebook.py create mode 100644 Python/phonebook_new.py create mode 100644 Python/phonebookv1.py create mode 100644 Python/phonebookv1_list.py create mode 100644 Python/pyttsx3.py create mode 100644 Python/qr.png create mode 100644 Python/qr.py create mode 100644 Python/scores.py create mode 100644 Python/venv/bin/Activate.ps1 create mode 100644 Python/venv/bin/activate create mode 100644 Python/venv/bin/activate.csh create mode 100644 Python/venv/bin/activate.fish create mode 100755 Python/venv/bin/pip create mode 100755 Python/venv/bin/pip3 create mode 100755 Python/venv/bin/pip3.12 create mode 120000 Python/venv/bin/python create mode 120000 Python/venv/bin/python3 create mode 120000 Python/venv/bin/python3.12 create mode 100755 Python/venv/bin/qr create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/AvifImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/BdfFontFile.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/BlpImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/BmpImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/BufrStubImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/ContainerIO.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/CurImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/DcxImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/DdsImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/EpsImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/ExifTags.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/FitsImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/FliImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/FontFile.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/FpxImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/FtexImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/GbrImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/GdImageFile.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/GifImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/GimpGradientFile.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/GimpPaletteFile.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/GribStubImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/Hdf5StubImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/IcnsImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/IcoImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/ImImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/Image.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/ImageChops.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/ImageCms.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/ImageColor.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/ImageDraw.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/ImageDraw2.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/ImageEnhance.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/ImageFile.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/ImageFilter.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/ImageFont.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/ImageGrab.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/ImageMath.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/ImageMode.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/ImageMorph.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/ImageOps.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/ImagePalette.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/ImagePath.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/ImageQt.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/ImageSequence.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/ImageShow.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/ImageStat.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/ImageText.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/ImageTk.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/ImageTransform.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/ImageWin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/ImtImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/IptcImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/Jpeg2KImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/JpegImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/JpegPresets.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/McIdasImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/MicImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/MpegImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/MpoImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/MspImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/PSDraw.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/PaletteFile.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/PalmImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/PcdImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/PcfFontFile.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/PcxImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/PdfImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/PdfParser.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/PixarImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/PngImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/PpmImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/PsdImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/QoiImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/SgiImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/SpiderImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/SunImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/TarIO.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/TgaImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/TiffImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/TiffTags.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/WalImageFile.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/WebPImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/WmfImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/XVThumbImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/XbmImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/XpmImagePlugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__main__.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/AvifImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/BdfFontFile.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/BlpImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/BmpImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/BufrStubImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ContainerIO.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/CurImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/DcxImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/DdsImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/EpsImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ExifTags.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/FitsImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/FliImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/FontFile.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/FpxImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/FtexImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/GbrImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/GdImageFile.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/GifImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/GimpGradientFile.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/GimpPaletteFile.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/GribStubImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/Hdf5StubImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/IcnsImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/IcoImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/Image.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageChops.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageCms.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageColor.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageDraw.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageDraw2.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageEnhance.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageFile.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageFilter.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageFont.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageGrab.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageMath.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageMode.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageMorph.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageOps.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImagePalette.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImagePath.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageQt.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageSequence.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageShow.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageStat.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageText.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageTk.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageTransform.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageWin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImtImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/IptcImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/Jpeg2KImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/JpegImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/JpegPresets.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/McIdasImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/MicImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/MpegImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/MpoImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/MspImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/PSDraw.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/PaletteFile.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/PalmImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/PcdImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/PcfFontFile.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/PcxImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/PdfImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/PdfParser.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/PixarImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/PngImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/PpmImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/PsdImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/QoiImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/SgiImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/SpiderImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/SunImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/TarIO.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/TgaImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/TiffImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/TiffTags.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/WalImageFile.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/WebPImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/WmfImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/XVThumbImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/XbmImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/XpmImagePlugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/__main__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/_binary.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/_deprecate.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/_tkinter_finder.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/_typing.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/_util.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/_version.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/features.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/__pycache__/report.cpython-312.pyc create mode 100755 Python/venv/lib/python3.12/site-packages/PIL/_avif.cpython-312-x86_64-linux-gnu.so create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/_avif.pyi create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/_binary.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/_deprecate.py create mode 100755 Python/venv/lib/python3.12/site-packages/PIL/_imaging.cpython-312-x86_64-linux-gnu.so create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/_imaging.pyi create mode 100755 Python/venv/lib/python3.12/site-packages/PIL/_imagingcms.cpython-312-x86_64-linux-gnu.so create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/_imagingcms.pyi create mode 100755 Python/venv/lib/python3.12/site-packages/PIL/_imagingft.cpython-312-x86_64-linux-gnu.so create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/_imagingft.pyi create mode 100755 Python/venv/lib/python3.12/site-packages/PIL/_imagingmath.cpython-312-x86_64-linux-gnu.so create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/_imagingmath.pyi create mode 100755 Python/venv/lib/python3.12/site-packages/PIL/_imagingmorph.cpython-312-x86_64-linux-gnu.so create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/_imagingmorph.pyi create mode 100755 Python/venv/lib/python3.12/site-packages/PIL/_imagingtk.cpython-312-x86_64-linux-gnu.so create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/_imagingtk.pyi create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/_tkinter_finder.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/_typing.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/_util.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/_version.py create mode 100755 Python/venv/lib/python3.12/site-packages/PIL/_webp.cpython-312-x86_64-linux-gnu.so create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/_webp.pyi create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/features.py create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/py.typed create mode 100644 Python/venv/lib/python3.12/site-packages/PIL/report.py create mode 100644 Python/venv/lib/python3.12/site-packages/pillow-12.2.0.dist-info/INSTALLER create mode 100644 Python/venv/lib/python3.12/site-packages/pillow-12.2.0.dist-info/METADATA create mode 100644 Python/venv/lib/python3.12/site-packages/pillow-12.2.0.dist-info/RECORD create mode 100644 Python/venv/lib/python3.12/site-packages/pillow-12.2.0.dist-info/REQUESTED create mode 100644 Python/venv/lib/python3.12/site-packages/pillow-12.2.0.dist-info/WHEEL create mode 100644 Python/venv/lib/python3.12/site-packages/pillow-12.2.0.dist-info/licenses/LICENSE create mode 100644 Python/venv/lib/python3.12/site-packages/pillow-12.2.0.dist-info/sboms/auditwheel.cdx.json create mode 100644 Python/venv/lib/python3.12/site-packages/pillow-12.2.0.dist-info/top_level.txt create mode 100644 Python/venv/lib/python3.12/site-packages/pillow-12.2.0.dist-info/zip-safe create mode 100755 Python/venv/lib/python3.12/site-packages/pillow.libs/libXau-154567c4.so.6.0.0 create mode 100755 Python/venv/lib/python3.12/site-packages/pillow.libs/libavif-a883386a.so.16.4.1 create mode 100755 Python/venv/lib/python3.12/site-packages/pillow.libs/libbrotlicommon-785b7a00.so.1.2.0 create mode 100755 Python/venv/lib/python3.12/site-packages/pillow.libs/libbrotlidec-08d35d18.so.1.2.0 create mode 100755 Python/venv/lib/python3.12/site-packages/pillow.libs/libfreetype-d2d71ad9.so.6.20.6 create mode 100755 Python/venv/lib/python3.12/site-packages/pillow.libs/libharfbuzz-ef65cc8a.so.0.61321.0 create mode 100755 Python/venv/lib/python3.12/site-packages/pillow.libs/libjpeg-8296d2fa.so.62.4.0 create mode 100755 Python/venv/lib/python3.12/site-packages/pillow.libs/liblcms2-545f6561.so.2.0.18 create mode 100755 Python/venv/lib/python3.12/site-packages/pillow.libs/liblzma-3c942967.so.5.8.3 create mode 100755 Python/venv/lib/python3.12/site-packages/pillow.libs/libopenjp2-f3576751.so.2.5.4 create mode 100755 Python/venv/lib/python3.12/site-packages/pillow.libs/libpng16-65c953c0.so.16.56.0 create mode 100755 Python/venv/lib/python3.12/site-packages/pillow.libs/libsharpyuv-0bacc318.so.0.1.2 create mode 100755 Python/venv/lib/python3.12/site-packages/pillow.libs/libtiff-f4bc73ff.so.6.2.0 create mode 100755 Python/venv/lib/python3.12/site-packages/pillow.libs/libwebp-67ee3789.so.7.2.0 create mode 100755 Python/venv/lib/python3.12/site-packages/pillow.libs/libwebpdemux-eeb71312.so.2.0.17 create mode 100755 Python/venv/lib/python3.12/site-packages/pillow.libs/libwebpmux-20a90b09.so.3.1.2 create mode 100755 Python/venv/lib/python3.12/site-packages/pillow.libs/libxcb-bac6ebc8.so.1.1.0 create mode 100755 Python/venv/lib/python3.12/site-packages/pillow.libs/libzstd-6ea785c0.so.1.5.7 create mode 100644 Python/venv/lib/python3.12/site-packages/pip-24.0.dist-info/AUTHORS.txt create mode 100644 Python/venv/lib/python3.12/site-packages/pip-24.0.dist-info/INSTALLER create mode 100644 Python/venv/lib/python3.12/site-packages/pip-24.0.dist-info/LICENSE.txt create mode 100644 Python/venv/lib/python3.12/site-packages/pip-24.0.dist-info/METADATA create mode 100644 Python/venv/lib/python3.12/site-packages/pip-24.0.dist-info/RECORD create mode 100644 Python/venv/lib/python3.12/site-packages/pip-24.0.dist-info/REQUESTED create mode 100644 Python/venv/lib/python3.12/site-packages/pip-24.0.dist-info/WHEEL create mode 100644 Python/venv/lib/python3.12/site-packages/pip-24.0.dist-info/entry_points.txt create mode 100644 Python/venv/lib/python3.12/site-packages/pip-24.0.dist-info/top_level.txt create mode 100644 Python/venv/lib/python3.12/site-packages/pip/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/__main__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/__pip-runner__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/__pycache__/__main__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/__pycache__/__pip-runner__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/build_env.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/cache.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/configuration.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/exceptions.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/main.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/pyproject.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/self_outdated_check.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/__pycache__/wheel_builder.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/build_env.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/cache.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/cli/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/autocompletion.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/base_command.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/cmdoptions.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/command_context.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/main.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/main_parser.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/parser.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/progress_bars.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/req_command.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/spinners.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/cli/__pycache__/status_codes.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/cli/autocompletion.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/cli/base_command.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/cli/cmdoptions.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/cli/command_context.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/cli/main.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/cli/main_parser.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/cli/parser.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/cli/progress_bars.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/cli/req_command.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/cli/spinners.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/cli/status_codes.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/cache.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/check.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/completion.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/configuration.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/debug.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/download.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/freeze.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/hash.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/help.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/index.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/inspect.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/install.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/list.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/search.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/show.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/uninstall.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/__pycache__/wheel.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/cache.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/check.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/completion.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/configuration.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/debug.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/download.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/freeze.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/hash.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/help.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/index.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/inspect.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/install.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/list.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/search.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/show.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/uninstall.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/commands/wheel.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/configuration.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/distributions/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/base.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/installed.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/sdist.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/distributions/__pycache__/wheel.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/distributions/base.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/distributions/installed.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/distributions/sdist.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/distributions/wheel.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/exceptions.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/index/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/collector.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/package_finder.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/index/__pycache__/sources.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/index/collector.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/index/package_finder.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/index/sources.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/locations/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/_distutils.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/_sysconfig.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/locations/__pycache__/base.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/locations/_distutils.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/locations/_sysconfig.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/locations/base.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/main.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/metadata/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/_json.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/base.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/metadata/__pycache__/pkg_resources.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/metadata/_json.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/metadata/base.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_compat.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_dists.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/__pycache__/_envs.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_compat.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_dists.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/metadata/importlib/_envs.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/metadata/pkg_resources.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/models/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/candidate.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/direct_url.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/format_control.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/index.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/installation_report.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/link.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/scheme.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/search_scope.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/selection_prefs.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/target_python.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/models/__pycache__/wheel.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/models/candidate.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/models/direct_url.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/models/format_control.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/models/index.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/models/installation_report.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/models/link.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/models/scheme.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/models/search_scope.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/models/selection_prefs.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/models/target_python.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/models/wheel.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/network/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/auth.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/cache.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/download.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/lazy_wheel.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/session.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/utils.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/network/__pycache__/xmlrpc.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/network/auth.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/network/cache.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/network/download.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/network/lazy_wheel.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/network/session.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/network/utils.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/network/xmlrpc.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/operations/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/check.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/freeze.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/operations/__pycache__/prepare.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/build_tracker.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata_editable.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/metadata_legacy.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel_editable.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/operations/build/__pycache__/wheel_legacy.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/operations/build/build_tracker.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/operations/build/metadata.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/operations/build/metadata_editable.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/operations/build/metadata_legacy.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/operations/build/wheel.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/operations/build/wheel_editable.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/operations/build/wheel_legacy.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/operations/check.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/operations/freeze.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/operations/install/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/editable_legacy.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/operations/install/__pycache__/wheel.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/operations/install/editable_legacy.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/operations/install/wheel.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/operations/prepare.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/pyproject.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/req/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/constructors.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_file.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_install.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_set.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/req/__pycache__/req_uninstall.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/req/constructors.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/req/req_file.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/req/req_install.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/req/req_set.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/req/req_uninstall.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/resolution/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/resolution/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/resolution/__pycache__/base.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/resolution/base.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/resolution/legacy/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/resolution/legacy/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/resolution/legacy/__pycache__/resolver.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/resolution/legacy/resolver.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/base.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/candidates.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/factory.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/found_candidates.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/provider.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/reporter.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/requirements.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/__pycache__/resolver.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/base.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/candidates.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/factory.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/found_candidates.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/provider.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/reporter.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/requirements.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/resolution/resolvelib/resolver.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/self_outdated_check.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/_jaraco_text.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/_log.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/appdirs.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/compat.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/compatibility_tags.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/datetime.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/deprecation.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/direct_url_helpers.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/egg_link.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/encoding.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/entrypoints.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/filesystem.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/filetypes.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/glibc.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/hashes.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/logging.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/misc.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/models.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/packaging.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/setuptools_build.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/subprocess.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/temp_dir.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/unpacking.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/urls.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/virtualenv.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/__pycache__/wheel.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/_jaraco_text.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/_log.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/appdirs.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/compat.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/compatibility_tags.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/datetime.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/deprecation.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/direct_url_helpers.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/egg_link.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/encoding.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/entrypoints.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/filesystem.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/filetypes.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/glibc.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/hashes.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/logging.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/misc.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/models.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/packaging.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/setuptools_build.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/subprocess.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/temp_dir.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/unpacking.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/urls.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/virtualenv.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/utils/wheel.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/vcs/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/bazaar.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/git.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/mercurial.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/subversion.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/vcs/__pycache__/versioncontrol.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/vcs/bazaar.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/vcs/git.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/vcs/mercurial.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/vcs/subversion.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/vcs/versioncontrol.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_internal/wheel_builder.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/__pycache__/six.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/__pycache__/typing_extensions.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/_cmd.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/adapter.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/cache.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/controller.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/filewrapper.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/heuristics.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/serialize.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/__pycache__/wrapper.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/_cmd.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/adapter.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/cache.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/file_cache.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/__pycache__/redis_cache.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/file_cache.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/caches/redis_cache.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/controller.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/filewrapper.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/heuristics.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/serialize.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/cachecontrol/wrapper.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/certifi/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/certifi/__main__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/__main__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/certifi/__pycache__/core.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/certifi/cacert.pem create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/certifi/core.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/big5freq.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/big5prober.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/chardistribution.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/charsetgroupprober.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/charsetprober.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachine.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/codingstatemachinedict.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/cp949prober.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/enums.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/escprober.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/escsm.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/eucjpprober.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euckrfreq.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euckrprober.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euctwfreq.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/euctwprober.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/gb2312freq.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/gb2312prober.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/hebrewprober.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/jisfreq.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/johabfreq.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/johabprober.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/jpcntx.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langbulgarianmodel.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langgreekmodel.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langhebrewmodel.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langhungarianmodel.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langrussianmodel.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langthaimodel.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/langturkishmodel.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/latin1prober.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/macromanprober.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/mbcharsetprober.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/mbcsgroupprober.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/mbcssm.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/resultdict.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/sbcharsetprober.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/sbcsgroupprober.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/sjisprober.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/universaldetector.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/utf1632prober.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/utf8prober.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/__pycache__/version.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/big5freq.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/big5prober.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/chardistribution.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/charsetgroupprober.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/charsetprober.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/cli/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/cli/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/cli/__pycache__/chardetect.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/cli/chardetect.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/codingstatemachine.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/codingstatemachinedict.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/cp949prober.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/enums.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/escprober.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/escsm.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/eucjpprober.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/euckrfreq.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/euckrprober.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/euctwfreq.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/euctwprober.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/gb2312freq.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/gb2312prober.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/hebrewprober.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/jisfreq.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/johabfreq.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/johabprober.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/jpcntx.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/langbulgarianmodel.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/langgreekmodel.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/langhebrewmodel.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/langhungarianmodel.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/langrussianmodel.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/langthaimodel.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/langturkishmodel.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/latin1prober.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/macromanprober.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/mbcharsetprober.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/mbcsgroupprober.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/mbcssm.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/metadata/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/metadata/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/metadata/__pycache__/languages.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/metadata/languages.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/resultdict.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/sbcharsetprober.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/sbcsgroupprober.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/sjisprober.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/universaldetector.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/utf1632prober.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/utf8prober.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/chardet/version.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/colorama/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/colorama/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/colorama/__pycache__/ansi.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/colorama/__pycache__/ansitowin32.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/colorama/__pycache__/initialise.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/colorama/__pycache__/win32.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/colorama/__pycache__/winterm.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/colorama/ansi.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/colorama/ansitowin32.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/colorama/initialise.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/ansi_test.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/ansitowin32_test.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/initialise_test.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/isatty_test.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/utils.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/__pycache__/winterm_test.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/ansi_test.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/ansitowin32_test.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/initialise_test.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/isatty_test.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/utils.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/colorama/tests/winterm_test.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/colorama/win32.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/colorama/winterm.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/compat.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/database.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/index.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/locators.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/manifest.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/markers.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/metadata.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/resources.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/scripts.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/util.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/version.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distlib/__pycache__/wheel.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distlib/compat.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distlib/database.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distlib/index.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distlib/locators.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distlib/manifest.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distlib/markers.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distlib/metadata.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distlib/resources.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distlib/scripts.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distlib/util.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distlib/version.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distlib/wheel.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distro/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distro/__main__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/__main__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distro/__pycache__/distro.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/distro/distro.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/idna/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/codec.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/compat.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/core.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/idnadata.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/intranges.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/package_data.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/idna/__pycache__/uts46data.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/idna/codec.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/idna/compat.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/idna/core.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/idna/idnadata.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/idna/intranges.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/idna/package_data.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/idna/uts46data.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/exceptions.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/ext.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/__pycache__/fallback.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/exceptions.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/ext.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/msgpack/fallback.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__about__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/__about__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_manylinux.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_musllinux.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/_structures.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/markers.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/requirements.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/specifiers.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/tags.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/utils.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/packaging/__pycache__/version.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/packaging/_manylinux.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/packaging/_musllinux.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/packaging/_structures.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/packaging/markers.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/packaging/requirements.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/packaging/specifiers.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/packaging/tags.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/packaging/utils.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/packaging/version.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pkg_resources/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pkg_resources/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__main__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/__main__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/android.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/api.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/macos.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/unix.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/version.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/__pycache__/windows.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/android.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/api.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/macos.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/unix.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/version.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/platformdirs/windows.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__main__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/__main__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/cmdline.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/console.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/filter.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/formatter.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/lexer.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/modeline.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/plugin.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/regexopt.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/scanner.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/sphinxext.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/style.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/token.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/unistring.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/__pycache__/util.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/cmdline.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/console.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/filter.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/filters/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/filters/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatter.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/_mapping.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/bbcode.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/groff.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/html.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/img.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/irc.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/latex.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/other.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/pangomarkup.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/rtf.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/svg.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/__pycache__/terminal256.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/_mapping.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/bbcode.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/groff.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/html.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/img.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/irc.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/latex.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/other.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/pangomarkup.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/rtf.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/svg.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/terminal.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/formatters/terminal256.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/lexer.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/lexers/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/lexers/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/lexers/__pycache__/_mapping.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/lexers/__pycache__/python.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/lexers/_mapping.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/lexers/python.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/modeline.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/plugin.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/regexopt.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/scanner.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/sphinxext.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/style.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/styles/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/styles/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/token.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/unistring.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pygments/util.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/actions.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/common.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/core.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/exceptions.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/helpers.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/results.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/testing.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/unicode.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/__pycache__/util.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/actions.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/common.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/core.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/diagram/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/diagram/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/exceptions.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/helpers.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/results.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/testing.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/unicode.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyparsing/util.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_compat.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/__pycache__/_impl.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_compat.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_impl.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/__pycache__/_in_process.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/__version__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/_internal_utils.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/adapters.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/api.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/auth.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/certs.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/compat.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/cookies.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/exceptions.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/help.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/hooks.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/models.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/packages.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/sessions.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/status_codes.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/structures.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/__pycache__/utils.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/__version__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/_internal_utils.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/adapters.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/api.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/auth.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/certs.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/compat.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/cookies.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/exceptions.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/help.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/hooks.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/models.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/packages.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/sessions.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/status_codes.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/structures.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/requests/utils.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/providers.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/reporters.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/resolvers.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/__pycache__/structs.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/__pycache__/collections_abc.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/compat/collections_abc.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/providers.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/reporters.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/resolvers.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/resolvelib/structs.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__main__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/__main__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_cell_widths.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_emoji_codes.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_emoji_replace.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_export_format.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_extension.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_fileno.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_inspect.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_log_render.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_loop.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_null_file.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_palettes.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_pick.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_ratio.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_spinners.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_stack.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_timer.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_win32_console.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_windows.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_windows_renderer.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/_wrap.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/abc.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/align.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/ansi.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/bar.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/box.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/cells.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/color.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/color_triplet.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/columns.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/console.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/constrain.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/containers.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/control.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/default_styles.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/diagnose.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/emoji.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/errors.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/file_proxy.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/filesize.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/highlighter.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/json.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/jupyter.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/layout.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/live.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/live_render.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/logging.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/markup.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/measure.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/padding.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/pager.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/palette.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/panel.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/pretty.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/progress.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/progress_bar.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/prompt.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/protocol.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/region.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/repr.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/rule.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/scope.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/screen.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/segment.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/spinner.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/status.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/style.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/styled.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/syntax.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/table.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/terminal_theme.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/text.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/theme.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/themes.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/traceback.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/__pycache__/tree.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/_cell_widths.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/_emoji_codes.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/_emoji_replace.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/_export_format.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/_extension.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/_fileno.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/_inspect.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/_log_render.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/_loop.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/_null_file.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/_palettes.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/_pick.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/_ratio.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/_spinners.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/_stack.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/_timer.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/_win32_console.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/_windows.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/_windows_renderer.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/_wrap.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/abc.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/align.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/ansi.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/bar.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/box.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/cells.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/color.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/color_triplet.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/columns.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/console.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/constrain.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/containers.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/control.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/default_styles.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/diagnose.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/emoji.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/errors.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/file_proxy.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/filesize.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/highlighter.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/json.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/jupyter.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/layout.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/live.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/live_render.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/logging.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/markup.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/measure.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/padding.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/pager.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/palette.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/panel.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/pretty.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/progress.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/progress_bar.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/prompt.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/protocol.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/region.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/repr.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/rule.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/scope.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/screen.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/segment.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/spinner.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/status.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/style.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/styled.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/syntax.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/table.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/terminal_theme.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/text.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/theme.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/themes.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/traceback.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/rich/tree.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/six.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/tenacity/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/_asyncio.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/_utils.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/after.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/before.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/before_sleep.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/nap.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/retry.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/stop.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/tornadoweb.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/tenacity/__pycache__/wait.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/tenacity/_asyncio.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/tenacity/_utils.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/tenacity/after.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/tenacity/before.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/tenacity/before_sleep.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/tenacity/nap.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/tenacity/retry.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/tenacity/stop.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/tenacity/tornadoweb.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/tenacity/wait.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/tomli/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/_parser.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/_re.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/tomli/__pycache__/_types.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/tomli/_parser.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/tomli/_re.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/tomli/_types.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/truststore/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_api.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_macos.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_openssl.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_ssl_constants.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/truststore/__pycache__/_windows.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/truststore/_api.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/truststore/_macos.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/truststore/_openssl.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/truststore/_ssl_constants.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/truststore/_windows.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/typing_extensions.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/_collections.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/_version.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/connection.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/connectionpool.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/exceptions.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/fields.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/filepost.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/poolmanager.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/request.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/__pycache__/response.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/_collections.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/_version.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/connection.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/connectionpool.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/_appengine_environ.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/appengine.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/ntlmpool.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/pyopenssl.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/securetransport.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/__pycache__/socks.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_appengine_environ.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/bindings.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/__pycache__/low_level.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/bindings.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/_securetransport/low_level.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/appengine.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/ntlmpool.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/pyopenssl.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/securetransport.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/contrib/socks.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/exceptions.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/fields.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/filepost.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/__pycache__/six.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/makefile.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/__pycache__/weakref_finalize.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/makefile.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/backports/weakref_finalize.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/packages/six.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/poolmanager.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/request.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/response.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/connection.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/proxy.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/queue.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/request.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/response.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/retry.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/ssl_match_hostname.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/ssltransport.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/timeout.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/url.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/__pycache__/wait.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/connection.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/proxy.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/queue.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/request.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/response.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/retry.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/ssl_.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/ssl_match_hostname.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/ssltransport.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/timeout.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/url.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/urllib3/util/wait.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/vendor.txt create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/webencodings/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/webencodings/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/webencodings/__pycache__/labels.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/webencodings/__pycache__/mklabels.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/webencodings/__pycache__/tests.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/webencodings/__pycache__/x_user_defined.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/webencodings/labels.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/webencodings/mklabels.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/webencodings/tests.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/_vendor/webencodings/x_user_defined.py create mode 100644 Python/venv/lib/python3.12/site-packages/pip/py.typed create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode-8.2.dist-info/INSTALLER create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode-8.2.dist-info/LICENSE create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode-8.2.dist-info/METADATA create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode-8.2.dist-info/RECORD create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode-8.2.dist-info/REQUESTED create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode-8.2.dist-info/WHEEL create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode-8.2.dist-info/entry_points.txt create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/LUT.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/__pycache__/LUT.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/__pycache__/base.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/__pycache__/console_scripts.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/__pycache__/constants.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/__pycache__/exceptions.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/__pycache__/main.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/__pycache__/release.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/__pycache__/util.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/base.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/compat/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/compat/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/compat/__pycache__/etree.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/compat/__pycache__/png.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/compat/etree.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/compat/png.py create mode 100755 Python/venv/lib/python3.12/site-packages/qrcode/console_scripts.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/constants.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/exceptions.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/image/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/image/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/image/__pycache__/base.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/image/__pycache__/pil.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/image/__pycache__/pure.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/image/__pycache__/styledpil.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/image/__pycache__/svg.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/image/base.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/image/pil.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/image/pure.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/image/styledpil.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/image/styles/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/image/styles/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/image/styles/__pycache__/colormasks.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/image/styles/colormasks.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/__pycache__/base.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/__pycache__/pil.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/__pycache__/svg.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/base.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/pil.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/image/styles/moduledrawers/svg.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/image/svg.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/main.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/release.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/tests/__init__.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/tests/__pycache__/__init__.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/tests/__pycache__/consts.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_example.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_qrcode.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_qrcode_pil.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_qrcode_pypng.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_qrcode_svg.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_release.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_script.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/tests/__pycache__/test_util.cpython-312.pyc create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/tests/consts.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/tests/test_example.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/tests/test_qrcode.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/tests/test_qrcode_pil.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/tests/test_qrcode_pypng.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/tests/test_qrcode_svg.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/tests/test_release.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/tests/test_script.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/tests/test_util.py create mode 100644 Python/venv/lib/python3.12/site-packages/qrcode/util.py create mode 120000 Python/venv/lib64 create mode 100644 Python/venv/pyvenv.cfg diff --git a/Python/__pycache__/pyttsx3.cpython-312.pyc b/Python/__pycache__/pyttsx3.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9ad2ee86fa25c74de3644064ccf7b60d40792591 GIT binary patch literal 340 zcmX@j%ge<81gFobW`zUk#~=<2Fhd!i3xJI23@HpLj5!QZ3``8E3|UMtMF@H|lo`d8 z%9O>95Qni+m{v1F*o+K76`U|}1PwERk)e`Nlldh`!mo-aBqOs}0f?M~O${_zZ?P9t zmXs7%7~f*a%*!mf#g>|vo|%_=i@7+l@)lQ7X`W+VN_b*s$x4RLApO78^)vEwQ}r_v zD^pAKUGkGlb5rw5iuD63OEU8F^r2?y6;%G>u*uC&Da}c>E8+&~1G%(V7f5_yW@Kc% v&A|77Q?x_8U#3&0Tdsla1_N6=S0h)4-4zBYAp1Il;6(<(s|>00Bw?00000Q&KCa0006ENkl!>lLx7_@MW-#XnkfBN$r!xAc;YeRJ#@G!@4#-T&tstw*XB!0@;l8Qh@H$Y|Q4~ z+6+o_&kWG1I*LIB=t|9m&3+Hp>gX}Sm+Gx0vIjwqkox1Cycw;}j_S=K3@X%DU+RI{ zGJ;Ofbp$wiSuHuDIjVZ=m07GI`bU>lhI|6K(@--D(wdHgC194e!=A(BIFFo2`y3zE9|=qmDZ2=yuRwOF= 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/Python/venv/bin/activate b/Python/venv/bin/activate new file mode 100644 index 0000000..645720e --- /dev/null +++ b/Python/venv/bin/activate @@ -0,0 +1,70 @@ +# 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/hayet/Documents/Python/venv) +else + # use the path as-is + export VIRTUAL_ENV=/home/hayet/Documents/Python/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/Python/venv/bin/activate.csh b/Python/venv/bin/activate.csh new file mode 100644 index 0000000..8262a8a --- /dev/null +++ b/Python/venv/bin/activate.csh @@ -0,0 +1,27 @@ +# 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/hayet/Documents/Python/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/Python/venv/bin/activate.fish b/Python/venv/bin/activate.fish new file mode 100644 index 0000000..135b64f --- /dev/null +++ b/Python/venv/bin/activate.fish @@ -0,0 +1,69 @@ +# 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/hayet/Documents/Python/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/Python/venv/bin/pip b/Python/venv/bin/pip new file mode 100755 index 0000000..a73d5bf --- /dev/null +++ b/Python/venv/bin/pip @@ -0,0 +1,8 @@ +#!/home/hayet/Documents/Python/venv/bin/python3 +# -*- 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/Python/venv/bin/pip3 b/Python/venv/bin/pip3 new file mode 100755 index 0000000..a73d5bf --- /dev/null +++ b/Python/venv/bin/pip3 @@ -0,0 +1,8 @@ +#!/home/hayet/Documents/Python/venv/bin/python3 +# -*- 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/Python/venv/bin/pip3.12 b/Python/venv/bin/pip3.12 new file mode 100755 index 0000000..a73d5bf --- /dev/null +++ b/Python/venv/bin/pip3.12 @@ -0,0 +1,8 @@ +#!/home/hayet/Documents/Python/venv/bin/python3 +# -*- 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/Python/venv/bin/python b/Python/venv/bin/python new file mode 120000 index 0000000..b8a0adb --- /dev/null +++ b/Python/venv/bin/python @@ -0,0 +1 @@ +python3 \ No newline at end of file diff --git a/Python/venv/bin/python3 b/Python/venv/bin/python3 new file mode 120000 index 0000000..ae65fda --- /dev/null +++ b/Python/venv/bin/python3 @@ -0,0 +1 @@ +/usr/bin/python3 \ No newline at end of file diff --git a/Python/venv/bin/python3.12 b/Python/venv/bin/python3.12 new file mode 120000 index 0000000..b8a0adb --- /dev/null +++ b/Python/venv/bin/python3.12 @@ -0,0 +1 @@ +python3 \ No newline at end of file diff --git a/Python/venv/bin/qr b/Python/venv/bin/qr new file mode 100755 index 0000000..52804a7 --- /dev/null +++ b/Python/venv/bin/qr @@ -0,0 +1,8 @@ +#!/home/hayet/Documents/Python/venv/bin/python3 +# -*- coding: utf-8 -*- +import re +import sys +from qrcode.console_scripts import main +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(main()) diff --git a/Python/venv/lib/python3.12/site-packages/PIL/AvifImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/AvifImagePlugin.py new file mode 100644 index 0000000..43c39a9 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/AvifImagePlugin.py @@ -0,0 +1,293 @@ +from __future__ import annotations + +import os +from io import BytesIO +from typing import IO + +from . import ExifTags, Image, ImageFile + +try: + from . import _avif + + SUPPORTED = True +except ImportError: + SUPPORTED = False + +# Decoder options as module globals, until there is a way to pass parameters +# to Image.open (see https://github.com/python-pillow/Pillow/issues/569) +DECODE_CODEC_CHOICE = "auto" +DEFAULT_MAX_THREADS = 0 + + +def get_codec_version(codec_name: str) -> str | None: + versions = _avif.codec_versions() + for version in versions.split(", "): + if version.split(" [")[0] == codec_name: + return version.split(":")[-1].split(" ")[0] + return None + + +def _accept(prefix: bytes) -> bool | str: + if prefix[4:8] != b"ftyp": + return False + major_brand = prefix[8:12] + if major_brand in ( + # coding brands + b"avif", + b"avis", + # We accept files with AVIF container brands; we can't yet know if + # the ftyp box has the correct compatible brands, but if it doesn't + # then the plugin will raise a SyntaxError which Pillow will catch + # before moving on to the next plugin that accepts the file. + # + # Also, because this file might not actually be an AVIF file, we + # don't raise an error if AVIF support isn't properly compiled. + b"mif1", + b"msf1", + ): + if not SUPPORTED: + return ( + "image file could not be identified because AVIF support not installed" + ) + return True + return False + + +def _get_default_max_threads() -> int: + if DEFAULT_MAX_THREADS: + return DEFAULT_MAX_THREADS + if hasattr(os, "sched_getaffinity"): + return len(os.sched_getaffinity(0)) + else: + return os.cpu_count() or 1 + + +class AvifImageFile(ImageFile.ImageFile): + format = "AVIF" + format_description = "AVIF image" + __frame = -1 + + def _open(self) -> None: + if not SUPPORTED: + msg = "image file could not be opened because AVIF support not installed" + raise SyntaxError(msg) + + if DECODE_CODEC_CHOICE != "auto" and not _avif.decoder_codec_available( + DECODE_CODEC_CHOICE + ): + msg = "Invalid opening codec" + raise ValueError(msg) + + assert self.fp is not None + self._decoder = _avif.AvifDecoder( + self.fp.read(), + DECODE_CODEC_CHOICE, + _get_default_max_threads(), + ) + + # Get info from decoder + self._size, self.n_frames, self._mode, icc, exif, exif_orientation, xmp = ( + self._decoder.get_info() + ) + self.is_animated = self.n_frames > 1 + + if icc: + self.info["icc_profile"] = icc + if xmp: + self.info["xmp"] = xmp + + if exif_orientation != 1 or exif: + exif_data = Image.Exif() + if exif: + exif_data.load(exif) + original_orientation = exif_data.get(ExifTags.Base.Orientation, 1) + else: + original_orientation = 1 + if exif_orientation != original_orientation: + exif_data[ExifTags.Base.Orientation] = exif_orientation + exif = exif_data.tobytes() + if exif: + self.info["exif"] = exif + self.seek(0) + + def seek(self, frame: int) -> None: + if not self._seek_check(frame): + return + + # Set tile + self.__frame = frame + self.tile = [ImageFile._Tile("raw", (0, 0) + self.size, 0, self.mode)] + + def load(self) -> Image.core.PixelAccess | None: + if self.tile: + # We need to load the image data for this frame + data, timescale, pts_in_timescales, duration_in_timescales = ( + self._decoder.get_frame(self.__frame) + ) + self.info["timestamp"] = round(1000 * (pts_in_timescales / timescale)) + self.info["duration"] = round(1000 * (duration_in_timescales / timescale)) + + if self.fp and self._exclusive_fp: + self.fp.close() + self.fp = BytesIO(data) + + return super().load() + + def load_seek(self, pos: int) -> None: + pass + + def tell(self) -> int: + return self.__frame + + +def _save_all(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + _save(im, fp, filename, save_all=True) + + +def _save( + im: Image.Image, fp: IO[bytes], filename: str | bytes, save_all: bool = False +) -> None: + info = im.encoderinfo.copy() + if save_all: + append_images = list(info.get("append_images", [])) + else: + append_images = [] + + total = 0 + for ims in [im] + append_images: + total += getattr(ims, "n_frames", 1) + + quality = info.get("quality", 75) + if not isinstance(quality, int) or quality < 0 or quality > 100: + msg = "Invalid quality setting" + raise ValueError(msg) + + duration = info.get("duration", 0) + subsampling = info.get("subsampling", "4:2:0") + speed = info.get("speed", 6) + max_threads = info.get("max_threads", _get_default_max_threads()) + codec = info.get("codec", "auto") + if codec != "auto" and not _avif.encoder_codec_available(codec): + msg = "Invalid saving codec" + raise ValueError(msg) + range_ = info.get("range", "full") + tile_rows_log2 = info.get("tile_rows", 0) + tile_cols_log2 = info.get("tile_cols", 0) + alpha_premultiplied = bool(info.get("alpha_premultiplied", False)) + autotiling = bool(info.get("autotiling", tile_rows_log2 == tile_cols_log2 == 0)) + + icc_profile = info.get("icc_profile", im.info.get("icc_profile")) + exif_orientation = 1 + if exif := info.get("exif"): + if isinstance(exif, Image.Exif): + exif_data = exif + else: + exif_data = Image.Exif() + exif_data.load(exif) + if ExifTags.Base.Orientation in exif_data: + exif_orientation = exif_data.pop(ExifTags.Base.Orientation) + exif = exif_data.tobytes() if exif_data else b"" + elif isinstance(exif, Image.Exif): + exif = exif_data.tobytes() + + xmp = info.get("xmp") + + if isinstance(xmp, str): + xmp = xmp.encode("utf-8") + + advanced = info.get("advanced") + if advanced is not None: + if isinstance(advanced, dict): + advanced = advanced.items() + try: + advanced = tuple(advanced) + except TypeError: + invalid = True + else: + invalid = any(not isinstance(v, tuple) or len(v) != 2 for v in advanced) + if invalid: + msg = ( + "advanced codec options must be a dict of key-value string " + "pairs or a series of key-value two-tuples" + ) + raise ValueError(msg) + + # Setup the AVIF encoder + enc = _avif.AvifEncoder( + im.size, + subsampling, + quality, + speed, + max_threads, + codec, + range_, + tile_rows_log2, + tile_cols_log2, + alpha_premultiplied, + autotiling, + icc_profile or b"", + exif or b"", + exif_orientation, + xmp or b"", + advanced, + ) + + # Add each frame + frame_idx = 0 + frame_duration = 0 + cur_idx = im.tell() + is_single_frame = total == 1 + try: + for ims in [im] + append_images: + # Get number of frames in this image + nfr = getattr(ims, "n_frames", 1) + + for idx in range(nfr): + ims.seek(idx) + + # Make sure image mode is supported + frame = ims + rawmode = ims.mode + if ims.mode not in {"RGB", "RGBA"}: + rawmode = "RGBA" if ims.has_transparency_data else "RGB" + frame = ims.convert(rawmode) + + # Update frame duration + if isinstance(duration, (list, tuple)): + frame_duration = duration[frame_idx] + else: + frame_duration = duration + + # Append the frame to the animation encoder + enc.add( + frame.tobytes("raw", rawmode), + frame_duration, + frame.size, + rawmode, + is_single_frame, + ) + + # Update frame index + frame_idx += 1 + + if not save_all: + break + + finally: + im.seek(cur_idx) + + # Get the final output from the encoder + data = enc.finish() + if data is None: + msg = "cannot write file as AVIF (encoder returned None)" + raise OSError(msg) + + fp.write(data) + + +Image.register_open(AvifImageFile.format, AvifImageFile, _accept) +if SUPPORTED: + Image.register_save(AvifImageFile.format, _save) + Image.register_save_all(AvifImageFile.format, _save_all) + Image.register_extensions(AvifImageFile.format, [".avif", ".avifs"]) + Image.register_mime(AvifImageFile.format, "image/avif") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/BdfFontFile.py b/Python/venv/lib/python3.12/site-packages/PIL/BdfFontFile.py new file mode 100644 index 0000000..1c8c28f --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/BdfFontFile.py @@ -0,0 +1,123 @@ +# +# The Python Imaging Library +# $Id$ +# +# bitmap distribution font (bdf) file parser +# +# history: +# 1996-05-16 fl created (as bdf2pil) +# 1997-08-25 fl converted to FontFile driver +# 2001-05-25 fl removed bogus __init__ call +# 2002-11-20 fl robustification (from Kevin Cazabon, Dmitry Vasiliev) +# 2003-04-22 fl more robustification (from Graham Dumpleton) +# +# Copyright (c) 1997-2003 by Secret Labs AB. +# Copyright (c) 1997-2003 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + +""" +Parse X Bitmap Distribution Format (BDF) +""" + +from __future__ import annotations + +from typing import BinaryIO + +from . import FontFile, Image + + +def bdf_char( + f: BinaryIO, +) -> ( + tuple[ + str, + int, + tuple[tuple[int, int], tuple[int, int, int, int], tuple[int, int, int, int]], + Image.Image, + ] + | None +): + # skip to STARTCHAR + while True: + s = f.readline() + if not s: + return None + if s.startswith(b"STARTCHAR"): + break + id = s[9:].strip().decode("ascii") + + # load symbol properties + props = {} + while True: + s = f.readline() + if not s or s.startswith(b"BITMAP"): + break + i = s.find(b" ") + props[s[:i].decode("ascii")] = s[i + 1 : -1].decode("ascii") + + # load bitmap + bitmap = bytearray() + while True: + s = f.readline() + if not s or s.startswith(b"ENDCHAR"): + break + bitmap += s[:-1] + + # The word BBX + # followed by the width in x (BBw), height in y (BBh), + # and x and y displacement (BBxoff0, BByoff0) + # of the lower left corner from the origin of the character. + width, height, x_disp, y_disp = (int(p) for p in props["BBX"].split()) + + # The word DWIDTH + # followed by the width in x and y of the character in device pixels. + dwx, dwy = (int(p) for p in props["DWIDTH"].split()) + + bbox = ( + (dwx, dwy), + (x_disp, -y_disp - height, width + x_disp, -y_disp), + (0, 0, width, height), + ) + + try: + im = Image.frombytes("1", (width, height), bitmap, "hex", "1") + except ValueError: + # deal with zero-width characters + im = Image.new("1", (width, height)) + + return id, int(props["ENCODING"]), bbox, im + + +class BdfFontFile(FontFile.FontFile): + """Font file plugin for the X11 BDF format.""" + + def __init__(self, fp: BinaryIO) -> None: + super().__init__() + + s = fp.readline() + if not s.startswith(b"STARTFONT 2.1"): + msg = "not a valid BDF file" + raise SyntaxError(msg) + + props = {} + comments = [] + + while True: + s = fp.readline() + if not s or s.startswith(b"ENDPROPERTIES"): + break + i = s.find(b" ") + props[s[:i].decode("ascii")] = s[i + 1 : -1].decode("ascii") + if s[:i] in [b"COMMENT", b"COPYRIGHT"]: + if s.find(b"LogicalFontDescription") < 0: + comments.append(s[i + 1 : -1].decode("ascii")) + + while True: + c = bdf_char(fp) + if not c: + break + id, ch, (xy, dst, src), im = c + if 0 <= ch < len(self.glyph): + self.glyph[ch] = xy, dst, src, im diff --git a/Python/venv/lib/python3.12/site-packages/PIL/BlpImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/BlpImagePlugin.py new file mode 100644 index 0000000..6bb92ed --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/BlpImagePlugin.py @@ -0,0 +1,498 @@ +""" +Blizzard Mipmap Format (.blp) +Jerome Leclanche + +The contents of this file are hereby released in the public domain (CC0) +Full text of the CC0 license: + https://creativecommons.org/publicdomain/zero/1.0/ + +BLP1 files, used mostly in Warcraft III, are not fully supported. +All types of BLP2 files used in World of Warcraft are supported. + +The BLP file structure consists of a header, up to 16 mipmaps of the +texture + +Texture sizes must be powers of two, though the two dimensions do +not have to be equal; 512x256 is valid, but 512x200 is not. +The first mipmap (mipmap #0) is the full size image; each subsequent +mipmap halves both dimensions. The final mipmap should be 1x1. + +BLP files come in many different flavours: +* JPEG-compressed (type == 0) - only supported for BLP1. +* RAW images (type == 1, encoding == 1). Each mipmap is stored as an + array of 8-bit values, one per pixel, left to right, top to bottom. + Each value is an index to the palette. +* DXT-compressed (type == 1, encoding == 2): +- DXT1 compression is used if alpha_encoding == 0. + - An additional alpha bit is used if alpha_depth == 1. + - DXT3 compression is used if alpha_encoding == 1. + - DXT5 compression is used if alpha_encoding == 7. +""" + +from __future__ import annotations + +import abc +import os +import struct +from enum import IntEnum +from io import BytesIO +from typing import IO + +from . import Image, ImageFile + + +class Format(IntEnum): + JPEG = 0 + + +class Encoding(IntEnum): + UNCOMPRESSED = 1 + DXT = 2 + UNCOMPRESSED_RAW_BGRA = 3 + + +class AlphaEncoding(IntEnum): + DXT1 = 0 + DXT3 = 1 + DXT5 = 7 + + +def unpack_565(i: int) -> tuple[int, int, int]: + return ((i >> 11) & 0x1F) << 3, ((i >> 5) & 0x3F) << 2, (i & 0x1F) << 3 + + +def decode_dxt1( + data: bytes, alpha: bool = False +) -> tuple[bytearray, bytearray, bytearray, bytearray]: + """ + input: one "row" of data (i.e. will produce 4*width pixels) + """ + + blocks = len(data) // 8 # number of blocks in row + ret = (bytearray(), bytearray(), bytearray(), bytearray()) + + for block_index in range(blocks): + # Decode next 8-byte block. + idx = block_index * 8 + color0, color1, bits = struct.unpack_from("> 2 + + a = 0xFF + if control == 0: + r, g, b = r0, g0, b0 + elif control == 1: + r, g, b = r1, g1, b1 + elif control == 2: + if color0 > color1: + r = (2 * r0 + r1) // 3 + g = (2 * g0 + g1) // 3 + b = (2 * b0 + b1) // 3 + else: + r = (r0 + r1) // 2 + g = (g0 + g1) // 2 + b = (b0 + b1) // 2 + elif control == 3: + if color0 > color1: + r = (2 * r1 + r0) // 3 + g = (2 * g1 + g0) // 3 + b = (2 * b1 + b0) // 3 + else: + r, g, b, a = 0, 0, 0, 0 + + if alpha: + ret[j].extend([r, g, b, a]) + else: + ret[j].extend([r, g, b]) + + return ret + + +def decode_dxt3(data: bytes) -> tuple[bytearray, bytearray, bytearray, bytearray]: + """ + input: one "row" of data (i.e. will produce 4*width pixels) + """ + + blocks = len(data) // 16 # number of blocks in row + ret = (bytearray(), bytearray(), bytearray(), bytearray()) + + for block_index in range(blocks): + idx = block_index * 16 + block = data[idx : idx + 16] + # Decode next 16-byte block. + bits = struct.unpack_from("<8B", block) + color0, color1 = struct.unpack_from(">= 4 + else: + high = True + a &= 0xF + a *= 17 # We get a value between 0 and 15 + + color_code = (code >> 2 * (4 * j + i)) & 0x03 + + if color_code == 0: + r, g, b = r0, g0, b0 + elif color_code == 1: + r, g, b = r1, g1, b1 + elif color_code == 2: + r = (2 * r0 + r1) // 3 + g = (2 * g0 + g1) // 3 + b = (2 * b0 + b1) // 3 + elif color_code == 3: + r = (2 * r1 + r0) // 3 + g = (2 * g1 + g0) // 3 + b = (2 * b1 + b0) // 3 + + ret[j].extend([r, g, b, a]) + + return ret + + +def decode_dxt5(data: bytes) -> tuple[bytearray, bytearray, bytearray, bytearray]: + """ + input: one "row" of data (i.e. will produce 4 * width pixels) + """ + + blocks = len(data) // 16 # number of blocks in row + ret = (bytearray(), bytearray(), bytearray(), bytearray()) + + for block_index in range(blocks): + idx = block_index * 16 + block = data[idx : idx + 16] + # Decode next 16-byte block. + a0, a1 = struct.unpack_from("> alphacode_index) & 0x07 + elif alphacode_index == 15: + alphacode = (alphacode2 >> 15) | ((alphacode1 << 1) & 0x06) + else: # alphacode_index >= 18 and alphacode_index <= 45 + alphacode = (alphacode1 >> (alphacode_index - 16)) & 0x07 + + if alphacode == 0: + a = a0 + elif alphacode == 1: + a = a1 + elif a0 > a1: + a = ((8 - alphacode) * a0 + (alphacode - 1) * a1) // 7 + elif alphacode == 6: + a = 0 + elif alphacode == 7: + a = 255 + else: + a = ((6 - alphacode) * a0 + (alphacode - 1) * a1) // 5 + + color_code = (code >> 2 * (4 * j + i)) & 0x03 + + if color_code == 0: + r, g, b = r0, g0, b0 + elif color_code == 1: + r, g, b = r1, g1, b1 + elif color_code == 2: + r = (2 * r0 + r1) // 3 + g = (2 * g0 + g1) // 3 + b = (2 * b0 + b1) // 3 + elif color_code == 3: + r = (2 * r1 + r0) // 3 + g = (2 * g1 + g0) // 3 + b = (2 * b1 + b0) // 3 + + ret[j].extend([r, g, b, a]) + + return ret + + +class BLPFormatError(NotImplementedError): + pass + + +def _accept(prefix: bytes) -> bool: + return prefix.startswith((b"BLP1", b"BLP2")) + + +class BlpImageFile(ImageFile.ImageFile): + """ + Blizzard Mipmap Format + """ + + format = "BLP" + format_description = "Blizzard Mipmap Format" + + def _open(self) -> None: + assert self.fp is not None + self.magic = self.fp.read(4) + if not _accept(self.magic): + msg = f"Bad BLP magic {repr(self.magic)}" + raise BLPFormatError(msg) + + compression = struct.unpack(" tuple[int, int]: + try: + self._read_header() + self._load() + except struct.error as e: + msg = "Truncated BLP file" + raise OSError(msg) from e + return -1, 0 + + @abc.abstractmethod + def _load(self) -> None: + pass + + def _read_header(self) -> None: + self._offsets = struct.unpack("<16I", self._safe_read(16 * 4)) + self._lengths = struct.unpack("<16I", self._safe_read(16 * 4)) + + def _safe_read(self, length: int) -> bytes: + assert self.fd is not None + return ImageFile._safe_read(self.fd, length) + + def _read_palette(self) -> list[tuple[int, int, int, int]]: + ret = [] + for i in range(256): + try: + b, g, r, a = struct.unpack("<4B", self._safe_read(4)) + except struct.error: + break + ret.append((b, g, r, a)) + return ret + + def _read_bgra( + self, palette: list[tuple[int, int, int, int]], alpha: bool + ) -> bytearray: + data = bytearray() + _data = BytesIO(self._safe_read(self._lengths[0])) + while True: + try: + (offset,) = struct.unpack(" None: + self._compression, self._encoding, alpha = self.args + + if self._compression == Format.JPEG: + self._decode_jpeg_stream() + + elif self._compression == 1: + if self._encoding in (4, 5): + palette = self._read_palette() + data = self._read_bgra(palette, alpha) + self.set_as_raw(data) + else: + msg = f"Unsupported BLP encoding {repr(self._encoding)}" + raise BLPFormatError(msg) + else: + msg = f"Unsupported BLP compression {repr(self._encoding)}" + raise BLPFormatError(msg) + + def _decode_jpeg_stream(self) -> None: + from .JpegImagePlugin import JpegImageFile + + (jpeg_header_size,) = struct.unpack(" None: + self._compression, self._encoding, alpha, self._alpha_encoding = self.args + + palette = self._read_palette() + + assert self.fd is not None + self.fd.seek(self._offsets[0]) + + if self._compression == 1: + # Uncompressed or DirectX compression + + if self._encoding == Encoding.UNCOMPRESSED: + data = self._read_bgra(palette, alpha) + + elif self._encoding == Encoding.DXT: + data = bytearray() + if self._alpha_encoding == AlphaEncoding.DXT1: + linesize = (self.state.xsize + 3) // 4 * 8 + for yb in range((self.state.ysize + 3) // 4): + for d in decode_dxt1(self._safe_read(linesize), alpha): + data += d + + elif self._alpha_encoding == AlphaEncoding.DXT3: + linesize = (self.state.xsize + 3) // 4 * 16 + for yb in range((self.state.ysize + 3) // 4): + for d in decode_dxt3(self._safe_read(linesize)): + data += d + + elif self._alpha_encoding == AlphaEncoding.DXT5: + linesize = (self.state.xsize + 3) // 4 * 16 + for yb in range((self.state.ysize + 3) // 4): + for d in decode_dxt5(self._safe_read(linesize)): + data += d + else: + msg = f"Unsupported alpha encoding {repr(self._alpha_encoding)}" + raise BLPFormatError(msg) + else: + msg = f"Unknown BLP encoding {repr(self._encoding)}" + raise BLPFormatError(msg) + + else: + msg = f"Unknown BLP compression {repr(self._compression)}" + raise BLPFormatError(msg) + + self.set_as_raw(data) + + +class BLPEncoder(ImageFile.PyEncoder): + _pushes_fd = True + + def _write_palette(self) -> bytes: + data = b"" + assert self.im is not None + palette = self.im.getpalette("RGBA", "RGBA") + for i in range(len(palette) // 4): + r, g, b, a = palette[i * 4 : (i + 1) * 4] + data += struct.pack("<4B", b, g, r, a) + while len(data) < 256 * 4: + data += b"\x00" * 4 + return data + + def encode(self, bufsize: int) -> tuple[int, int, bytes]: + palette_data = self._write_palette() + + offset = 20 + 16 * 4 * 2 + len(palette_data) + data = struct.pack("<16I", offset, *((0,) * 15)) + + assert self.im is not None + w, h = self.im.size + data += struct.pack("<16I", w * h, *((0,) * 15)) + + data += palette_data + + for y in range(h): + for x in range(w): + data += struct.pack(" None: + if im.mode != "P": + msg = "Unsupported BLP image mode" + raise ValueError(msg) + + magic = b"BLP1" if im.encoderinfo.get("blp_version") == "BLP1" else b"BLP2" + fp.write(magic) + + assert im.palette is not None + fp.write(struct.pack(" mode, rawmode + 1: ("P", "P;1"), + 4: ("P", "P;4"), + 8: ("P", "P"), + 16: ("RGB", "BGR;15"), + 24: ("RGB", "BGR"), + 32: ("RGB", "BGRX"), +} + +USE_RAW_ALPHA = False + + +def _accept(prefix: bytes) -> bool: + return prefix.startswith(b"BM") + + +def _dib_accept(prefix: bytes) -> bool: + return i32(prefix) in [12, 40, 52, 56, 64, 108, 124] + + +# ============================================================================= +# Image plugin for the Windows BMP format. +# ============================================================================= +class BmpImageFile(ImageFile.ImageFile): + """Image plugin for the Windows Bitmap format (BMP)""" + + # ------------------------------------------------------------- Description + format_description = "Windows Bitmap" + format = "BMP" + + # -------------------------------------------------- BMP Compression values + COMPRESSIONS = {"RAW": 0, "RLE8": 1, "RLE4": 2, "BITFIELDS": 3, "JPEG": 4, "PNG": 5} + for k, v in COMPRESSIONS.items(): + vars()[k] = v + + def _bitmap(self, header: int = 0, offset: int = 0) -> None: + """Read relevant info about the BMP""" + assert self.fp is not None + read, seek = self.fp.read, self.fp.seek + if header: + seek(header) + # read bmp header size @offset 14 (this is part of the header size) + file_info: dict[str, bool | int | tuple[int, ...]] = { + "header_size": i32(read(4)), + "direction": -1, + } + + # -------------------- If requested, read header at a specific position + # read the rest of the bmp header, without its size + assert isinstance(file_info["header_size"], int) + header_data = ImageFile._safe_read(self.fp, file_info["header_size"] - 4) + + # ------------------------------- Windows Bitmap v2, IBM OS/2 Bitmap v1 + # ----- This format has different offsets because of width/height types + # 12: BITMAPCOREHEADER/OS21XBITMAPHEADER + if file_info["header_size"] == 12: + file_info["width"] = i16(header_data, 0) + file_info["height"] = i16(header_data, 2) + file_info["planes"] = i16(header_data, 4) + file_info["bits"] = i16(header_data, 6) + file_info["compression"] = self.COMPRESSIONS["RAW"] + file_info["palette_padding"] = 3 + + # --------------------------------------------- Windows Bitmap v3 to v5 + # 40: BITMAPINFOHEADER + # 52: BITMAPV2HEADER + # 56: BITMAPV3HEADER + # 64: BITMAPCOREHEADER2/OS22XBITMAPHEADER + # 108: BITMAPV4HEADER + # 124: BITMAPV5HEADER + elif file_info["header_size"] in (40, 52, 56, 64, 108, 124): + file_info["y_flip"] = header_data[7] == 0xFF + file_info["direction"] = 1 if file_info["y_flip"] else -1 + file_info["width"] = i32(header_data, 0) + file_info["height"] = ( + i32(header_data, 4) + if not file_info["y_flip"] + else 2**32 - i32(header_data, 4) + ) + file_info["planes"] = i16(header_data, 8) + file_info["bits"] = i16(header_data, 10) + file_info["compression"] = i32(header_data, 12) + # byte size of pixel data + file_info["data_size"] = i32(header_data, 16) + file_info["pixels_per_meter"] = ( + i32(header_data, 20), + i32(header_data, 24), + ) + file_info["colors"] = i32(header_data, 28) + file_info["palette_padding"] = 4 + assert isinstance(file_info["pixels_per_meter"], tuple) + self.info["dpi"] = tuple(x / 39.3701 for x in file_info["pixels_per_meter"]) + if file_info["compression"] == self.COMPRESSIONS["BITFIELDS"]: + masks = ["r_mask", "g_mask", "b_mask"] + if len(header_data) >= 48: + if len(header_data) >= 52: + masks.append("a_mask") + else: + file_info["a_mask"] = 0x0 + for idx, mask in enumerate(masks): + file_info[mask] = i32(header_data, 36 + idx * 4) + else: + # 40 byte headers only have the three components in the + # bitfields masks, ref: + # https://msdn.microsoft.com/en-us/library/windows/desktop/dd183376(v=vs.85).aspx + # See also + # https://github.com/python-pillow/Pillow/issues/1293 + # There is a 4th component in the RGBQuad, in the alpha + # location, but it is listed as a reserved component, + # and it is not generally an alpha channel + file_info["a_mask"] = 0x0 + for mask in masks: + file_info[mask] = i32(read(4)) + assert isinstance(file_info["r_mask"], int) + assert isinstance(file_info["g_mask"], int) + assert isinstance(file_info["b_mask"], int) + assert isinstance(file_info["a_mask"], int) + file_info["rgb_mask"] = ( + file_info["r_mask"], + file_info["g_mask"], + file_info["b_mask"], + ) + file_info["rgba_mask"] = ( + file_info["r_mask"], + file_info["g_mask"], + file_info["b_mask"], + file_info["a_mask"], + ) + else: + msg = f"Unsupported BMP header type ({file_info['header_size']})" + raise OSError(msg) + + # ------------------ Special case : header is reported 40, which + # ---------------------- is shorter than real size for bpp >= 16 + assert isinstance(file_info["width"], int) + assert isinstance(file_info["height"], int) + self._size = file_info["width"], file_info["height"] + + # ------- If color count was not found in the header, compute from bits + assert isinstance(file_info["bits"], int) + if not file_info.get("colors", 0): + file_info["colors"] = 1 << file_info["bits"] + assert isinstance(file_info["palette_padding"], int) + assert isinstance(file_info["colors"], int) + if offset == 14 + file_info["header_size"] and file_info["bits"] <= 8: + offset += file_info["palette_padding"] * file_info["colors"] + + # ---------------------- Check bit depth for unusual unsupported values + self._mode, raw_mode = BIT2MODE.get(file_info["bits"], ("", "")) + if not self.mode: + msg = f"Unsupported BMP pixel depth ({file_info['bits']})" + raise OSError(msg) + + # ---------------- Process BMP with Bitfields compression (not palette) + decoder_name = "raw" + if file_info["compression"] == self.COMPRESSIONS["BITFIELDS"]: + SUPPORTED: dict[int, list[tuple[int, ...]]] = { + 32: [ + (0xFF0000, 0xFF00, 0xFF, 0x0), + (0xFF000000, 0xFF0000, 0xFF00, 0x0), + (0xFF000000, 0xFF00, 0xFF, 0x0), + (0xFF000000, 0xFF0000, 0xFF00, 0xFF), + (0xFF, 0xFF00, 0xFF0000, 0xFF000000), + (0xFF0000, 0xFF00, 0xFF, 0xFF000000), + (0xFF000000, 0xFF00, 0xFF, 0xFF0000), + (0x0, 0x0, 0x0, 0x0), + ], + 24: [(0xFF0000, 0xFF00, 0xFF)], + 16: [(0xF800, 0x7E0, 0x1F), (0x7C00, 0x3E0, 0x1F)], + } + MASK_MODES = { + (32, (0xFF0000, 0xFF00, 0xFF, 0x0)): "BGRX", + (32, (0xFF000000, 0xFF0000, 0xFF00, 0x0)): "XBGR", + (32, (0xFF000000, 0xFF00, 0xFF, 0x0)): "BGXR", + (32, (0xFF000000, 0xFF0000, 0xFF00, 0xFF)): "ABGR", + (32, (0xFF, 0xFF00, 0xFF0000, 0xFF000000)): "RGBA", + (32, (0xFF0000, 0xFF00, 0xFF, 0xFF000000)): "BGRA", + (32, (0xFF000000, 0xFF00, 0xFF, 0xFF0000)): "BGAR", + (32, (0x0, 0x0, 0x0, 0x0)): "BGRA", + (24, (0xFF0000, 0xFF00, 0xFF)): "BGR", + (16, (0xF800, 0x7E0, 0x1F)): "BGR;16", + (16, (0x7C00, 0x3E0, 0x1F)): "BGR;15", + } + if file_info["bits"] in SUPPORTED: + if ( + file_info["bits"] == 32 + and file_info["rgba_mask"] in SUPPORTED[file_info["bits"]] + ): + assert isinstance(file_info["rgba_mask"], tuple) + raw_mode = MASK_MODES[(file_info["bits"], file_info["rgba_mask"])] + self._mode = "RGBA" if "A" in raw_mode else self.mode + elif ( + file_info["bits"] in (24, 16) + and file_info["rgb_mask"] in SUPPORTED[file_info["bits"]] + ): + assert isinstance(file_info["rgb_mask"], tuple) + raw_mode = MASK_MODES[(file_info["bits"], file_info["rgb_mask"])] + else: + msg = "Unsupported BMP bitfields layout" + raise OSError(msg) + else: + msg = "Unsupported BMP bitfields layout" + raise OSError(msg) + elif file_info["compression"] == self.COMPRESSIONS["RAW"]: + if file_info["bits"] == 32 and ( + header == 22 or USE_RAW_ALPHA # 32-bit .cur offset + ): + raw_mode, self._mode = "BGRA", "RGBA" + elif file_info["compression"] in ( + self.COMPRESSIONS["RLE8"], + self.COMPRESSIONS["RLE4"], + ): + decoder_name = "bmp_rle" + else: + msg = f"Unsupported BMP compression ({file_info['compression']})" + raise OSError(msg) + + # --------------- Once the header is processed, process the palette/LUT + if self.mode == "P": # Paletted for 1, 4 and 8 bit images + # ---------------------------------------------------- 1-bit images + if not (0 < file_info["colors"] <= 65536): + msg = f"Unsupported BMP Palette size ({file_info['colors']})" + raise OSError(msg) + else: + padding = file_info["palette_padding"] + palette = read(padding * file_info["colors"]) + grayscale = True + indices = ( + (0, 255) + if file_info["colors"] == 2 + else list(range(file_info["colors"])) + ) + + # ----------------- Check if grayscale and ignore palette if so + for ind, val in enumerate(indices): + rgb = palette[ind * padding : ind * padding + 3] + if rgb != o8(val) * 3: + grayscale = False + + # ------- If all colors are gray, white or black, ditch palette + if grayscale: + self._mode = "1" if file_info["colors"] == 2 else "L" + raw_mode = self.mode + else: + self._mode = "P" + self.palette = ImagePalette.raw( + "BGRX" if padding == 4 else "BGR", palette + ) + + # ---------------------------- Finally set the tile data for the plugin + self.info["compression"] = file_info["compression"] + args: list[Any] = [raw_mode] + if decoder_name == "bmp_rle": + args.append(file_info["compression"] == self.COMPRESSIONS["RLE4"]) + else: + assert isinstance(file_info["width"], int) + args.append(((file_info["width"] * file_info["bits"] + 31) >> 3) & (~3)) + args.append(file_info["direction"]) + self.tile = [ + ImageFile._Tile( + decoder_name, + (0, 0, file_info["width"], file_info["height"]), + offset or self.fp.tell(), + tuple(args), + ) + ] + + def _open(self) -> None: + """Open file, check magic number and read header""" + # read 14 bytes: magic number, filesize, reserved, header final offset + assert self.fp is not None + head_data = self.fp.read(14) + # choke if the file does not have the required magic bytes + if not _accept(head_data): + msg = "Not a BMP file" + raise SyntaxError(msg) + # read the start position of the BMP image data (u32) + offset = i32(head_data, 10) + # load bitmap information (offset=raster info) + self._bitmap(offset=offset) + + +class BmpRleDecoder(ImageFile.PyDecoder): + _pulls_fd = True + + def decode(self, buffer: bytes | Image.SupportsArrayInterface) -> tuple[int, int]: + assert self.fd is not None + rle4 = self.args[1] + data = bytearray() + x = 0 + dest_length = self.state.xsize * self.state.ysize + while len(data) < dest_length: + pixels = self.fd.read(1) + byte = self.fd.read(1) + if not pixels or not byte: + break + num_pixels = pixels[0] + if num_pixels: + # encoded mode + if x + num_pixels > self.state.xsize: + # Too much data for row + num_pixels = max(0, self.state.xsize - x) + if rle4: + first_pixel = o8(byte[0] >> 4) + second_pixel = o8(byte[0] & 0x0F) + for index in range(num_pixels): + if index % 2 == 0: + data += first_pixel + else: + data += second_pixel + else: + data += byte * num_pixels + x += num_pixels + else: + if byte[0] == 0: + # end of line + while len(data) % self.state.xsize != 0: + data += b"\x00" + x = 0 + elif byte[0] == 1: + # end of bitmap + break + elif byte[0] == 2: + # delta + bytes_read = self.fd.read(2) + if len(bytes_read) < 2: + break + right, up = bytes_read + data += b"\x00" * (right + up * self.state.xsize) + x = len(data) % self.state.xsize + else: + # absolute mode + if rle4: + # 2 pixels per byte + byte_count = byte[0] // 2 + bytes_read = self.fd.read(byte_count) + for byte_read in bytes_read: + data += o8(byte_read >> 4) + data += o8(byte_read & 0x0F) + else: + byte_count = byte[0] + bytes_read = self.fd.read(byte_count) + data += bytes_read + if len(bytes_read) < byte_count: + break + x += byte[0] + + # align to 16-bit word boundary + if self.fd.tell() % 2 != 0: + self.fd.seek(1, os.SEEK_CUR) + rawmode = "L" if self.mode == "L" else "P" + self.set_as_raw(bytes(data), rawmode, (0, self.args[-1])) + return -1, 0 + + +# ============================================================================= +# Image plugin for the DIB format (BMP alias) +# ============================================================================= +class DibImageFile(BmpImageFile): + format = "DIB" + format_description = "Windows Bitmap" + + def _open(self) -> None: + self._bitmap() + + +# +# -------------------------------------------------------------------- +# Write BMP file + + +SAVE = { + "1": ("1", 1, 2), + "L": ("L", 8, 256), + "P": ("P", 8, 256), + "RGB": ("BGR", 24, 0), + "RGBA": ("BGRA", 32, 0), +} + + +def _dib_save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + _save(im, fp, filename, False) + + +def _save( + im: Image.Image, fp: IO[bytes], filename: str | bytes, bitmap_header: bool = True +) -> None: + try: + rawmode, bits, colors = SAVE[im.mode] + except KeyError as e: + msg = f"cannot write mode {im.mode} as BMP" + raise OSError(msg) from e + + info = im.encoderinfo + + dpi = info.get("dpi", (96, 96)) + + # 1 meter == 39.3701 inches + ppm = tuple(int(x * 39.3701 + 0.5) for x in dpi) + + stride = ((im.size[0] * bits + 7) // 8 + 3) & (~3) + header = 40 # or 64 for OS/2 version 2 + image = stride * im.size[1] + + if im.mode == "1": + palette = b"".join(o8(i) * 3 + b"\x00" for i in (0, 255)) + elif im.mode == "L": + palette = b"".join(o8(i) * 3 + b"\x00" for i in range(256)) + elif im.mode == "P": + palette = im.im.getpalette("RGB", "BGRX") + colors = len(palette) // 4 + else: + palette = None + + # bitmap header + if bitmap_header: + offset = 14 + header + colors * 4 + file_size = offset + image + if file_size > 2**32 - 1: + msg = "File size is too large for the BMP format" + raise ValueError(msg) + fp.write( + b"BM" # file type (magic) + + o32(file_size) # file size + + o32(0) # reserved + + o32(offset) # image data offset + ) + + # bitmap info header + fp.write( + o32(header) # info header size + + o32(im.size[0]) # width + + o32(im.size[1]) # height + + o16(1) # planes + + o16(bits) # depth + + o32(0) # compression (0=uncompressed) + + o32(image) # size of bitmap + + o32(ppm[0]) # resolution + + o32(ppm[1]) # resolution + + o32(colors) # colors used + + o32(colors) # colors important + ) + + fp.write(b"\0" * (header - 40)) # padding (for OS/2 format) + + if palette: + fp.write(palette) + + ImageFile._save( + im, fp, [ImageFile._Tile("raw", (0, 0) + im.size, 0, (rawmode, stride, -1))] + ) + + +# +# -------------------------------------------------------------------- +# Registry + + +Image.register_open(BmpImageFile.format, BmpImageFile, _accept) +Image.register_save(BmpImageFile.format, _save) + +Image.register_extension(BmpImageFile.format, ".bmp") + +Image.register_mime(BmpImageFile.format, "image/bmp") + +Image.register_decoder("bmp_rle", BmpRleDecoder) + +Image.register_open(DibImageFile.format, DibImageFile, _dib_accept) +Image.register_save(DibImageFile.format, _dib_save) + +Image.register_extension(DibImageFile.format, ".dib") + +Image.register_mime(DibImageFile.format, "image/bmp") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/BufrStubImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/BufrStubImagePlugin.py new file mode 100644 index 0000000..d82c4c7 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/BufrStubImagePlugin.py @@ -0,0 +1,72 @@ +# +# The Python Imaging Library +# $Id$ +# +# BUFR stub adapter +# +# Copyright (c) 1996-2003 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import os +from typing import IO + +from . import Image, ImageFile + +_handler = None + + +def register_handler(handler: ImageFile.StubHandler | None) -> None: + """ + Install application-specific BUFR image handler. + + :param handler: Handler object. + """ + global _handler + _handler = handler + + +# -------------------------------------------------------------------- +# Image adapter + + +def _accept(prefix: bytes) -> bool: + return prefix.startswith((b"BUFR", b"ZCZC")) + + +class BufrStubImageFile(ImageFile.StubImageFile): + format = "BUFR" + format_description = "BUFR" + + def _open(self) -> None: + assert self.fp is not None + if not _accept(self.fp.read(4)): + msg = "Not a BUFR file" + raise SyntaxError(msg) + + self.fp.seek(-4, os.SEEK_CUR) + + # make something up + self._mode = "F" + self._size = 1, 1 + + def _load(self) -> ImageFile.StubHandler | None: + return _handler + + +def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + if _handler is None or not hasattr(_handler, "save"): + msg = "BUFR save handler not installed" + raise OSError(msg) + _handler.save(im, fp, filename) + + +# -------------------------------------------------------------------- +# Registry + +Image.register_open(BufrStubImageFile.format, BufrStubImageFile, _accept) +Image.register_save(BufrStubImageFile.format, _save) + +Image.register_extension(BufrStubImageFile.format, ".bufr") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/ContainerIO.py b/Python/venv/lib/python3.12/site-packages/PIL/ContainerIO.py new file mode 100644 index 0000000..ec9e66c --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/ContainerIO.py @@ -0,0 +1,173 @@ +# +# The Python Imaging Library. +# $Id$ +# +# a class to read from a container file +# +# History: +# 1995-06-18 fl Created +# 1995-09-07 fl Added readline(), readlines() +# +# Copyright (c) 1997-2001 by Secret Labs AB +# Copyright (c) 1995 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import io +from collections.abc import Iterable +from typing import IO, AnyStr, NoReturn + + +class ContainerIO(IO[AnyStr]): + """ + A file object that provides read access to a part of an existing + file (for example a TAR file). + """ + + def __init__(self, file: IO[AnyStr], offset: int, length: int) -> None: + """ + Create file object. + + :param file: Existing file. + :param offset: Start of region, in bytes. + :param length: Size of region, in bytes. + """ + self.fh: IO[AnyStr] = file + self.pos = 0 + self.offset = offset + self.length = length + self.fh.seek(offset) + + ## + # Always false. + + def isatty(self) -> bool: + return False + + def seekable(self) -> bool: + return True + + def seek(self, offset: int, mode: int = io.SEEK_SET) -> int: + """ + Move file pointer. + + :param offset: Offset in bytes. + :param mode: Starting position. Use 0 for beginning of region, 1 + for current offset, and 2 for end of region. You cannot move + the pointer outside the defined region. + :returns: Offset from start of region, in bytes. + """ + if mode == 1: + self.pos = self.pos + offset + elif mode == 2: + self.pos = self.length + offset + else: + self.pos = offset + # clamp + self.pos = max(0, min(self.pos, self.length)) + self.fh.seek(self.offset + self.pos) + return self.pos + + def tell(self) -> int: + """ + Get current file pointer. + + :returns: Offset from start of region, in bytes. + """ + return self.pos + + def readable(self) -> bool: + return True + + def read(self, n: int = -1) -> AnyStr: + """ + Read data. + + :param n: Number of bytes to read. If omitted, zero or negative, + read until end of region. + :returns: An 8-bit string. + """ + if n > 0: + n = min(n, self.length - self.pos) + else: + n = self.length - self.pos + if n <= 0: # EOF + return b"" if "b" in self.fh.mode else "" # type: ignore[return-value] + self.pos = self.pos + n + return self.fh.read(n) + + def readline(self, n: int = -1) -> AnyStr: + """ + Read a line of text. + + :param n: Number of bytes to read. If omitted, zero or negative, + read until end of line. + :returns: An 8-bit string. + """ + s: AnyStr = b"" if "b" in self.fh.mode else "" # type: ignore[assignment] + newline_character = b"\n" if "b" in self.fh.mode else "\n" + while True: + c = self.read(1) + if not c: + break + s = s + c + if c == newline_character or len(s) == n: + break + return s + + def readlines(self, n: int | None = -1) -> list[AnyStr]: + """ + Read multiple lines of text. + + :param n: Number of lines to read. If omitted, zero, negative or None, + read until end of region. + :returns: A list of 8-bit strings. + """ + lines = [] + while True: + s = self.readline() + if not s: + break + lines.append(s) + if len(lines) == n: + break + return lines + + def writable(self) -> bool: + return False + + def write(self, b: AnyStr) -> NoReturn: + raise NotImplementedError() + + def writelines(self, lines: Iterable[AnyStr]) -> NoReturn: + raise NotImplementedError() + + def truncate(self, size: int | None = None) -> int: + raise NotImplementedError() + + def __enter__(self) -> ContainerIO[AnyStr]: + return self + + def __exit__(self, *args: object) -> None: + self.close() + + def __iter__(self) -> ContainerIO[AnyStr]: + return self + + def __next__(self) -> AnyStr: + line = self.readline() + if not line: + msg = "end of region" + raise StopIteration(msg) + return line + + def fileno(self) -> int: + return self.fh.fileno() + + def flush(self) -> None: + self.fh.flush() + + def close(self) -> None: + self.fh.close() diff --git a/Python/venv/lib/python3.12/site-packages/PIL/CurImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/CurImagePlugin.py new file mode 100644 index 0000000..9c188e0 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/CurImagePlugin.py @@ -0,0 +1,75 @@ +# +# The Python Imaging Library. +# $Id$ +# +# Windows Cursor support for PIL +# +# notes: +# uses BmpImagePlugin.py to read the bitmap data. +# +# history: +# 96-05-27 fl Created +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1996. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +from . import BmpImagePlugin, Image +from ._binary import i16le as i16 +from ._binary import i32le as i32 + +# +# -------------------------------------------------------------------- + + +def _accept(prefix: bytes) -> bool: + return prefix.startswith(b"\0\0\2\0") + + +## +# Image plugin for Windows Cursor files. + + +class CurImageFile(BmpImagePlugin.BmpImageFile): + format = "CUR" + format_description = "Windows Cursor" + + def _open(self) -> None: + assert self.fp is not None + offset = self.fp.tell() + + # check magic + s = self.fp.read(6) + if not _accept(s): + msg = "not a CUR file" + raise SyntaxError(msg) + + # pick the largest cursor in the file + m = b"" + for i in range(i16(s, 4)): + s = self.fp.read(16) + if not m: + m = s + elif s[0] > m[0] and s[1] > m[1]: + m = s + if not m: + msg = "No cursors were found" + raise TypeError(msg) + + # load as bitmap + self._bitmap(i32(m, 12) + offset) + + # patch up the bitmap height + self._size = self.size[0], self.size[1] // 2 + self.tile = [self.tile[0]._replace(extents=(0, 0) + self.size)] + + +# +# -------------------------------------------------------------------- + +Image.register_open(CurImageFile.format, CurImageFile, _accept) + +Image.register_extension(CurImageFile.format, ".cur") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/DcxImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/DcxImagePlugin.py new file mode 100644 index 0000000..d3f456d --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/DcxImagePlugin.py @@ -0,0 +1,84 @@ +# +# The Python Imaging Library. +# $Id$ +# +# DCX file handling +# +# DCX is a container file format defined by Intel, commonly used +# for fax applications. Each DCX file consists of a directory +# (a list of file offsets) followed by a set of (usually 1-bit) +# PCX files. +# +# History: +# 1995-09-09 fl Created +# 1996-03-20 fl Properly derived from PcxImageFile. +# 1998-07-15 fl Renamed offset attribute to avoid name clash +# 2002-07-30 fl Fixed file handling +# +# Copyright (c) 1997-98 by Secret Labs AB. +# Copyright (c) 1995-96 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +from . import Image +from ._binary import i32le as i32 +from ._util import DeferredError +from .PcxImagePlugin import PcxImageFile + +MAGIC = 0x3ADE68B1 # QUIZ: what's this value, then? + + +def _accept(prefix: bytes) -> bool: + return len(prefix) >= 4 and i32(prefix) == MAGIC + + +## +# Image plugin for the Intel DCX format. + + +class DcxImageFile(PcxImageFile): + format = "DCX" + format_description = "Intel DCX" + _close_exclusive_fp_after_loading = False + + def _open(self) -> None: + # Header + assert self.fp is not None + s = self.fp.read(4) + if not _accept(s): + msg = "not a DCX file" + raise SyntaxError(msg) + + # Component directory + self._offset = [] + for i in range(1024): + offset = i32(self.fp.read(4)) + if not offset: + break + self._offset.append(offset) + + self._fp = self.fp + self.frame = -1 + self.n_frames = len(self._offset) + self.is_animated = self.n_frames > 1 + self.seek(0) + + def seek(self, frame: int) -> None: + if not self._seek_check(frame): + return + if isinstance(self._fp, DeferredError): + raise self._fp.ex + self.frame = frame + self.fp = self._fp + self.fp.seek(self._offset[frame]) + PcxImageFile._open(self) + + def tell(self) -> int: + return self.frame + + +Image.register_open(DcxImageFile.format, DcxImageFile, _accept) + +Image.register_extension(DcxImageFile.format, ".dcx") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/DdsImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/DdsImagePlugin.py new file mode 100644 index 0000000..312f602 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/DdsImagePlugin.py @@ -0,0 +1,625 @@ +""" +A Pillow plugin for .dds files (S3TC-compressed aka DXTC) +Jerome Leclanche + +Documentation: +https://web.archive.org/web/20170802060935/http://oss.sgi.com/projects/ogl-sample/registry/EXT/texture_compression_s3tc.txt + +The contents of this file are hereby released in the public domain (CC0) +Full text of the CC0 license: +https://creativecommons.org/publicdomain/zero/1.0/ +""" + +from __future__ import annotations + +import struct +import sys +from enum import IntEnum, IntFlag +from typing import IO + +from . import Image, ImageFile, ImagePalette +from ._binary import i32le as i32 +from ._binary import o8 +from ._binary import o32le as o32 + +# Magic ("DDS ") +DDS_MAGIC = 0x20534444 + + +# DDS flags +class DDSD(IntFlag): + CAPS = 0x1 + HEIGHT = 0x2 + WIDTH = 0x4 + PITCH = 0x8 + PIXELFORMAT = 0x1000 + MIPMAPCOUNT = 0x20000 + LINEARSIZE = 0x80000 + DEPTH = 0x800000 + + +# DDS caps +class DDSCAPS(IntFlag): + COMPLEX = 0x8 + TEXTURE = 0x1000 + MIPMAP = 0x400000 + + +class DDSCAPS2(IntFlag): + CUBEMAP = 0x200 + CUBEMAP_POSITIVEX = 0x400 + CUBEMAP_NEGATIVEX = 0x800 + CUBEMAP_POSITIVEY = 0x1000 + CUBEMAP_NEGATIVEY = 0x2000 + CUBEMAP_POSITIVEZ = 0x4000 + CUBEMAP_NEGATIVEZ = 0x8000 + VOLUME = 0x200000 + + +# Pixel Format +class DDPF(IntFlag): + ALPHAPIXELS = 0x1 + ALPHA = 0x2 + FOURCC = 0x4 + PALETTEINDEXED8 = 0x20 + RGB = 0x40 + LUMINANCE = 0x20000 + + +# dxgiformat.h +class DXGI_FORMAT(IntEnum): + UNKNOWN = 0 + R32G32B32A32_TYPELESS = 1 + R32G32B32A32_FLOAT = 2 + R32G32B32A32_UINT = 3 + R32G32B32A32_SINT = 4 + R32G32B32_TYPELESS = 5 + R32G32B32_FLOAT = 6 + R32G32B32_UINT = 7 + R32G32B32_SINT = 8 + R16G16B16A16_TYPELESS = 9 + R16G16B16A16_FLOAT = 10 + R16G16B16A16_UNORM = 11 + R16G16B16A16_UINT = 12 + R16G16B16A16_SNORM = 13 + R16G16B16A16_SINT = 14 + R32G32_TYPELESS = 15 + R32G32_FLOAT = 16 + R32G32_UINT = 17 + R32G32_SINT = 18 + R32G8X24_TYPELESS = 19 + D32_FLOAT_S8X24_UINT = 20 + R32_FLOAT_X8X24_TYPELESS = 21 + X32_TYPELESS_G8X24_UINT = 22 + R10G10B10A2_TYPELESS = 23 + R10G10B10A2_UNORM = 24 + R10G10B10A2_UINT = 25 + R11G11B10_FLOAT = 26 + R8G8B8A8_TYPELESS = 27 + R8G8B8A8_UNORM = 28 + R8G8B8A8_UNORM_SRGB = 29 + R8G8B8A8_UINT = 30 + R8G8B8A8_SNORM = 31 + R8G8B8A8_SINT = 32 + R16G16_TYPELESS = 33 + R16G16_FLOAT = 34 + R16G16_UNORM = 35 + R16G16_UINT = 36 + R16G16_SNORM = 37 + R16G16_SINT = 38 + R32_TYPELESS = 39 + D32_FLOAT = 40 + R32_FLOAT = 41 + R32_UINT = 42 + R32_SINT = 43 + R24G8_TYPELESS = 44 + D24_UNORM_S8_UINT = 45 + R24_UNORM_X8_TYPELESS = 46 + X24_TYPELESS_G8_UINT = 47 + R8G8_TYPELESS = 48 + R8G8_UNORM = 49 + R8G8_UINT = 50 + R8G8_SNORM = 51 + R8G8_SINT = 52 + R16_TYPELESS = 53 + R16_FLOAT = 54 + D16_UNORM = 55 + R16_UNORM = 56 + R16_UINT = 57 + R16_SNORM = 58 + R16_SINT = 59 + R8_TYPELESS = 60 + R8_UNORM = 61 + R8_UINT = 62 + R8_SNORM = 63 + R8_SINT = 64 + A8_UNORM = 65 + R1_UNORM = 66 + R9G9B9E5_SHAREDEXP = 67 + R8G8_B8G8_UNORM = 68 + G8R8_G8B8_UNORM = 69 + BC1_TYPELESS = 70 + BC1_UNORM = 71 + BC1_UNORM_SRGB = 72 + BC2_TYPELESS = 73 + BC2_UNORM = 74 + BC2_UNORM_SRGB = 75 + BC3_TYPELESS = 76 + BC3_UNORM = 77 + BC3_UNORM_SRGB = 78 + BC4_TYPELESS = 79 + BC4_UNORM = 80 + BC4_SNORM = 81 + BC5_TYPELESS = 82 + BC5_UNORM = 83 + BC5_SNORM = 84 + B5G6R5_UNORM = 85 + B5G5R5A1_UNORM = 86 + B8G8R8A8_UNORM = 87 + B8G8R8X8_UNORM = 88 + R10G10B10_XR_BIAS_A2_UNORM = 89 + B8G8R8A8_TYPELESS = 90 + B8G8R8A8_UNORM_SRGB = 91 + B8G8R8X8_TYPELESS = 92 + B8G8R8X8_UNORM_SRGB = 93 + BC6H_TYPELESS = 94 + BC6H_UF16 = 95 + BC6H_SF16 = 96 + BC7_TYPELESS = 97 + BC7_UNORM = 98 + BC7_UNORM_SRGB = 99 + AYUV = 100 + Y410 = 101 + Y416 = 102 + NV12 = 103 + P010 = 104 + P016 = 105 + OPAQUE_420 = 106 + YUY2 = 107 + Y210 = 108 + Y216 = 109 + NV11 = 110 + AI44 = 111 + IA44 = 112 + P8 = 113 + A8P8 = 114 + B4G4R4A4_UNORM = 115 + P208 = 130 + V208 = 131 + V408 = 132 + SAMPLER_FEEDBACK_MIN_MIP_OPAQUE = 189 + SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE = 190 + + +class D3DFMT(IntEnum): + UNKNOWN = 0 + R8G8B8 = 20 + A8R8G8B8 = 21 + X8R8G8B8 = 22 + R5G6B5 = 23 + X1R5G5B5 = 24 + A1R5G5B5 = 25 + A4R4G4B4 = 26 + R3G3B2 = 27 + A8 = 28 + A8R3G3B2 = 29 + X4R4G4B4 = 30 + A2B10G10R10 = 31 + A8B8G8R8 = 32 + X8B8G8R8 = 33 + G16R16 = 34 + A2R10G10B10 = 35 + A16B16G16R16 = 36 + A8P8 = 40 + P8 = 41 + L8 = 50 + A8L8 = 51 + A4L4 = 52 + V8U8 = 60 + L6V5U5 = 61 + X8L8V8U8 = 62 + Q8W8V8U8 = 63 + V16U16 = 64 + A2W10V10U10 = 67 + D16_LOCKABLE = 70 + D32 = 71 + D15S1 = 73 + D24S8 = 75 + D24X8 = 77 + D24X4S4 = 79 + D16 = 80 + D32F_LOCKABLE = 82 + D24FS8 = 83 + D32_LOCKABLE = 84 + S8_LOCKABLE = 85 + L16 = 81 + VERTEXDATA = 100 + INDEX16 = 101 + INDEX32 = 102 + Q16W16V16U16 = 110 + R16F = 111 + G16R16F = 112 + A16B16G16R16F = 113 + R32F = 114 + G32R32F = 115 + A32B32G32R32F = 116 + CxV8U8 = 117 + A1 = 118 + A2B10G10R10_XR_BIAS = 119 + BINARYBUFFER = 199 + + UYVY = i32(b"UYVY") + R8G8_B8G8 = i32(b"RGBG") + YUY2 = i32(b"YUY2") + G8R8_G8B8 = i32(b"GRGB") + DXT1 = i32(b"DXT1") + DXT2 = i32(b"DXT2") + DXT3 = i32(b"DXT3") + DXT4 = i32(b"DXT4") + DXT5 = i32(b"DXT5") + DX10 = i32(b"DX10") + BC4S = i32(b"BC4S") + BC4U = i32(b"BC4U") + BC5S = i32(b"BC5S") + BC5U = i32(b"BC5U") + ATI1 = i32(b"ATI1") + ATI2 = i32(b"ATI2") + MULTI2_ARGB8 = i32(b"MET1") + + +# Backward compatibility layer +module = sys.modules[__name__] +for item in DDSD: + assert item.name is not None + setattr(module, f"DDSD_{item.name}", item.value) +for item1 in DDSCAPS: + assert item1.name is not None + setattr(module, f"DDSCAPS_{item1.name}", item1.value) +for item2 in DDSCAPS2: + assert item2.name is not None + setattr(module, f"DDSCAPS2_{item2.name}", item2.value) +for item3 in DDPF: + assert item3.name is not None + setattr(module, f"DDPF_{item3.name}", item3.value) + +DDS_FOURCC = DDPF.FOURCC +DDS_RGB = DDPF.RGB +DDS_RGBA = DDPF.RGB | DDPF.ALPHAPIXELS +DDS_LUMINANCE = DDPF.LUMINANCE +DDS_LUMINANCEA = DDPF.LUMINANCE | DDPF.ALPHAPIXELS +DDS_ALPHA = DDPF.ALPHA +DDS_PAL8 = DDPF.PALETTEINDEXED8 + +DDS_HEADER_FLAGS_TEXTURE = DDSD.CAPS | DDSD.HEIGHT | DDSD.WIDTH | DDSD.PIXELFORMAT +DDS_HEADER_FLAGS_MIPMAP = DDSD.MIPMAPCOUNT +DDS_HEADER_FLAGS_VOLUME = DDSD.DEPTH +DDS_HEADER_FLAGS_PITCH = DDSD.PITCH +DDS_HEADER_FLAGS_LINEARSIZE = DDSD.LINEARSIZE + +DDS_HEIGHT = DDSD.HEIGHT +DDS_WIDTH = DDSD.WIDTH + +DDS_SURFACE_FLAGS_TEXTURE = DDSCAPS.TEXTURE +DDS_SURFACE_FLAGS_MIPMAP = DDSCAPS.COMPLEX | DDSCAPS.MIPMAP +DDS_SURFACE_FLAGS_CUBEMAP = DDSCAPS.COMPLEX + +DDS_CUBEMAP_POSITIVEX = DDSCAPS2.CUBEMAP | DDSCAPS2.CUBEMAP_POSITIVEX +DDS_CUBEMAP_NEGATIVEX = DDSCAPS2.CUBEMAP | DDSCAPS2.CUBEMAP_NEGATIVEX +DDS_CUBEMAP_POSITIVEY = DDSCAPS2.CUBEMAP | DDSCAPS2.CUBEMAP_POSITIVEY +DDS_CUBEMAP_NEGATIVEY = DDSCAPS2.CUBEMAP | DDSCAPS2.CUBEMAP_NEGATIVEY +DDS_CUBEMAP_POSITIVEZ = DDSCAPS2.CUBEMAP | DDSCAPS2.CUBEMAP_POSITIVEZ +DDS_CUBEMAP_NEGATIVEZ = DDSCAPS2.CUBEMAP | DDSCAPS2.CUBEMAP_NEGATIVEZ + +DXT1_FOURCC = D3DFMT.DXT1 +DXT3_FOURCC = D3DFMT.DXT3 +DXT5_FOURCC = D3DFMT.DXT5 + +DXGI_FORMAT_R8G8B8A8_TYPELESS = DXGI_FORMAT.R8G8B8A8_TYPELESS +DXGI_FORMAT_R8G8B8A8_UNORM = DXGI_FORMAT.R8G8B8A8_UNORM +DXGI_FORMAT_R8G8B8A8_UNORM_SRGB = DXGI_FORMAT.R8G8B8A8_UNORM_SRGB +DXGI_FORMAT_BC5_TYPELESS = DXGI_FORMAT.BC5_TYPELESS +DXGI_FORMAT_BC5_UNORM = DXGI_FORMAT.BC5_UNORM +DXGI_FORMAT_BC5_SNORM = DXGI_FORMAT.BC5_SNORM +DXGI_FORMAT_BC6H_UF16 = DXGI_FORMAT.BC6H_UF16 +DXGI_FORMAT_BC6H_SF16 = DXGI_FORMAT.BC6H_SF16 +DXGI_FORMAT_BC7_TYPELESS = DXGI_FORMAT.BC7_TYPELESS +DXGI_FORMAT_BC7_UNORM = DXGI_FORMAT.BC7_UNORM +DXGI_FORMAT_BC7_UNORM_SRGB = DXGI_FORMAT.BC7_UNORM_SRGB + + +class DdsImageFile(ImageFile.ImageFile): + format = "DDS" + format_description = "DirectDraw Surface" + + def _open(self) -> None: + assert self.fp is not None + if not _accept(self.fp.read(4)): + msg = "not a DDS file" + raise SyntaxError(msg) + (header_size,) = struct.unpack(" None: + pass + + +class DdsRgbDecoder(ImageFile.PyDecoder): + _pulls_fd = True + + def decode(self, buffer: bytes | Image.SupportsArrayInterface) -> tuple[int, int]: + assert self.fd is not None + bitcount, masks = self.args + + # Some masks will be padded with zeros, e.g. R 0b11 G 0b1100 + # Calculate how many zeros each mask is padded with + mask_offsets = [] + # And the maximum value of each channel without the padding + mask_totals = [] + for mask in masks: + offset = 0 + if mask != 0: + while mask >> (offset + 1) << (offset + 1) == mask: + offset += 1 + mask_offsets.append(offset) + mask_totals.append(mask >> offset) + + data = bytearray() + bytecount = bitcount // 8 + dest_length = self.state.xsize * self.state.ysize * len(masks) + while len(data) < dest_length: + value = int.from_bytes(self.fd.read(bytecount), "little") + for i, mask in enumerate(masks): + masked_value = value & mask + # Remove the zero padding, and scale it to 8 bits + data += o8( + int(((masked_value >> mask_offsets[i]) / mask_totals[i]) * 255) + if mask_totals[i] + else 0 + ) + self.set_as_raw(data) + return -1, 0 + + +def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + if im.mode not in ("RGB", "RGBA", "L", "LA"): + msg = f"cannot write mode {im.mode} as DDS" + raise OSError(msg) + + flags = DDSD.CAPS | DDSD.HEIGHT | DDSD.WIDTH | DDSD.PIXELFORMAT + bitcount = len(im.getbands()) * 8 + pixel_format = im.encoderinfo.get("pixel_format") + args: tuple[int] | str + if pixel_format: + codec_name = "bcn" + flags |= DDSD.LINEARSIZE + pitch = (im.width + 3) * 4 + rgba_mask = [0, 0, 0, 0] + pixel_flags = DDPF.FOURCC + if pixel_format == "DXT1": + fourcc = D3DFMT.DXT1 + args = (1,) + elif pixel_format == "DXT3": + fourcc = D3DFMT.DXT3 + args = (2,) + elif pixel_format == "DXT5": + fourcc = D3DFMT.DXT5 + args = (3,) + else: + fourcc = D3DFMT.DX10 + if pixel_format == "BC2": + args = (2,) + dxgi_format = DXGI_FORMAT.BC2_TYPELESS + elif pixel_format == "BC3": + args = (3,) + dxgi_format = DXGI_FORMAT.BC3_TYPELESS + elif pixel_format == "BC5": + args = (5,) + dxgi_format = DXGI_FORMAT.BC5_TYPELESS + if im.mode != "RGB": + msg = "only RGB mode can be written as BC5" + raise OSError(msg) + else: + msg = f"cannot write pixel format {pixel_format}" + raise OSError(msg) + else: + codec_name = "raw" + flags |= DDSD.PITCH + pitch = (im.width * bitcount + 7) // 8 + + alpha = im.mode[-1] == "A" + if im.mode[0] == "L": + pixel_flags = DDPF.LUMINANCE + args = im.mode + if alpha: + rgba_mask = [0x000000FF, 0x000000FF, 0x000000FF] + else: + rgba_mask = [0xFF000000, 0xFF000000, 0xFF000000] + else: + pixel_flags = DDPF.RGB + args = im.mode[::-1] + rgba_mask = [0x00FF0000, 0x0000FF00, 0x000000FF] + + if alpha: + r, g, b, a = im.split() + im = Image.merge("RGBA", (a, r, g, b)) + if alpha: + pixel_flags |= DDPF.ALPHAPIXELS + rgba_mask.append(0xFF000000 if alpha else 0) + + fourcc = D3DFMT.UNKNOWN + fp.write( + o32(DDS_MAGIC) + + struct.pack( + "<7I", + 124, # header size + flags, # flags + im.height, + im.width, + pitch, + 0, # depth + 0, # mipmaps + ) + + struct.pack("11I", *((0,) * 11)) # reserved + # pfsize, pfflags, fourcc, bitcount + + struct.pack("<4I", 32, pixel_flags, fourcc, bitcount) + + struct.pack("<4I", *rgba_mask) # dwRGBABitMask + + struct.pack("<5I", DDSCAPS.TEXTURE, 0, 0, 0, 0) + ) + if fourcc == D3DFMT.DX10: + fp.write( + # dxgi_format, 2D resource, misc, array size, straight alpha + struct.pack("<5I", dxgi_format, 3, 0, 0, 1) + ) + ImageFile._save(im, fp, [ImageFile._Tile(codec_name, (0, 0) + im.size, 0, args)]) + + +def _accept(prefix: bytes) -> bool: + return prefix.startswith(b"DDS ") + + +Image.register_open(DdsImageFile.format, DdsImageFile, _accept) +Image.register_decoder("dds_rgb", DdsRgbDecoder) +Image.register_save(DdsImageFile.format, _save) +Image.register_extension(DdsImageFile.format, ".dds") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/EpsImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/EpsImagePlugin.py new file mode 100644 index 0000000..aeb7b0c --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/EpsImagePlugin.py @@ -0,0 +1,481 @@ +# +# The Python Imaging Library. +# $Id$ +# +# EPS file handling +# +# History: +# 1995-09-01 fl Created (0.1) +# 1996-05-18 fl Don't choke on "atend" fields, Ghostscript interface (0.2) +# 1996-08-22 fl Don't choke on floating point BoundingBox values +# 1996-08-23 fl Handle files from Macintosh (0.3) +# 2001-02-17 fl Use 're' instead of 'regex' (Python 2.1) (0.4) +# 2003-09-07 fl Check gs.close status (from Federico Di Gregorio) (0.5) +# 2014-05-07 e Handling of EPS with binary preview and fixed resolution +# resizing +# +# Copyright (c) 1997-2003 by Secret Labs AB. +# Copyright (c) 1995-2003 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import io +import os +import re +import subprocess +import sys +import tempfile +from typing import IO + +from . import Image, ImageFile +from ._binary import i32le as i32 + +# -------------------------------------------------------------------- + + +split = re.compile(r"^%%([^:]*):[ \t]*(.*)[ \t]*$") +field = re.compile(r"^%[%!\w]([^:]*)[ \t]*$") + +gs_binary: str | bool | None = None +gs_windows_binary = None + + +def has_ghostscript() -> bool: + global gs_binary, gs_windows_binary + if gs_binary is None: + if sys.platform.startswith("win"): + if gs_windows_binary is None: + import shutil + + for binary in ("gswin32c", "gswin64c", "gs"): + if shutil.which(binary) is not None: + gs_windows_binary = binary + break + else: + gs_windows_binary = False + gs_binary = gs_windows_binary + else: + try: + subprocess.check_call(["gs", "--version"], stdout=subprocess.DEVNULL) + gs_binary = "gs" + except OSError: + gs_binary = False + return gs_binary is not False + + +def Ghostscript( + tile: list[ImageFile._Tile], + size: tuple[int, int], + fp: IO[bytes], + scale: int = 1, + transparency: bool = False, +) -> Image.core.ImagingCore: + """Render an image using Ghostscript""" + global gs_binary + if not has_ghostscript(): + msg = "Unable to locate Ghostscript on paths" + raise OSError(msg) + assert isinstance(gs_binary, str) + + # Unpack decoder tile + args = tile[0].args + assert isinstance(args, tuple) + length, bbox = args + + # Hack to support hi-res rendering + scale = int(scale) or 1 + width = size[0] * scale + height = size[1] * scale + # resolution is dependent on bbox and size + res_x = 72.0 * width / (bbox[2] - bbox[0]) + res_y = 72.0 * height / (bbox[3] - bbox[1]) + + out_fd, outfile = tempfile.mkstemp() + os.close(out_fd) + + infile_temp = None + if hasattr(fp, "name") and os.path.exists(fp.name): + infile = fp.name + else: + in_fd, infile_temp = tempfile.mkstemp() + os.close(in_fd) + infile = infile_temp + + # Ignore length and offset! + # Ghostscript can read it + # Copy whole file to read in Ghostscript + with open(infile_temp, "wb") as f: + # fetch length of fp + fp.seek(0, io.SEEK_END) + fsize = fp.tell() + # ensure start position + # go back + fp.seek(0) + lengthfile = fsize + while lengthfile > 0: + s = fp.read(min(lengthfile, 100 * 1024)) + if not s: + break + lengthfile -= len(s) + f.write(s) + + if transparency: + # "RGBA" + device = "pngalpha" + else: + # "pnmraw" automatically chooses between + # PBM ("1"), PGM ("L"), and PPM ("RGB"). + device = "pnmraw" + + # Build Ghostscript command + command = [ + gs_binary, + "-q", # quiet mode + f"-g{width:d}x{height:d}", # set output geometry (pixels) + f"-r{res_x:f}x{res_y:f}", # set input DPI (dots per inch) + "-dBATCH", # exit after processing + "-dNOPAUSE", # don't pause between pages + "-dSAFER", # safe mode + f"-sDEVICE={device}", + f"-sOutputFile={outfile}", # output file + # adjust for image origin + "-c", + f"{-bbox[0]} {-bbox[1]} translate", + "-f", + infile, # input file + # showpage (see https://bugs.ghostscript.com/show_bug.cgi?id=698272) + "-c", + "showpage", + ] + + # push data through Ghostscript + try: + startupinfo = None + if sys.platform.startswith("win"): + startupinfo = subprocess.STARTUPINFO() + startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW + subprocess.check_call(command, startupinfo=startupinfo) + with Image.open(outfile) as out_im: + out_im.load() + return out_im.im.copy() + finally: + try: + os.unlink(outfile) + if infile_temp: + os.unlink(infile_temp) + except OSError: + pass + + +def _accept(prefix: bytes) -> bool: + return prefix.startswith(b"%!PS") or ( + len(prefix) >= 4 and i32(prefix) == 0xC6D3D0C5 + ) + + +## +# Image plugin for Encapsulated PostScript. This plugin supports only +# a few variants of this format. + + +class EpsImageFile(ImageFile.ImageFile): + """EPS File Parser for the Python Imaging Library""" + + format = "EPS" + format_description = "Encapsulated Postscript" + + mode_map = {1: "L", 2: "LAB", 3: "RGB", 4: "CMYK"} + + def _open(self) -> None: + assert self.fp is not None + length, offset = self._find_offset(self.fp) + + # go to offset - start of "%!PS" + self.fp.seek(offset) + + self._mode = "RGB" + + # When reading header comments, the first comment is used. + # When reading trailer comments, the last comment is used. + bounding_box: list[int] | None = None + imagedata_size: tuple[int, int] | None = None + + byte_arr = bytearray(255) + bytes_mv = memoryview(byte_arr) + bytes_read = 0 + reading_header_comments = True + reading_trailer_comments = False + trailer_reached = False + + def check_required_header_comments() -> None: + """ + The EPS specification requires that some headers exist. + This should be checked when the header comments formally end, + when image data starts, or when the file ends, whichever comes first. + """ + if "PS-Adobe" not in self.info: + msg = 'EPS header missing "%!PS-Adobe" comment' + raise SyntaxError(msg) + if "BoundingBox" not in self.info: + msg = 'EPS header missing "%%BoundingBox" comment' + raise SyntaxError(msg) + + def read_comment(s: str) -> bool: + nonlocal bounding_box, reading_trailer_comments + try: + m = split.match(s) + except re.error as e: + msg = "not an EPS file" + raise SyntaxError(msg) from e + + if not m: + return False + + k, v = m.group(1, 2) + self.info[k] = v + if k == "BoundingBox": + if v == "(atend)": + reading_trailer_comments = True + elif not bounding_box or (trailer_reached and reading_trailer_comments): + try: + # Note: The DSC spec says that BoundingBox + # fields should be integers, but some drivers + # put floating point values there anyway. + bounding_box = [int(float(i)) for i in v.split()] + except Exception: + pass + return True + + while True: + byte = self.fp.read(1) + if byte == b"": + # if we didn't read a byte we must be at the end of the file + if bytes_read == 0: + if reading_header_comments: + check_required_header_comments() + break + elif byte in b"\r\n": + # if we read a line ending character, ignore it and parse what + # we have already read. if we haven't read any other characters, + # continue reading + if bytes_read == 0: + continue + else: + # ASCII/hexadecimal lines in an EPS file must not exceed + # 255 characters, not including line ending characters + if bytes_read >= 255: + # only enforce this for lines starting with a "%", + # otherwise assume it's binary data + if byte_arr[0] == ord("%"): + msg = "not an EPS file" + raise SyntaxError(msg) + else: + if reading_header_comments: + check_required_header_comments() + reading_header_comments = False + # reset bytes_read so we can keep reading + # data until the end of the line + bytes_read = 0 + byte_arr[bytes_read] = byte[0] + bytes_read += 1 + continue + + if reading_header_comments: + # Load EPS header + + # if this line doesn't start with a "%", + # or does start with "%%EndComments", + # then we've reached the end of the header/comments + if byte_arr[0] != ord("%") or bytes_mv[:13] == b"%%EndComments": + check_required_header_comments() + reading_header_comments = False + continue + + s = str(bytes_mv[:bytes_read], "latin-1") + if not read_comment(s): + m = field.match(s) + if m: + k = m.group(1) + if k.startswith("PS-Adobe"): + self.info["PS-Adobe"] = k[9:] + else: + self.info[k] = "" + elif s[0] == "%": + # handle non-DSC PostScript comments that some + # tools mistakenly put in the Comments section + pass + else: + msg = "bad EPS header" + raise OSError(msg) + elif bytes_mv[:11] == b"%ImageData:": + # Check for an "ImageData" descriptor + # https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#50577413_pgfId-1035096 + + # If we've already read an "ImageData" descriptor, + # don't read another one. + if imagedata_size: + bytes_read = 0 + continue + + # Values: + # columns + # rows + # bit depth (1 or 8) + # mode (1: L, 2: LAB, 3: RGB, 4: CMYK) + # number of padding channels + # block size (number of bytes per row per channel) + # binary/ascii (1: binary, 2: ascii) + # data start identifier (the image data follows after a single line + # consisting only of this quoted value) + image_data_values = byte_arr[11:bytes_read].split(None, 7) + columns, rows, bit_depth, mode_id = ( + int(value) for value in image_data_values[:4] + ) + + if bit_depth == 1: + self._mode = "1" + elif bit_depth == 8: + try: + self._mode = self.mode_map[mode_id] + except ValueError: + break + else: + break + + # Parse the columns and rows after checking the bit depth and mode + # in case the bit depth and/or mode are invalid. + imagedata_size = columns, rows + elif bytes_mv[:5] == b"%%EOF": + break + elif trailer_reached and reading_trailer_comments: + # Load EPS trailer + s = str(bytes_mv[:bytes_read], "latin-1") + read_comment(s) + elif bytes_mv[:9] == b"%%Trailer": + trailer_reached = True + elif bytes_mv[:14] == b"%%BeginBinary:": + bytecount = int(byte_arr[14:bytes_read]) + self.fp.seek(bytecount, os.SEEK_CUR) + bytes_read = 0 + + # A "BoundingBox" is always required, + # even if an "ImageData" descriptor size exists. + if not bounding_box: + msg = "cannot determine EPS bounding box" + raise OSError(msg) + + # An "ImageData" size takes precedence over the "BoundingBox". + self._size = imagedata_size or ( + bounding_box[2] - bounding_box[0], + bounding_box[3] - bounding_box[1], + ) + + self.tile = [ + ImageFile._Tile("eps", (0, 0) + self.size, offset, (length, bounding_box)) + ] + + def _find_offset(self, fp: IO[bytes]) -> tuple[int, int]: + s = fp.read(4) + + if s == b"%!PS": + # for HEAD without binary preview + fp.seek(0, io.SEEK_END) + length = fp.tell() + offset = 0 + elif i32(s) == 0xC6D3D0C5: + # FIX for: Some EPS file not handled correctly / issue #302 + # EPS can contain binary data + # or start directly with latin coding + # more info see: + # https://web.archive.org/web/20160528181353/http://partners.adobe.com/public/developer/en/ps/5002.EPSF_Spec.pdf + s = fp.read(8) + offset = i32(s) + length = i32(s, 4) + else: + msg = "not an EPS file" + raise SyntaxError(msg) + + return length, offset + + def load( + self, scale: int = 1, transparency: bool = False + ) -> Image.core.PixelAccess | None: + # Load EPS via Ghostscript + if self.tile: + assert self.fp is not None + self.im = Ghostscript(self.tile, self.size, self.fp, scale, transparency) + self._mode = self.im.mode + self._size = self.im.size + self.tile = [] + return Image.Image.load(self) + + def load_seek(self, pos: int) -> None: + # we can't incrementally load, so force ImageFile.parser to + # use our custom load method by defining this method. + pass + + +# -------------------------------------------------------------------- + + +def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes, eps: int = 1) -> None: + """EPS Writer for the Python Imaging Library.""" + + # make sure image data is available + im.load() + + # determine PostScript image mode + if im.mode == "L": + operator = (8, 1, b"image") + elif im.mode == "RGB": + operator = (8, 3, b"false 3 colorimage") + elif im.mode == "CMYK": + operator = (8, 4, b"false 4 colorimage") + else: + msg = "image mode is not supported" + raise ValueError(msg) + + if eps: + # write EPS header + fp.write(b"%!PS-Adobe-3.0 EPSF-3.0\n") + fp.write(b"%%Creator: PIL 0.1 EpsEncode\n") + # fp.write("%%CreationDate: %s"...) + fp.write(b"%%%%BoundingBox: 0 0 %d %d\n" % im.size) + fp.write(b"%%Pages: 1\n") + fp.write(b"%%EndComments\n") + fp.write(b"%%Page: 1 1\n") + fp.write(b"%%ImageData: %d %d " % im.size) + fp.write(b'%d %d 0 1 1 "%s"\n' % operator) + + # image header + fp.write(b"gsave\n") + fp.write(b"10 dict begin\n") + fp.write(b"/buf %d string def\n" % (im.size[0] * operator[1])) + fp.write(b"%d %d scale\n" % im.size) + fp.write(b"%d %d 8\n" % im.size) # <= bits + fp.write(b"[%d 0 0 -%d 0 %d]\n" % (im.size[0], im.size[1], im.size[1])) + fp.write(b"{ currentfile buf readhexstring pop } bind\n") + fp.write(operator[2] + b"\n") + if hasattr(fp, "flush"): + fp.flush() + + ImageFile._save(im, fp, [ImageFile._Tile("eps", (0, 0) + im.size)]) + + fp.write(b"\n%%%%EndBinary\n") + fp.write(b"grestore end\n") + if hasattr(fp, "flush"): + fp.flush() + + +# -------------------------------------------------------------------- + + +Image.register_open(EpsImageFile.format, EpsImageFile, _accept) + +Image.register_save(EpsImageFile.format, _save) + +Image.register_extensions(EpsImageFile.format, [".ps", ".eps"]) + +Image.register_mime(EpsImageFile.format, "application/postscript") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/ExifTags.py b/Python/venv/lib/python3.12/site-packages/PIL/ExifTags.py new file mode 100644 index 0000000..a9522e7 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/ExifTags.py @@ -0,0 +1,384 @@ +# +# The Python Imaging Library. +# $Id$ +# +# EXIF tags +# +# Copyright (c) 2003 by Secret Labs AB +# +# See the README file for information on usage and redistribution. +# + +""" +This module provides constants and clear-text names for various +well-known EXIF tags. +""" + +from __future__ import annotations + +from enum import IntEnum + + +class Base(IntEnum): + # possibly incomplete + InteropIndex = 0x0001 + ProcessingSoftware = 0x000B + NewSubfileType = 0x00FE + SubfileType = 0x00FF + ImageWidth = 0x0100 + ImageLength = 0x0101 + BitsPerSample = 0x0102 + Compression = 0x0103 + PhotometricInterpretation = 0x0106 + Thresholding = 0x0107 + CellWidth = 0x0108 + CellLength = 0x0109 + FillOrder = 0x010A + DocumentName = 0x010D + ImageDescription = 0x010E + Make = 0x010F + Model = 0x0110 + StripOffsets = 0x0111 + Orientation = 0x0112 + SamplesPerPixel = 0x0115 + RowsPerStrip = 0x0116 + StripByteCounts = 0x0117 + MinSampleValue = 0x0118 + MaxSampleValue = 0x0119 + XResolution = 0x011A + YResolution = 0x011B + PlanarConfiguration = 0x011C + PageName = 0x011D + FreeOffsets = 0x0120 + FreeByteCounts = 0x0121 + GrayResponseUnit = 0x0122 + GrayResponseCurve = 0x0123 + T4Options = 0x0124 + T6Options = 0x0125 + ResolutionUnit = 0x0128 + PageNumber = 0x0129 + TransferFunction = 0x012D + Software = 0x0131 + DateTime = 0x0132 + Artist = 0x013B + HostComputer = 0x013C + Predictor = 0x013D + WhitePoint = 0x013E + PrimaryChromaticities = 0x013F + ColorMap = 0x0140 + HalftoneHints = 0x0141 + TileWidth = 0x0142 + TileLength = 0x0143 + TileOffsets = 0x0144 + TileByteCounts = 0x0145 + SubIFDs = 0x014A + InkSet = 0x014C + InkNames = 0x014D + NumberOfInks = 0x014E + DotRange = 0x0150 + TargetPrinter = 0x0151 + ExtraSamples = 0x0152 + SampleFormat = 0x0153 + SMinSampleValue = 0x0154 + SMaxSampleValue = 0x0155 + TransferRange = 0x0156 + ClipPath = 0x0157 + XClipPathUnits = 0x0158 + YClipPathUnits = 0x0159 + Indexed = 0x015A + JPEGTables = 0x015B + OPIProxy = 0x015F + JPEGProc = 0x0200 + JpegIFOffset = 0x0201 + JpegIFByteCount = 0x0202 + JpegRestartInterval = 0x0203 + JpegLosslessPredictors = 0x0205 + JpegPointTransforms = 0x0206 + JpegQTables = 0x0207 + JpegDCTables = 0x0208 + JpegACTables = 0x0209 + YCbCrCoefficients = 0x0211 + YCbCrSubSampling = 0x0212 + YCbCrPositioning = 0x0213 + ReferenceBlackWhite = 0x0214 + XMLPacket = 0x02BC + RelatedImageFileFormat = 0x1000 + RelatedImageWidth = 0x1001 + RelatedImageLength = 0x1002 + Rating = 0x4746 + RatingPercent = 0x4749 + ImageID = 0x800D + CFARepeatPatternDim = 0x828D + BatteryLevel = 0x828F + Copyright = 0x8298 + ExposureTime = 0x829A + FNumber = 0x829D + IPTCNAA = 0x83BB + ImageResources = 0x8649 + ExifOffset = 0x8769 + InterColorProfile = 0x8773 + ExposureProgram = 0x8822 + SpectralSensitivity = 0x8824 + GPSInfo = 0x8825 + ISOSpeedRatings = 0x8827 + OECF = 0x8828 + Interlace = 0x8829 + TimeZoneOffset = 0x882A + SelfTimerMode = 0x882B + SensitivityType = 0x8830 + StandardOutputSensitivity = 0x8831 + RecommendedExposureIndex = 0x8832 + ISOSpeed = 0x8833 + ISOSpeedLatitudeyyy = 0x8834 + ISOSpeedLatitudezzz = 0x8835 + ExifVersion = 0x9000 + DateTimeOriginal = 0x9003 + DateTimeDigitized = 0x9004 + OffsetTime = 0x9010 + OffsetTimeOriginal = 0x9011 + OffsetTimeDigitized = 0x9012 + ComponentsConfiguration = 0x9101 + CompressedBitsPerPixel = 0x9102 + ShutterSpeedValue = 0x9201 + ApertureValue = 0x9202 + BrightnessValue = 0x9203 + ExposureBiasValue = 0x9204 + MaxApertureValue = 0x9205 + SubjectDistance = 0x9206 + MeteringMode = 0x9207 + LightSource = 0x9208 + Flash = 0x9209 + FocalLength = 0x920A + Noise = 0x920D + ImageNumber = 0x9211 + SecurityClassification = 0x9212 + ImageHistory = 0x9213 + TIFFEPStandardID = 0x9216 + MakerNote = 0x927C + UserComment = 0x9286 + SubsecTime = 0x9290 + SubsecTimeOriginal = 0x9291 + SubsecTimeDigitized = 0x9292 + AmbientTemperature = 0x9400 + Humidity = 0x9401 + Pressure = 0x9402 + WaterDepth = 0x9403 + Acceleration = 0x9404 + CameraElevationAngle = 0x9405 + XPTitle = 0x9C9B + XPComment = 0x9C9C + XPAuthor = 0x9C9D + XPKeywords = 0x9C9E + XPSubject = 0x9C9F + FlashPixVersion = 0xA000 + ColorSpace = 0xA001 + ExifImageWidth = 0xA002 + ExifImageHeight = 0xA003 + RelatedSoundFile = 0xA004 + ExifInteroperabilityOffset = 0xA005 + FlashEnergy = 0xA20B + SpatialFrequencyResponse = 0xA20C + FocalPlaneXResolution = 0xA20E + FocalPlaneYResolution = 0xA20F + FocalPlaneResolutionUnit = 0xA210 + SubjectLocation = 0xA214 + ExposureIndex = 0xA215 + SensingMethod = 0xA217 + FileSource = 0xA300 + SceneType = 0xA301 + CFAPattern = 0xA302 + CustomRendered = 0xA401 + ExposureMode = 0xA402 + WhiteBalance = 0xA403 + DigitalZoomRatio = 0xA404 + FocalLengthIn35mmFilm = 0xA405 + SceneCaptureType = 0xA406 + GainControl = 0xA407 + Contrast = 0xA408 + Saturation = 0xA409 + Sharpness = 0xA40A + DeviceSettingDescription = 0xA40B + SubjectDistanceRange = 0xA40C + ImageUniqueID = 0xA420 + CameraOwnerName = 0xA430 + BodySerialNumber = 0xA431 + LensSpecification = 0xA432 + LensMake = 0xA433 + LensModel = 0xA434 + LensSerialNumber = 0xA435 + CompositeImage = 0xA460 + CompositeImageCount = 0xA461 + CompositeImageExposureTimes = 0xA462 + Gamma = 0xA500 + PrintImageMatching = 0xC4A5 + DNGVersion = 0xC612 + DNGBackwardVersion = 0xC613 + UniqueCameraModel = 0xC614 + LocalizedCameraModel = 0xC615 + CFAPlaneColor = 0xC616 + CFALayout = 0xC617 + LinearizationTable = 0xC618 + BlackLevelRepeatDim = 0xC619 + BlackLevel = 0xC61A + BlackLevelDeltaH = 0xC61B + BlackLevelDeltaV = 0xC61C + WhiteLevel = 0xC61D + DefaultScale = 0xC61E + DefaultCropOrigin = 0xC61F + DefaultCropSize = 0xC620 + ColorMatrix1 = 0xC621 + ColorMatrix2 = 0xC622 + CameraCalibration1 = 0xC623 + CameraCalibration2 = 0xC624 + ReductionMatrix1 = 0xC625 + ReductionMatrix2 = 0xC626 + AnalogBalance = 0xC627 + AsShotNeutral = 0xC628 + AsShotWhiteXY = 0xC629 + BaselineExposure = 0xC62A + BaselineNoise = 0xC62B + BaselineSharpness = 0xC62C + BayerGreenSplit = 0xC62D + LinearResponseLimit = 0xC62E + CameraSerialNumber = 0xC62F + LensInfo = 0xC630 + ChromaBlurRadius = 0xC631 + AntiAliasStrength = 0xC632 + ShadowScale = 0xC633 + DNGPrivateData = 0xC634 + MakerNoteSafety = 0xC635 + CalibrationIlluminant1 = 0xC65A + CalibrationIlluminant2 = 0xC65B + BestQualityScale = 0xC65C + RawDataUniqueID = 0xC65D + OriginalRawFileName = 0xC68B + OriginalRawFileData = 0xC68C + ActiveArea = 0xC68D + MaskedAreas = 0xC68E + AsShotICCProfile = 0xC68F + AsShotPreProfileMatrix = 0xC690 + CurrentICCProfile = 0xC691 + CurrentPreProfileMatrix = 0xC692 + ColorimetricReference = 0xC6BF + CameraCalibrationSignature = 0xC6F3 + ProfileCalibrationSignature = 0xC6F4 + AsShotProfileName = 0xC6F6 + NoiseReductionApplied = 0xC6F7 + ProfileName = 0xC6F8 + ProfileHueSatMapDims = 0xC6F9 + ProfileHueSatMapData1 = 0xC6FA + ProfileHueSatMapData2 = 0xC6FB + ProfileToneCurve = 0xC6FC + ProfileEmbedPolicy = 0xC6FD + ProfileCopyright = 0xC6FE + ForwardMatrix1 = 0xC714 + ForwardMatrix2 = 0xC715 + PreviewApplicationName = 0xC716 + PreviewApplicationVersion = 0xC717 + PreviewSettingsName = 0xC718 + PreviewSettingsDigest = 0xC719 + PreviewColorSpace = 0xC71A + PreviewDateTime = 0xC71B + RawImageDigest = 0xC71C + OriginalRawFileDigest = 0xC71D + SubTileBlockSize = 0xC71E + RowInterleaveFactor = 0xC71F + ProfileLookTableDims = 0xC725 + ProfileLookTableData = 0xC726 + OpcodeList1 = 0xC740 + OpcodeList2 = 0xC741 + OpcodeList3 = 0xC74E + NoiseProfile = 0xC761 + FrameRate = 0xC764 + + +"""Maps EXIF tags to tag names.""" +TAGS = { + **{i.value: i.name for i in Base}, + 0x920C: "SpatialFrequencyResponse", + 0x9214: "SubjectLocation", + 0x9215: "ExposureIndex", + 0x828E: "CFAPattern", + 0x920B: "FlashEnergy", + 0x9216: "TIFF/EPStandardID", +} + + +class GPS(IntEnum): + GPSVersionID = 0x00 + GPSLatitudeRef = 0x01 + GPSLatitude = 0x02 + GPSLongitudeRef = 0x03 + GPSLongitude = 0x04 + GPSAltitudeRef = 0x05 + GPSAltitude = 0x06 + GPSTimeStamp = 0x07 + GPSSatellites = 0x08 + GPSStatus = 0x09 + GPSMeasureMode = 0x0A + GPSDOP = 0x0B + GPSSpeedRef = 0x0C + GPSSpeed = 0x0D + GPSTrackRef = 0x0E + GPSTrack = 0x0F + GPSImgDirectionRef = 0x10 + GPSImgDirection = 0x11 + GPSMapDatum = 0x12 + GPSDestLatitudeRef = 0x13 + GPSDestLatitude = 0x14 + GPSDestLongitudeRef = 0x15 + GPSDestLongitude = 0x16 + GPSDestBearingRef = 0x17 + GPSDestBearing = 0x18 + GPSDestDistanceRef = 0x19 + GPSDestDistance = 0x1A + GPSProcessingMethod = 0x1B + GPSAreaInformation = 0x1C + GPSDateStamp = 0x1D + GPSDifferential = 0x1E + GPSHPositioningError = 0x1F + + +"""Maps EXIF GPS tags to tag names.""" +GPSTAGS = {i.value: i.name for i in GPS} + + +class Interop(IntEnum): + InteropIndex = 0x0001 + InteropVersion = 0x0002 + RelatedImageFileFormat = 0x1000 + RelatedImageWidth = 0x1001 + RelatedImageHeight = 0x1002 + + +class IFD(IntEnum): + Exif = 0x8769 + GPSInfo = 0x8825 + MakerNote = 0x927C + Makernote = 0x927C # Deprecated + Interop = 0xA005 + IFD1 = -1 + + +class LightSource(IntEnum): + Unknown = 0x00 + Daylight = 0x01 + Fluorescent = 0x02 + Tungsten = 0x03 + Flash = 0x04 + Fine = 0x09 + Cloudy = 0x0A + Shade = 0x0B + DaylightFluorescent = 0x0C + DayWhiteFluorescent = 0x0D + CoolWhiteFluorescent = 0x0E + WhiteFluorescent = 0x0F + StandardLightA = 0x11 + StandardLightB = 0x12 + StandardLightC = 0x13 + D55 = 0x14 + D65 = 0x15 + D75 = 0x16 + D50 = 0x17 + ISO = 0x18 + Other = 0xFF diff --git a/Python/venv/lib/python3.12/site-packages/PIL/FitsImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/FitsImagePlugin.py new file mode 100644 index 0000000..e918407 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/FitsImagePlugin.py @@ -0,0 +1,153 @@ +# +# The Python Imaging Library +# $Id$ +# +# FITS file handling +# +# Copyright (c) 1998-2003 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import gzip +import math + +from . import Image, ImageFile + + +def _accept(prefix: bytes) -> bool: + return prefix.startswith(b"SIMPLE") + + +class FitsImageFile(ImageFile.ImageFile): + format = "FITS" + format_description = "FITS" + + def _open(self) -> None: + assert self.fp is not None + + headers: dict[bytes, bytes] = {} + header_in_progress = False + decoder_name = "" + while True: + header = self.fp.read(80) + if not header: + msg = "Truncated FITS file" + raise OSError(msg) + keyword = header[:8].strip() + if keyword in (b"SIMPLE", b"XTENSION"): + header_in_progress = True + elif headers and not header_in_progress: + # This is now a data unit + break + elif keyword == b"END": + # Seek to the end of the header unit + self.fp.seek(math.ceil(self.fp.tell() / 2880) * 2880) + if not decoder_name: + decoder_name, offset, args = self._parse_headers(headers) + + header_in_progress = False + continue + + if decoder_name: + # Keep going to read past the headers + continue + + value = header[8:].split(b"/")[0].strip() + if value.startswith(b"="): + value = value[1:].strip() + if not headers and (not _accept(keyword) or value != b"T"): + msg = "Not a FITS file" + raise SyntaxError(msg) + headers[keyword] = value + + if not decoder_name: + msg = "No image data" + raise ValueError(msg) + + offset += self.fp.tell() - 80 + self.tile = [ImageFile._Tile(decoder_name, (0, 0) + self.size, offset, args)] + + def _get_size( + self, headers: dict[bytes, bytes], prefix: bytes + ) -> tuple[int, int] | None: + naxis = int(headers[prefix + b"NAXIS"]) + if naxis == 0: + return None + + if naxis == 1: + return 1, int(headers[prefix + b"NAXIS1"]) + else: + return int(headers[prefix + b"NAXIS1"]), int(headers[prefix + b"NAXIS2"]) + + def _parse_headers( + self, headers: dict[bytes, bytes] + ) -> tuple[str, int, tuple[str | int, ...]]: + prefix = b"" + decoder_name = "raw" + offset = 0 + if ( + headers.get(b"XTENSION") == b"'BINTABLE'" + and headers.get(b"ZIMAGE") == b"T" + and headers[b"ZCMPTYPE"] == b"'GZIP_1 '" + ): + no_prefix_size = self._get_size(headers, prefix) or (0, 0) + number_of_bits = int(headers[b"BITPIX"]) + offset = no_prefix_size[0] * no_prefix_size[1] * (number_of_bits // 8) + + prefix = b"Z" + decoder_name = "fits_gzip" + + size = self._get_size(headers, prefix) + if not size: + return "", 0, () + + self._size = size + + number_of_bits = int(headers[prefix + b"BITPIX"]) + if number_of_bits == 8: + self._mode = "L" + elif number_of_bits == 16: + self._mode = "I;16" + elif number_of_bits == 32: + self._mode = "I" + elif number_of_bits in (-32, -64): + self._mode = "F" + + args: tuple[str | int, ...] + if decoder_name == "raw": + args = (self.mode, 0, -1) + else: + args = (number_of_bits,) + return decoder_name, offset, args + + +class FitsGzipDecoder(ImageFile.PyDecoder): + _pulls_fd = True + + def decode(self, buffer: bytes | Image.SupportsArrayInterface) -> tuple[int, int]: + assert self.fd is not None + with gzip.open(self.fd) as fp: + value = fp.read(self.state.xsize * self.state.ysize * 4) + + rows = [] + offset = 0 + number_of_bits = min(self.args[0] // 8, 4) + for y in range(self.state.ysize): + row = bytearray() + for x in range(self.state.xsize): + row += value[offset + (4 - number_of_bits) : offset + 4] + offset += 4 + rows.append(row) + self.set_as_raw(bytes([pixel for row in rows[::-1] for pixel in row])) + return -1, 0 + + +# -------------------------------------------------------------------- +# Registry + +Image.register_open(FitsImageFile.format, FitsImageFile, _accept) +Image.register_decoder("fits_gzip", FitsGzipDecoder) + +Image.register_extensions(FitsImageFile.format, [".fit", ".fits"]) diff --git a/Python/venv/lib/python3.12/site-packages/PIL/FliImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/FliImagePlugin.py new file mode 100644 index 0000000..da1e8e9 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/FliImagePlugin.py @@ -0,0 +1,184 @@ +# +# The Python Imaging Library. +# $Id$ +# +# FLI/FLC file handling. +# +# History: +# 95-09-01 fl Created +# 97-01-03 fl Fixed parser, setup decoder tile +# 98-07-15 fl Renamed offset attribute to avoid name clash +# +# Copyright (c) Secret Labs AB 1997-98. +# Copyright (c) Fredrik Lundh 1995-97. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import os + +from . import Image, ImageFile, ImagePalette +from ._binary import i16le as i16 +from ._binary import i32le as i32 +from ._binary import o8 +from ._util import DeferredError + +# +# decoder + + +def _accept(prefix: bytes) -> bool: + return ( + len(prefix) >= 16 + and i16(prefix, 4) in [0xAF11, 0xAF12] + and i16(prefix, 14) in [0, 3] # flags + ) + + +## +# Image plugin for the FLI/FLC animation format. Use the seek +# method to load individual frames. + + +class FliImageFile(ImageFile.ImageFile): + format = "FLI" + format_description = "Autodesk FLI/FLC Animation" + _close_exclusive_fp_after_loading = False + + def _open(self) -> None: + # HEAD + assert self.fp is not None + s = self.fp.read(128) + if not ( + _accept(s) + and s[20:22] == b"\x00" * 2 + and s[42:80] == b"\x00" * 38 + and s[88:] == b"\x00" * 40 + ): + msg = "not an FLI/FLC file" + raise SyntaxError(msg) + + # frames + self.n_frames = i16(s, 6) + self.is_animated = self.n_frames > 1 + + # image characteristics + self._mode = "P" + self._size = i16(s, 8), i16(s, 10) + + # animation speed + duration = i32(s, 16) + magic = i16(s, 4) + if magic == 0xAF11: + duration = (duration * 1000) // 70 + self.info["duration"] = duration + + # look for palette + palette = [(a, a, a) for a in range(256)] + + s = self.fp.read(16) + + self.__offset = 128 + + if i16(s, 4) == 0xF100: + # prefix chunk; ignore it + self.fp.seek(self.__offset + i32(s)) + s = self.fp.read(16) + + if i16(s, 4) == 0xF1FA: + # look for palette chunk + number_of_subchunks = i16(s, 6) + chunk_size: int | None = None + for _ in range(number_of_subchunks): + if chunk_size is not None: + self.fp.seek(chunk_size - 6, os.SEEK_CUR) + s = self.fp.read(6) + chunk_type = i16(s, 4) + if chunk_type in (4, 11): + self._palette(palette, 2 if chunk_type == 11 else 0) + break + chunk_size = i32(s) + if not chunk_size: + break + + self.palette = ImagePalette.raw( + "RGB", b"".join(o8(r) + o8(g) + o8(b) for (r, g, b) in palette) + ) + + # set things up to decode first frame + self.__frame = -1 + self._fp = self.fp + self.__rewind = self.fp.tell() + self.seek(0) + + def _palette(self, palette: list[tuple[int, int, int]], shift: int) -> None: + # load palette + + i = 0 + assert self.fp is not None + for e in range(i16(self.fp.read(2))): + s = self.fp.read(2) + i = i + s[0] + n = s[1] + if n == 0: + n = 256 + s = self.fp.read(n * 3) + for n in range(0, len(s), 3): + r = s[n] << shift + g = s[n + 1] << shift + b = s[n + 2] << shift + palette[i] = (r, g, b) + i += 1 + + def seek(self, frame: int) -> None: + if not self._seek_check(frame): + return + if frame < self.__frame: + self._seek(0) + + for f in range(self.__frame + 1, frame + 1): + self._seek(f) + + def _seek(self, frame: int) -> None: + if isinstance(self._fp, DeferredError): + raise self._fp.ex + if frame == 0: + self.__frame = -1 + self._fp.seek(self.__rewind) + self.__offset = 128 + else: + # ensure that the previous frame was loaded + self.load() + + if frame != self.__frame + 1: + msg = f"cannot seek to frame {frame}" + raise ValueError(msg) + self.__frame = frame + + # move to next frame + self.fp = self._fp + self.fp.seek(self.__offset) + + s = self.fp.read(4) + if not s: + msg = "missing frame size" + raise EOFError(msg) + + framesize = i32(s) + + self.decodermaxblock = framesize + self.tile = [ImageFile._Tile("fli", (0, 0) + self.size, self.__offset)] + + self.__offset += framesize + + def tell(self) -> int: + return self.__frame + + +# +# registry + +Image.register_open(FliImageFile.format, FliImageFile, _accept) + +Image.register_extensions(FliImageFile.format, [".fli", ".flc"]) diff --git a/Python/venv/lib/python3.12/site-packages/PIL/FontFile.py b/Python/venv/lib/python3.12/site-packages/PIL/FontFile.py new file mode 100644 index 0000000..341431d --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/FontFile.py @@ -0,0 +1,159 @@ +# +# The Python Imaging Library +# $Id$ +# +# base class for raster font file parsers +# +# history: +# 1997-06-05 fl created +# 1997-08-19 fl restrict image width +# +# Copyright (c) 1997-1998 by Secret Labs AB +# Copyright (c) 1997-1998 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import os +from typing import BinaryIO + +from . import Image, ImageFont, _binary + +WIDTH = 800 + + +def puti16( + fp: BinaryIO, values: tuple[int, int, int, int, int, int, int, int, int, int] +) -> None: + """Write network order (big-endian) 16-bit sequence""" + for v in values: + if v < 0: + v += 65536 + fp.write(_binary.o16be(v)) + + +class FontFile: + """Base class for raster font file handlers.""" + + bitmap: Image.Image | None = None + + def __init__(self) -> None: + self.info: dict[bytes, bytes | int] = {} + self.glyph: list[ + tuple[ + tuple[int, int], + tuple[int, int, int, int], + tuple[int, int, int, int], + Image.Image, + ] + | None + ] = [None] * 256 + + def __getitem__(self, ix: int) -> ( + tuple[ + tuple[int, int], + tuple[int, int, int, int], + tuple[int, int, int, int], + Image.Image, + ] + | None + ): + return self.glyph[ix] + + def compile(self) -> None: + """Create metrics and bitmap""" + + if self.bitmap: + return + + # create bitmap large enough to hold all data + h = w = maxwidth = 0 + lines = 1 + for glyph in self.glyph: + if glyph: + d, dst, src, im = glyph + h = max(h, src[3] - src[1]) + w = w + (src[2] - src[0]) + if w > WIDTH: + lines += 1 + w = src[2] - src[0] + maxwidth = max(maxwidth, w) + + xsize = maxwidth + ysize = lines * h + + if xsize == 0 and ysize == 0: + return + + self.ysize = h + + # paste glyphs into bitmap + self.bitmap = Image.new("1", (xsize, ysize)) + self.metrics: list[ + tuple[tuple[int, int], tuple[int, int, int, int], tuple[int, int, int, int]] + | None + ] = [None] * 256 + x = y = 0 + for i in range(256): + glyph = self[i] + if glyph: + d, dst, src, im = glyph + xx = src[2] - src[0] + x0, y0 = x, y + x = x + xx + if x > WIDTH: + x, y = 0, y + h + x0, y0 = x, y + x = xx + s = src[0] + x0, src[1] + y0, src[2] + x0, src[3] + y0 + self.bitmap.paste(im.crop(src), s) + self.metrics[i] = d, dst, s + + def _encode_metrics(self) -> bytes: + values: list[int] = [] + for i in range(256): + m = self.metrics[i] + if m: + values.extend(m[0] + m[1] + m[2]) + else: + values.extend((0,) * 10) + + data = bytearray() + for v in values: + if v < 0: + v += 65536 + data += _binary.o16be(v) + return bytes(data) + + def save(self, filename: str) -> None: + """Save font""" + + self.compile() + + # font data + if not self.bitmap: + msg = "No bitmap created" + raise ValueError(msg) + self.bitmap.save(os.path.splitext(filename)[0] + ".pbm", "PNG") + + # font metrics + with open(os.path.splitext(filename)[0] + ".pil", "wb") as fp: + fp.write(b"PILfont\n") + fp.write(f";;;;;;{self.ysize};\n".encode("ascii")) # HACK!!! + fp.write(b"DATA\n") + fp.write(self._encode_metrics()) + + def to_imagefont(self) -> ImageFont.ImageFont: + """Convert to ImageFont""" + + self.compile() + + # font data + if not self.bitmap: + msg = "No bitmap created" + raise ValueError(msg) + + imagefont = ImageFont.ImageFont() + imagefont._load(self.bitmap, self._encode_metrics()) + return imagefont diff --git a/Python/venv/lib/python3.12/site-packages/PIL/FpxImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/FpxImagePlugin.py new file mode 100644 index 0000000..0b06aac --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/FpxImagePlugin.py @@ -0,0 +1,258 @@ +# +# THIS IS WORK IN PROGRESS +# +# The Python Imaging Library. +# $Id$ +# +# FlashPix support for PIL +# +# History: +# 97-01-25 fl Created (reads uncompressed RGB images only) +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1997. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import olefile + +from . import Image, ImageFile +from ._binary import i32le as i32 + +# we map from colour field tuples to (mode, rawmode) descriptors +MODES = { + # opacity + (0x00007FFE,): ("A", "L"), + # monochrome + (0x00010000,): ("L", "L"), + (0x00018000, 0x00017FFE): ("RGBA", "LA"), + # photo YCC + (0x00020000, 0x00020001, 0x00020002): ("RGB", "YCC;P"), + (0x00028000, 0x00028001, 0x00028002, 0x00027FFE): ("RGBA", "YCCA;P"), + # standard RGB (NIFRGB) + (0x00030000, 0x00030001, 0x00030002): ("RGB", "RGB"), + (0x00038000, 0x00038001, 0x00038002, 0x00037FFE): ("RGBA", "RGBA"), +} + + +# +# -------------------------------------------------------------------- + + +def _accept(prefix: bytes) -> bool: + return prefix.startswith(olefile.MAGIC) + + +## +# Image plugin for the FlashPix images. + + +class FpxImageFile(ImageFile.ImageFile): + format = "FPX" + format_description = "FlashPix" + + def _open(self) -> None: + # + # read the OLE directory and see if this is a likely + # to be a FlashPix file + + assert self.fp is not None + try: + self.ole = olefile.OleFileIO(self.fp) + except OSError as e: + msg = "not an FPX file; invalid OLE file" + raise SyntaxError(msg) from e + + root = self.ole.root + if not root or root.clsid != "56616700-C154-11CE-8553-00AA00A1F95B": + msg = "not an FPX file; bad root CLSID" + raise SyntaxError(msg) + + self._open_index(1) + + def _open_index(self, index: int = 1) -> None: + # + # get the Image Contents Property Set + + prop = self.ole.getproperties( + [f"Data Object Store {index:06d}", "\005Image Contents"] + ) + + # size (highest resolution) + + assert isinstance(prop[0x1000002], int) + assert isinstance(prop[0x1000003], int) + self._size = prop[0x1000002], prop[0x1000003] + + size = max(self.size) + i = 1 + while size > 64: + size = size // 2 + i += 1 + self.maxid = i - 1 + + # mode. instead of using a single field for this, flashpix + # requires you to specify the mode for each channel in each + # resolution subimage, and leaves it to the decoder to make + # sure that they all match. for now, we'll cheat and assume + # that this is always the case. + + id = self.maxid << 16 + + s = prop[0x2000002 | id] + + if not isinstance(s, bytes) or (bands := i32(s, 4)) > 4: + msg = "Invalid number of bands" + raise OSError(msg) + + # note: for now, we ignore the "uncalibrated" flag + colors = tuple(i32(s, 8 + i * 4) & 0x7FFFFFFF for i in range(bands)) + + self._mode, self.rawmode = MODES[colors] + + # load JPEG tables, if any + self.jpeg = {} + for i in range(256): + id = 0x3000001 | (i << 16) + if id in prop: + self.jpeg[i] = prop[id] + + self._open_subimage(1, self.maxid) + + def _open_subimage(self, index: int = 1, subimage: int = 0) -> None: + # + # setup tile descriptors for a given subimage + + stream = [ + f"Data Object Store {index:06d}", + f"Resolution {subimage:04d}", + "Subimage 0000 Header", + ] + + fp = self.ole.openstream(stream) + + # skip prefix + fp.read(28) + + # header stream + s = fp.read(36) + + size = i32(s, 4), i32(s, 8) + # tilecount = i32(s, 12) + xtile, ytile = i32(s, 16), i32(s, 20) + # channels = i32(s, 24) + offset = i32(s, 28) + length = i32(s, 32) + + if size != self.size: + msg = "subimage mismatch" + raise OSError(msg) + + # get tile descriptors + fp.seek(28 + offset) + s = fp.read(i32(s, 12) * length) + + x = y = 0 + xsize, ysize = size + self.tile = [] + + for i in range(0, len(s), length): + x1 = min(xsize, x + xtile) + y1 = min(ysize, y + ytile) + + compression = i32(s, i + 8) + + if compression == 0: + self.tile.append( + ImageFile._Tile( + "raw", + (x, y, x1, y1), + i32(s, i) + 28, + self.rawmode, + ) + ) + + elif compression == 1: + # FIXME: the fill decoder is not implemented + self.tile.append( + ImageFile._Tile( + "fill", + (x, y, x1, y1), + i32(s, i) + 28, + (self.rawmode, s[12:16]), + ) + ) + + elif compression == 2: + internal_color_conversion = s[14] + jpeg_tables = s[15] + rawmode = self.rawmode + + if internal_color_conversion: + # The image is stored as usual (usually YCbCr). + if rawmode == "RGBA": + # For "RGBA", data is stored as YCbCrA based on + # negative RGB. The following trick works around + # this problem : + jpegmode, rawmode = "YCbCrK", "CMYK" + else: + jpegmode = None # let the decoder decide + + else: + # The image is stored as defined by rawmode + jpegmode = rawmode + + self.tile.append( + ImageFile._Tile( + "jpeg", + (x, y, x1, y1), + i32(s, i) + 28, + (rawmode, jpegmode), + ) + ) + + # FIXME: jpeg tables are tile dependent; the prefix + # data must be placed in the tile descriptor itself! + + if jpeg_tables: + self.tile_prefix = self.jpeg[jpeg_tables] + + else: + msg = "unknown/invalid compression" + raise OSError(msg) + + x += xtile + if x >= xsize: + x, y = 0, y + ytile + if y >= ysize: + break # isn't really required + + assert self.fp is not None + self.stream = stream + self._fp = self.fp + self.fp = None + + def load(self) -> Image.core.PixelAccess | None: + if not self.fp: + self.fp = self.ole.openstream(self.stream[:2] + ["Subimage 0000 Data"]) + + return ImageFile.ImageFile.load(self) + + def close(self) -> None: + self.ole.close() + super().close() + + def __exit__(self, *args: object) -> None: + self.ole.close() + super().__exit__() + + +# +# -------------------------------------------------------------------- + + +Image.register_open(FpxImageFile.format, FpxImageFile, _accept) + +Image.register_extension(FpxImageFile.format, ".fpx") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/FtexImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/FtexImagePlugin.py new file mode 100644 index 0000000..e4d836c --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/FtexImagePlugin.py @@ -0,0 +1,115 @@ +""" +A Pillow loader for .ftc and .ftu files (FTEX) +Jerome Leclanche + +The contents of this file are hereby released in the public domain (CC0) +Full text of the CC0 license: + https://creativecommons.org/publicdomain/zero/1.0/ + +Independence War 2: Edge Of Chaos - Texture File Format - 16 October 2001 + +The textures used for 3D objects in Independence War 2: Edge Of Chaos are in a +packed custom format called FTEX. This file format uses file extensions FTC +and FTU. +* FTC files are compressed textures (using standard texture compression). +* FTU files are not compressed. +Texture File Format +The FTC and FTU texture files both use the same format. This +has the following structure: +{header} +{format_directory} +{data} +Where: +{header} = { + u32:magic, + u32:version, + u32:width, + u32:height, + u32:mipmap_count, + u32:format_count +} + +* The "magic" number is "FTEX". +* "width" and "height" are the dimensions of the texture. +* "mipmap_count" is the number of mipmaps in the texture. +* "format_count" is the number of texture formats (different versions of the +same texture) in this file. + +{format_directory} = format_count * { u32:format, u32:where } + +The format value is 0 for DXT1 compressed textures and 1 for 24-bit RGB +uncompressed textures. +The texture data for a format starts at the position "where" in the file. + +Each set of texture data in the file has the following structure: +{data} = format_count * { u32:mipmap_size, mipmap_size * { u8 } } +* "mipmap_size" is the number of bytes in that mip level. For compressed +textures this is the size of the texture data compressed with DXT1. For 24 bit +uncompressed textures, this is 3 * width * height. Following this are the image +bytes for that mipmap level. + +Note: All data is stored in little-Endian (Intel) byte order. +""" + +from __future__ import annotations + +import struct +from enum import IntEnum +from io import BytesIO + +from . import Image, ImageFile + +MAGIC = b"FTEX" + + +class Format(IntEnum): + DXT1 = 0 + UNCOMPRESSED = 1 + + +class FtexImageFile(ImageFile.ImageFile): + format = "FTEX" + format_description = "Texture File Format (IW2:EOC)" + + def _open(self) -> None: + assert self.fp is not None + if not _accept(self.fp.read(4)): + msg = "not an FTEX file" + raise SyntaxError(msg) + struct.unpack(" None: + pass + + +def _accept(prefix: bytes) -> bool: + return prefix.startswith(MAGIC) + + +Image.register_open(FtexImageFile.format, FtexImageFile, _accept) +Image.register_extensions(FtexImageFile.format, [".ftc", ".ftu"]) diff --git a/Python/venv/lib/python3.12/site-packages/PIL/GbrImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/GbrImagePlugin.py new file mode 100644 index 0000000..ec666c8 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/GbrImagePlugin.py @@ -0,0 +1,103 @@ +# +# The Python Imaging Library +# +# load a GIMP brush file +# +# History: +# 96-03-14 fl Created +# 16-01-08 es Version 2 +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1996. +# Copyright (c) Eric Soroos 2016. +# +# See the README file for information on usage and redistribution. +# +# +# See https://github.com/GNOME/gimp/blob/mainline/devel-docs/gbr.txt for +# format documentation. +# +# This code Interprets version 1 and 2 .gbr files. +# Version 1 files are obsolete, and should not be used for new +# brushes. +# Version 2 files are saved by GIMP v2.8 (at least) +# Version 3 files have a format specifier of 18 for 16bit floats in +# the color depth field. This is currently unsupported by Pillow. +from __future__ import annotations + +from . import Image, ImageFile +from ._binary import i32be as i32 + + +def _accept(prefix: bytes) -> bool: + return len(prefix) >= 8 and i32(prefix, 0) >= 20 and i32(prefix, 4) in (1, 2) + + +## +# Image plugin for the GIMP brush format. + + +class GbrImageFile(ImageFile.ImageFile): + format = "GBR" + format_description = "GIMP brush file" + + def _open(self) -> None: + assert self.fp is not None + header_size = i32(self.fp.read(4)) + if header_size < 20: + msg = "not a GIMP brush" + raise SyntaxError(msg) + version = i32(self.fp.read(4)) + if version not in (1, 2): + msg = f"Unsupported GIMP brush version: {version}" + raise SyntaxError(msg) + + width = i32(self.fp.read(4)) + height = i32(self.fp.read(4)) + color_depth = i32(self.fp.read(4)) + if width == 0 or height == 0: + msg = "not a GIMP brush" + raise SyntaxError(msg) + if color_depth not in (1, 4): + msg = f"Unsupported GIMP brush color depth: {color_depth}" + raise SyntaxError(msg) + + if version == 1: + comment_length = header_size - 20 + else: + comment_length = header_size - 28 + magic_number = self.fp.read(4) + if magic_number != b"GIMP": + msg = "not a GIMP brush, bad magic number" + raise SyntaxError(msg) + self.info["spacing"] = i32(self.fp.read(4)) + + self.info["comment"] = self.fp.read(comment_length)[:-1] + + if color_depth == 1: + self._mode = "L" + else: + self._mode = "RGBA" + + self._size = width, height + + # Image might not be small + Image._decompression_bomb_check(self.size) + + # Data is an uncompressed block of w * h * bytes/pixel + self._data_size = width * height * color_depth + + def load(self) -> Image.core.PixelAccess | None: + if self._im is None: + assert self.fp is not None + self.im = Image.core.new(self.mode, self.size) + self.frombytes(self.fp.read(self._data_size)) + return Image.Image.load(self) + + +# +# registry + + +Image.register_open(GbrImageFile.format, GbrImageFile, _accept) +Image.register_extension(GbrImageFile.format, ".gbr") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/GdImageFile.py b/Python/venv/lib/python3.12/site-packages/PIL/GdImageFile.py new file mode 100644 index 0000000..d73bc19 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/GdImageFile.py @@ -0,0 +1,103 @@ +# +# The Python Imaging Library. +# $Id$ +# +# GD file handling +# +# History: +# 1996-04-12 fl Created +# +# Copyright (c) 1997 by Secret Labs AB. +# Copyright (c) 1996 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + + +""" +.. note:: + This format cannot be automatically recognized, so the + class is not registered for use with :py:func:`PIL.Image.open()`. To open a + gd file, use the :py:func:`PIL.GdImageFile.open()` function instead. + +.. warning:: + THE GD FORMAT IS NOT DESIGNED FOR DATA INTERCHANGE. This + implementation is provided for convenience and demonstrational + purposes only. +""" + +from __future__ import annotations + +from typing import IO + +from . import ImageFile, ImagePalette, UnidentifiedImageError +from ._binary import i16be as i16 +from ._binary import i32be as i32 +from ._typing import StrOrBytesPath + + +class GdImageFile(ImageFile.ImageFile): + """ + Image plugin for the GD uncompressed format. Note that this format + is not supported by the standard :py:func:`PIL.Image.open()` function. To use + this plugin, you have to import the :py:mod:`PIL.GdImageFile` module and + use the :py:func:`PIL.GdImageFile.open()` function. + """ + + format = "GD" + format_description = "GD uncompressed images" + + def _open(self) -> None: + # Header + assert self.fp is not None + + s = self.fp.read(1037) + + if i16(s) not in [65534, 65535]: + msg = "Not a valid GD 2.x .gd file" + raise SyntaxError(msg) + + self._mode = "P" + self._size = i16(s, 2), i16(s, 4) + + true_color = s[6] + true_color_offset = 2 if true_color else 0 + + # transparency index + tindex = i32(s, 7 + true_color_offset) + if tindex < 256: + self.info["transparency"] = tindex + + self.palette = ImagePalette.raw( + "RGBX", s[7 + true_color_offset + 6 : 7 + true_color_offset + 6 + 256 * 4] + ) + + self.tile = [ + ImageFile._Tile( + "raw", + (0, 0) + self.size, + 7 + true_color_offset + 6 + 256 * 4, + "L", + ) + ] + + +def open(fp: StrOrBytesPath | IO[bytes], mode: str = "r") -> GdImageFile: + """ + Load texture from a GD image file. + + :param fp: GD file name, or an opened file handle. + :param mode: Optional mode. In this version, if the mode argument + is given, it must be "r". + :returns: An image instance. + :raises OSError: If the image could not be read. + """ + if mode != "r": + msg = "bad mode" + raise ValueError(msg) + + try: + return GdImageFile(fp) + except SyntaxError as e: + msg = "cannot identify this image file" + raise UnidentifiedImageError(msg) from e diff --git a/Python/venv/lib/python3.12/site-packages/PIL/GifImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/GifImagePlugin.py new file mode 100644 index 0000000..b8db5d8 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/GifImagePlugin.py @@ -0,0 +1,1223 @@ +# +# The Python Imaging Library. +# $Id$ +# +# GIF file handling +# +# History: +# 1995-09-01 fl Created +# 1996-12-14 fl Added interlace support +# 1996-12-30 fl Added animation support +# 1997-01-05 fl Added write support, fixed local colour map bug +# 1997-02-23 fl Make sure to load raster data in getdata() +# 1997-07-05 fl Support external decoder (0.4) +# 1998-07-09 fl Handle all modes when saving (0.5) +# 1998-07-15 fl Renamed offset attribute to avoid name clash +# 2001-04-16 fl Added rewind support (seek to frame 0) (0.6) +# 2001-04-17 fl Added palette optimization (0.7) +# 2002-06-06 fl Added transparency support for save (0.8) +# 2004-02-24 fl Disable interlacing for small images +# +# Copyright (c) 1997-2004 by Secret Labs AB +# Copyright (c) 1995-2004 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import itertools +import math +import os +import subprocess +from enum import IntEnum +from functools import cached_property +from typing import Any, NamedTuple, cast + +from . import ( + Image, + ImageChops, + ImageFile, + ImageMath, + ImageOps, + ImagePalette, + ImageSequence, +) +from ._binary import i16le as i16 +from ._binary import o8 +from ._binary import o16le as o16 +from ._util import DeferredError + +TYPE_CHECKING = False +if TYPE_CHECKING: + from typing import IO, Literal + + from . import _imaging + from ._typing import Buffer + + +class LoadingStrategy(IntEnum): + """.. versionadded:: 9.1.0""" + + RGB_AFTER_FIRST = 0 + RGB_AFTER_DIFFERENT_PALETTE_ONLY = 1 + RGB_ALWAYS = 2 + + +#: .. versionadded:: 9.1.0 +LOADING_STRATEGY = LoadingStrategy.RGB_AFTER_FIRST + +# -------------------------------------------------------------------- +# Identify/read GIF files + + +def _accept(prefix: bytes) -> bool: + return prefix.startswith((b"GIF87a", b"GIF89a")) + + +## +# Image plugin for GIF images. This plugin supports both GIF87 and +# GIF89 images. + + +class GifImageFile(ImageFile.ImageFile): + format = "GIF" + format_description = "Compuserve GIF" + _close_exclusive_fp_after_loading = False + + global_palette = None + + def data(self) -> bytes | None: + assert self.fp is not None + s = self.fp.read(1) + if s and s[0]: + return self.fp.read(s[0]) + return None + + def _is_palette_needed(self, p: bytes) -> bool: + for i in range(0, len(p), 3): + if not (i // 3 == p[i] == p[i + 1] == p[i + 2]): + return True + return False + + def _open(self) -> None: + # Screen + assert self.fp is not None + s = self.fp.read(13) + if not _accept(s): + msg = "not a GIF file" + raise SyntaxError(msg) + + self.info["version"] = s[:6] + self._size = i16(s, 6), i16(s, 8) + flags = s[10] + bits = (flags & 7) + 1 + + if flags & 128: + # get global palette + self.info["background"] = s[11] + # check if palette contains colour indices + p = self.fp.read(3 << bits) + if self._is_palette_needed(p): + palette = ImagePalette.raw("RGB", p) + self.global_palette = self.palette = palette + + self._fp = self.fp # FIXME: hack + self.__rewind = self.fp.tell() + self._n_frames: int | None = None + self._seek(0) # get ready to read first frame + + @property + def n_frames(self) -> int: + if self._n_frames is None: + current = self.tell() + try: + while True: + self._seek(self.tell() + 1, False) + except EOFError: + self._n_frames = self.tell() + 1 + self.seek(current) + return self._n_frames + + @cached_property + def is_animated(self) -> bool: + if self._n_frames is not None: + return self._n_frames != 1 + + current = self.tell() + if current: + return True + + try: + self._seek(1, False) + is_animated = True + except EOFError: + is_animated = False + + self.seek(current) + return is_animated + + def seek(self, frame: int) -> None: + if not self._seek_check(frame): + return + if frame < self.__frame: + self._im = None + self._seek(0) + + last_frame = self.__frame + try: + for f in range(self.__frame + 1, frame + 1): + self._seek(f) + except EOFError as e: + self.seek(last_frame) + msg = "no more images in GIF file" + raise EOFError(msg) from e + + def _seek(self, frame: int, update_image: bool = True) -> None: + if isinstance(self._fp, DeferredError): + raise self._fp.ex + if frame == 0: + # rewind + self.__offset = 0 + self.dispose: _imaging.ImagingCore | None = None + self.__frame = -1 + self._fp.seek(self.__rewind) + self.disposal_method = 0 + if "comment" in self.info: + del self.info["comment"] + else: + # ensure that the previous frame was loaded + if self.tile and update_image: + self.load() + + if frame != self.__frame + 1: + msg = f"cannot seek to frame {frame}" + raise ValueError(msg) + + self.fp = self._fp + if self.__offset: + # backup to last frame + self.fp.seek(self.__offset) + while self.data(): + pass + self.__offset = 0 + + s = self.fp.read(1) + if not s or s == b";": + msg = "no more images in GIF file" + raise EOFError(msg) + + palette: ImagePalette.ImagePalette | Literal[False] | None = None + + info: dict[str, Any] = {} + frame_transparency = None + interlace = None + frame_dispose_extent = None + while True: + if not s: + s = self.fp.read(1) + if not s or s == b";": + break + + elif s == b"!": + # + # extensions + # + s = self.fp.read(1) + block = self.data() + if s[0] == 249 and block is not None: + # + # graphic control extension + # + flags = block[0] + if flags & 1: + frame_transparency = block[3] + info["duration"] = i16(block, 1) * 10 + + # disposal method - find the value of bits 4 - 6 + dispose_bits = 0b00011100 & flags + dispose_bits = dispose_bits >> 2 + if dispose_bits: + # only set the dispose if it is not + # unspecified. I'm not sure if this is + # correct, but it seems to prevent the last + # frame from looking odd for some animations + self.disposal_method = dispose_bits + elif s[0] == 254: + # + # comment extension + # + comment = b"" + + # Read this comment block + while block: + comment += block + block = self.data() + + if "comment" in info: + # If multiple comment blocks in frame, separate with \n + info["comment"] += b"\n" + comment + else: + info["comment"] = comment + s = b"" + continue + elif s[0] == 255 and frame == 0 and block is not None: + # + # application extension + # + info["extension"] = block, self.fp.tell() + if block.startswith(b"NETSCAPE2.0"): + block = self.data() + if block and len(block) >= 3 and block[0] == 1: + self.info["loop"] = i16(block, 1) + while self.data(): + pass + + elif s == b",": + # + # local image + # + s = self.fp.read(9) + + # extent + x0, y0 = i16(s, 0), i16(s, 2) + x1, y1 = x0 + i16(s, 4), y0 + i16(s, 6) + if (x1 > self.size[0] or y1 > self.size[1]) and update_image: + self._size = max(x1, self.size[0]), max(y1, self.size[1]) + Image._decompression_bomb_check(self._size) + frame_dispose_extent = x0, y0, x1, y1 + flags = s[8] + + interlace = (flags & 64) != 0 + + if flags & 128: + bits = (flags & 7) + 1 + p = self.fp.read(3 << bits) + if self._is_palette_needed(p): + palette = ImagePalette.raw("RGB", p) + else: + palette = False + + # image data + bits = self.fp.read(1)[0] + self.__offset = self.fp.tell() + break + s = b"" + + if interlace is None: + msg = "image not found in GIF frame" + raise EOFError(msg) + + self.__frame = frame + if not update_image: + return + + self.tile = [] + + if self.dispose: + self.im.paste(self.dispose, self.dispose_extent) + + self._frame_palette = palette if palette is not None else self.global_palette + self._frame_transparency = frame_transparency + if frame == 0: + if self._frame_palette: + if LOADING_STRATEGY == LoadingStrategy.RGB_ALWAYS: + self._mode = "RGBA" if frame_transparency is not None else "RGB" + else: + self._mode = "P" + else: + self._mode = "L" + + if palette: + self.palette = palette + elif self.global_palette: + from copy import copy + + self.palette = copy(self.global_palette) + else: + self.palette = None + else: + if self.mode == "P": + if ( + LOADING_STRATEGY != LoadingStrategy.RGB_AFTER_DIFFERENT_PALETTE_ONLY + or palette + ): + if "transparency" in self.info: + self.im.putpalettealpha(self.info["transparency"], 0) + self.im = self.im.convert("RGBA", Image.Dither.FLOYDSTEINBERG) + self._mode = "RGBA" + del self.info["transparency"] + else: + self._mode = "RGB" + self.im = self.im.convert("RGB", Image.Dither.FLOYDSTEINBERG) + + def _rgb(color: int) -> tuple[int, int, int]: + if self._frame_palette: + if color * 3 + 3 > len(self._frame_palette.palette): + color = 0 + return cast( + tuple[int, int, int], + tuple(self._frame_palette.palette[color * 3 : color * 3 + 3]), + ) + else: + return (color, color, color) + + self.dispose = None + self.dispose_extent: tuple[int, int, int, int] | None = frame_dispose_extent + if self.dispose_extent and self.disposal_method >= 2: + try: + if self.disposal_method == 2: + # replace with background colour + + # only dispose the extent in this frame + x0, y0, x1, y1 = self.dispose_extent + dispose_size = (x1 - x0, y1 - y0) + + Image._decompression_bomb_check(dispose_size) + + # by convention, attempt to use transparency first + dispose_mode = "P" + color = self.info.get("transparency", frame_transparency) + if color is not None: + if self.mode in ("RGB", "RGBA"): + dispose_mode = "RGBA" + color = _rgb(color) + (0,) + else: + color = self.info.get("background", 0) + if self.mode in ("RGB", "RGBA"): + dispose_mode = "RGB" + color = _rgb(color) + self.dispose = Image.core.fill(dispose_mode, dispose_size, color) + else: + # replace with previous contents + if self._im is not None: + # only dispose the extent in this frame + self.dispose = self._crop(self.im, self.dispose_extent) + elif frame_transparency is not None: + x0, y0, x1, y1 = self.dispose_extent + dispose_size = (x1 - x0, y1 - y0) + + Image._decompression_bomb_check(dispose_size) + dispose_mode = "P" + color = frame_transparency + if self.mode in ("RGB", "RGBA"): + dispose_mode = "RGBA" + color = _rgb(frame_transparency) + (0,) + self.dispose = Image.core.fill( + dispose_mode, dispose_size, color + ) + except AttributeError: + pass + + if interlace is not None: + transparency = -1 + if frame_transparency is not None: + if frame == 0: + if LOADING_STRATEGY != LoadingStrategy.RGB_ALWAYS: + self.info["transparency"] = frame_transparency + elif self.mode not in ("RGB", "RGBA"): + transparency = frame_transparency + self.tile = [ + ImageFile._Tile( + "gif", + (x0, y0, x1, y1), + self.__offset, + (bits, interlace, transparency), + ) + ] + + if info.get("comment"): + self.info["comment"] = info["comment"] + for k in ["duration", "extension"]: + if k in info: + self.info[k] = info[k] + elif k in self.info: + del self.info[k] + + def load_prepare(self) -> None: + temp_mode = "P" if self._frame_palette else "L" + self._prev_im = None + if self.__frame == 0: + if self._frame_transparency is not None: + self.im = Image.core.fill( + temp_mode, self.size, self._frame_transparency + ) + elif self.mode in ("RGB", "RGBA"): + self._prev_im = self.im + if self._frame_palette: + self.im = Image.core.fill("P", self.size, self._frame_transparency or 0) + self.im.putpalette("RGB", *self._frame_palette.getdata()) + else: + self._im = None + if not self._prev_im and self._im is not None and self.size != self.im.size: + expanded_im = Image.core.fill(self.im.mode, self.size) + if self._frame_palette: + expanded_im.putpalette("RGB", *self._frame_palette.getdata()) + expanded_im.paste(self.im, (0, 0) + self.im.size) + + self.im = expanded_im + self._mode = temp_mode + self._frame_palette = None + + super().load_prepare() + + def load_end(self) -> None: + if self.__frame == 0: + if self.mode == "P" and LOADING_STRATEGY == LoadingStrategy.RGB_ALWAYS: + if self._frame_transparency is not None: + self.im.putpalettealpha(self._frame_transparency, 0) + self._mode = "RGBA" + else: + self._mode = "RGB" + self.im = self.im.convert(self.mode, Image.Dither.FLOYDSTEINBERG) + return + if not self._prev_im: + return + if self.size != self._prev_im.size: + if self._frame_transparency is not None: + expanded_im = Image.core.fill("RGBA", self.size) + else: + expanded_im = Image.core.fill("P", self.size) + expanded_im.putpalette("RGB", "RGB", self.im.getpalette()) + expanded_im = expanded_im.convert("RGB") + expanded_im.paste(self._prev_im, (0, 0) + self._prev_im.size) + + self._prev_im = expanded_im + assert self._prev_im is not None + if self._frame_transparency is not None: + if self.mode == "L": + frame_im = self.im.convert_transparent("LA", self._frame_transparency) + else: + self.im.putpalettealpha(self._frame_transparency, 0) + frame_im = self.im.convert("RGBA") + else: + frame_im = self.im.convert("RGB") + + assert self.dispose_extent is not None + frame_im = self._crop(frame_im, self.dispose_extent) + + self.im = self._prev_im + self._mode = self.im.mode + if frame_im.mode in ("LA", "RGBA"): + self.im.paste(frame_im, self.dispose_extent, frame_im) + else: + self.im.paste(frame_im, self.dispose_extent) + + def tell(self) -> int: + return self.__frame + + +# -------------------------------------------------------------------- +# Write GIF files + + +RAWMODE = {"1": "L", "L": "L", "P": "P"} + + +def _normalize_mode(im: Image.Image) -> Image.Image: + """ + Takes an image (or frame), returns an image in a mode that is appropriate + for saving in a Gif. + + It may return the original image, or it may return an image converted to + palette or 'L' mode. + + :param im: Image object + :returns: Image object + """ + if im.mode in RAWMODE: + im.load() + return im + if Image.getmodebase(im.mode) == "RGB": + im = im.convert("P", palette=Image.Palette.ADAPTIVE) + assert im.palette is not None + if im.palette.mode == "RGBA": + for rgba in im.palette.colors: + if rgba[3] == 0: + im.info["transparency"] = im.palette.colors[rgba] + break + return im + return im.convert("L") + + +_Palette = bytes | bytearray | list[int] | ImagePalette.ImagePalette + + +def _normalize_palette( + im: Image.Image, palette: _Palette | None, info: dict[str, Any] +) -> Image.Image: + """ + Normalizes the palette for image. + - Sets the palette to the incoming palette, if provided. + - Ensures that there's a palette for L mode images + - Optimizes the palette if necessary/desired. + + :param im: Image object + :param palette: bytes object containing the source palette, or .... + :param info: encoderinfo + :returns: Image object + """ + source_palette = None + if palette: + # a bytes palette + if isinstance(palette, (bytes, bytearray, list)): + source_palette = bytearray(palette[:768]) + if isinstance(palette, ImagePalette.ImagePalette): + source_palette = bytearray(palette.palette) + + if im.mode == "P": + if not source_palette: + im_palette = im.getpalette(None) + assert im_palette is not None + source_palette = bytearray(im_palette) + else: # L-mode + if not source_palette: + source_palette = bytearray(i // 3 for i in range(768)) + im.palette = ImagePalette.ImagePalette("RGB", palette=source_palette) + assert source_palette is not None + + if palette: + used_palette_colors: list[int | None] = [] + assert im.palette is not None + for i in range(0, len(source_palette), 3): + source_color = tuple(source_palette[i : i + 3]) + index = im.palette.colors.get(source_color) + if index in used_palette_colors: + index = None + used_palette_colors.append(index) + for i, index in enumerate(used_palette_colors): + if index is None: + for j in range(len(used_palette_colors)): + if j not in used_palette_colors: + used_palette_colors[i] = j + break + dest_map: list[int] = [] + for index in used_palette_colors: + assert index is not None + dest_map.append(index) + im = im.remap_palette(dest_map) + else: + optimized_palette_colors = _get_optimize(im, info) + if optimized_palette_colors is not None: + im = im.remap_palette(optimized_palette_colors, source_palette) + if "transparency" in info: + try: + info["transparency"] = optimized_palette_colors.index( + info["transparency"] + ) + except ValueError: + del info["transparency"] + return im + + assert im.palette is not None + im.palette.palette = source_palette + return im + + +def _write_single_frame( + im: Image.Image, + fp: IO[bytes], + palette: _Palette | None, +) -> None: + im_out = _normalize_mode(im) + for k, v in im_out.info.items(): + if isinstance(k, str): + im.encoderinfo.setdefault(k, v) + im_out = _normalize_palette(im_out, palette, im.encoderinfo) + + for s in _get_global_header(im_out, im.encoderinfo): + fp.write(s) + + # local image header + flags = 0 + if get_interlace(im): + flags = flags | 64 + _write_local_header(fp, im, (0, 0), flags) + + im_out.encoderconfig = (8, get_interlace(im)) + ImageFile._save( + im_out, fp, [ImageFile._Tile("gif", (0, 0) + im.size, 0, RAWMODE[im_out.mode])] + ) + + fp.write(b"\0") # end of image data + + +def _getbbox( + base_im: Image.Image, im_frame: Image.Image +) -> tuple[Image.Image, tuple[int, int, int, int] | None]: + palette_bytes = [ + bytes(im.palette.palette) if im.palette else b"" for im in (base_im, im_frame) + ] + if palette_bytes[0] != palette_bytes[1]: + im_frame = im_frame.convert("RGBA") + base_im = base_im.convert("RGBA") + delta = ImageChops.subtract_modulo(im_frame, base_im) + return delta, delta.getbbox(alpha_only=False) + + +class _Frame(NamedTuple): + im: Image.Image + bbox: tuple[int, int, int, int] | None + encoderinfo: dict[str, Any] + + +def _write_multiple_frames( + im: Image.Image, fp: IO[bytes], palette: _Palette | None +) -> bool: + duration = im.encoderinfo.get("duration") + disposal = im.encoderinfo.get("disposal", im.info.get("disposal")) + + im_frames: list[_Frame] = [] + previous_im: Image.Image | None = None + frame_count = 0 + background_im = None + for imSequence in itertools.chain([im], im.encoderinfo.get("append_images", [])): + for im_frame in ImageSequence.Iterator(imSequence): + # a copy is required here since seek can still mutate the image + im_frame = _normalize_mode(im_frame.copy()) + if frame_count == 0: + for k, v in im_frame.info.items(): + if k == "transparency": + continue + if isinstance(k, str): + im.encoderinfo.setdefault(k, v) + + encoderinfo = im.encoderinfo.copy() + if "transparency" in im_frame.info: + encoderinfo.setdefault("transparency", im_frame.info["transparency"]) + im_frame = _normalize_palette(im_frame, palette, encoderinfo) + if isinstance(duration, (list, tuple)): + encoderinfo["duration"] = duration[frame_count] + elif duration is None and "duration" in im_frame.info: + encoderinfo["duration"] = im_frame.info["duration"] + if isinstance(disposal, (list, tuple)): + encoderinfo["disposal"] = disposal[frame_count] + frame_count += 1 + + diff_frame = None + if im_frames and previous_im: + # delta frame + delta, bbox = _getbbox(previous_im, im_frame) + if not bbox: + # This frame is identical to the previous frame + if encoderinfo.get("duration"): + im_frames[-1].encoderinfo["duration"] += encoderinfo["duration"] + continue + if im_frames[-1].encoderinfo.get("disposal") == 2: + # To appear correctly in viewers using a convention, + # only consider transparency, and not background color + color = im.encoderinfo.get( + "transparency", im.info.get("transparency") + ) + if color is not None: + if background_im is None: + background = _get_background(im_frame, color) + background_im = Image.new("P", im_frame.size, background) + first_palette = im_frames[0].im.palette + assert first_palette is not None + background_im.putpalette(first_palette, first_palette.mode) + bbox = _getbbox(background_im, im_frame)[1] + else: + bbox = (0, 0) + im_frame.size + elif encoderinfo.get("optimize") and im_frame.mode != "1": + if "transparency" not in encoderinfo: + assert im_frame.palette is not None + try: + encoderinfo["transparency"] = ( + im_frame.palette._new_color_index(im_frame) + ) + except ValueError: + pass + if "transparency" in encoderinfo: + # When the delta is zero, fill the image with transparency + diff_frame = im_frame.copy() + fill = Image.new("P", delta.size, encoderinfo["transparency"]) + if delta.mode == "RGBA": + r, g, b, a = delta.split() + mask = ImageMath.lambda_eval( + lambda args: args["convert"]( + args["max"]( + args["max"]( + args["max"](args["r"], args["g"]), args["b"] + ), + args["a"], + ) + * 255, + "1", + ), + r=r, + g=g, + b=b, + a=a, + ) + else: + if delta.mode == "P": + # Convert to L without considering palette + delta_l = Image.new("L", delta.size) + delta_l.putdata(delta.get_flattened_data()) + delta = delta_l + mask = ImageMath.lambda_eval( + lambda args: args["convert"](args["im"] * 255, "1"), + im=delta, + ) + diff_frame.paste(fill, mask=ImageOps.invert(mask)) + else: + bbox = None + previous_im = im_frame + im_frames.append(_Frame(diff_frame or im_frame, bbox, encoderinfo)) + + if len(im_frames) == 1: + if "duration" in im.encoderinfo: + # Since multiple frames will not be written, use the combined duration + im.encoderinfo["duration"] = im_frames[0].encoderinfo["duration"] + return False + + for frame_data in im_frames: + im_frame = frame_data.im + if not frame_data.bbox: + # global header + for s in _get_global_header(im_frame, frame_data.encoderinfo): + fp.write(s) + offset = (0, 0) + else: + # compress difference + if not palette: + frame_data.encoderinfo["include_color_table"] = True + + if frame_data.bbox != (0, 0) + im_frame.size: + im_frame = im_frame.crop(frame_data.bbox) + offset = frame_data.bbox[:2] + _write_frame_data(fp, im_frame, offset, frame_data.encoderinfo) + return True + + +def _save_all(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + _save(im, fp, filename, save_all=True) + + +def _save( + im: Image.Image, fp: IO[bytes], filename: str | bytes, save_all: bool = False +) -> None: + # header + if "palette" in im.encoderinfo or "palette" in im.info: + palette = im.encoderinfo.get("palette", im.info.get("palette")) + else: + palette = None + im.encoderinfo.setdefault("optimize", True) + + if not save_all or not _write_multiple_frames(im, fp, palette): + _write_single_frame(im, fp, palette) + + fp.write(b";") # end of file + + if hasattr(fp, "flush"): + fp.flush() + + +def get_interlace(im: Image.Image) -> int: + interlace = im.encoderinfo.get("interlace", 1) + + # workaround for @PIL153 + if min(im.size) < 16: + interlace = 0 + + return interlace + + +def _write_local_header( + fp: IO[bytes], im: Image.Image, offset: tuple[int, int], flags: int +) -> None: + try: + transparency = im.encoderinfo["transparency"] + except KeyError: + transparency = None + + if "duration" in im.encoderinfo: + duration = int(im.encoderinfo["duration"] / 10) + else: + duration = 0 + + disposal = int(im.encoderinfo.get("disposal", 0)) + + if transparency is not None or duration != 0 or disposal: + packed_flag = 1 if transparency is not None else 0 + packed_flag |= disposal << 2 + + fp.write( + b"!" + + o8(249) # extension intro + + o8(4) # length + + o8(packed_flag) # packed fields + + o16(duration) # duration + + o8(transparency or 0) # transparency index + + o8(0) + ) + + include_color_table = im.encoderinfo.get("include_color_table") + if include_color_table: + palette_bytes = _get_palette_bytes(im) + color_table_size = _get_color_table_size(palette_bytes) + if color_table_size: + flags = flags | 128 # local color table flag + flags = flags | color_table_size + + fp.write( + b"," + + o16(offset[0]) # offset + + o16(offset[1]) + + o16(im.size[0]) # size + + o16(im.size[1]) + + o8(flags) # flags + ) + if include_color_table and color_table_size: + fp.write(_get_header_palette(palette_bytes)) + fp.write(o8(8)) # bits + + +def _save_netpbm(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + # Unused by default. + # To use, uncomment the register_save call at the end of the file. + # + # If you need real GIF compression and/or RGB quantization, you + # can use the external NETPBM/PBMPLUS utilities. See comments + # below for information on how to enable this. + tempfile = im._dump() + + try: + with open(filename, "wb") as f: + if im.mode != "RGB": + subprocess.check_call( + ["ppmtogif", tempfile], stdout=f, stderr=subprocess.DEVNULL + ) + else: + # Pipe ppmquant output into ppmtogif + # "ppmquant 256 %s | ppmtogif > %s" % (tempfile, filename) + quant_cmd = ["ppmquant", "256", tempfile] + togif_cmd = ["ppmtogif"] + quant_proc = subprocess.Popen( + quant_cmd, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL + ) + togif_proc = subprocess.Popen( + togif_cmd, + stdin=quant_proc.stdout, + stdout=f, + stderr=subprocess.DEVNULL, + ) + + # Allow ppmquant to receive SIGPIPE if ppmtogif exits + assert quant_proc.stdout is not None + quant_proc.stdout.close() + + retcode = quant_proc.wait() + if retcode: + raise subprocess.CalledProcessError(retcode, quant_cmd) + + retcode = togif_proc.wait() + if retcode: + raise subprocess.CalledProcessError(retcode, togif_cmd) + finally: + try: + os.unlink(tempfile) + except OSError: + pass + + +# Force optimization so that we can test performance against +# cases where it took lots of memory and time previously. +_FORCE_OPTIMIZE = False + + +def _get_optimize(im: Image.Image, info: dict[str, Any]) -> list[int] | None: + """ + Palette optimization is a potentially expensive operation. + + This function determines if the palette should be optimized using + some heuristics, then returns the list of palette entries in use. + + :param im: Image object + :param info: encoderinfo + :returns: list of indexes of palette entries in use, or None + """ + if ( + im.mode in ("P", "L") + and info + and info.get("optimize") + and im.width != 0 + and im.height != 0 + ): + # Potentially expensive operation. + + # The palette saves 3 bytes per color not used, but palette + # lengths are restricted to 3*(2**N) bytes. Max saving would + # be 768 -> 6 bytes if we went all the way down to 2 colors. + # * If we're over 128 colors, we can't save any space. + # * If there aren't any holes, it's not worth collapsing. + # * If we have a 'large' image, the palette is in the noise. + + # create the new palette if not every color is used + optimise = _FORCE_OPTIMIZE or im.mode == "L" + if optimise or im.width * im.height < 512 * 512: + # check which colors are used + used_palette_colors = [] + for i, count in enumerate(im.histogram()): + if count: + used_palette_colors.append(i) + + if optimise or max(used_palette_colors) >= len(used_palette_colors): + return used_palette_colors + + assert im.palette is not None + num_palette_colors = len(im.palette.palette) // Image.getmodebands( + im.palette.mode + ) + current_palette_size = 1 << (num_palette_colors - 1).bit_length() + if ( + # check that the palette would become smaller when saved + len(used_palette_colors) <= current_palette_size // 2 + # check that the palette is not already the smallest possible size + and current_palette_size > 2 + ): + return used_palette_colors + return None + + +def _get_color_table_size(palette_bytes: bytes) -> int: + # calculate the palette size for the header + if not palette_bytes: + return 0 + elif len(palette_bytes) < 9: + return 1 + else: + return math.ceil(math.log(len(palette_bytes) // 3, 2)) - 1 + + +def _get_header_palette(palette_bytes: bytes) -> bytes: + """ + Returns the palette, null padded to the next power of 2 (*3) bytes + suitable for direct inclusion in the GIF header + + :param palette_bytes: Unpadded palette bytes, in RGBRGB form + :returns: Null padded palette + """ + color_table_size = _get_color_table_size(palette_bytes) + + # add the missing amount of bytes + # the palette has to be 2< 0: + palette_bytes += o8(0) * 3 * actual_target_size_diff + return palette_bytes + + +def _get_palette_bytes(im: Image.Image) -> bytes: + """ + Gets the palette for inclusion in the gif header + + :param im: Image object + :returns: Bytes, len<=768 suitable for inclusion in gif header + """ + if not im.palette: + return b"" + + palette = bytes(im.palette.palette) + if im.palette.mode == "RGBA": + palette = b"".join(palette[i * 4 : i * 4 + 3] for i in range(len(palette) // 3)) + return palette + + +def _get_background( + im: Image.Image, + info_background: int | tuple[int, int, int] | tuple[int, int, int, int] | None, +) -> int: + background = 0 + if info_background: + if isinstance(info_background, tuple): + # WebPImagePlugin stores an RGBA value in info["background"] + # So it must be converted to the same format as GifImagePlugin's + # info["background"] - a global color table index + assert im.palette is not None + try: + background = im.palette.getcolor(info_background, im) + except ValueError as e: + if str(e) not in ( + # If all 256 colors are in use, + # then there is no need for the background color + "cannot allocate more than 256 colors", + # Ignore non-opaque WebP background + "cannot add non-opaque RGBA color to RGB palette", + ): + raise + else: + background = info_background + return background + + +def _get_global_header(im: Image.Image, info: dict[str, Any]) -> list[bytes]: + """Return a list of strings representing a GIF header""" + + # Header Block + # https://www.matthewflickinger.com/lab/whatsinagif/bits_and_bytes.asp + + version = b"87a" + if im.info.get("version") == b"89a" or ( + info + and ( + "transparency" in info + or info.get("loop") is not None + or info.get("duration") + or info.get("comment") + ) + ): + version = b"89a" + + background = _get_background(im, info.get("background")) + + palette_bytes = _get_palette_bytes(im) + color_table_size = _get_color_table_size(palette_bytes) + + header = [ + b"GIF" # signature + + version # version + + o16(im.size[0]) # canvas width + + o16(im.size[1]), # canvas height + # Logical Screen Descriptor + # size of global color table + global color table flag + o8(color_table_size + 128), # packed fields + # background + reserved/aspect + o8(background) + o8(0), + # Global Color Table + _get_header_palette(palette_bytes), + ] + if info.get("loop") is not None: + header.append( + b"!" + + o8(255) # extension intro + + o8(11) + + b"NETSCAPE2.0" + + o8(3) + + o8(1) + + o16(info["loop"]) # number of loops + + o8(0) + ) + if info.get("comment"): + comment_block = b"!" + o8(254) # extension intro + + comment = info["comment"] + if isinstance(comment, str): + comment = comment.encode() + for i in range(0, len(comment), 255): + subblock = comment[i : i + 255] + comment_block += o8(len(subblock)) + subblock + + comment_block += o8(0) + header.append(comment_block) + return header + + +def _write_frame_data( + fp: IO[bytes], + im_frame: Image.Image, + offset: tuple[int, int], + params: dict[str, Any], +) -> None: + try: + im_frame.encoderinfo = params + + # local image header + _write_local_header(fp, im_frame, offset, 0) + + ImageFile._save( + im_frame, + fp, + [ImageFile._Tile("gif", (0, 0) + im_frame.size, 0, RAWMODE[im_frame.mode])], + ) + + fp.write(b"\0") # end of image data + finally: + del im_frame.encoderinfo + + +# -------------------------------------------------------------------- +# Legacy GIF utilities + + +def getheader( + im: Image.Image, palette: _Palette | None = None, info: dict[str, Any] | None = None +) -> tuple[list[bytes], list[int] | None]: + """ + Legacy Method to get Gif data from image. + + Warning:: May modify image data. + + :param im: Image object + :param palette: bytes object containing the source palette, or .... + :param info: encoderinfo + :returns: tuple of(list of header items, optimized palette) + + """ + if info is None: + info = {} + + used_palette_colors = _get_optimize(im, info) + + if "background" not in info and "background" in im.info: + info["background"] = im.info["background"] + + im_mod = _normalize_palette(im, palette, info) + im.palette = im_mod.palette + im.im = im_mod.im + header = _get_global_header(im, info) + + return header, used_palette_colors + + +def getdata( + im: Image.Image, offset: tuple[int, int] = (0, 0), **params: Any +) -> list[bytes]: + """ + Legacy Method + + Return a list of strings representing this image. + The first string is a local image header, the rest contains + encoded image data. + + To specify duration, add the time in milliseconds, + e.g. ``getdata(im_frame, duration=1000)`` + + :param im: Image object + :param offset: Tuple of (x, y) pixels. Defaults to (0, 0) + :param \\**params: e.g. duration or other encoder info parameters + :returns: List of bytes containing GIF encoded frame data + + """ + from io import BytesIO + + class Collector(BytesIO): + data = [] + + def write(self, data: Buffer) -> int: + self.data.append(data) + return len(data) + + im.load() # make sure raster data is available + + fp = Collector() + + _write_frame_data(fp, im, offset, params) + + return fp.data + + +# -------------------------------------------------------------------- +# Registry + +Image.register_open(GifImageFile.format, GifImageFile, _accept) +Image.register_save(GifImageFile.format, _save) +Image.register_save_all(GifImageFile.format, _save_all) +Image.register_extension(GifImageFile.format, ".gif") +Image.register_mime(GifImageFile.format, "image/gif") + +# +# Uncomment the following line if you wish to use NETPBM/PBMPLUS +# instead of the built-in "uncompressed" GIF encoder + +# Image.register_save(GifImageFile.format, _save_netpbm) diff --git a/Python/venv/lib/python3.12/site-packages/PIL/GimpGradientFile.py b/Python/venv/lib/python3.12/site-packages/PIL/GimpGradientFile.py new file mode 100644 index 0000000..fb95872 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/GimpGradientFile.py @@ -0,0 +1,154 @@ +# +# Python Imaging Library +# $Id$ +# +# stuff to read (and render) GIMP gradient files +# +# History: +# 97-08-23 fl Created +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1997. +# +# See the README file for information on usage and redistribution. +# + +""" +Stuff to translate curve segments to palette values (derived from +the corresponding code in GIMP, written by Federico Mena Quintero. +See the GIMP distribution for more information.) +""" + +from __future__ import annotations + +from math import log, pi, sin, sqrt + +from ._binary import o8 + +TYPE_CHECKING = False +if TYPE_CHECKING: + from collections.abc import Callable + from typing import IO + +EPSILON = 1e-10 +"""""" # Enable auto-doc for data member + + +def linear(middle: float, pos: float) -> float: + if pos <= middle: + if middle < EPSILON: + return 0.0 + else: + return 0.5 * pos / middle + else: + pos = pos - middle + middle = 1.0 - middle + if middle < EPSILON: + return 1.0 + else: + return 0.5 + 0.5 * pos / middle + + +def curved(middle: float, pos: float) -> float: + return pos ** (log(0.5) / log(max(middle, EPSILON))) + + +def sine(middle: float, pos: float) -> float: + return (sin((-pi / 2.0) + pi * linear(middle, pos)) + 1.0) / 2.0 + + +def sphere_increasing(middle: float, pos: float) -> float: + return sqrt(1.0 - (linear(middle, pos) - 1.0) ** 2) + + +def sphere_decreasing(middle: float, pos: float) -> float: + return 1.0 - sqrt(1.0 - linear(middle, pos) ** 2) + + +SEGMENTS = [linear, curved, sine, sphere_increasing, sphere_decreasing] +"""""" # Enable auto-doc for data member + + +class GradientFile: + gradient: ( + list[ + tuple[ + float, + float, + float, + list[float], + list[float], + Callable[[float, float], float], + ] + ] + | None + ) = None + + def getpalette(self, entries: int = 256) -> tuple[bytes, str]: + assert self.gradient is not None + palette = [] + + ix = 0 + x0, x1, xm, rgb0, rgb1, segment = self.gradient[ix] + + for i in range(entries): + x = i / (entries - 1) + + while x1 < x: + ix += 1 + x0, x1, xm, rgb0, rgb1, segment = self.gradient[ix] + + w = x1 - x0 + + if w < EPSILON: + scale = segment(0.5, 0.5) + else: + scale = segment((xm - x0) / w, (x - x0) / w) + + # expand to RGBA + r = o8(int(255 * ((rgb1[0] - rgb0[0]) * scale + rgb0[0]) + 0.5)) + g = o8(int(255 * ((rgb1[1] - rgb0[1]) * scale + rgb0[1]) + 0.5)) + b = o8(int(255 * ((rgb1[2] - rgb0[2]) * scale + rgb0[2]) + 0.5)) + a = o8(int(255 * ((rgb1[3] - rgb0[3]) * scale + rgb0[3]) + 0.5)) + + # add to palette + palette.append(r + g + b + a) + + return b"".join(palette), "RGBA" + + +class GimpGradientFile(GradientFile): + """File handler for GIMP's gradient format.""" + + def __init__(self, fp: IO[bytes]) -> None: + if not fp.readline().startswith(b"GIMP Gradient"): + msg = "not a GIMP gradient file" + raise SyntaxError(msg) + + line = fp.readline() + + # GIMP 1.2 gradient files don't contain a name, but GIMP 1.3 files do + if line.startswith(b"Name: "): + line = fp.readline().strip() + + count = int(line) + + self.gradient = [] + + for i in range(count): + s = fp.readline().split() + w = [float(x) for x in s[:11]] + + x0, x1 = w[0], w[2] + xm = w[1] + rgb0 = w[3:7] + rgb1 = w[7:11] + + segment = SEGMENTS[int(s[11])] + cspace = int(s[12]) + + if cspace != 0: + msg = "cannot handle HSV colour space" + raise OSError(msg) + + self.gradient.append((x0, x1, xm, rgb0, rgb1, segment)) diff --git a/Python/venv/lib/python3.12/site-packages/PIL/GimpPaletteFile.py b/Python/venv/lib/python3.12/site-packages/PIL/GimpPaletteFile.py new file mode 100644 index 0000000..016257d --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/GimpPaletteFile.py @@ -0,0 +1,75 @@ +# +# Python Imaging Library +# $Id$ +# +# stuff to read GIMP palette files +# +# History: +# 1997-08-23 fl Created +# 2004-09-07 fl Support GIMP 2.0 palette files. +# +# Copyright (c) Secret Labs AB 1997-2004. All rights reserved. +# Copyright (c) Fredrik Lundh 1997-2004. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import re +from io import BytesIO + +TYPE_CHECKING = False +if TYPE_CHECKING: + from typing import IO + + +class GimpPaletteFile: + """File handler for GIMP's palette format.""" + + rawmode = "RGB" + + def _read(self, fp: IO[bytes], limit: bool = True) -> None: + if not fp.readline().startswith(b"GIMP Palette"): + msg = "not a GIMP palette file" + raise SyntaxError(msg) + + palette: list[int] = [] + i = 0 + while True: + if limit and i == 256 + 3: + break + + i += 1 + s = fp.readline() + if not s: + break + + # skip fields and comment lines + if re.match(rb"\w+:|#", s): + continue + if limit and len(s) > 100: + msg = "bad palette file" + raise SyntaxError(msg) + + v = s.split(maxsplit=3) + if len(v) < 3: + msg = "bad palette entry" + raise ValueError(msg) + + palette += (int(v[i]) for i in range(3)) + if limit and len(palette) == 768: + break + + self.palette = bytes(palette) + + def __init__(self, fp: IO[bytes]) -> None: + self._read(fp) + + @classmethod + def frombytes(cls, data: bytes) -> GimpPaletteFile: + self = cls.__new__(cls) + self._read(BytesIO(data), False) + return self + + def getpalette(self) -> tuple[bytes, str]: + return self.palette, self.rawmode diff --git a/Python/venv/lib/python3.12/site-packages/PIL/GribStubImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/GribStubImagePlugin.py new file mode 100644 index 0000000..3784ef2 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/GribStubImagePlugin.py @@ -0,0 +1,72 @@ +# +# The Python Imaging Library +# $Id$ +# +# GRIB stub adapter +# +# Copyright (c) 1996-2003 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import os +from typing import IO + +from . import Image, ImageFile + +_handler = None + + +def register_handler(handler: ImageFile.StubHandler | None) -> None: + """ + Install application-specific GRIB image handler. + + :param handler: Handler object. + """ + global _handler + _handler = handler + + +# -------------------------------------------------------------------- +# Image adapter + + +def _accept(prefix: bytes) -> bool: + return len(prefix) >= 8 and prefix.startswith(b"GRIB") and prefix[7] == 1 + + +class GribStubImageFile(ImageFile.StubImageFile): + format = "GRIB" + format_description = "GRIB" + + def _open(self) -> None: + assert self.fp is not None + if not _accept(self.fp.read(8)): + msg = "Not a GRIB file" + raise SyntaxError(msg) + + self.fp.seek(-8, os.SEEK_CUR) + + # make something up + self._mode = "F" + self._size = 1, 1 + + def _load(self) -> ImageFile.StubHandler | None: + return _handler + + +def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + if _handler is None or not hasattr(_handler, "save"): + msg = "GRIB save handler not installed" + raise OSError(msg) + _handler.save(im, fp, filename) + + +# -------------------------------------------------------------------- +# Registry + +Image.register_open(GribStubImageFile.format, GribStubImageFile, _accept) +Image.register_save(GribStubImageFile.format, _save) + +Image.register_extension(GribStubImageFile.format, ".grib") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/Hdf5StubImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/Hdf5StubImagePlugin.py new file mode 100644 index 0000000..1a56660 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/Hdf5StubImagePlugin.py @@ -0,0 +1,72 @@ +# +# The Python Imaging Library +# $Id$ +# +# HDF5 stub adapter +# +# Copyright (c) 2000-2003 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import os +from typing import IO + +from . import Image, ImageFile + +_handler = None + + +def register_handler(handler: ImageFile.StubHandler | None) -> None: + """ + Install application-specific HDF5 image handler. + + :param handler: Handler object. + """ + global _handler + _handler = handler + + +# -------------------------------------------------------------------- +# Image adapter + + +def _accept(prefix: bytes) -> bool: + return prefix.startswith(b"\x89HDF\r\n\x1a\n") + + +class HDF5StubImageFile(ImageFile.StubImageFile): + format = "HDF5" + format_description = "HDF5" + + def _open(self) -> None: + assert self.fp is not None + if not _accept(self.fp.read(8)): + msg = "Not an HDF file" + raise SyntaxError(msg) + + self.fp.seek(-8, os.SEEK_CUR) + + # make something up + self._mode = "F" + self._size = 1, 1 + + def _load(self) -> ImageFile.StubHandler | None: + return _handler + + +def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + if _handler is None or not hasattr(_handler, "save"): + msg = "HDF5 save handler not installed" + raise OSError(msg) + _handler.save(im, fp, filename) + + +# -------------------------------------------------------------------- +# Registry + +Image.register_open(HDF5StubImageFile.format, HDF5StubImageFile, _accept) +Image.register_save(HDF5StubImageFile.format, _save) + +Image.register_extensions(HDF5StubImageFile.format, [".h5", ".hdf"]) diff --git a/Python/venv/lib/python3.12/site-packages/PIL/IcnsImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/IcnsImagePlugin.py new file mode 100644 index 0000000..cb7a74c --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/IcnsImagePlugin.py @@ -0,0 +1,401 @@ +# +# The Python Imaging Library. +# $Id$ +# +# macOS icns file decoder, based on icns.py by Bob Ippolito. +# +# history: +# 2004-10-09 fl Turned into a PIL plugin; removed 2.3 dependencies. +# 2020-04-04 Allow saving on all operating systems. +# +# Copyright (c) 2004 by Bob Ippolito. +# Copyright (c) 2004 by Secret Labs. +# Copyright (c) 2004 by Fredrik Lundh. +# Copyright (c) 2014 by Alastair Houghton. +# Copyright (c) 2020 by Pan Jing. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import io +import os +import struct +import sys +from typing import IO + +from . import Image, ImageFile, PngImagePlugin, features + +enable_jpeg2k = features.check_codec("jpg_2000") +if enable_jpeg2k: + from . import Jpeg2KImagePlugin + +MAGIC = b"icns" +HEADERSIZE = 8 + + +def nextheader(fobj: IO[bytes]) -> tuple[bytes, int]: + return struct.unpack(">4sI", fobj.read(HEADERSIZE)) + + +def read_32t( + fobj: IO[bytes], start_length: tuple[int, int], size: tuple[int, int, int] +) -> dict[str, Image.Image]: + # The 128x128 icon seems to have an extra header for some reason. + start, length = start_length + fobj.seek(start) + sig = fobj.read(4) + if sig != b"\x00\x00\x00\x00": + msg = "Unknown signature, expecting 0x00000000" + raise SyntaxError(msg) + return read_32(fobj, (start + 4, length - 4), size) + + +def read_32( + fobj: IO[bytes], start_length: tuple[int, int], size: tuple[int, int, int] +) -> dict[str, Image.Image]: + """ + Read a 32bit RGB icon resource. Seems to be either uncompressed or + an RLE packbits-like scheme. + """ + start, length = start_length + fobj.seek(start) + pixel_size = (size[0] * size[2], size[1] * size[2]) + sizesq = pixel_size[0] * pixel_size[1] + if length == sizesq * 3: + # uncompressed ("RGBRGBGB") + indata = fobj.read(length) + im = Image.frombuffer("RGB", pixel_size, indata, "raw", "RGB", 0, 1) + else: + # decode image + im = Image.new("RGB", pixel_size, None) + for band_ix in range(3): + data = [] + bytesleft = sizesq + while bytesleft > 0: + byte = fobj.read(1) + if not byte: + break + byte_int = byte[0] + if byte_int & 0x80: + blocksize = byte_int - 125 + byte = fobj.read(1) + data.extend([byte] * blocksize) + else: + blocksize = byte_int + 1 + data.append(fobj.read(blocksize)) + bytesleft -= blocksize + if bytesleft <= 0: + break + if bytesleft != 0: + msg = f"Error reading channel [{repr(bytesleft)} left]" + raise SyntaxError(msg) + band = Image.frombuffer("L", pixel_size, b"".join(data), "raw", "L", 0, 1) + im.im.putband(band.im, band_ix) + return {"RGB": im} + + +def read_mk( + fobj: IO[bytes], start_length: tuple[int, int], size: tuple[int, int, int] +) -> dict[str, Image.Image]: + # Alpha masks seem to be uncompressed + start = start_length[0] + fobj.seek(start) + pixel_size = (size[0] * size[2], size[1] * size[2]) + sizesq = pixel_size[0] * pixel_size[1] + band = Image.frombuffer("L", pixel_size, fobj.read(sizesq), "raw", "L", 0, 1) + return {"A": band} + + +def read_png_or_jpeg2000( + fobj: IO[bytes], start_length: tuple[int, int], size: tuple[int, int, int] +) -> dict[str, Image.Image]: + start, length = start_length + fobj.seek(start) + sig = fobj.read(12) + + im: Image.Image + if sig.startswith(b"\x89PNG\x0d\x0a\x1a\x0a"): + fobj.seek(start) + im = PngImagePlugin.PngImageFile(fobj) + Image._decompression_bomb_check(im.size) + return {"RGBA": im} + elif ( + sig.startswith((b"\xff\x4f\xff\x51", b"\x0d\x0a\x87\x0a")) + or sig == b"\x00\x00\x00\x0cjP \x0d\x0a\x87\x0a" + ): + if not enable_jpeg2k: + msg = ( + "Unsupported icon subimage format (rebuild PIL " + "with JPEG 2000 support to fix this)" + ) + raise ValueError(msg) + # j2k, jpc or j2c + fobj.seek(start) + jp2kstream = fobj.read(length) + f = io.BytesIO(jp2kstream) + im = Jpeg2KImagePlugin.Jpeg2KImageFile(f) + Image._decompression_bomb_check(im.size) + if im.mode != "RGBA": + im = im.convert("RGBA") + return {"RGBA": im} + else: + msg = "Unsupported icon subimage format" + raise ValueError(msg) + + +class IcnsFile: + SIZES = { + (512, 512, 2): [(b"ic10", read_png_or_jpeg2000)], + (512, 512, 1): [(b"ic09", read_png_or_jpeg2000)], + (256, 256, 2): [(b"ic14", read_png_or_jpeg2000)], + (256, 256, 1): [(b"ic08", read_png_or_jpeg2000)], + (128, 128, 2): [(b"ic13", read_png_or_jpeg2000)], + (128, 128, 1): [ + (b"ic07", read_png_or_jpeg2000), + (b"it32", read_32t), + (b"t8mk", read_mk), + ], + (64, 64, 1): [(b"icp6", read_png_or_jpeg2000)], + (32, 32, 2): [(b"ic12", read_png_or_jpeg2000)], + (48, 48, 1): [(b"ih32", read_32), (b"h8mk", read_mk)], + (32, 32, 1): [ + (b"icp5", read_png_or_jpeg2000), + (b"il32", read_32), + (b"l8mk", read_mk), + ], + (16, 16, 2): [(b"ic11", read_png_or_jpeg2000)], + (16, 16, 1): [ + (b"icp4", read_png_or_jpeg2000), + (b"is32", read_32), + (b"s8mk", read_mk), + ], + } + + def __init__(self, fobj: IO[bytes]) -> None: + """ + fobj is a file-like object as an icns resource + """ + # signature : (start, length) + self.dct = {} + self.fobj = fobj + sig, filesize = nextheader(fobj) + if not _accept(sig): + msg = "not an icns file" + raise SyntaxError(msg) + i = HEADERSIZE + while i < filesize: + sig, blocksize = nextheader(fobj) + if blocksize <= 0: + msg = "invalid block header" + raise SyntaxError(msg) + i += HEADERSIZE + blocksize -= HEADERSIZE + self.dct[sig] = (i, blocksize) + fobj.seek(blocksize, io.SEEK_CUR) + i += blocksize + + def itersizes(self) -> list[tuple[int, int, int]]: + sizes = [] + for size, fmts in self.SIZES.items(): + for fmt, reader in fmts: + if fmt in self.dct: + sizes.append(size) + break + return sizes + + def bestsize(self) -> tuple[int, int, int]: + sizes = self.itersizes() + if not sizes: + msg = "No 32bit icon resources found" + raise SyntaxError(msg) + return max(sizes) + + def dataforsize(self, size: tuple[int, int, int]) -> dict[str, Image.Image]: + """ + Get an icon resource as {channel: array}. Note that + the arrays are bottom-up like windows bitmaps and will likely + need to be flipped or transposed in some way. + """ + dct = {} + for code, reader in self.SIZES[size]: + desc = self.dct.get(code) + if desc is not None: + dct.update(reader(self.fobj, desc, size)) + return dct + + def getimage( + self, size: tuple[int, int] | tuple[int, int, int] | None = None + ) -> Image.Image: + if size is None: + size = self.bestsize() + elif len(size) == 2: + size = (size[0], size[1], 1) + channels = self.dataforsize(size) + + im = channels.get("RGBA") + if im: + return im + + im = channels["RGB"].copy() + try: + im.putalpha(channels["A"]) + except KeyError: + pass + return im + + +## +# Image plugin for Mac OS icons. + + +class IcnsImageFile(ImageFile.ImageFile): + """ + PIL image support for Mac OS .icns files. + Chooses the best resolution, but will possibly load + a different size image if you mutate the size attribute + before calling 'load'. + + The info dictionary has a key 'sizes' that is a list + of sizes that the icns file has. + """ + + format = "ICNS" + format_description = "Mac OS icns resource" + + def _open(self) -> None: + assert self.fp is not None + self.icns = IcnsFile(self.fp) + self._mode = "RGBA" + self.info["sizes"] = self.icns.itersizes() + self.best_size = self.icns.bestsize() + self.size = ( + self.best_size[0] * self.best_size[2], + self.best_size[1] * self.best_size[2], + ) + + @property + def size(self) -> tuple[int, int]: + return self._size + + @size.setter + def size(self, value: tuple[int, int]) -> None: + # Check that a matching size exists, + # or that there is a scale that would create a size that matches + for size in self.info["sizes"]: + simple_size = size[0] * size[2], size[1] * size[2] + scale = simple_size[0] // value[0] + if simple_size[1] / value[1] == scale: + self._size = value + return + msg = "This is not one of the allowed sizes of this image" + raise ValueError(msg) + + def load(self, scale: int | None = None) -> Image.core.PixelAccess | None: + if scale is not None: + width, height = self.size[:2] + self.size = width * scale, height * scale + self.best_size = width, height, scale + + px = Image.Image.load(self) + if self._im is not None and self.im.size == self.size: + # Already loaded + return px + self.load_prepare() + # This is likely NOT the best way to do it, but whatever. + im = self.icns.getimage(self.best_size) + + # If this is a PNG or JPEG 2000, it won't be loaded yet + px = im.load() + + self.im = im.im + self._mode = im.mode + self.size = im.size + + return px + + +def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + """ + Saves the image as a series of PNG files, + that are then combined into a .icns file. + """ + if hasattr(fp, "flush"): + fp.flush() + + sizes = { + b"ic07": 128, + b"ic08": 256, + b"ic09": 512, + b"ic10": 1024, + b"ic11": 32, + b"ic12": 64, + b"ic13": 256, + b"ic14": 512, + } + provided_images = {im.width: im for im in im.encoderinfo.get("append_images", [])} + size_streams = {} + for size in set(sizes.values()): + image = ( + provided_images[size] + if size in provided_images + else im.resize((size, size)) + ) + + temp = io.BytesIO() + image.save(temp, "png") + size_streams[size] = temp.getvalue() + + entries = [] + for type, size in sizes.items(): + stream = size_streams[size] + entries.append((type, HEADERSIZE + len(stream), stream)) + + # Header + fp.write(MAGIC) + file_length = HEADERSIZE # Header + file_length += HEADERSIZE + 8 * len(entries) # TOC + file_length += sum(entry[1] for entry in entries) + fp.write(struct.pack(">i", file_length)) + + # TOC + fp.write(b"TOC ") + fp.write(struct.pack(">i", HEADERSIZE + len(entries) * HEADERSIZE)) + for entry in entries: + fp.write(entry[0]) + fp.write(struct.pack(">i", entry[1])) + + # Data + for entry in entries: + fp.write(entry[0]) + fp.write(struct.pack(">i", entry[1])) + fp.write(entry[2]) + + if hasattr(fp, "flush"): + fp.flush() + + +def _accept(prefix: bytes) -> bool: + return prefix.startswith(MAGIC) + + +Image.register_open(IcnsImageFile.format, IcnsImageFile, _accept) +Image.register_extension(IcnsImageFile.format, ".icns") + +Image.register_save(IcnsImageFile.format, _save) +Image.register_mime(IcnsImageFile.format, "image/icns") + +if __name__ == "__main__": + if len(sys.argv) < 2: + print("Syntax: python3 IcnsImagePlugin.py [file]") + sys.exit() + + with open(sys.argv[1], "rb") as fp: + imf = IcnsImageFile(fp) + for size in imf.info["sizes"]: + width, height, scale = imf.size = size + imf.save(f"out-{width}-{height}-{scale}.png") + with Image.open(sys.argv[1]) as im: + im.save("out.png") + if sys.platform == "windows": + os.startfile("out.png") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/IcoImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/IcoImagePlugin.py new file mode 100644 index 0000000..8dd57ff --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/IcoImagePlugin.py @@ -0,0 +1,396 @@ +# +# The Python Imaging Library. +# $Id$ +# +# Windows Icon support for PIL +# +# History: +# 96-05-27 fl Created +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1996. +# +# See the README file for information on usage and redistribution. +# + +# This plugin is a refactored version of Win32IconImagePlugin by Bryan Davis +# . +# https://code.google.com/archive/p/casadebender/wikis/Win32IconImagePlugin.wiki +# +# Copyright 2008 Bryan Davis +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Icon format references: +# * https://en.wikipedia.org/wiki/ICO_(file_format) +# * https://msdn.microsoft.com/en-us/library/ms997538.aspx +from __future__ import annotations + +import warnings +from io import BytesIO +from math import ceil, log +from typing import IO, NamedTuple + +from . import BmpImagePlugin, Image, ImageFile, PngImagePlugin +from ._binary import i16le as i16 +from ._binary import i32le as i32 +from ._binary import o8 +from ._binary import o16le as o16 +from ._binary import o32le as o32 + +# +# -------------------------------------------------------------------- + +_MAGIC = b"\0\0\1\0" + + +def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + fp.write(_MAGIC) # (2+2) + bmp = im.encoderinfo.get("bitmap_format") == "bmp" + sizes = im.encoderinfo.get( + "sizes", + [(16, 16), (24, 24), (32, 32), (48, 48), (64, 64), (128, 128), (256, 256)], + ) + frames = [] + provided_ims = [im] + im.encoderinfo.get("append_images", []) + width, height = im.size + for size in sorted(set(sizes)): + if size[0] > width or size[1] > height or size[0] > 256 or size[1] > 256: + continue + + for provided_im in provided_ims: + if provided_im.size != size: + continue + frames.append(provided_im) + if bmp: + bits = BmpImagePlugin.SAVE[provided_im.mode][1] + bits_used = [bits] + for other_im in provided_ims: + if other_im.size != size: + continue + bits = BmpImagePlugin.SAVE[other_im.mode][1] + if bits not in bits_used: + # Another image has been supplied for this size + # with a different bit depth + frames.append(other_im) + bits_used.append(bits) + break + else: + # TODO: invent a more convenient method for proportional scalings + frame = provided_im.copy() + frame.thumbnail(size, Image.Resampling.LANCZOS, reducing_gap=None) + frames.append(frame) + fp.write(o16(len(frames))) # idCount(2) + offset = fp.tell() + len(frames) * 16 + for frame in frames: + width, height = frame.size + # 0 means 256 + fp.write(o8(width if width < 256 else 0)) # bWidth(1) + fp.write(o8(height if height < 256 else 0)) # bHeight(1) + + bits, colors = BmpImagePlugin.SAVE[frame.mode][1:] if bmp else (32, 0) + fp.write(o8(colors)) # bColorCount(1) + fp.write(b"\0") # bReserved(1) + fp.write(b"\0\0") # wPlanes(2) + fp.write(o16(bits)) # wBitCount(2) + + image_io = BytesIO() + if bmp: + frame.save(image_io, "dib") + + if bits != 32: + and_mask = Image.new("1", size) + ImageFile._save( + and_mask, + image_io, + [ImageFile._Tile("raw", (0, 0) + size, 0, ("1", 0, -1))], + ) + else: + frame.save(image_io, "png") + image_io.seek(0) + image_bytes = image_io.read() + if bmp: + image_bytes = image_bytes[:8] + o32(height * 2) + image_bytes[12:] + bytes_len = len(image_bytes) + fp.write(o32(bytes_len)) # dwBytesInRes(4) + fp.write(o32(offset)) # dwImageOffset(4) + current = fp.tell() + fp.seek(offset) + fp.write(image_bytes) + offset = offset + bytes_len + fp.seek(current) + + +def _accept(prefix: bytes) -> bool: + return prefix.startswith(_MAGIC) + + +class IconHeader(NamedTuple): + width: int + height: int + nb_color: int + reserved: int + planes: int + bpp: int + size: int + offset: int + dim: tuple[int, int] + square: int + color_depth: int + + +class IcoFile: + def __init__(self, buf: IO[bytes]) -> None: + """ + Parse image from file-like object containing ico file data + """ + + # check magic + s = buf.read(6) + if not _accept(s): + msg = "not an ICO file" + raise SyntaxError(msg) + + self.buf = buf + self.entry = [] + + # Number of items in file + self.nb_items = i16(s, 4) + + # Get headers for each item + for i in range(self.nb_items): + s = buf.read(16) + + # See Wikipedia + width = s[0] or 256 + height = s[1] or 256 + + # No. of colors in image (0 if >=8bpp) + nb_color = s[2] + bpp = i16(s, 6) + icon_header = IconHeader( + width=width, + height=height, + nb_color=nb_color, + reserved=s[3], + planes=i16(s, 4), + bpp=i16(s, 6), + size=i32(s, 8), + offset=i32(s, 12), + dim=(width, height), + square=width * height, + # See Wikipedia notes about color depth. + # We need this just to differ images with equal sizes + color_depth=bpp or (nb_color != 0 and ceil(log(nb_color, 2))) or 256, + ) + + self.entry.append(icon_header) + + self.entry = sorted(self.entry, key=lambda x: x.color_depth) + # ICO images are usually squares + self.entry = sorted(self.entry, key=lambda x: x.square, reverse=True) + + def sizes(self) -> set[tuple[int, int]]: + """ + Get a set of all available icon sizes and color depths. + """ + return {(h.width, h.height) for h in self.entry} + + def getentryindex(self, size: tuple[int, int], bpp: int | bool = False) -> int: + for i, h in enumerate(self.entry): + if size == h.dim and (bpp is False or bpp == h.color_depth): + return i + return 0 + + def getimage(self, size: tuple[int, int], bpp: int | bool = False) -> Image.Image: + """ + Get an image from the icon + """ + return self.frame(self.getentryindex(size, bpp)) + + def frame(self, idx: int) -> Image.Image: + """ + Get an image from frame idx + """ + + header = self.entry[idx] + + self.buf.seek(header.offset) + data = self.buf.read(8) + self.buf.seek(header.offset) + + im: Image.Image + if data[:8] == PngImagePlugin._MAGIC: + # png frame + im = PngImagePlugin.PngImageFile(self.buf) + Image._decompression_bomb_check(im.size) + else: + # XOR + AND mask bmp frame + im = BmpImagePlugin.DibImageFile(self.buf) + Image._decompression_bomb_check(im.size) + + # change tile dimension to only encompass XOR image + im._size = (im.size[0], int(im.size[1] / 2)) + d, e, o, a = im.tile[0] + im.tile[0] = ImageFile._Tile(d, (0, 0) + im.size, o, a) + + # figure out where AND mask image starts + if header.bpp == 32: + # 32-bit color depth icon image allows semitransparent areas + # PIL's DIB format ignores transparency bits, recover them. + # The DIB is packed in BGRX byte order where X is the alpha + # channel. + + # Back up to start of bmp data + self.buf.seek(o) + # extract every 4th byte (eg. 3,7,11,15,...) + alpha_bytes = self.buf.read(im.size[0] * im.size[1] * 4)[3::4] + + # convert to an 8bpp grayscale image + try: + mask = Image.frombuffer( + "L", # 8bpp + im.size, # (w, h) + alpha_bytes, # source chars + "raw", # raw decoder + ("L", 0, -1), # 8bpp inverted, unpadded, reversed + ) + except ValueError: + if ImageFile.LOAD_TRUNCATED_IMAGES: + mask = None + else: + raise + else: + # get AND image from end of bitmap + w = im.size[0] + if (w % 32) > 0: + # bitmap row data is aligned to word boundaries + w += 32 - (im.size[0] % 32) + + # the total mask data is + # padded row size * height / bits per char + + total_bytes = int((w * im.size[1]) / 8) + and_mask_offset = header.offset + header.size - total_bytes + + self.buf.seek(and_mask_offset) + mask_data = self.buf.read(total_bytes) + + # convert raw data to image + try: + mask = Image.frombuffer( + "1", # 1 bpp + im.size, # (w, h) + mask_data, # source chars + "raw", # raw decoder + ("1;I", int(w / 8), -1), # 1bpp inverted, padded, reversed + ) + except ValueError: + if ImageFile.LOAD_TRUNCATED_IMAGES: + mask = None + else: + raise + + # now we have two images, im is XOR image and mask is AND image + + # apply mask image as alpha channel + if mask: + im = im.convert("RGBA") + im.putalpha(mask) + + return im + + +## +# Image plugin for Windows Icon files. + + +class IcoImageFile(ImageFile.ImageFile): + """ + PIL read-only image support for Microsoft Windows .ico files. + + By default the largest resolution image in the file will be loaded. This + can be changed by altering the 'size' attribute before calling 'load'. + + The info dictionary has a key 'sizes' that is a list of the sizes available + in the icon file. + + Handles classic, XP and Vista icon formats. + + When saving, PNG compression is used. Support for this was only added in + Windows Vista. If you are unable to view the icon in Windows, convert the + image to "RGBA" mode before saving. + + This plugin is a refactored version of Win32IconImagePlugin by Bryan Davis + . + https://code.google.com/archive/p/casadebender/wikis/Win32IconImagePlugin.wiki + """ + + format = "ICO" + format_description = "Windows Icon" + + def _open(self) -> None: + assert self.fp is not None + self.ico = IcoFile(self.fp) + self.info["sizes"] = self.ico.sizes() + self.size = self.ico.entry[0].dim + self.load() + + @property + def size(self) -> tuple[int, int]: + return self._size + + @size.setter + def size(self, value: tuple[int, int]) -> None: + if value not in self.info["sizes"]: + msg = "This is not one of the allowed sizes of this image" + raise ValueError(msg) + self._size = value + + def load(self) -> Image.core.PixelAccess | None: + if self._im is not None and self.im.size == self.size: + # Already loaded + return Image.Image.load(self) + im = self.ico.getimage(self.size) + # if tile is PNG, it won't really be loaded yet + im.load() + self.im = im.im + self._mode = im.mode + if im.palette: + self.palette = im.palette + if im.size != self.size: + warnings.warn("Image was not the expected size") + + index = self.ico.getentryindex(self.size) + sizes = list(self.info["sizes"]) + sizes[index] = im.size + self.info["sizes"] = set(sizes) + + self.size = im.size + return Image.Image.load(self) + + def load_seek(self, pos: int) -> None: + # Flag the ImageFile.Parser so that it + # just does all the decode at the end. + pass + + +# +# -------------------------------------------------------------------- + + +Image.register_open(IcoImageFile.format, IcoImageFile, _accept) +Image.register_save(IcoImageFile.format, _save) +Image.register_extension(IcoImageFile.format, ".ico") + +Image.register_mime(IcoImageFile.format, "image/x-icon") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/ImImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/ImImagePlugin.py new file mode 100644 index 0000000..ef54f16 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/ImImagePlugin.py @@ -0,0 +1,390 @@ +# +# The Python Imaging Library. +# $Id$ +# +# IFUNC IM file handling for PIL +# +# history: +# 1995-09-01 fl Created. +# 1997-01-03 fl Save palette images +# 1997-01-08 fl Added sequence support +# 1997-01-23 fl Added P and RGB save support +# 1997-05-31 fl Read floating point images +# 1997-06-22 fl Save floating point images +# 1997-08-27 fl Read and save 1-bit images +# 1998-06-25 fl Added support for RGB+LUT images +# 1998-07-02 fl Added support for YCC images +# 1998-07-15 fl Renamed offset attribute to avoid name clash +# 1998-12-29 fl Added I;16 support +# 2001-02-17 fl Use 're' instead of 'regex' (Python 2.1) (0.7) +# 2003-09-26 fl Added LA/PA support +# +# Copyright (c) 1997-2003 by Secret Labs AB. +# Copyright (c) 1995-2001 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import os +import re +from typing import IO, Any + +from . import Image, ImageFile, ImagePalette +from ._util import DeferredError + +# -------------------------------------------------------------------- +# Standard tags + +COMMENT = "Comment" +DATE = "Date" +EQUIPMENT = "Digitalization equipment" +FRAMES = "File size (no of images)" +LUT = "Lut" +NAME = "Name" +SCALE = "Scale (x,y)" +SIZE = "Image size (x*y)" +MODE = "Image type" + +TAGS = { + COMMENT: 0, + DATE: 0, + EQUIPMENT: 0, + FRAMES: 0, + LUT: 0, + NAME: 0, + SCALE: 0, + SIZE: 0, + MODE: 0, +} + +OPEN = { + # ifunc93/p3cfunc formats + "0 1 image": ("1", "1"), + "L 1 image": ("1", "1"), + "Greyscale image": ("L", "L"), + "Grayscale image": ("L", "L"), + "RGB image": ("RGB", "RGB;L"), + "RLB image": ("RGB", "RLB"), + "RYB image": ("RGB", "RLB"), + "B1 image": ("1", "1"), + "B2 image": ("P", "P;2"), + "B4 image": ("P", "P;4"), + "X 24 image": ("RGB", "RGB"), + "L 32 S image": ("I", "I;32"), + "L 32 F image": ("F", "F;32"), + # old p3cfunc formats + "RGB3 image": ("RGB", "RGB;T"), + "RYB3 image": ("RGB", "RYB;T"), + # extensions + "LA image": ("LA", "LA;L"), + "PA image": ("LA", "PA;L"), + "RGBA image": ("RGBA", "RGBA;L"), + "RGBX image": ("RGB", "RGBX;L"), + "CMYK image": ("CMYK", "CMYK;L"), + "YCC image": ("YCbCr", "YCbCr;L"), +} + +# ifunc95 extensions +for i in ["8", "8S", "16", "16S", "32", "32F"]: + OPEN[f"L {i} image"] = ("F", f"F;{i}") + OPEN[f"L*{i} image"] = ("F", f"F;{i}") +for i in ["16", "16L", "16B"]: + OPEN[f"L {i} image"] = (f"I;{i}", f"I;{i}") + OPEN[f"L*{i} image"] = (f"I;{i}", f"I;{i}") +for i in ["32S"]: + OPEN[f"L {i} image"] = ("I", f"I;{i}") + OPEN[f"L*{i} image"] = ("I", f"I;{i}") +for j in range(2, 33): + OPEN[f"L*{j} image"] = ("F", f"F;{j}") + + +# -------------------------------------------------------------------- +# Read IM directory + +split = re.compile(rb"^([A-Za-z][^:]*):[ \t]*(.*)[ \t]*$") + + +def number(s: Any) -> float: + try: + return int(s) + except ValueError: + return float(s) + + +## +# Image plugin for the IFUNC IM file format. + + +class ImImageFile(ImageFile.ImageFile): + format = "IM" + format_description = "IFUNC Image Memory" + _close_exclusive_fp_after_loading = False + + def _open(self) -> None: + # Quick rejection: if there's not an LF among the first + # 100 bytes, this is (probably) not a text header. + + assert self.fp is not None + if b"\n" not in self.fp.read(100): + msg = "not an IM file" + raise SyntaxError(msg) + self.fp.seek(0) + + n = 0 + + # Default values + self.info[MODE] = "L" + self.info[SIZE] = (512, 512) + self.info[FRAMES] = 1 + + self.rawmode = "L" + + while True: + s = self.fp.read(1) + + # Some versions of IFUNC uses \n\r instead of \r\n... + if s == b"\r": + continue + + if not s or s == b"\0" or s == b"\x1a": + break + + # FIXME: this may read whole file if not a text file + s = s + self.fp.readline() + + if len(s) > 100: + msg = "not an IM file" + raise SyntaxError(msg) + + if s.endswith(b"\r\n"): + s = s[:-2] + elif s.endswith(b"\n"): + s = s[:-1] + + try: + m = split.match(s) + except re.error as e: + msg = "not an IM file" + raise SyntaxError(msg) from e + + if m: + k, v = m.group(1, 2) + + # Don't know if this is the correct encoding, + # but a decent guess (I guess) + k = k.decode("latin-1", "replace") + v = v.decode("latin-1", "replace") + + # Convert value as appropriate + if k in [FRAMES, SCALE, SIZE]: + v = v.replace("*", ",") + v = tuple(map(number, v.split(","))) + if len(v) == 1: + v = v[0] + elif k == MODE and v in OPEN: + v, self.rawmode = OPEN[v] + + # Add to dictionary. Note that COMMENT tags are + # combined into a list of strings. + if k == COMMENT: + if k in self.info: + self.info[k].append(v) + else: + self.info[k] = [v] + else: + self.info[k] = v + + if k in TAGS: + n += 1 + + else: + msg = f"Syntax error in IM header: {s.decode('ascii', 'replace')}" + raise SyntaxError(msg) + + if not n: + msg = "Not an IM file" + raise SyntaxError(msg) + + # Basic attributes + self._size = self.info[SIZE] + self._mode = self.info[MODE] + + # Skip forward to start of image data + while s and not s.startswith(b"\x1a"): + s = self.fp.read(1) + if not s: + msg = "File truncated" + raise SyntaxError(msg) + + if LUT in self.info: + # convert lookup table to palette or lut attribute + palette = self.fp.read(768) + greyscale = 1 # greyscale palette + linear = 1 # linear greyscale palette + for i in range(256): + if palette[i] == palette[i + 256] == palette[i + 512]: + if palette[i] != i: + linear = 0 + else: + greyscale = 0 + if self.mode in ["L", "LA", "P", "PA"]: + if greyscale: + if not linear: + self.lut = list(palette[:256]) + else: + if self.mode in ["L", "P"]: + self._mode = self.rawmode = "P" + elif self.mode in ["LA", "PA"]: + self._mode = "PA" + self.rawmode = "PA;L" + self.palette = ImagePalette.raw("RGB;L", palette) + elif self.mode == "RGB": + if not greyscale or not linear: + self.lut = list(palette) + + self.frame = 0 + + self.__offset = offs = self.fp.tell() + + self._fp = self.fp # FIXME: hack + + if self.rawmode.startswith("F;"): + # ifunc95 formats + try: + # use bit decoder (if necessary) + bits = int(self.rawmode[2:]) + if bits not in [8, 16, 32]: + self.tile = [ + ImageFile._Tile( + "bit", (0, 0) + self.size, offs, (bits, 8, 3, 0, -1) + ) + ] + return + except ValueError: + pass + + if self.rawmode in ["RGB;T", "RYB;T"]: + # Old LabEye/3PC files. Would be very surprised if anyone + # ever stumbled upon such a file ;-) + size = self.size[0] * self.size[1] + self.tile = [ + ImageFile._Tile("raw", (0, 0) + self.size, offs, ("G", 0, -1)), + ImageFile._Tile("raw", (0, 0) + self.size, offs + size, ("R", 0, -1)), + ImageFile._Tile( + "raw", (0, 0) + self.size, offs + 2 * size, ("B", 0, -1) + ), + ] + else: + # LabEye/IFUNC files + self.tile = [ + ImageFile._Tile("raw", (0, 0) + self.size, offs, (self.rawmode, 0, -1)) + ] + + @property + def n_frames(self) -> int: + return self.info[FRAMES] + + @property + def is_animated(self) -> bool: + return self.info[FRAMES] > 1 + + def seek(self, frame: int) -> None: + if not self._seek_check(frame): + return + if isinstance(self._fp, DeferredError): + raise self._fp.ex + + self.frame = frame + + if self.mode == "1": + bits = 1 + else: + bits = 8 * len(self.mode) + + size = ((self.size[0] * bits + 7) // 8) * self.size[1] + offs = self.__offset + frame * size + + self.fp = self._fp + + self.tile = [ + ImageFile._Tile("raw", (0, 0) + self.size, offs, (self.rawmode, 0, -1)) + ] + + def tell(self) -> int: + return self.frame + + +# +# -------------------------------------------------------------------- +# Save IM files + + +SAVE = { + # mode: (im type, raw mode) + "1": ("0 1", "1"), + "L": ("Greyscale", "L"), + "LA": ("LA", "LA;L"), + "P": ("Greyscale", "P"), + "PA": ("LA", "PA;L"), + "I": ("L 32S", "I;32S"), + "I;16": ("L 16", "I;16"), + "I;16L": ("L 16L", "I;16L"), + "I;16B": ("L 16B", "I;16B"), + "F": ("L 32F", "F;32F"), + "RGB": ("RGB", "RGB;L"), + "RGBA": ("RGBA", "RGBA;L"), + "RGBX": ("RGBX", "RGBX;L"), + "CMYK": ("CMYK", "CMYK;L"), + "YCbCr": ("YCC", "YCbCr;L"), +} + + +def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + try: + image_type, rawmode = SAVE[im.mode] + except KeyError as e: + msg = f"Cannot save {im.mode} images as IM" + raise ValueError(msg) from e + + frames = im.encoderinfo.get("frames", 1) + + fp.write(f"Image type: {image_type} image\r\n".encode("ascii")) + if filename: + # Each line must be 100 characters or less, + # or: SyntaxError("not an IM file") + # 8 characters are used for "Name: " and "\r\n" + # Keep just the filename, ditch the potentially overlong path + if isinstance(filename, bytes): + filename = filename.decode("ascii") + name, ext = os.path.splitext(os.path.basename(filename)) + name = "".join([name[: 92 - len(ext)], ext]) + + fp.write(f"Name: {name}\r\n".encode("ascii")) + fp.write(f"Image size (x*y): {im.size[0]}*{im.size[1]}\r\n".encode("ascii")) + fp.write(f"File size (no of images): {frames}\r\n".encode("ascii")) + if im.mode in ["P", "PA"]: + fp.write(b"Lut: 1\r\n") + fp.write(b"\000" * (511 - fp.tell()) + b"\032") + if im.mode in ["P", "PA"]: + im_palette = im.im.getpalette("RGB", "RGB;L") + colors = len(im_palette) // 3 + palette = b"" + for i in range(3): + palette += im_palette[colors * i : colors * (i + 1)] + palette += b"\x00" * (256 - colors) + fp.write(palette) # 768 bytes + ImageFile._save( + im, fp, [ImageFile._Tile("raw", (0, 0) + im.size, 0, (rawmode, 0, -1))] + ) + + +# +# -------------------------------------------------------------------- +# Registry + + +Image.register_open(ImImageFile.format, ImImageFile) +Image.register_save(ImImageFile.format, _save) + +Image.register_extension(ImImageFile.format, ".im") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/Image.py b/Python/venv/lib/python3.12/site-packages/PIL/Image.py new file mode 100644 index 0000000..5749807 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/Image.py @@ -0,0 +1,4381 @@ +# +# The Python Imaging Library. +# $Id$ +# +# the Image class wrapper +# +# partial release history: +# 1995-09-09 fl Created +# 1996-03-11 fl PIL release 0.0 (proof of concept) +# 1996-04-30 fl PIL release 0.1b1 +# 1999-07-28 fl PIL release 1.0 final +# 2000-06-07 fl PIL release 1.1 +# 2000-10-20 fl PIL release 1.1.1 +# 2001-05-07 fl PIL release 1.1.2 +# 2002-03-15 fl PIL release 1.1.3 +# 2003-05-10 fl PIL release 1.1.4 +# 2005-03-28 fl PIL release 1.1.5 +# 2006-12-02 fl PIL release 1.1.6 +# 2009-11-15 fl PIL release 1.1.7 +# +# Copyright (c) 1997-2009 by Secret Labs AB. All rights reserved. +# Copyright (c) 1995-2009 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + +from __future__ import annotations + +import abc +import atexit +import builtins +import io +import logging +import math +import os +import re +import struct +import sys +import tempfile +import warnings +from collections.abc import MutableMapping +from enum import IntEnum +from typing import IO, Protocol, cast + +# VERSION was removed in Pillow 6.0.0. +# PILLOW_VERSION was removed in Pillow 9.0.0. +# Use __version__ instead. +from . import ( + ExifTags, + ImageMode, + TiffTags, + UnidentifiedImageError, + __version__, + _plugins, +) +from ._binary import i32le, o32be, o32le +from ._deprecate import deprecate +from ._util import DeferredError, is_path + +ElementTree: ModuleType | None +try: + from defusedxml import ElementTree +except ImportError: + ElementTree = None + +TYPE_CHECKING = False +if TYPE_CHECKING: + from collections.abc import Callable, Iterator, Sequence + from types import ModuleType + from typing import Any, Literal + +logger = logging.getLogger(__name__) + + +class DecompressionBombWarning(RuntimeWarning): + pass + + +class DecompressionBombError(Exception): + pass + + +WARN_POSSIBLE_FORMATS: bool = False + +# Limit to around a quarter gigabyte for a 24-bit (3 bpp) image +MAX_IMAGE_PIXELS: int | None = int(1024 * 1024 * 1024 // 4 // 3) + + +try: + # If the _imaging C module is not present, Pillow will not load. + # Note that other modules should not refer to _imaging directly; + # import Image and use the Image.core variable instead. + # Also note that Image.core is not a publicly documented interface, + # and should be considered private and subject to change. + from . import _imaging as core + + if __version__ != getattr(core, "PILLOW_VERSION", None): + msg = ( + "The _imaging extension was built for another version of Pillow or PIL:\n" + f"Core version: {getattr(core, 'PILLOW_VERSION', None)}\n" + f"Pillow version: {__version__}" + ) + raise ImportError(msg) + +except ImportError as v: + # Explanations for ways that we know we might have an import error + if str(v).startswith("Module use of python"): + # The _imaging C module is present, but not compiled for + # the right version (windows only). Print a warning, if + # possible. + warnings.warn( + "The _imaging extension was built for another version of Python.", + RuntimeWarning, + ) + elif str(v).startswith("The _imaging extension"): + warnings.warn(str(v), RuntimeWarning) + # Fail here anyway. Don't let people run with a mostly broken Pillow. + # see docs/porting.rst + raise + + +# +# Constants + + +# transpose +class Transpose(IntEnum): + FLIP_LEFT_RIGHT = 0 + FLIP_TOP_BOTTOM = 1 + ROTATE_90 = 2 + ROTATE_180 = 3 + ROTATE_270 = 4 + TRANSPOSE = 5 + TRANSVERSE = 6 + + +# transforms (also defined in Imaging.h) +class Transform(IntEnum): + AFFINE = 0 + EXTENT = 1 + PERSPECTIVE = 2 + QUAD = 3 + MESH = 4 + + +# resampling filters (also defined in Imaging.h) +class Resampling(IntEnum): + NEAREST = 0 + BOX = 4 + BILINEAR = 2 + HAMMING = 5 + BICUBIC = 3 + LANCZOS = 1 + + +_filters_support = { + Resampling.BOX: 0.5, + Resampling.BILINEAR: 1.0, + Resampling.HAMMING: 1.0, + Resampling.BICUBIC: 2.0, + Resampling.LANCZOS: 3.0, +} + + +# dithers +class Dither(IntEnum): + NONE = 0 + ORDERED = 1 # Not yet implemented + RASTERIZE = 2 # Not yet implemented + FLOYDSTEINBERG = 3 # default + + +# palettes/quantizers +class Palette(IntEnum): + WEB = 0 + ADAPTIVE = 1 + + +class Quantize(IntEnum): + MEDIANCUT = 0 + MAXCOVERAGE = 1 + FASTOCTREE = 2 + LIBIMAGEQUANT = 3 + + +module = sys.modules[__name__] +for enum in (Transpose, Transform, Resampling, Dither, Palette, Quantize): + for item in enum: + setattr(module, item.name, item.value) + + +if hasattr(core, "DEFAULT_STRATEGY"): + DEFAULT_STRATEGY = core.DEFAULT_STRATEGY + FILTERED = core.FILTERED + HUFFMAN_ONLY = core.HUFFMAN_ONLY + RLE = core.RLE + FIXED = core.FIXED + + +# -------------------------------------------------------------------- +# Registries + +TYPE_CHECKING = False +if TYPE_CHECKING: + import mmap + from xml.etree.ElementTree import Element + + from IPython.lib.pretty import PrettyPrinter + + from . import ImageFile, ImageFilter, ImagePalette, ImageQt, TiffImagePlugin + from ._typing import CapsuleType, NumpyArray, StrOrBytesPath +ID: list[str] = [] +OPEN: dict[ + str, + tuple[ + Callable[[IO[bytes], str | bytes], ImageFile.ImageFile], + Callable[[bytes], bool | str] | None, + ], +] = {} +MIME: dict[str, str] = {} +SAVE: dict[str, Callable[[Image, IO[bytes], str | bytes], None]] = {} +SAVE_ALL: dict[str, Callable[[Image, IO[bytes], str | bytes], None]] = {} +EXTENSION: dict[str, str] = {} +DECODERS: dict[str, type[ImageFile.PyDecoder]] = {} +ENCODERS: dict[str, type[ImageFile.PyEncoder]] = {} + +# -------------------------------------------------------------------- +# Modes + +_ENDIAN = "<" if sys.byteorder == "little" else ">" + + +def _conv_type_shape(im: Image) -> tuple[tuple[int, ...], str]: + m = ImageMode.getmode(im.mode) + shape: tuple[int, ...] = (im.height, im.width) + extra = len(m.bands) + if extra != 1: + shape += (extra,) + return shape, m.typestr + + +MODES = [ + "1", + "CMYK", + "F", + "HSV", + "I", + "I;16", + "I;16B", + "I;16L", + "I;16N", + "L", + "LA", + "La", + "LAB", + "P", + "PA", + "RGB", + "RGBA", + "RGBa", + "RGBX", + "YCbCr", +] + +# raw modes that may be memory mapped. NOTE: if you change this, you +# may have to modify the stride calculation in map.c too! +_MAPMODES = ("L", "P", "RGBX", "RGBA", "CMYK", "I;16", "I;16L", "I;16B") + + +def getmodebase(mode: str) -> str: + """ + Gets the "base" mode for given mode. This function returns "L" for + images that contain grayscale data, and "RGB" for images that + contain color data. + + :param mode: Input mode. + :returns: "L" or "RGB". + :exception KeyError: If the input mode was not a standard mode. + """ + return ImageMode.getmode(mode).basemode + + +def getmodetype(mode: str) -> str: + """ + Gets the storage type mode. Given a mode, this function returns a + single-layer mode suitable for storing individual bands. + + :param mode: Input mode. + :returns: "L", "I", or "F". + :exception KeyError: If the input mode was not a standard mode. + """ + return ImageMode.getmode(mode).basetype + + +def getmodebandnames(mode: str) -> tuple[str, ...]: + """ + Gets a list of individual band names. Given a mode, this function returns + a tuple containing the names of individual bands (use + :py:method:`~PIL.Image.getmodetype` to get the mode used to store each + individual band. + + :param mode: Input mode. + :returns: A tuple containing band names. The length of the tuple + gives the number of bands in an image of the given mode. + :exception KeyError: If the input mode was not a standard mode. + """ + return ImageMode.getmode(mode).bands + + +def getmodebands(mode: str) -> int: + """ + Gets the number of individual bands for this mode. + + :param mode: Input mode. + :returns: The number of bands in this mode. + :exception KeyError: If the input mode was not a standard mode. + """ + return len(ImageMode.getmode(mode).bands) + + +# -------------------------------------------------------------------- +# Helpers + +_initialized = 0 + +# Mapping from file extension to plugin module name for lazy importing +_EXTENSION_PLUGIN: dict[str, str] = { + # Common formats (preinit) + ".bmp": "BmpImagePlugin", + ".dib": "BmpImagePlugin", + ".gif": "GifImagePlugin", + ".jfif": "JpegImagePlugin", + ".jpe": "JpegImagePlugin", + ".jpg": "JpegImagePlugin", + ".jpeg": "JpegImagePlugin", + ".pbm": "PpmImagePlugin", + ".pgm": "PpmImagePlugin", + ".pnm": "PpmImagePlugin", + ".ppm": "PpmImagePlugin", + ".pfm": "PpmImagePlugin", + ".png": "PngImagePlugin", + ".apng": "PngImagePlugin", + # Less common formats (init) + ".avif": "AvifImagePlugin", + ".avifs": "AvifImagePlugin", + ".blp": "BlpImagePlugin", + ".bufr": "BufrStubImagePlugin", + ".cur": "CurImagePlugin", + ".dcx": "DcxImagePlugin", + ".dds": "DdsImagePlugin", + ".ps": "EpsImagePlugin", + ".eps": "EpsImagePlugin", + ".fit": "FitsImagePlugin", + ".fits": "FitsImagePlugin", + ".fli": "FliImagePlugin", + ".flc": "FliImagePlugin", + ".fpx": "FpxImagePlugin", + ".ftc": "FtexImagePlugin", + ".ftu": "FtexImagePlugin", + ".gbr": "GbrImagePlugin", + ".grib": "GribStubImagePlugin", + ".h5": "Hdf5StubImagePlugin", + ".hdf": "Hdf5StubImagePlugin", + ".icns": "IcnsImagePlugin", + ".ico": "IcoImagePlugin", + ".im": "ImImagePlugin", + ".iim": "IptcImagePlugin", + ".jp2": "Jpeg2KImagePlugin", + ".j2k": "Jpeg2KImagePlugin", + ".jpc": "Jpeg2KImagePlugin", + ".jpf": "Jpeg2KImagePlugin", + ".jpx": "Jpeg2KImagePlugin", + ".j2c": "Jpeg2KImagePlugin", + ".mic": "MicImagePlugin", + ".mpg": "MpegImagePlugin", + ".mpeg": "MpegImagePlugin", + ".mpo": "MpoImagePlugin", + ".msp": "MspImagePlugin", + ".palm": "PalmImagePlugin", + ".pcd": "PcdImagePlugin", + ".pcx": "PcxImagePlugin", + ".pdf": "PdfImagePlugin", + ".pxr": "PixarImagePlugin", + ".psd": "PsdImagePlugin", + ".qoi": "QoiImagePlugin", + ".bw": "SgiImagePlugin", + ".rgb": "SgiImagePlugin", + ".rgba": "SgiImagePlugin", + ".sgi": "SgiImagePlugin", + ".ras": "SunImagePlugin", + ".tga": "TgaImagePlugin", + ".icb": "TgaImagePlugin", + ".vda": "TgaImagePlugin", + ".vst": "TgaImagePlugin", + ".tif": "TiffImagePlugin", + ".tiff": "TiffImagePlugin", + ".webp": "WebPImagePlugin", + ".wmf": "WmfImagePlugin", + ".emf": "WmfImagePlugin", + ".xbm": "XbmImagePlugin", + ".xpm": "XpmImagePlugin", +} + + +def _import_plugin_for_extension(ext: str | bytes) -> bool: + """Import only the plugin needed for a specific file extension.""" + if not ext: + return False + + if isinstance(ext, bytes): + ext = ext.decode() + ext = ext.lower() + if ext in EXTENSION: + return True + + plugin = _EXTENSION_PLUGIN.get(ext) + if plugin is None: + return False + + try: + logger.debug("Importing %s", plugin) + __import__(f"{__spec__.parent}.{plugin}", globals(), locals(), []) + return True + except ImportError as e: + logger.debug("Image: failed to import %s: %s", plugin, e) + return False + + +def preinit() -> None: + """ + Explicitly loads BMP, GIF, JPEG, PPM and PNG file format drivers. + + It is called when opening or saving images. + """ + + global _initialized + if _initialized >= 1: + return + + try: + from . import BmpImagePlugin + + assert BmpImagePlugin + except ImportError: + pass + try: + from . import GifImagePlugin + + assert GifImagePlugin + except ImportError: + pass + try: + from . import JpegImagePlugin + + assert JpegImagePlugin + except ImportError: + pass + try: + from . import PpmImagePlugin + + assert PpmImagePlugin + except ImportError: + pass + try: + from . import PngImagePlugin + + assert PngImagePlugin + except ImportError: + pass + + _initialized = 1 + + +def init() -> bool: + """ + Explicitly initializes the Python Imaging Library. This function + loads all available file format drivers. + + It is called when opening or saving images if :py:meth:`~preinit()` is + insufficient, and by :py:meth:`~PIL.features.pilinfo`. + """ + + global _initialized + if _initialized >= 2: + return False + + for plugin in _plugins: + try: + logger.debug("Importing %s", plugin) + __import__(f"{__spec__.parent}.{plugin}", globals(), locals(), []) + except ImportError as e: # noqa: PERF203 + logger.debug("Image: failed to import %s: %s", plugin, e) + + if OPEN or SAVE: + _initialized = 2 + return True + return False + + +# -------------------------------------------------------------------- +# Codec factories (used by tobytes/frombytes and ImageFile.load) + + +def _getdecoder( + mode: str, decoder_name: str, args: Any, extra: tuple[Any, ...] = () +) -> core.ImagingDecoder | ImageFile.PyDecoder: + # tweak arguments + if args is None: + args = () + elif not isinstance(args, tuple): + args = (args,) + + try: + decoder = DECODERS[decoder_name] + except KeyError: + pass + else: + return decoder(mode, *args + extra) + + try: + # get decoder + decoder = getattr(core, f"{decoder_name}_decoder") + except AttributeError as e: + msg = f"decoder {decoder_name} not available" + raise OSError(msg) from e + return decoder(mode, *args + extra) + + +def _getencoder( + mode: str, encoder_name: str, args: Any, extra: tuple[Any, ...] = () +) -> core.ImagingEncoder | ImageFile.PyEncoder: + # tweak arguments + if args is None: + args = () + elif not isinstance(args, tuple): + args = (args,) + + try: + encoder = ENCODERS[encoder_name] + except KeyError: + pass + else: + return encoder(mode, *args + extra) + + try: + # get encoder + encoder = getattr(core, f"{encoder_name}_encoder") + except AttributeError as e: + msg = f"encoder {encoder_name} not available" + raise OSError(msg) from e + return encoder(mode, *args + extra) + + +# -------------------------------------------------------------------- +# Simple expression analyzer + + +class ImagePointTransform: + """ + Used with :py:meth:`~PIL.Image.Image.point` for single band images with more than + 8 bits, this represents an affine transformation, where the value is multiplied by + ``scale`` and ``offset`` is added. + """ + + def __init__(self, scale: float, offset: float) -> None: + self.scale = scale + self.offset = offset + + def __neg__(self) -> ImagePointTransform: + return ImagePointTransform(-self.scale, -self.offset) + + def __add__(self, other: ImagePointTransform | float) -> ImagePointTransform: + if isinstance(other, ImagePointTransform): + return ImagePointTransform( + self.scale + other.scale, self.offset + other.offset + ) + return ImagePointTransform(self.scale, self.offset + other) + + __radd__ = __add__ + + def __sub__(self, other: ImagePointTransform | float) -> ImagePointTransform: + return self + -other + + def __rsub__(self, other: ImagePointTransform | float) -> ImagePointTransform: + return other + -self + + def __mul__(self, other: ImagePointTransform | float) -> ImagePointTransform: + if isinstance(other, ImagePointTransform): + return NotImplemented + return ImagePointTransform(self.scale * other, self.offset * other) + + __rmul__ = __mul__ + + def __truediv__(self, other: ImagePointTransform | float) -> ImagePointTransform: + if isinstance(other, ImagePointTransform): + return NotImplemented + return ImagePointTransform(self.scale / other, self.offset / other) + + +def _getscaleoffset( + expr: Callable[[ImagePointTransform], ImagePointTransform | float], +) -> tuple[float, float]: + a = expr(ImagePointTransform(1, 0)) + return (a.scale, a.offset) if isinstance(a, ImagePointTransform) else (0, a) + + +# -------------------------------------------------------------------- +# Implementation wrapper + + +class SupportsGetData(Protocol): + def getdata( + self, + ) -> tuple[Transform, Sequence[int]]: ... + + +class Image: + """ + This class represents an image object. To create + :py:class:`~PIL.Image.Image` objects, use the appropriate factory + functions. There's hardly ever any reason to call the Image constructor + directly. + + * :py:func:`~PIL.Image.open` + * :py:func:`~PIL.Image.new` + * :py:func:`~PIL.Image.frombytes` + """ + + format: str | None = None + format_description: str | None = None + _close_exclusive_fp_after_loading = True + + def __init__(self) -> None: + # FIXME: take "new" parameters / other image? + self._im: core.ImagingCore | DeferredError | None = None + self._mode = "" + self._size = (0, 0) + self.palette: ImagePalette.ImagePalette | None = None + self.info: dict[str | tuple[int, int], Any] = {} + self.readonly = 0 + self._exif: Exif | None = None + + @property + def im(self) -> core.ImagingCore: + if isinstance(self._im, DeferredError): + raise self._im.ex + assert self._im is not None + return self._im + + @im.setter + def im(self, im: core.ImagingCore) -> None: + self._im = im + + @property + def width(self) -> int: + return self.size[0] + + @property + def height(self) -> int: + return self.size[1] + + @property + def size(self) -> tuple[int, int]: + return self._size + + @property + def mode(self) -> str: + return self._mode + + @property + def readonly(self) -> int: + return (self._im and self._im.readonly) or self._readonly + + @readonly.setter + def readonly(self, readonly: int) -> None: + self._readonly = readonly + + def _new(self, im: core.ImagingCore) -> Image: + new = Image() + new.im = im + new._mode = im.mode + new._size = im.size + if im.mode in ("P", "PA"): + if self.palette: + new.palette = self.palette.copy() + else: + from . import ImagePalette + + new.palette = ImagePalette.ImagePalette() + new.info = self.info.copy() + return new + + # Context manager support + def __enter__(self) -> Image: + return self + + def __exit__(self, *args: object) -> None: + pass + + def close(self) -> None: + """ + This operation will destroy the image core and release its memory. + The image data will be unusable afterward. + + This function is required to close images that have multiple frames or + have not had their file read and closed by the + :py:meth:`~PIL.Image.Image.load` method. See :ref:`file-handling` for + more information. + """ + if getattr(self, "map", None): + if sys.platform == "win32" and hasattr(sys, "pypy_version_info"): + self.map.close() + self.map: mmap.mmap | None = None + + # Instead of simply setting to None, we're setting up a + # deferred error that will better explain that the core image + # object is gone. + self._im = DeferredError(ValueError("Operation on closed image")) + + def _copy(self) -> None: + self.load() + self.im = self.im.copy() + self.readonly = 0 + + def _ensure_mutable(self) -> None: + if self.readonly: + self._copy() + else: + self.load() + + def _dump( + self, file: str | None = None, format: str | None = None, **options: Any + ) -> str: + suffix = "" + if format: + suffix = f".{format}" + + if not file: + f, filename = tempfile.mkstemp(suffix) + os.close(f) + else: + filename = file + if not filename.endswith(suffix): + filename = filename + suffix + + self.load() + + if not format or format == "PPM": + self.im.save_ppm(filename) + else: + self.save(filename, format, **options) + + return filename + + def __eq__(self, other: object) -> bool: + if self.__class__ is not other.__class__: + return False + assert isinstance(other, Image) + return ( + self.mode == other.mode + and self.size == other.size + and self.info == other.info + and self.getpalette() == other.getpalette() + and self.tobytes() == other.tobytes() + ) + + def __repr__(self) -> str: + return ( + f"<{self.__class__.__module__}.{self.__class__.__name__} " + f"image mode={self.mode} size={self.size[0]}x{self.size[1]} " + f"at 0x{id(self):X}>" + ) + + def _repr_pretty_(self, p: PrettyPrinter, cycle: bool) -> None: + """IPython plain text display support""" + + # Same as __repr__ but without unpredictable id(self), + # to keep Jupyter notebook `text/plain` output stable. + p.text( + f"<{self.__class__.__module__}.{self.__class__.__name__} " + f"image mode={self.mode} size={self.size[0]}x{self.size[1]}>" + ) + + def _repr_image(self, image_format: str, **kwargs: Any) -> bytes | None: + """Helper function for iPython display hook. + + :param image_format: Image format. + :returns: image as bytes, saved into the given format. + """ + b = io.BytesIO() + try: + self.save(b, image_format, **kwargs) + except Exception: + return None + return b.getvalue() + + def _repr_png_(self) -> bytes | None: + """iPython display hook support for PNG format. + + :returns: PNG version of the image as bytes + """ + return self._repr_image("PNG", compress_level=1) + + def _repr_jpeg_(self) -> bytes | None: + """iPython display hook support for JPEG format. + + :returns: JPEG version of the image as bytes + """ + return self._repr_image("JPEG") + + @property + def __array_interface__(self) -> dict[str, str | bytes | int | tuple[int, ...]]: + # numpy array interface support + new: dict[str, str | bytes | int | tuple[int, ...]] = {"version": 3} + if self.mode == "1": + # Binary images need to be extended from bits to bytes + # See: https://github.com/python-pillow/Pillow/issues/350 + new["data"] = self.tobytes("raw", "L") + else: + new["data"] = self.tobytes() + new["shape"], new["typestr"] = _conv_type_shape(self) + return new + + def __arrow_c_schema__(self) -> object: + self.load() + return self.im.__arrow_c_schema__() + + def __arrow_c_array__( + self, requested_schema: object | None = None + ) -> tuple[object, object]: + self.load() + return (self.im.__arrow_c_schema__(), self.im.__arrow_c_array__()) + + def __getstate__(self) -> list[Any]: + im_data = self.tobytes() # load image first + return [self.info, self.mode, self.size, self.getpalette(), im_data] + + def __setstate__(self, state: list[Any]) -> None: + Image.__init__(self) + info, mode, size, palette, data = state[:5] + self.info = info + self._mode = mode + self._size = size + self.im = core.new(mode, size) + if mode in ("L", "LA", "P", "PA") and palette: + self.putpalette(palette) + self.frombytes(data) + + def tobytes(self, encoder_name: str = "raw", *args: Any) -> bytes: + """ + Return image as a bytes object. + + .. warning:: + + This method returns raw image data derived from Pillow's internal + storage. For compressed image data (e.g. PNG, JPEG) use + :meth:`~.save`, with a BytesIO parameter for in-memory data. + + :param encoder_name: What encoder to use. + + The default is to use the standard "raw" encoder. + To see how this packs pixel data into the returned + bytes, see :file:`libImaging/Pack.c`. + + A list of C encoders can be seen under codecs + section of the function array in + :file:`_imaging.c`. Python encoders are registered + within the relevant plugins. + :param args: Extra arguments to the encoder. + :returns: A :py:class:`bytes` object. + """ + + encoder_args: Any = args + if len(encoder_args) == 1 and isinstance(encoder_args[0], tuple): + # may pass tuple instead of argument list + encoder_args = encoder_args[0] + + if encoder_name == "raw" and encoder_args == (): + encoder_args = self.mode + + self.load() + + if self.width == 0 or self.height == 0: + return b"" + + # unpack data + e = _getencoder(self.mode, encoder_name, encoder_args) + e.setimage(self.im, (0, 0) + self.size) + + from . import ImageFile + + bufsize = max(ImageFile.MAXBLOCK, self.size[0] * 4) # see RawEncode.c + + output = [] + while True: + bytes_consumed, errcode, data = e.encode(bufsize) + output.append(data) + if errcode: + break + if errcode < 0: + msg = f"encoder error {errcode} in tobytes" + raise RuntimeError(msg) + + return b"".join(output) + + def tobitmap(self, name: str = "image") -> bytes: + """ + Returns the image converted to an X11 bitmap. + + .. note:: This method only works for mode "1" images. + + :param name: The name prefix to use for the bitmap variables. + :returns: A string containing an X11 bitmap. + :raises ValueError: If the mode is not "1" + """ + + self.load() + if self.mode != "1": + msg = "not a bitmap" + raise ValueError(msg) + data = self.tobytes("xbm") + return b"".join( + [ + f"#define {name}_width {self.size[0]}\n".encode("ascii"), + f"#define {name}_height {self.size[1]}\n".encode("ascii"), + f"static char {name}_bits[] = {{\n".encode("ascii"), + data, + b"};", + ] + ) + + def frombytes( + self, + data: bytes | bytearray | SupportsArrayInterface, + decoder_name: str = "raw", + *args: Any, + ) -> None: + """ + Loads this image with pixel data from a bytes object. + + This method is similar to the :py:func:`~PIL.Image.frombytes` function, + but loads data into this image instead of creating a new image object. + """ + + if self.width == 0 or self.height == 0: + return + + decoder_args: Any = args + if len(decoder_args) == 1 and isinstance(decoder_args[0], tuple): + # may pass tuple instead of argument list + decoder_args = decoder_args[0] + + # default format + if decoder_name == "raw" and decoder_args == (): + decoder_args = self.mode + + # unpack data + d = _getdecoder(self.mode, decoder_name, decoder_args) + d.setimage(self.im, (0, 0) + self.size) + s = d.decode(data) + + if s[0] >= 0: + msg = "not enough image data" + raise ValueError(msg) + if s[1] != 0: + msg = "cannot decode image data" + raise ValueError(msg) + + def load(self) -> core.PixelAccess | None: + """ + Allocates storage for the image and loads the pixel data. In + normal cases, you don't need to call this method, since the + Image class automatically loads an opened image when it is + accessed for the first time. + + If the file associated with the image was opened by Pillow, then this + method will close it. The exception to this is if the image has + multiple frames, in which case the file will be left open for seek + operations. See :ref:`file-handling` for more information. + + :returns: An image access object. + :rtype: :py:class:`.PixelAccess` + """ + if self._im is not None and self.palette and self.palette.dirty: + # realize palette + mode, arr = self.palette.getdata() + self.im.putpalette(self.palette.mode, mode, arr) + self.palette.dirty = 0 + self.palette.rawmode = None + if "transparency" in self.info and mode in ("LA", "PA"): + if isinstance(self.info["transparency"], int): + self.im.putpalettealpha(self.info["transparency"], 0) + else: + self.im.putpalettealphas(self.info["transparency"]) + self.palette.mode = "RGBA" + elif self.palette.mode != mode: + # If the palette rawmode is different to the mode, + # then update the Python palette data + self.palette.palette = self.im.getpalette( + self.palette.mode, self.palette.mode + ) + + if self._im is not None: + return self.im.pixel_access(self.readonly) + return None + + def verify(self) -> None: + """ + Verifies the contents of a file. For data read from a file, this + method attempts to determine if the file is broken, without + actually decoding the image data. If this method finds any + problems, it raises suitable exceptions. If you need to load + the image after using this method, you must reopen the image + file. + """ + pass + + def convert( + self, + mode: str | None = None, + matrix: tuple[float, ...] | None = None, + dither: Dither | None = None, + palette: Palette = Palette.WEB, + colors: int = 256, + ) -> Image: + """ + Returns a converted copy of this image. For the "P" mode, this + method translates pixels through the palette. If mode is + omitted, a mode is chosen so that all information in the image + and the palette can be represented without a palette. + + This supports all possible conversions between "L", "RGB" and "CMYK". The + ``matrix`` argument only supports "L" and "RGB". + + When translating a color image to grayscale (mode "L"), + the library uses the ITU-R 601-2 luma transform:: + + L = R * 299/1000 + G * 587/1000 + B * 114/1000 + + The default method of converting a grayscale ("L") or "RGB" + image into a bilevel (mode "1") image uses Floyd-Steinberg + dither to approximate the original image luminosity levels. If + dither is ``None``, all values larger than 127 are set to 255 (white), + all other values to 0 (black). To use other thresholds, use the + :py:meth:`~PIL.Image.Image.point` method. + + When converting from "RGBA" to "P" without a ``matrix`` argument, + this passes the operation to :py:meth:`~PIL.Image.Image.quantize`, + and ``dither`` and ``palette`` are ignored. + + When converting from "PA", if an "RGBA" palette is present, the alpha + channel from the image will be used instead of the values from the palette. + + :param mode: The requested mode. See: :ref:`concept-modes`. + :param matrix: An optional conversion matrix. If given, this + should be 4- or 12-tuple containing floating point values. + :param dither: Dithering method, used when converting from + mode "RGB" to "P" or from "RGB" or "L" to "1". + Available methods are :data:`Dither.NONE` or :data:`Dither.FLOYDSTEINBERG` + (default). Note that this is not used when ``matrix`` is supplied. + :param palette: Palette to use when converting from mode "RGB" + to "P". Available palettes are :data:`Palette.WEB` or + :data:`Palette.ADAPTIVE`. + :param colors: Number of colors to use for the :data:`Palette.ADAPTIVE` + palette. Defaults to 256. + :rtype: :py:class:`~PIL.Image.Image` + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + self.load() + + has_transparency = "transparency" in self.info + if not mode and self.mode == "P": + # determine default mode + if self.palette: + mode = self.palette.mode + else: + mode = "RGB" + if mode == "RGB" and has_transparency: + mode = "RGBA" + if not mode or (mode == self.mode and not matrix): + return self.copy() + + if matrix: + # matrix conversion + if mode not in ("L", "RGB"): + msg = "illegal conversion" + raise ValueError(msg) + im = self.im.convert_matrix(mode, matrix) + new_im = self._new(im) + if has_transparency and self.im.bands == 3: + transparency = new_im.info["transparency"] + + def convert_transparency( + m: tuple[float, ...], v: tuple[int, int, int] + ) -> int: + value = m[0] * v[0] + m[1] * v[1] + m[2] * v[2] + m[3] * 0.5 + return max(0, min(255, int(value))) + + if mode == "L": + transparency = convert_transparency(matrix, transparency) + elif len(mode) == 3: + transparency = tuple( + convert_transparency(matrix[i * 4 : i * 4 + 4], transparency) + for i in range(len(transparency)) + ) + new_im.info["transparency"] = transparency + return new_im + + if self.mode == "RGBA": + if mode == "P": + return self.quantize(colors) + elif mode == "PA": + r, g, b, a = self.split() + rgb = merge("RGB", (r, g, b)) + p = rgb.quantize(colors) + return merge("PA", (p, a)) + + trns = None + delete_trns = False + # transparency handling + if has_transparency: + if (self.mode in ("1", "L", "I", "I;16") and mode in ("LA", "RGBA")) or ( + self.mode == "RGB" and mode in ("La", "LA", "RGBa", "RGBA") + ): + # Use transparent conversion to promote from transparent + # color to an alpha channel. + new_im = self._new( + self.im.convert_transparent(mode, self.info["transparency"]) + ) + del new_im.info["transparency"] + return new_im + elif self.mode in ("L", "RGB", "P") and mode in ("L", "RGB", "P"): + t = self.info["transparency"] + if isinstance(t, bytes): + # Dragons. This can't be represented by a single color + warnings.warn( + "Palette images with Transparency expressed in bytes should be " + "converted to RGBA images" + ) + delete_trns = True + else: + # get the new transparency color. + # use existing conversions + trns_im = new(self.mode, (1, 1)) + if self.mode == "P": + assert self.palette is not None + trns_im.putpalette(self.palette, self.palette.mode) + if isinstance(t, tuple): + err = "Couldn't allocate a palette color for transparency" + assert trns_im.palette is not None + try: + t = trns_im.palette.getcolor(t, self) + except ValueError as e: + if str(e) == "cannot allocate more than 256 colors": + # If all 256 colors are in use, + # then there is no need for transparency + t = None + else: + raise ValueError(err) from e + if t is None: + trns = None + else: + trns_im.putpixel((0, 0), t) + + if mode in ("L", "RGB"): + trns_im = trns_im.convert(mode) + else: + # can't just retrieve the palette number, got to do it + # after quantization. + trns_im = trns_im.convert("RGB") + trns = trns_im.getpixel((0, 0)) + + elif self.mode == "P" and mode in ("LA", "PA", "RGBA"): + t = self.info["transparency"] + delete_trns = True + + if isinstance(t, bytes): + self.im.putpalettealphas(t) + elif isinstance(t, int): + self.im.putpalettealpha(t, 0) + else: + msg = "Transparency for P mode should be bytes or int" + raise ValueError(msg) + + if mode == "P" and palette == Palette.ADAPTIVE: + im = self.im.quantize(colors) + new_im = self._new(im) + from . import ImagePalette + + new_im.palette = ImagePalette.ImagePalette( + "RGB", new_im.im.getpalette("RGB") + ) + if delete_trns: + # This could possibly happen if we requantize to fewer colors. + # The transparency would be totally off in that case. + del new_im.info["transparency"] + if trns is not None: + try: + new_im.info["transparency"] = new_im.palette.getcolor( + cast(tuple[int, ...], trns), # trns was converted to RGB + new_im, + ) + except Exception: + # if we can't make a transparent color, don't leave the old + # transparency hanging around to mess us up. + del new_im.info["transparency"] + warnings.warn("Couldn't allocate palette entry for transparency") + return new_im + + if "LAB" in (self.mode, mode): + im = self + if mode == "LAB": + if im.mode not in ("RGB", "RGBA", "RGBX"): + im = im.convert("RGBA") + other_mode = im.mode + else: + other_mode = mode + if other_mode in ("RGB", "RGBA", "RGBX"): + from . import ImageCms + + srgb = ImageCms.createProfile("sRGB") + lab = ImageCms.createProfile("LAB") + profiles = [lab, srgb] if im.mode == "LAB" else [srgb, lab] + transform = ImageCms.buildTransform( + profiles[0], profiles[1], im.mode, mode + ) + return transform.apply(im) + + # colorspace conversion + if dither is None: + dither = Dither.FLOYDSTEINBERG + + try: + im = self.im.convert(mode, dither) + except ValueError: + try: + # normalize source image and try again + modebase = getmodebase(self.mode) + if modebase == self.mode: + raise + im = self.im.convert(modebase) + im = im.convert(mode, dither) + except KeyError as e: + msg = "illegal conversion" + raise ValueError(msg) from e + + new_im = self._new(im) + if mode in ("P", "PA") and palette != Palette.ADAPTIVE: + from . import ImagePalette + + new_im.palette = ImagePalette.ImagePalette("RGB", im.getpalette("RGB")) + if delete_trns: + # crash fail if we leave a bytes transparency in an rgb/l mode. + del new_im.info["transparency"] + if trns is not None: + if new_im.mode == "P" and new_im.palette: + try: + new_im.info["transparency"] = new_im.palette.getcolor( + cast(tuple[int, ...], trns), new_im # trns was converted to RGB + ) + except ValueError as e: + del new_im.info["transparency"] + if str(e) != "cannot allocate more than 256 colors": + # If all 256 colors are in use, + # then there is no need for transparency + warnings.warn( + "Couldn't allocate palette entry for transparency" + ) + else: + new_im.info["transparency"] = trns + return new_im + + def quantize( + self, + colors: int = 256, + method: int | None = None, + kmeans: int = 0, + palette: Image | None = None, + dither: Dither = Dither.FLOYDSTEINBERG, + ) -> Image: + """ + Convert the image to 'P' mode with the specified number + of colors. + + :param colors: The desired number of colors, <= 256 + :param method: :data:`Quantize.MEDIANCUT` (median cut), + :data:`Quantize.MAXCOVERAGE` (maximum coverage), + :data:`Quantize.FASTOCTREE` (fast octree), + :data:`Quantize.LIBIMAGEQUANT` (libimagequant; check support + using :py:func:`PIL.features.check_feature` with + ``feature="libimagequant"``). + + By default, :data:`Quantize.MEDIANCUT` will be used. + + The exception to this is RGBA images. :data:`Quantize.MEDIANCUT` + and :data:`Quantize.MAXCOVERAGE` do not support RGBA images, so + :data:`Quantize.FASTOCTREE` is used by default instead. + :param kmeans: Integer greater than or equal to zero. + :param palette: Quantize to the palette of given + :py:class:`PIL.Image.Image`. + :param dither: Dithering method, used when converting from + mode "RGB" to "P" or from "RGB" or "L" to "1". + Available methods are :data:`Dither.NONE` or :data:`Dither.FLOYDSTEINBERG` + (default). + :returns: A new image + """ + + self.load() + + if method is None: + # defaults: + method = Quantize.MEDIANCUT + if self.mode == "RGBA": + method = Quantize.FASTOCTREE + + if self.mode == "RGBA" and method not in ( + Quantize.FASTOCTREE, + Quantize.LIBIMAGEQUANT, + ): + # Caller specified an invalid mode. + msg = ( + "Fast Octree (method == 2) and libimagequant (method == 3) " + "are the only valid methods for quantizing RGBA images" + ) + raise ValueError(msg) + + if palette: + # use palette from reference image + palette.load() + if palette.mode != "P": + msg = "bad mode for palette image" + raise ValueError(msg) + if self.mode not in {"RGB", "L"}: + msg = "only RGB or L mode images can be quantized to a palette" + raise ValueError(msg) + im = self.im.convert("P", dither, palette.im) + new_im = self._new(im) + assert palette.palette is not None + new_im.palette = palette.palette.copy() + return new_im + + if kmeans < 0: + msg = "kmeans must not be negative" + raise ValueError(msg) + + im = self._new(self.im.quantize(colors, method, kmeans)) + + from . import ImagePalette + + mode = im.im.getpalettemode() + palette_data = im.im.getpalette(mode, mode)[: colors * len(mode)] + im.palette = ImagePalette.ImagePalette(mode, palette_data) + + return im + + def copy(self) -> Image: + """ + Copies this image. Use this method if you wish to paste things + into an image, but still retain the original. + + :rtype: :py:class:`~PIL.Image.Image` + :returns: An :py:class:`~PIL.Image.Image` object. + """ + self.load() + return self._new(self.im.copy()) + + __copy__ = copy + + def crop(self, box: tuple[float, float, float, float] | None = None) -> Image: + """ + Returns a rectangular region from this image. The box is a + 4-tuple defining the left, upper, right, and lower pixel + coordinate. See :ref:`coordinate-system`. + + Note: Prior to Pillow 3.4.0, this was a lazy operation. + + :param box: The crop rectangle, as a (left, upper, right, lower)-tuple. + :rtype: :py:class:`~PIL.Image.Image` + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + if box is None: + return self.copy() + + if box[2] < box[0]: + msg = "Coordinate 'right' is less than 'left'" + raise ValueError(msg) + elif box[3] < box[1]: + msg = "Coordinate 'lower' is less than 'upper'" + raise ValueError(msg) + + self.load() + return self._new(self._crop(self.im, box)) + + def _crop( + self, im: core.ImagingCore, box: tuple[float, float, float, float] + ) -> core.ImagingCore: + """ + Returns a rectangular region from the core image object im. + + This is equivalent to calling im.crop((x0, y0, x1, y1)), but + includes additional sanity checks. + + :param im: a core image object + :param box: The crop rectangle, as a (left, upper, right, lower)-tuple. + :returns: A core image object. + """ + + x0, y0, x1, y1 = map(int, map(round, box)) + + absolute_values = (abs(x1 - x0), abs(y1 - y0)) + + _decompression_bomb_check(absolute_values) + + return im.crop((x0, y0, x1, y1)) + + def draft( + self, mode: str | None, size: tuple[int, int] | None + ) -> tuple[str, tuple[int, int, float, float]] | None: + """ + Configures the image file loader so it returns a version of the + image that as closely as possible matches the given mode and + size. For example, you can use this method to convert a color + JPEG to grayscale while loading it. + + If any changes are made, returns a tuple with the chosen ``mode`` and + ``box`` with coordinates of the original image within the altered one. + + Note that this method modifies the :py:class:`~PIL.Image.Image` object + in place. If the image has already been loaded, this method has no + effect. + + Note: This method is not implemented for most images. It is + currently implemented only for JPEG and MPO images. + + :param mode: The requested mode. + :param size: The requested size in pixels, as a 2-tuple: + (width, height). + """ + pass + + def filter(self, filter: ImageFilter.Filter | type[ImageFilter.Filter]) -> Image: + """ + Filters this image using the given filter. For a list of + available filters, see the :py:mod:`~PIL.ImageFilter` module. + + :param filter: Filter kernel. + :returns: An :py:class:`~PIL.Image.Image` object.""" + + from . import ImageFilter + + self.load() + + if callable(filter): + filter = filter() + if not hasattr(filter, "filter"): + msg = "filter argument should be ImageFilter.Filter instance or class" + raise TypeError(msg) + + multiband = isinstance(filter, ImageFilter.MultibandFilter) + if self.im.bands == 1 or multiband: + return self._new(filter.filter(self.im)) + + ims = [ + self._new(filter.filter(self.im.getband(c))) for c in range(self.im.bands) + ] + return merge(self.mode, ims) + + def getbands(self) -> tuple[str, ...]: + """ + Returns a tuple containing the name of each band in this image. + For example, ``getbands`` on an RGB image returns ("R", "G", "B"). + + :returns: A tuple containing band names. + :rtype: tuple + """ + return ImageMode.getmode(self.mode).bands + + def getbbox(self, *, alpha_only: bool = True) -> tuple[int, int, int, int] | None: + """ + Calculates the bounding box of the non-zero regions in the + image. + + :param alpha_only: Optional flag, defaulting to ``True``. + If ``True`` and the image has an alpha channel, trim transparent pixels. + Otherwise, trim pixels when all channels are zero. + Keyword-only argument. + :returns: The bounding box is returned as a 4-tuple defining the + left, upper, right, and lower pixel coordinate. See + :ref:`coordinate-system`. If the image is completely empty, this + method returns None. + + """ + + self.load() + return self.im.getbbox(alpha_only) + + def getcolors( + self, maxcolors: int = 256 + ) -> list[tuple[int, tuple[int, ...]]] | list[tuple[int, float]] | None: + """ + Returns a list of colors used in this image. + + The colors will be in the image's mode. For example, an RGB image will + return a tuple of (red, green, blue) color values, and a P image will + return the index of the color in the palette. + + :param maxcolors: Maximum number of colors. If this number is + exceeded, this method returns None. The default limit is + 256 colors. + :returns: An unsorted list of (count, pixel) values. + """ + + self.load() + if self.mode in ("1", "L", "P"): + h = self.im.histogram() + out: list[tuple[int, float]] = [(h[i], i) for i in range(256) if h[i]] + if len(out) > maxcolors: + return None + return out + return self.im.getcolors(maxcolors) + + def getdata(self, band: int | None = None) -> core.ImagingCore: + """ + Returns the contents of this image as a sequence object + containing pixel values. The sequence object is flattened, so + that values for line one follow directly after the values of + line zero, and so on. + + Note that the sequence object returned by this method is an + internal PIL data type, which only supports certain sequence + operations. To convert it to an ordinary sequence (e.g. for + printing), use ``list(im.getdata())``. + + :param band: What band to return. The default is to return + all bands. To return a single band, pass in the index + value (e.g. 0 to get the "R" band from an "RGB" image). + :returns: A sequence-like object. + """ + deprecate("Image.Image.getdata", 14, "get_flattened_data") + + self.load() + if band is not None: + return self.im.getband(band) + return self.im # could be abused + + def get_flattened_data( + self, band: int | None = None + ) -> tuple[tuple[int, ...], ...] | tuple[float, ...]: + """ + Returns the contents of this image as a tuple containing pixel values. + The sequence object is flattened, so that values for line one follow + directly after the values of line zero, and so on. + + :param band: What band to return. The default is to return + all bands. To return a single band, pass in the index + value (e.g. 0 to get the "R" band from an "RGB" image). + :returns: A tuple containing pixel values. + """ + self.load() + if band is not None: + return tuple(self.im.getband(band)) + return tuple(self.im) + + def getextrema(self) -> tuple[float, float] | tuple[tuple[int, int], ...]: + """ + Gets the minimum and maximum pixel values for each band in + the image. + + :returns: For a single-band image, a 2-tuple containing the + minimum and maximum pixel value. For a multi-band image, + a tuple containing one 2-tuple for each band. + """ + + self.load() + if self.im.bands > 1: + return tuple(self.im.getband(i).getextrema() for i in range(self.im.bands)) + return self.im.getextrema() + + def getxmp(self) -> dict[str, Any]: + """ + Returns a dictionary containing the XMP tags. + Requires defusedxml to be installed. + + :returns: XMP tags in a dictionary. + """ + + def get_name(tag: str) -> str: + return re.sub("^{[^}]+}", "", tag) + + def get_value(element: Element) -> str | dict[str, Any] | None: + value: dict[str, Any] = {get_name(k): v for k, v in element.attrib.items()} + children = list(element) + if children: + for child in children: + name = get_name(child.tag) + child_value = get_value(child) + if name in value: + if not isinstance(value[name], list): + value[name] = [value[name]] + value[name].append(child_value) + else: + value[name] = child_value + elif value: + if element.text: + value["text"] = element.text + else: + return element.text + return value + + if ElementTree is None: + warnings.warn("XMP data cannot be read without defusedxml dependency") + return {} + if "xmp" not in self.info: + return {} + root = ElementTree.fromstring(self.info["xmp"].rstrip(b"\x00 ")) + return {get_name(root.tag): get_value(root)} + + def getexif(self) -> Exif: + """ + Gets EXIF data from the image. + + :returns: an :py:class:`~PIL.Image.Exif` object. + """ + if self._exif is None: + self._exif = Exif() + elif self._exif._loaded: + return self._exif + self._exif._loaded = True + + exif_info = self.info.get("exif") + if exif_info is None: + if "Raw profile type exif" in self.info: + exif_info = bytes.fromhex( + "".join(self.info["Raw profile type exif"].split("\n")[3:]) + ) + elif hasattr(self, "tag_v2"): + from . import TiffImagePlugin + + assert isinstance(self, TiffImagePlugin.TiffImageFile) + self._exif.bigtiff = self.tag_v2._bigtiff + self._exif.endian = self.tag_v2._endian + + assert self.fp is not None + self._exif.load_from_fp(self.fp, self.tag_v2._offset) + if exif_info is not None: + self._exif.load(exif_info) + + # XMP tags + if ExifTags.Base.Orientation not in self._exif: + xmp_tags = self.info.get("XML:com.adobe.xmp") + pattern: str | bytes = r'tiff:Orientation(="|>)([0-9])' + if not xmp_tags and (xmp_tags := self.info.get("xmp")): + pattern = rb'tiff:Orientation(="|>)([0-9])' + if xmp_tags: + match = re.search(pattern, xmp_tags) + if match: + self._exif[ExifTags.Base.Orientation] = int(match[2]) + + return self._exif + + def _reload_exif(self) -> None: + if self._exif is None or not self._exif._loaded: + return + self._exif._loaded = False + self.getexif() + + def get_child_images(self) -> list[ImageFile.ImageFile]: + from . import ImageFile + + deprecate("Image.Image.get_child_images", 13) + return ImageFile.ImageFile.get_child_images(self) # type: ignore[arg-type] + + def getim(self) -> CapsuleType: + """ + Returns a capsule that points to the internal image memory. + + :returns: A capsule object. + """ + + self.load() + return self.im.ptr + + def getpalette(self, rawmode: str | None = "RGB") -> list[int] | None: + """ + Returns the image palette as a list. + + :param rawmode: The mode in which to return the palette. ``None`` will + return the palette in its current mode. + + .. versionadded:: 9.1.0 + + :returns: A list of color values [r, g, b, ...], or None if the + image has no palette. + """ + + self.load() + try: + mode = self.im.getpalettemode() + except ValueError: + return None # no palette + if rawmode is None: + rawmode = mode + return list(self.im.getpalette(mode, rawmode)) + + @property + def has_transparency_data(self) -> bool: + """ + Determine if an image has transparency data, whether in the form of an + alpha channel, a palette with an alpha channel, or a "transparency" key + in the info dictionary. + + Note the image might still appear solid, if all of the values shown + within are opaque. + + :returns: A boolean. + """ + if ( + self.mode in ("LA", "La", "PA", "RGBA", "RGBa") + or "transparency" in self.info + ): + return True + if self.mode == "P": + assert self.palette is not None + return self.palette.mode.endswith("A") + return False + + def apply_transparency(self) -> None: + """ + If a P mode image has a "transparency" key in the info dictionary, + remove the key and instead apply the transparency to the palette. + Otherwise, the image is unchanged. + """ + if self.mode != "P" or "transparency" not in self.info: + return + + from . import ImagePalette + + palette = self.getpalette("RGBA") + assert palette is not None + transparency = self.info["transparency"] + if isinstance(transparency, bytes): + for i, alpha in enumerate(transparency): + palette[i * 4 + 3] = alpha + else: + palette[transparency * 4 + 3] = 0 + self.palette = ImagePalette.ImagePalette("RGBA", bytes(palette)) + self.palette.dirty = 1 + + del self.info["transparency"] + + def getpixel( + self, xy: tuple[int, int] | list[int] + ) -> float | tuple[int, ...] | None: + """ + Returns the pixel value at a given position. + + :param xy: The coordinate, given as (x, y). See + :ref:`coordinate-system`. + :returns: The pixel value. If the image is a multi-layer image, + this method returns a tuple. + """ + + self.load() + return self.im.getpixel(tuple(xy)) + + def getprojection(self) -> tuple[list[int], list[int]]: + """ + Get projection to x and y axes + + :returns: Two sequences, indicating where there are non-zero + pixels along the X-axis and the Y-axis, respectively. + """ + + self.load() + x, y = self.im.getprojection() + return list(x), list(y) + + def histogram( + self, mask: Image | None = None, extrema: tuple[float, float] | None = None + ) -> list[int]: + """ + Returns a histogram for the image. The histogram is returned as a + list of pixel counts, one for each pixel value in the source + image. Counts are grouped into 256 bins for each band, even if + the image has more than 8 bits per band. If the image has more + than one band, the histograms for all bands are concatenated (for + example, the histogram for an "RGB" image contains 768 values). + + A bilevel image (mode "1") is treated as a grayscale ("L") image + by this method. + + If a mask is provided, the method returns a histogram for those + parts of the image where the mask image is non-zero. The mask + image must have the same size as the image, and be either a + bi-level image (mode "1") or a grayscale image ("L"). + + :param mask: An optional mask. + :param extrema: An optional tuple of manually-specified extrema. + :returns: A list containing pixel counts. + """ + self.load() + if mask: + mask.load() + return self.im.histogram((0, 0), mask.im) + if self.mode in ("I", "F"): + return self.im.histogram( + extrema if extrema is not None else self.getextrema() + ) + return self.im.histogram() + + def entropy( + self, mask: Image | None = None, extrema: tuple[float, float] | None = None + ) -> float: + """ + Calculates and returns the entropy for the image. + + A bilevel image (mode "1") is treated as a grayscale ("L") + image by this method. + + If a mask is provided, the method employs the histogram for + those parts of the image where the mask image is non-zero. + The mask image must have the same size as the image, and be + either a bi-level image (mode "1") or a grayscale image ("L"). + + :param mask: An optional mask. + :param extrema: An optional tuple of manually-specified extrema. + :returns: A float value representing the image entropy + """ + self.load() + if mask: + mask.load() + return self.im.entropy((0, 0), mask.im) + if self.mode in ("I", "F"): + return self.im.entropy( + extrema if extrema is not None else self.getextrema() + ) + return self.im.entropy() + + def paste( + self, + im: Image | str | float | tuple[float, ...], + box: Image | tuple[int, int, int, int] | tuple[int, int] | None = None, + mask: Image | None = None, + ) -> None: + """ + Pastes another image into this image. The box argument is either + a 2-tuple giving the upper left corner, a 4-tuple defining the + left, upper, right, and lower pixel coordinate, or None (same as + (0, 0)). See :ref:`coordinate-system`. If a 4-tuple is given, the size + of the pasted image must match the size of the region. + + If the modes don't match, the pasted image is converted to the mode of + this image (see the :py:meth:`~PIL.Image.Image.convert` method for + details). + + Instead of an image, the source can be a integer or tuple + containing pixel values. The method then fills the region + with the given color. When creating RGB images, you can + also use color strings as supported by the ImageColor module. See + :ref:`colors` for more information. + + If a mask is given, this method updates only the regions + indicated by the mask. You can use either "1", "L", "LA", "RGBA" + or "RGBa" images (if present, the alpha band is used as mask). + Where the mask is 255, the given image is copied as is. Where + the mask is 0, the current value is preserved. Intermediate + values will mix the two images together, including their alpha + channels if they have them. + + See :py:meth:`~PIL.Image.Image.alpha_composite` if you want to + combine images with respect to their alpha channels. + + :param im: Source image or pixel value (integer, float or tuple). + :param box: An optional 4-tuple giving the region to paste into. + If a 2-tuple is used instead, it's treated as the upper left + corner. If omitted or None, the source is pasted into the + upper left corner. + + If an image is given as the second argument and there is no + third, the box defaults to (0, 0), and the second argument + is interpreted as a mask image. + :param mask: An optional mask image. + """ + + if isinstance(box, Image): + if mask is not None: + msg = "If using second argument as mask, third argument must be None" + raise ValueError(msg) + # abbreviated paste(im, mask) syntax + mask = box + box = None + + if box is None: + box = (0, 0) + + if len(box) == 2: + # upper left corner given; get size from image or mask + if isinstance(im, Image): + size = im.size + elif isinstance(mask, Image): + size = mask.size + else: + # FIXME: use self.size here? + msg = "cannot determine region size; use 4-item box" + raise ValueError(msg) + box += (box[0] + size[0], box[1] + size[1]) + + source: core.ImagingCore | str | float | tuple[float, ...] + if isinstance(im, str): + from . import ImageColor + + source = ImageColor.getcolor(im, self.mode) + elif isinstance(im, Image): + im.load() + if self.mode != im.mode: + if self.mode != "RGB" or im.mode not in ("LA", "RGBA", "RGBa"): + # should use an adapter for this! + im = im.convert(self.mode) + source = im.im + else: + source = im + + self._ensure_mutable() + + if mask: + mask.load() + self.im.paste(source, box, mask.im) + else: + self.im.paste(source, box) + + def alpha_composite( + self, im: Image, dest: Sequence[int] = (0, 0), source: Sequence[int] = (0, 0) + ) -> None: + """'In-place' analog of Image.alpha_composite. Composites an image + onto this image. + + :param im: image to composite over this one + :param dest: Optional 2 tuple (left, top) specifying the upper + left corner in this (destination) image. + :param source: Optional 2 (left, top) tuple for the upper left + corner in the overlay source image, or 4 tuple (left, top, right, + bottom) for the bounds of the source rectangle + + Performance Note: Not currently implemented in-place in the core layer. + """ + + if not isinstance(source, (list, tuple)): + msg = "Source must be a list or tuple" + raise ValueError(msg) + if not isinstance(dest, (list, tuple)): + msg = "Destination must be a list or tuple" + raise ValueError(msg) + + if len(source) == 4: + overlay_crop_box = tuple(source) + elif len(source) == 2: + overlay_crop_box = tuple(source) + im.size + else: + msg = "Source must be a sequence of length 2 or 4" + raise ValueError(msg) + + if not len(dest) == 2: + msg = "Destination must be a sequence of length 2" + raise ValueError(msg) + if min(source) < 0: + msg = "Source must be non-negative" + raise ValueError(msg) + + # over image, crop if it's not the whole image. + if overlay_crop_box == (0, 0) + im.size: + overlay = im + else: + overlay = im.crop(overlay_crop_box) + + # target for the paste + box = tuple(dest) + (dest[0] + overlay.width, dest[1] + overlay.height) + + # destination image. don't copy if we're using the whole image. + if box == (0, 0) + self.size: + background = self + else: + background = self.crop(box) + + result = alpha_composite(background, overlay) + self.paste(result, box) + + def point( + self, + lut: ( + Sequence[float] + | NumpyArray + | Callable[[int], float] + | Callable[[ImagePointTransform], ImagePointTransform | float] + | ImagePointHandler + ), + mode: str | None = None, + ) -> Image: + """ + Maps this image through a lookup table or function. + + :param lut: A lookup table, containing 256 (or 65536 if + self.mode=="I" and mode == "L") values per band in the + image. A function can be used instead, it should take a + single argument. The function is called once for each + possible pixel value, and the resulting table is applied to + all bands of the image. + + It may also be an :py:class:`~PIL.Image.ImagePointHandler` + object:: + + class Example(Image.ImagePointHandler): + def point(self, im: Image) -> Image: + # Return result + :param mode: Output mode (default is same as input). This can only be used if + the source image has mode "L" or "P", and the output has mode "1" or the + source image mode is "I" and the output mode is "L". + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + self.load() + + if isinstance(lut, ImagePointHandler): + return lut.point(self) + + if callable(lut): + # if it isn't a list, it should be a function + if self.mode in ("I", "I;16", "F"): + # check if the function can be used with point_transform + # UNDONE wiredfool -- I think this prevents us from ever doing + # a gamma function point transform on > 8bit images. + scale, offset = _getscaleoffset(lut) # type: ignore[arg-type] + return self._new(self.im.point_transform(scale, offset)) + # for other modes, convert the function to a table + flatLut = [lut(i) for i in range(256)] * self.im.bands # type: ignore[arg-type] + else: + flatLut = lut + + if self.mode == "F": + # FIXME: _imaging returns a confusing error message for this case + msg = "point operation not supported for this mode" + raise ValueError(msg) + + if mode != "F": + flatLut = [round(i) for i in flatLut] + return self._new(self.im.point(flatLut, mode)) + + def putalpha(self, alpha: Image | int) -> None: + """ + Adds or replaces the alpha layer in this image. If the image + does not have an alpha layer, it's converted to "LA" or "RGBA". + The new layer must be either "L" or "1". + + :param alpha: The new alpha layer. This can either be an "L" or "1" + image having the same size as this image, or an integer. + """ + + self._ensure_mutable() + + if self.mode not in ("LA", "PA", "RGBA"): + # attempt to promote self to a matching alpha mode + try: + mode = getmodebase(self.mode) + "A" + try: + self.im.setmode(mode) + except (AttributeError, ValueError) as e: + # do things the hard way + im = self.im.convert(mode) + if im.mode not in ("LA", "PA", "RGBA"): + msg = "alpha channel could not be added" + raise ValueError(msg) from e # sanity check + self.im = im + self._mode = self.im.mode + except KeyError as e: + msg = "illegal image mode" + raise ValueError(msg) from e + + if self.mode in ("LA", "PA"): + band = 1 + else: + band = 3 + + if isinstance(alpha, Image): + # alpha layer + if alpha.mode not in ("1", "L"): + msg = "illegal image mode" + raise ValueError(msg) + alpha.load() + if alpha.mode == "1": + alpha = alpha.convert("L") + else: + # constant alpha + try: + self.im.fillband(band, alpha) + except (AttributeError, ValueError): + # do things the hard way + alpha = new("L", self.size, alpha) + else: + return + + self.im.putband(alpha.im, band) + + def putdata( + self, + data: Sequence[float] | Sequence[Sequence[int]] | core.ImagingCore | NumpyArray, + scale: float = 1.0, + offset: float = 0.0, + ) -> None: + """ + Copies pixel data from a flattened sequence object into the image. The + values should start at the upper left corner (0, 0), continue to the + end of the line, followed directly by the first value of the second + line, and so on. Data will be read until either the image or the + sequence ends. The scale and offset values are used to adjust the + sequence values: **pixel = value*scale + offset**. + + :param data: A flattened sequence object. See :ref:`colors` for more + information about values. + :param scale: An optional scale value. The default is 1.0. + :param offset: An optional offset value. The default is 0.0. + """ + + self._ensure_mutable() + + self.im.putdata(data, scale, offset) + + def putpalette( + self, + data: ImagePalette.ImagePalette | bytes | Sequence[int], + rawmode: str = "RGB", + ) -> None: + """ + Attaches a palette to this image. The image must be a "P", "PA", "L" + or "LA" image. + + The palette sequence must contain at most 256 colors, made up of one + integer value for each channel in the raw mode. + For example, if the raw mode is "RGB", then it can contain at most 768 + values, made up of red, green and blue values for the corresponding pixel + index in the 256 colors. + If the raw mode is "RGBA", then it can contain at most 1024 values, + containing red, green, blue and alpha values. + + Alternatively, an 8-bit string may be used instead of an integer sequence. + + :param data: A palette sequence (either a list or a string). + :param rawmode: The raw mode of the palette. Either "RGB", "RGBA", "CMYK", or a + mode that can be transformed to one of those modes (e.g. "R", "RGBA;L"). + """ + from . import ImagePalette + + if self.mode not in ("L", "LA", "P", "PA"): + msg = "illegal image mode" + raise ValueError(msg) + if isinstance(data, ImagePalette.ImagePalette): + if data.rawmode is not None: + palette = ImagePalette.raw(data.rawmode, data.palette) + else: + palette = ImagePalette.ImagePalette(palette=data.palette) + palette.dirty = 1 + else: + if not isinstance(data, bytes): + data = bytes(data) + palette = ImagePalette.raw(rawmode, data) + self._mode = "PA" if "A" in self.mode else "P" + self.palette = palette + if rawmode.startswith("CMYK"): + self.palette.mode = "CMYK" + elif "A" in rawmode: + self.palette.mode = "RGBA" + else: + self.palette.mode = "RGB" + self.load() # install new palette + + def putpixel( + self, xy: tuple[int, int], value: float | tuple[int, ...] | list[int] + ) -> None: + """ + Modifies the pixel at the given position. The color is given as + a single numerical value for single-band images, and a tuple for + multi-band images. In addition to this, RGB and RGBA tuples are + accepted for P and PA images. See :ref:`colors` for more information. + + Note that this method is relatively slow. For more extensive changes, + use :py:meth:`~PIL.Image.Image.paste` or the :py:mod:`~PIL.ImageDraw` + module instead. + + See: + + * :py:meth:`~PIL.Image.Image.paste` + * :py:meth:`~PIL.Image.Image.putdata` + * :py:mod:`~PIL.ImageDraw` + + :param xy: The pixel coordinate, given as (x, y). See + :ref:`coordinate-system`. + :param value: The pixel value. + """ + + self._ensure_mutable() + + if ( + self.mode in ("P", "PA") + and isinstance(value, (list, tuple)) + and len(value) in [3, 4] + ): + # RGB or RGBA value for a P or PA image + if self.mode == "PA": + alpha = value[3] if len(value) == 4 else 255 + value = value[:3] + assert self.palette is not None + palette_index = self.palette.getcolor(tuple(value), self) + value = (palette_index, alpha) if self.mode == "PA" else palette_index + return self.im.putpixel(xy, value) + + def remap_palette( + self, dest_map: list[int], source_palette: bytes | bytearray | None = None + ) -> Image: + """ + Rewrites the image to reorder the palette. + + :param dest_map: A list of indexes into the original palette. + e.g. ``[1,0]`` would swap a two item palette, and ``list(range(256))`` + is the identity transform. + :param source_palette: Bytes or None. + :returns: An :py:class:`~PIL.Image.Image` object. + + """ + from . import ImagePalette + + if self.mode not in ("L", "P"): + msg = "illegal image mode" + raise ValueError(msg) + + bands = 3 + palette_mode = "RGB" + if source_palette is None: + if self.mode == "P": + self.load() + palette_mode = self.im.getpalettemode() + if palette_mode == "RGBA": + bands = 4 + source_palette = self.im.getpalette(palette_mode, palette_mode) + else: # L-mode + source_palette = bytearray(i // 3 for i in range(768)) + elif len(source_palette) > 768: + bands = 4 + palette_mode = "RGBA" + + palette_bytes = b"" + new_positions = [0] * 256 + + # pick only the used colors from the palette + for i, oldPosition in enumerate(dest_map): + palette_bytes += source_palette[ + oldPosition * bands : oldPosition * bands + bands + ] + new_positions[oldPosition] = i + + # replace the palette color id of all pixel with the new id + + # Palette images are [0..255], mapped through a 1 or 3 + # byte/color map. We need to remap the whole image + # from palette 1 to palette 2. New_positions is + # an array of indexes into palette 1. Palette 2 is + # palette 1 with any holes removed. + + # We're going to leverage the convert mechanism to use the + # C code to remap the image from palette 1 to palette 2, + # by forcing the source image into 'L' mode and adding a + # mapping 'L' mode palette, then converting back to 'L' + # sans palette thus converting the image bytes, then + # assigning the optimized RGB palette. + + # perf reference, 9500x4000 gif, w/~135 colors + # 14 sec prepatch, 1 sec postpatch with optimization forced. + + mapping_palette = bytearray(new_positions) + + m_im = self.copy() + m_im._mode = "P" + + m_im.palette = ImagePalette.ImagePalette( + palette_mode, palette=mapping_palette * bands + ) + # possibly set palette dirty, then + # m_im.putpalette(mapping_palette, 'L') # converts to 'P' + # or just force it. + # UNDONE -- this is part of the general issue with palettes + m_im.im.putpalette(palette_mode, palette_mode + ";L", m_im.palette.tobytes()) + + m_im = m_im.convert("L") + + m_im.putpalette(palette_bytes, palette_mode) + m_im.palette = ImagePalette.ImagePalette(palette_mode, palette=palette_bytes) + + if "transparency" in self.info: + try: + m_im.info["transparency"] = dest_map.index(self.info["transparency"]) + except ValueError: + if "transparency" in m_im.info: + del m_im.info["transparency"] + + return m_im + + def _get_safe_box( + self, + size: tuple[int, int], + resample: Resampling, + box: tuple[float, float, float, float], + ) -> tuple[int, int, int, int]: + """Expands the box so it includes adjacent pixels + that may be used by resampling with the given resampling filter. + """ + filter_support = _filters_support[resample] - 0.5 + scale_x = (box[2] - box[0]) / size[0] + scale_y = (box[3] - box[1]) / size[1] + support_x = filter_support * scale_x + support_y = filter_support * scale_y + + return ( + max(0, int(box[0] - support_x)), + max(0, int(box[1] - support_y)), + min(self.size[0], math.ceil(box[2] + support_x)), + min(self.size[1], math.ceil(box[3] + support_y)), + ) + + def resize( + self, + size: tuple[int, int] | list[int] | NumpyArray, + resample: int | None = None, + box: tuple[float, float, float, float] | None = None, + reducing_gap: float | None = None, + ) -> Image: + """ + Returns a resized copy of this image. + + :param size: The requested size in pixels, as a tuple or array: + (width, height). + :param resample: An optional resampling filter. This can be + one of :py:data:`Resampling.NEAREST`, :py:data:`Resampling.BOX`, + :py:data:`Resampling.BILINEAR`, :py:data:`Resampling.HAMMING`, + :py:data:`Resampling.BICUBIC` or :py:data:`Resampling.LANCZOS`. + If the image has mode "1" or "P", it is always set to + :py:data:`Resampling.NEAREST`. Otherwise, the default filter is + :py:data:`Resampling.BICUBIC`. See: :ref:`concept-filters`. + :param box: An optional 4-tuple of floats providing + the source image region to be scaled. + The values must be within (0, 0, width, height) rectangle. + If omitted or None, the entire source is used. + :param reducing_gap: Apply optimization by resizing the image + in two steps. First, reducing the image by integer times + using :py:meth:`~PIL.Image.Image.reduce`. + Second, resizing using regular resampling. The last step + changes size no less than by ``reducing_gap`` times. + ``reducing_gap`` may be None (no first step is performed) + or should be greater than 1.0. The bigger ``reducing_gap``, + the closer the result to the fair resampling. + The smaller ``reducing_gap``, the faster resizing. + With ``reducing_gap`` greater or equal to 3.0, the result is + indistinguishable from fair resampling in most cases. + The default value is None (no optimization). + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + if resample is None: + resample = Resampling.BICUBIC + elif resample not in ( + Resampling.NEAREST, + Resampling.BILINEAR, + Resampling.BICUBIC, + Resampling.LANCZOS, + Resampling.BOX, + Resampling.HAMMING, + ): + msg = f"Unknown resampling filter ({resample})." + + filters = [ + f"{filter[1]} ({filter[0]})" + for filter in ( + (Resampling.NEAREST, "Image.Resampling.NEAREST"), + (Resampling.LANCZOS, "Image.Resampling.LANCZOS"), + (Resampling.BILINEAR, "Image.Resampling.BILINEAR"), + (Resampling.BICUBIC, "Image.Resampling.BICUBIC"), + (Resampling.BOX, "Image.Resampling.BOX"), + (Resampling.HAMMING, "Image.Resampling.HAMMING"), + ) + ] + msg += f" Use {', '.join(filters[:-1])} or {filters[-1]}" + raise ValueError(msg) + + if reducing_gap is not None and reducing_gap < 1.0: + msg = "reducing_gap must be 1.0 or greater" + raise ValueError(msg) + + if box is None: + box = (0, 0) + self.size + + size = tuple(size) + if self.size == size and box == (0, 0) + self.size: + return self.copy() + + if self.mode in ("1", "P"): + resample = Resampling.NEAREST + + if self.mode in ["LA", "RGBA"] and resample != Resampling.NEAREST: + im = self.convert({"LA": "La", "RGBA": "RGBa"}[self.mode]) + im = im.resize(size, resample, box) + return im.convert(self.mode) + + self.load() + + if reducing_gap is not None and resample != Resampling.NEAREST: + factor_x = int((box[2] - box[0]) / size[0] / reducing_gap) or 1 + factor_y = int((box[3] - box[1]) / size[1] / reducing_gap) or 1 + if factor_x > 1 or factor_y > 1: + reduce_box = self._get_safe_box(size, cast(Resampling, resample), box) + factor = (factor_x, factor_y) + self = ( + self.reduce(factor, box=reduce_box) + if callable(self.reduce) + else Image.reduce(self, factor, box=reduce_box) + ) + box = ( + (box[0] - reduce_box[0]) / factor_x, + (box[1] - reduce_box[1]) / factor_y, + (box[2] - reduce_box[0]) / factor_x, + (box[3] - reduce_box[1]) / factor_y, + ) + + if self.size[1] > self.size[0] * 100 and size[1] < self.size[1]: + im = self.im.resize( + (self.size[0], size[1]), resample, (0, box[1], self.size[0], box[3]) + ) + im = im.resize(size, resample, (box[0], 0, box[2], size[1])) + else: + im = self.im.resize(size, resample, box) + return self._new(im) + + def reduce( + self, + factor: int | tuple[int, int], + box: tuple[int, int, int, int] | None = None, + ) -> Image: + """ + Returns a copy of the image reduced ``factor`` times. + If the size of the image is not dividable by ``factor``, + the resulting size will be rounded up. + + :param factor: A greater than 0 integer or tuple of two integers + for width and height separately. + :param box: An optional 4-tuple of ints providing + the source image region to be reduced. + The values must be within ``(0, 0, width, height)`` rectangle. + If omitted or ``None``, the entire source is used. + """ + if not isinstance(factor, (list, tuple)): + factor = (factor, factor) + + if box is None: + box = (0, 0) + self.size + + if factor == (1, 1) and box == (0, 0) + self.size: + return self.copy() + + if self.mode in ["LA", "RGBA"]: + im = self.convert({"LA": "La", "RGBA": "RGBa"}[self.mode]) + im = im.reduce(factor, box) + return im.convert(self.mode) + + self.load() + + return self._new(self.im.reduce(factor, box)) + + def rotate( + self, + angle: float, + resample: Resampling = Resampling.NEAREST, + expand: int | bool = False, + center: tuple[float, float] | None = None, + translate: tuple[int, int] | None = None, + fillcolor: float | tuple[float, ...] | str | None = None, + ) -> Image: + """ + Returns a rotated copy of this image. This method returns a + copy of this image, rotated the given number of degrees counter + clockwise around its centre. + + :param angle: In degrees counter clockwise. + :param resample: An optional resampling filter. This can be + one of :py:data:`Resampling.NEAREST` (use nearest neighbour), + :py:data:`Resampling.BILINEAR` (linear interpolation in a 2x2 + environment), or :py:data:`Resampling.BICUBIC` (cubic spline + interpolation in a 4x4 environment). If omitted, or if the image has + mode "1" or "P", it is set to :py:data:`Resampling.NEAREST`. + See :ref:`concept-filters`. + :param expand: Optional expansion flag. If true, expands the output + image to make it large enough to hold the entire rotated image. + If false or omitted, make the output image the same size as the + input image. Note that the expand flag assumes rotation around + the center and no translation. + :param center: Optional center of rotation (a 2-tuple). Origin is + the upper left corner. Default is the center of the image. + :param translate: An optional post-rotate translation (a 2-tuple). + :param fillcolor: An optional color for area outside the rotated image. + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + angle = angle % 360.0 + + # Fast paths regardless of filter, as long as we're not + # translating or changing the center. + if not (center or translate): + if angle == 0: + return self.copy() + if angle == 180: + return self.transpose(Transpose.ROTATE_180) + if angle in (90, 270) and (expand or self.width == self.height): + return self.transpose( + Transpose.ROTATE_90 if angle == 90 else Transpose.ROTATE_270 + ) + + # Calculate the affine matrix. Note that this is the reverse + # transformation (from destination image to source) because we + # want to interpolate the (discrete) destination pixel from + # the local area around the (floating) source pixel. + + # The matrix we actually want (note that it operates from the right): + # (1, 0, tx) (1, 0, cx) ( cos a, sin a, 0) (1, 0, -cx) + # (0, 1, ty) * (0, 1, cy) * (-sin a, cos a, 0) * (0, 1, -cy) + # (0, 0, 1) (0, 0, 1) ( 0, 0, 1) (0, 0, 1) + + # The reverse matrix is thus: + # (1, 0, cx) ( cos -a, sin -a, 0) (1, 0, -cx) (1, 0, -tx) + # (0, 1, cy) * (-sin -a, cos -a, 0) * (0, 1, -cy) * (0, 1, -ty) + # (0, 0, 1) ( 0, 0, 1) (0, 0, 1) (0, 0, 1) + + # In any case, the final translation may be updated at the end to + # compensate for the expand flag. + + w, h = self.size + + if translate is None: + post_trans = (0, 0) + else: + post_trans = translate + if center is None: + center = (w / 2, h / 2) + + angle = -math.radians(angle) + matrix = [ + round(math.cos(angle), 15), + round(math.sin(angle), 15), + 0.0, + round(-math.sin(angle), 15), + round(math.cos(angle), 15), + 0.0, + ] + + def transform(x: float, y: float, matrix: list[float]) -> tuple[float, float]: + a, b, c, d, e, f = matrix + return a * x + b * y + c, d * x + e * y + f + + matrix[2], matrix[5] = transform( + -center[0] - post_trans[0], -center[1] - post_trans[1], matrix + ) + matrix[2] += center[0] + matrix[5] += center[1] + + if expand: + # calculate output size + xx = [] + yy = [] + for x, y in ((0, 0), (w, 0), (w, h), (0, h)): + transformed_x, transformed_y = transform(x, y, matrix) + xx.append(transformed_x) + yy.append(transformed_y) + nw = math.ceil(max(xx)) - math.floor(min(xx)) + nh = math.ceil(max(yy)) - math.floor(min(yy)) + + # We multiply a translation matrix from the right. Because of its + # special form, this is the same as taking the image of the + # translation vector as new translation vector. + matrix[2], matrix[5] = transform(-(nw - w) / 2.0, -(nh - h) / 2.0, matrix) + w, h = nw, nh + + return self.transform( + (w, h), Transform.AFFINE, matrix, resample, fillcolor=fillcolor + ) + + def save( + self, fp: StrOrBytesPath | IO[bytes], format: str | None = None, **params: Any + ) -> None: + """ + Saves this image under the given filename. If no format is + specified, the format to use is determined from the filename + extension, if possible. + + Keyword options can be used to provide additional instructions + to the writer. If a writer doesn't recognise an option, it is + silently ignored. The available options are described in the + :doc:`image format documentation + <../handbook/image-file-formats>` for each writer. + + You can use a file object instead of a filename. In this case, + you must always specify the format. The file object must + implement the ``seek``, ``tell``, and ``write`` + methods, and be opened in binary mode. + + :param fp: A filename (string), os.PathLike object or file object. + :param format: Optional format override. If omitted, the + format to use is determined from the filename extension. + If a file object was used instead of a filename, this + parameter should always be used. + :param params: Extra parameters to the image writer. These can also be + set on the image itself through ``encoderinfo``. This is useful when + saving multiple images:: + + # Saving XMP data to a single image + from PIL import Image + red = Image.new("RGB", (1, 1), "#f00") + red.save("out.mpo", xmp=b"test") + + # Saving XMP data to the second frame of an image + from PIL import Image + black = Image.new("RGB", (1, 1)) + red = Image.new("RGB", (1, 1), "#f00") + red.encoderinfo = {"xmp": b"test"} + black.save("out.mpo", save_all=True, append_images=[red]) + :returns: None + :exception ValueError: If the output format could not be determined + from the file name. Use the format option to solve this. + :exception OSError: If the file could not be written. The file + may have been created, and may contain partial data. + """ + + filename: str | bytes = "" + open_fp = False + if is_path(fp): + filename = os.fspath(fp) + open_fp = True + elif fp == sys.stdout: + try: + fp = sys.stdout.buffer + except AttributeError: + pass + if not filename and hasattr(fp, "name") and is_path(fp.name): + # only set the name for metadata purposes + filename = os.fspath(fp.name) + + if format: + preinit() + else: + filename_ext = os.path.splitext(filename)[1].lower() + ext = ( + filename_ext.decode() + if isinstance(filename_ext, bytes) + else filename_ext + ) + + # Try importing only the plugin for this extension first + if not _import_plugin_for_extension(ext): + preinit() + + if ext not in EXTENSION: + init() + try: + format = EXTENSION[ext] + except KeyError as e: + msg = f"unknown file extension: {ext}" + raise ValueError(msg) from e + + from . import ImageFile + + # may mutate self! + if isinstance(self, ImageFile.ImageFile) and os.path.abspath( + filename + ) == os.path.abspath(self.filename): + self._ensure_mutable() + else: + self.load() + + save_all = params.pop("save_all", None) + self._default_encoderinfo = params + encoderinfo = getattr(self, "encoderinfo", {}) + self._attach_default_encoderinfo(self) + self.encoderconfig: tuple[Any, ...] = () + + if format.upper() not in SAVE: + init() + if save_all or ( + save_all is None + and params.get("append_images") + and format.upper() in SAVE_ALL + ): + save_handler = SAVE_ALL[format.upper()] + else: + save_handler = SAVE[format.upper()] + + created = False + if open_fp: + created = not os.path.exists(filename) + if params.get("append", False): + # Open also for reading ("+"), because TIFF save_all + # writer needs to go back and edit the written data. + fp = builtins.open(filename, "r+b") + else: + fp = builtins.open(filename, "w+b") + else: + fp = cast(IO[bytes], fp) + + try: + save_handler(self, fp, filename) + except Exception: + if open_fp: + fp.close() + if created: + try: + os.remove(filename) + except PermissionError: + pass + raise + finally: + self.encoderinfo = encoderinfo + if open_fp: + fp.close() + + def _attach_default_encoderinfo(self, im: Image) -> dict[str, Any]: + encoderinfo = getattr(self, "encoderinfo", {}) + self.encoderinfo = {**im._default_encoderinfo, **encoderinfo} + return encoderinfo + + def seek(self, frame: int) -> None: + """ + Seeks to the given frame in this sequence file. If you seek + beyond the end of the sequence, the method raises an + ``EOFError`` exception. When a sequence file is opened, the + library automatically seeks to frame 0. + + See :py:meth:`~PIL.Image.Image.tell`. + + If defined, :attr:`~PIL.Image.Image.n_frames` refers to the + number of available frames. + + :param frame: Frame number, starting at 0. + :exception EOFError: If the call attempts to seek beyond the end + of the sequence. + """ + + # overridden by file handlers + if frame != 0: + msg = "no more images in file" + raise EOFError(msg) + + def show(self, title: str | None = None) -> None: + """ + Displays this image. This method is mainly intended for debugging purposes. + + This method calls :py:func:`PIL.ImageShow.show` internally. You can use + :py:func:`PIL.ImageShow.register` to override its default behaviour. + + The image is first saved to a temporary file. By default, it will be in + PNG format. + + On Unix, the image is then opened using the **xdg-open**, **display**, + **gm**, **eog** or **xv** utility, depending on which one can be found. + + On macOS, the image is opened with the native Preview application. + + On Windows, the image is opened with the standard PNG display utility. + + :param title: Optional title to use for the image window, where possible. + """ + + from . import ImageShow + + ImageShow.show(self, title) + + def split(self) -> tuple[Image, ...]: + """ + Split this image into individual bands. This method returns a + tuple of individual image bands from an image. For example, + splitting an "RGB" image creates three new images each + containing a copy of one of the original bands (red, green, + blue). + + If you need only one band, :py:meth:`~PIL.Image.Image.getchannel` + method can be more convenient and faster. + + :returns: A tuple containing bands. + """ + + self.load() + if self.im.bands == 1: + return (self.copy(),) + return tuple(map(self._new, self.im.split())) + + def getchannel(self, channel: int | str) -> Image: + """ + Returns an image containing a single channel of the source image. + + :param channel: What channel to return. Could be index + (0 for "R" channel of "RGB") or channel name + ("A" for alpha channel of "RGBA"). + :returns: An image in "L" mode. + + .. versionadded:: 4.3.0 + """ + self.load() + + if isinstance(channel, str): + try: + channel = self.getbands().index(channel) + except ValueError as e: + msg = f'The image has no channel "{channel}"' + raise ValueError(msg) from e + + return self._new(self.im.getband(channel)) + + def tell(self) -> int: + """ + Returns the current frame number. See :py:meth:`~PIL.Image.Image.seek`. + + If defined, :attr:`~PIL.Image.Image.n_frames` refers to the + number of available frames. + + :returns: Frame number, starting with 0. + """ + return 0 + + def thumbnail( + self, + size: tuple[float, float], + resample: Resampling = Resampling.BICUBIC, + reducing_gap: float | None = 2.0, + ) -> None: + """ + Make this image into a thumbnail. This method modifies the + image to contain a thumbnail version of itself, no larger than + the given size. This method calculates an appropriate thumbnail + size to preserve the aspect of the image, calls the + :py:meth:`~PIL.Image.Image.draft` method to configure the file reader + (where applicable), and finally resizes the image. + + Note that this function modifies the :py:class:`~PIL.Image.Image` + object in place. If you need to use the full resolution image as well, + apply this method to a :py:meth:`~PIL.Image.Image.copy` of the original + image. + + :param size: The requested size in pixels, as a 2-tuple: + (width, height). + :param resample: Optional resampling filter. This can be one + of :py:data:`Resampling.NEAREST`, :py:data:`Resampling.BOX`, + :py:data:`Resampling.BILINEAR`, :py:data:`Resampling.HAMMING`, + :py:data:`Resampling.BICUBIC` or :py:data:`Resampling.LANCZOS`. + If omitted, it defaults to :py:data:`Resampling.BICUBIC`. + (was :py:data:`Resampling.NEAREST` prior to version 2.5.0). + See: :ref:`concept-filters`. + :param reducing_gap: Apply optimization by resizing the image + in two steps. First, reducing the image by integer times + using :py:meth:`~PIL.Image.Image.reduce` or + :py:meth:`~PIL.Image.Image.draft` for JPEG images. + Second, resizing using regular resampling. The last step + changes size no less than by ``reducing_gap`` times. + ``reducing_gap`` may be None (no first step is performed) + or should be greater than 1.0. The bigger ``reducing_gap``, + the closer the result to the fair resampling. + The smaller ``reducing_gap``, the faster resizing. + With ``reducing_gap`` greater or equal to 3.0, the result is + indistinguishable from fair resampling in most cases. + The default value is 2.0 (very close to fair resampling + while still being faster in many cases). + :returns: None + """ + + provided_size = tuple(map(math.floor, size)) + + def preserve_aspect_ratio() -> tuple[int, int] | None: + def round_aspect(number: float, key: Callable[[int], float]) -> int: + return max(min(math.floor(number), math.ceil(number), key=key), 1) + + x, y = provided_size + if x >= self.width and y >= self.height: + return None + + aspect = self.width / self.height + if x / y >= aspect: + x = round_aspect(y * aspect, key=lambda n: abs(aspect - n / y)) + else: + y = round_aspect( + x / aspect, key=lambda n: 0 if n == 0 else abs(aspect - x / n) + ) + return x, y + + preserved_size = preserve_aspect_ratio() + if preserved_size is None: + return + final_size = preserved_size + + box = None + if reducing_gap is not None: + res = self.draft( + None, (int(size[0] * reducing_gap), int(size[1] * reducing_gap)) + ) + if res is not None: + box = res[1] + + if self.size != final_size: + im = self.resize(final_size, resample, box=box, reducing_gap=reducing_gap) + + self.im = im.im + self._size = final_size + self._mode = self.im.mode + + self.readonly = 0 + + # FIXME: the different transform methods need further explanation + # instead of bloating the method docs, add a separate chapter. + def transform( + self, + size: tuple[int, int], + method: Transform | ImageTransformHandler | SupportsGetData, + data: Sequence[Any] | None = None, + resample: int = Resampling.NEAREST, + fill: int = 1, + fillcolor: float | tuple[float, ...] | str | None = None, + ) -> Image: + """ + Transforms this image. This method creates a new image with the + given size, and the same mode as the original, and copies data + to the new image using the given transform. + + :param size: The output size in pixels, as a 2-tuple: + (width, height). + :param method: The transformation method. This is one of + :py:data:`Transform.EXTENT` (cut out a rectangular subregion), + :py:data:`Transform.AFFINE` (affine transform), + :py:data:`Transform.PERSPECTIVE` (perspective transform), + :py:data:`Transform.QUAD` (map a quadrilateral to a rectangle), or + :py:data:`Transform.MESH` (map a number of source quadrilaterals + in one operation). + + It may also be an :py:class:`~PIL.Image.ImageTransformHandler` + object:: + + class Example(Image.ImageTransformHandler): + def transform(self, size, data, resample, fill=1): + # Return result + + Implementations of :py:class:`~PIL.Image.ImageTransformHandler` + for some of the :py:class:`Transform` methods are provided + in :py:mod:`~PIL.ImageTransform`. + + It may also be an object with a ``method.getdata`` method + that returns a tuple supplying new ``method`` and ``data`` values:: + + class Example: + def getdata(self): + method = Image.Transform.EXTENT + data = (0, 0, 100, 100) + return method, data + :param data: Extra data to the transformation method. + :param resample: Optional resampling filter. It can be one of + :py:data:`Resampling.NEAREST` (use nearest neighbour), + :py:data:`Resampling.BILINEAR` (linear interpolation in a 2x2 + environment), or :py:data:`Resampling.BICUBIC` (cubic spline + interpolation in a 4x4 environment). If omitted, or if the image + has mode "1" or "P", it is set to :py:data:`Resampling.NEAREST`. + See: :ref:`concept-filters`. + :param fill: If ``method`` is an + :py:class:`~PIL.Image.ImageTransformHandler` object, this is one of + the arguments passed to it. Otherwise, it is unused. + :param fillcolor: Optional fill color for the area outside the + transform in the output image. + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + if self.mode in ("LA", "RGBA") and resample != Resampling.NEAREST: + return ( + self.convert({"LA": "La", "RGBA": "RGBa"}[self.mode]) + .transform(size, method, data, resample, fill, fillcolor) + .convert(self.mode) + ) + + if isinstance(method, ImageTransformHandler): + return method.transform(size, self, resample=resample, fill=fill) + + if hasattr(method, "getdata"): + # compatibility w. old-style transform objects + method, data = method.getdata() + + if data is None: + msg = "missing method data" + raise ValueError(msg) + + im = new(self.mode, size, fillcolor) + if self.mode == "P" and self.palette: + im.palette = self.palette.copy() + im.info = self.info.copy() + if method == Transform.MESH: + # list of quads + for box, quad in data: + im.__transformer( + box, self, Transform.QUAD, quad, resample, fillcolor is None + ) + else: + im.__transformer( + (0, 0) + size, self, method, data, resample, fillcolor is None + ) + + return im + + def __transformer( + self, + box: tuple[int, int, int, int], + image: Image, + method: Transform, + data: Sequence[float], + resample: int = Resampling.NEAREST, + fill: bool = True, + ) -> None: + w = box[2] - box[0] + h = box[3] - box[1] + + if method == Transform.AFFINE: + data = data[:6] + + elif method == Transform.EXTENT: + # convert extent to an affine transform + x0, y0, x1, y1 = data + xs = (x1 - x0) / w + ys = (y1 - y0) / h + method = Transform.AFFINE + data = (xs, 0, x0, 0, ys, y0) + + elif method == Transform.PERSPECTIVE: + data = data[:8] + + elif method == Transform.QUAD: + # quadrilateral warp. data specifies the four corners + # given as NW, SW, SE, and NE. + nw = data[:2] + sw = data[2:4] + se = data[4:6] + ne = data[6:8] + x0, y0 = nw + As = 1.0 / w + At = 1.0 / h + data = ( + x0, + (ne[0] - x0) * As, + (sw[0] - x0) * At, + (se[0] - sw[0] - ne[0] + x0) * As * At, + y0, + (ne[1] - y0) * As, + (sw[1] - y0) * At, + (se[1] - sw[1] - ne[1] + y0) * As * At, + ) + + else: + msg = "unknown transformation method" + raise ValueError(msg) + + if resample not in ( + Resampling.NEAREST, + Resampling.BILINEAR, + Resampling.BICUBIC, + ): + if resample in (Resampling.BOX, Resampling.HAMMING, Resampling.LANCZOS): + unusable: dict[int, str] = { + Resampling.BOX: "Image.Resampling.BOX", + Resampling.HAMMING: "Image.Resampling.HAMMING", + Resampling.LANCZOS: "Image.Resampling.LANCZOS", + } + msg = unusable[resample] + f" ({resample}) cannot be used." + else: + msg = f"Unknown resampling filter ({resample})." + + filters = [ + f"{filter[1]} ({filter[0]})" + for filter in ( + (Resampling.NEAREST, "Image.Resampling.NEAREST"), + (Resampling.BILINEAR, "Image.Resampling.BILINEAR"), + (Resampling.BICUBIC, "Image.Resampling.BICUBIC"), + ) + ] + msg += f" Use {', '.join(filters[:-1])} or {filters[-1]}" + raise ValueError(msg) + + image.load() + + self.load() + + if image.mode in ("1", "P"): + resample = Resampling.NEAREST + + self.im.transform(box, image.im, method, data, resample, fill) + + def transpose(self, method: Transpose) -> Image: + """ + Transpose image (flip or rotate in 90 degree steps) + + :param method: One of :py:data:`Transpose.FLIP_LEFT_RIGHT`, + :py:data:`Transpose.FLIP_TOP_BOTTOM`, :py:data:`Transpose.ROTATE_90`, + :py:data:`Transpose.ROTATE_180`, :py:data:`Transpose.ROTATE_270`, + :py:data:`Transpose.TRANSPOSE` or :py:data:`Transpose.TRANSVERSE`. + :returns: Returns a flipped or rotated copy of this image. + """ + + self.load() + return self._new(self.im.transpose(method)) + + def effect_spread(self, distance: int) -> Image: + """ + Randomly spread pixels in an image. + + :param distance: Distance to spread pixels. + """ + self.load() + return self._new(self.im.effect_spread(distance)) + + def toqimage(self) -> ImageQt.ImageQt: + """Returns a QImage copy of this image""" + from . import ImageQt + + if not ImageQt.qt_is_installed: + msg = "Qt bindings are not installed" + raise ImportError(msg) + return ImageQt.toqimage(self) + + def toqpixmap(self) -> ImageQt.QPixmap: + """Returns a QPixmap copy of this image""" + from . import ImageQt + + if not ImageQt.qt_is_installed: + msg = "Qt bindings are not installed" + raise ImportError(msg) + return ImageQt.toqpixmap(self) + + +# -------------------------------------------------------------------- +# Abstract handlers. + + +class ImagePointHandler(abc.ABC): + """ + Used as a mixin by point transforms + (for use with :py:meth:`~PIL.Image.Image.point`) + """ + + @abc.abstractmethod + def point(self, im: Image) -> Image: + pass + + +class ImageTransformHandler(abc.ABC): + """ + Used as a mixin by geometry transforms + (for use with :py:meth:`~PIL.Image.Image.transform`) + """ + + @abc.abstractmethod + def transform( + self, + size: tuple[int, int], + image: Image, + **options: Any, + ) -> Image: + pass + + +# -------------------------------------------------------------------- +# Factories + + +def _check_size(size: Any) -> None: + """ + Common check to enforce type and sanity check on size tuples + + :param size: Should be a 2 tuple of (width, height) + :returns: None, or raises a ValueError + """ + + if not isinstance(size, (list, tuple)): + msg = "Size must be a list or tuple" + raise ValueError(msg) + if len(size) != 2: + msg = "Size must be a sequence of length 2" + raise ValueError(msg) + if size[0] < 0 or size[1] < 0: + msg = "Width and height must be >= 0" + raise ValueError(msg) + + +def new( + mode: str, + size: tuple[int, int] | list[int], + color: float | tuple[float, ...] | str | None = 0, +) -> Image: + """ + Creates a new image with the given mode and size. + + :param mode: The mode to use for the new image. See: + :ref:`concept-modes`. + :param size: A 2-tuple, containing (width, height) in pixels. + :param color: What color to use for the image. Default is black. If given, + this should be a single integer or floating point value for single-band + modes, and a tuple for multi-band modes (one value per band). When + creating RGB or HSV images, you can also use color strings as supported + by the ImageColor module. See :ref:`colors` for more information. If the + color is None, the image is not initialised. + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + _check_size(size) + + if color is None: + # don't initialize + return Image()._new(core.new(mode, size)) + + if isinstance(color, str): + # css3-style specifier + + from . import ImageColor + + color = ImageColor.getcolor(color, mode) + + im = Image() + if ( + mode == "P" + and isinstance(color, (list, tuple)) + and all(isinstance(i, int) for i in color) + ): + color_ints: tuple[int, ...] = cast(tuple[int, ...], tuple(color)) + if len(color_ints) == 3 or len(color_ints) == 4: + # RGB or RGBA value for a P image + from . import ImagePalette + + im.palette = ImagePalette.ImagePalette() + color = im.palette.getcolor(color_ints) + return im._new(core.fill(mode, size, color)) + + +def frombytes( + mode: str, + size: tuple[int, int], + data: bytes | bytearray | SupportsArrayInterface, + decoder_name: str = "raw", + *args: Any, +) -> Image: + """ + Creates a copy of an image memory from pixel data in a buffer. + + In its simplest form, this function takes three arguments + (mode, size, and unpacked pixel data). + + You can also use any pixel decoder supported by PIL. For more + information on available decoders, see the section + :ref:`Writing Your Own File Codec `. + + Note that this function decodes pixel data only, not entire images. + If you have an entire image in a string, wrap it in a + :py:class:`~io.BytesIO` object, and use :py:func:`~PIL.Image.open` to load + it. + + :param mode: The image mode. See: :ref:`concept-modes`. + :param size: The image size. + :param data: A byte buffer containing raw data for the given mode. + :param decoder_name: What decoder to use. + :param args: Additional parameters for the given decoder. + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + _check_size(size) + + im = new(mode, size) + if im.width != 0 and im.height != 0: + decoder_args: Any = args + if len(decoder_args) == 1 and isinstance(decoder_args[0], tuple): + # may pass tuple instead of argument list + decoder_args = decoder_args[0] + + if decoder_name == "raw" and decoder_args == (): + decoder_args = mode + + im.frombytes(data, decoder_name, decoder_args) + return im + + +def frombuffer( + mode: str, + size: tuple[int, int], + data: bytes | SupportsArrayInterface, + decoder_name: str = "raw", + *args: Any, +) -> Image: + """ + Creates an image memory referencing pixel data in a byte buffer. + + This function is similar to :py:func:`~PIL.Image.frombytes`, but uses data + in the byte buffer, where possible. This means that changes to the + original buffer object are reflected in this image). Not all modes can + share memory; supported modes include "L", "RGBX", "RGBA", and "CMYK". + + Note that this function decodes pixel data only, not entire images. + If you have an entire image file in a string, wrap it in a + :py:class:`~io.BytesIO` object, and use :py:func:`~PIL.Image.open` to load it. + + The default parameters used for the "raw" decoder differs from that used for + :py:func:`~PIL.Image.frombytes`. This is a bug, and will probably be fixed in a + future release. The current release issues a warning if you do this; to disable + the warning, you should provide the full set of parameters. See below for details. + + :param mode: The image mode. See: :ref:`concept-modes`. + :param size: The image size. + :param data: A bytes or other buffer object containing raw + data for the given mode. + :param decoder_name: What decoder to use. + :param args: Additional parameters for the given decoder. For the + default encoder ("raw"), it's recommended that you provide the + full set of parameters:: + + frombuffer(mode, size, data, "raw", mode, 0, 1) + + :returns: An :py:class:`~PIL.Image.Image` object. + + .. versionadded:: 1.1.4 + """ + + _check_size(size) + + # may pass tuple instead of argument list + if len(args) == 1 and isinstance(args[0], tuple): + args = args[0] + + if decoder_name == "raw": + if args == (): + args = mode, 0, 1 + if args[0] in _MAPMODES: + im = new(mode, (0, 0)) + im = im._new(core.map_buffer(data, size, decoder_name, 0, args)) + if mode == "P": + from . import ImagePalette + + im.palette = ImagePalette.ImagePalette("RGB", im.im.getpalette("RGB")) + im.readonly = 1 + return im + + return frombytes(mode, size, data, decoder_name, args) + + +class SupportsArrayInterface(Protocol): + """ + An object that has an ``__array_interface__`` dictionary. + """ + + @property + def __array_interface__(self) -> dict[str, Any]: + raise NotImplementedError() + + +class SupportsArrowArrayInterface(Protocol): + """ + An object that has an ``__arrow_c_array__`` method corresponding to the arrow c + data interface. + """ + + def __arrow_c_array__( + self, requested_schema: "PyCapsule" = None # type: ignore[name-defined] # noqa: F821, UP037 + ) -> tuple["PyCapsule", "PyCapsule"]: # type: ignore[name-defined] # noqa: F821, UP037 + raise NotImplementedError() + + +def fromarray(obj: SupportsArrayInterface, mode: str | None = None) -> Image: + """ + Creates an image memory from an object exporting the array interface + (using the buffer protocol):: + + from PIL import Image + import numpy as np + a = np.zeros((5, 5)) + im = Image.fromarray(a) + + If ``obj`` is not contiguous, then the ``tobytes`` method is called + and :py:func:`~PIL.Image.frombuffer` is used. + + In the case of NumPy, be aware that Pillow modes do not always correspond + to NumPy dtypes. Pillow modes only offer 1-bit pixels, 8-bit pixels, + 32-bit signed integer pixels, and 32-bit floating point pixels. + + Pillow images can also be converted to arrays:: + + from PIL import Image + import numpy as np + im = Image.open("hopper.jpg") + a = np.asarray(im) + + When converting Pillow images to arrays however, only pixel values are + transferred. This means that P and PA mode images will lose their palette. + + :param obj: Object with array interface + :param mode: Optional mode to use when reading ``obj``. Since pixel values do not + contain information about palettes or color spaces, this can be used to place + grayscale L mode data within a P mode image, or read RGB data as YCbCr for + example. + + See: :ref:`concept-modes` for general information about modes. + :returns: An image object. + + .. versionadded:: 1.1.6 + """ + arr = obj.__array_interface__ + shape = arr["shape"] + ndim = len(shape) + strides = arr.get("strides", None) + try: + typekey = (1, 1) + shape[2:], arr["typestr"] + except KeyError as e: + if mode is not None: + typekey = None + color_modes: list[str] = [] + else: + msg = "Cannot handle this data type" + raise TypeError(msg) from e + if typekey is not None: + try: + typemode, rawmode, color_modes = _fromarray_typemap[typekey] + except KeyError as e: + typekey_shape, typestr = typekey + msg = f"Cannot handle this data type: {typekey_shape}, {typestr}" + raise TypeError(msg) from e + if mode is not None: + if mode != typemode and mode not in color_modes: + deprecate("'mode' parameter for changing data types", 13) + rawmode = mode + else: + mode = typemode + if mode in ["1", "L", "I", "P", "F"]: + ndmax = 2 + elif mode == "RGB": + ndmax = 3 + else: + ndmax = 4 + if ndim > ndmax: + msg = f"Too many dimensions: {ndim} > {ndmax}." + raise ValueError(msg) + + size = 1 if ndim == 1 else shape[1], shape[0] + if strides is not None: + if hasattr(obj, "tobytes"): + obj = obj.tobytes() + elif hasattr(obj, "tostring"): + obj = obj.tostring() + else: + msg = "'strides' requires either tobytes() or tostring()" + raise ValueError(msg) + + return frombuffer(mode, size, obj, "raw", rawmode, 0, 1) + + +def fromarrow( + obj: SupportsArrowArrayInterface, mode: str, size: tuple[int, int] +) -> Image: + """Creates an image with zero-copy shared memory from an object exporting + the arrow_c_array interface protocol:: + + from PIL import Image + import pyarrow as pa + arr = pa.array([0]*(5*5*4), type=pa.uint8()) + im = Image.fromarrow(arr, 'RGBA', (5, 5)) + + If the data representation of the ``obj`` is not compatible with + Pillow internal storage, a ValueError is raised. + + Pillow images can also be converted to Arrow objects:: + + from PIL import Image + import pyarrow as pa + im = Image.open('hopper.jpg') + arr = pa.array(im) + + As with array support, when converting Pillow images to arrays, + only pixel values are transferred. This means that P and PA mode + images will lose their palette. + + :param obj: Object with an arrow_c_array interface + :param mode: Image mode. + :param size: Image size. This must match the storage of the arrow object. + :returns: An Image object + + Note that according to the Arrow spec, both the producer and the + consumer should consider the exported array to be immutable, as + unsynchronized updates will potentially cause inconsistent data. + + See: :ref:`arrow-support` for more detailed information + + .. versionadded:: 11.2.1 + + """ + if not hasattr(obj, "__arrow_c_array__"): + msg = "arrow_c_array interface not found" + raise ValueError(msg) + + schema_capsule, array_capsule = obj.__arrow_c_array__() + _im = core.new_arrow(mode, size, schema_capsule, array_capsule) + if _im: + return Image()._new(_im) + + msg = "new_arrow returned None without an exception" + raise ValueError(msg) + + +def fromqimage(im: ImageQt.QImage) -> ImageFile.ImageFile: + """Creates an image instance from a QImage image""" + from . import ImageQt + + if not ImageQt.qt_is_installed: + msg = "Qt bindings are not installed" + raise ImportError(msg) + return ImageQt.fromqimage(im) + + +def fromqpixmap(im: ImageQt.QPixmap) -> ImageFile.ImageFile: + """Creates an image instance from a QPixmap image""" + from . import ImageQt + + if not ImageQt.qt_is_installed: + msg = "Qt bindings are not installed" + raise ImportError(msg) + return ImageQt.fromqpixmap(im) + + +_fromarray_typemap = { + # (shape, typestr) => mode, rawmode, color modes + # first two members of shape are set to one + ((1, 1), "|b1"): ("1", "1;8", []), + ((1, 1), "|u1"): ("L", "L", ["P"]), + ((1, 1), "|i1"): ("I", "I;8", []), + ((1, 1), "u2"): ("I", "I;16B", []), + ((1, 1), "i2"): ("I", "I;16BS", []), + ((1, 1), "u4"): ("I", "I;32B", []), + ((1, 1), "i4"): ("I", "I;32BS", []), + ((1, 1), "f4"): ("F", "F;32BF", []), + ((1, 1), "f8"): ("F", "F;64BF", []), + ((1, 1, 2), "|u1"): ("LA", "LA", ["La", "PA"]), + ((1, 1, 3), "|u1"): ("RGB", "RGB", ["YCbCr", "LAB", "HSV"]), + ((1, 1, 4), "|u1"): ("RGBA", "RGBA", ["RGBa", "RGBX", "CMYK"]), + # shortcuts: + ((1, 1), f"{_ENDIAN}i4"): ("I", "I", []), + ((1, 1), f"{_ENDIAN}f4"): ("F", "F", []), +} + + +def _decompression_bomb_check(size: tuple[int, int]) -> None: + if MAX_IMAGE_PIXELS is None: + return + + pixels = max(1, size[0]) * max(1, size[1]) + + if pixels > 2 * MAX_IMAGE_PIXELS: + msg = ( + f"Image size ({pixels} pixels) exceeds limit of {2 * MAX_IMAGE_PIXELS} " + "pixels, could be decompression bomb DOS attack." + ) + raise DecompressionBombError(msg) + + if pixels > MAX_IMAGE_PIXELS: + warnings.warn( + f"Image size ({pixels} pixels) exceeds limit of {MAX_IMAGE_PIXELS} pixels, " + "could be decompression bomb DOS attack.", + DecompressionBombWarning, + ) + + +def open( + fp: StrOrBytesPath | IO[bytes], + mode: Literal["r"] = "r", + formats: list[str] | tuple[str, ...] | None = None, +) -> ImageFile.ImageFile: + """ + Opens and identifies the given image file. + + This is a lazy operation; this function identifies the file, but + the file remains open and the actual image data is not read from + the file until you try to process the data (or call the + :py:meth:`~PIL.Image.Image.load` method). See + :py:func:`~PIL.Image.new`. See :ref:`file-handling`. + + :param fp: A filename (string), os.PathLike object or a file object. + The file object must implement ``file.read``, + ``file.seek``, and ``file.tell`` methods, + and be opened in binary mode. The file object will also seek to zero + before reading. + :param mode: The mode. If given, this argument must be "r". + :param formats: A list or tuple of formats to attempt to load the file in. + This can be used to restrict the set of formats checked. + Pass ``None`` to try all supported formats. You can print the set of + available formats by running ``python3 -m PIL`` or using + the :py:func:`PIL.features.pilinfo` function. + :returns: An :py:class:`~PIL.Image.Image` object. + :exception FileNotFoundError: If the file cannot be found. + :exception PIL.UnidentifiedImageError: If the image cannot be opened and + identified. + :exception ValueError: If the ``mode`` is not "r", or if a ``StringIO`` + instance is used for ``fp``. + :exception TypeError: If ``formats`` is not ``None``, a list or a tuple. + """ + + if mode != "r": + msg = f"bad mode {repr(mode)}" # type: ignore[unreachable] + raise ValueError(msg) + elif isinstance(fp, io.StringIO): + msg = ( # type: ignore[unreachable] + "StringIO cannot be used to open an image. " + "Binary data must be used instead." + ) + raise ValueError(msg) + + if formats is None: + formats = ID + elif not isinstance(formats, (list, tuple)): + msg = "formats must be a list or tuple" # type: ignore[unreachable] + raise TypeError(msg) + + exclusive_fp = False + filename: str | bytes = "" + if is_path(fp): + filename = os.fspath(fp) + fp = builtins.open(filename, "rb") + exclusive_fp = True + else: + fp = cast(IO[bytes], fp) + + try: + fp.seek(0) + except (AttributeError, io.UnsupportedOperation): + fp = io.BytesIO(fp.read()) + exclusive_fp = True + + prefix = fp.read(16) + + # Try to import just the plugin needed for this file extension + # before falling back to preinit() which imports common plugins + ext = os.path.splitext(filename)[1] if filename else "" + if not _import_plugin_for_extension(ext): + preinit() + + warning_messages: list[str] = [] + + def _open_core( + fp: IO[bytes], + filename: str | bytes, + prefix: bytes, + formats: list[str] | tuple[str, ...], + ) -> ImageFile.ImageFile | None: + for i in formats: + i = i.upper() + if i not in OPEN: + init() + try: + factory, accept = OPEN[i] + result = not accept or accept(prefix) + if isinstance(result, str): + warning_messages.append(result) + elif result: + fp.seek(0) + im = factory(fp, filename) + _decompression_bomb_check(im.size) + return im + except (SyntaxError, IndexError, TypeError, struct.error) as e: + if WARN_POSSIBLE_FORMATS: + warning_messages.append(i + " opening failed. " + str(e)) + except BaseException: + if exclusive_fp: + fp.close() + raise + return None + + im = _open_core(fp, filename, prefix, formats) + + if im is None and formats is ID: + # Try preinit (few common plugins) then init (all plugins) + for loader in (preinit, init): + checked_formats = ID.copy() + loader() + if formats != checked_formats: + im = _open_core( + fp, + filename, + prefix, + tuple(f for f in formats if f not in checked_formats), + ) + if im is not None: + break + + if im: + im._exclusive_fp = exclusive_fp + return im + + if exclusive_fp: + fp.close() + for message in warning_messages: + warnings.warn(message) + msg = "cannot identify image file %r" % (filename if filename else fp) + raise UnidentifiedImageError(msg) + + +# +# Image processing. + + +def alpha_composite(im1: Image, im2: Image) -> Image: + """ + Alpha composite im2 over im1. + + :param im1: The first image. Must have mode RGBA or LA. + :param im2: The second image. Must have the same mode and size as the first image. + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + im1.load() + im2.load() + return im1._new(core.alpha_composite(im1.im, im2.im)) + + +def blend(im1: Image, im2: Image, alpha: float) -> Image: + """ + Creates a new image by interpolating between two input images, using + a constant alpha:: + + out = image1 * (1.0 - alpha) + image2 * alpha + + :param im1: The first image. + :param im2: The second image. Must have the same mode and size as + the first image. + :param alpha: The interpolation alpha factor. If alpha is 0.0, a + copy of the first image is returned. If alpha is 1.0, a copy of + the second image is returned. There are no restrictions on the + alpha value. If necessary, the result is clipped to fit into + the allowed output range. + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + im1.load() + im2.load() + return im1._new(core.blend(im1.im, im2.im, alpha)) + + +def composite(image1: Image, image2: Image, mask: Image) -> Image: + """ + Create composite image by blending images using a transparency mask. + + :param image1: The first image. + :param image2: The second image. Must have the same mode and + size as the first image. + :param mask: A mask image. This image can have mode + "1", "L", or "RGBA", and must have the same size as the + other two images. + """ + + image = image2.copy() + image.paste(image1, None, mask) + return image + + +def eval(image: Image, *args: Callable[[int], float]) -> Image: + """ + Applies the function (which should take one argument) to each pixel + in the given image. If the image has more than one band, the same + function is applied to each band. Note that the function is + evaluated once for each possible pixel value, so you cannot use + random components or other generators. + + :param image: The input image. + :param function: A function object, taking one integer argument. + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + return image.point(args[0]) + + +def merge(mode: str, bands: Sequence[Image]) -> Image: + """ + Merge a set of single band images into a new multiband image. + + :param mode: The mode to use for the output image. See: + :ref:`concept-modes`. + :param bands: A sequence containing one single-band image for + each band in the output image. All bands must have the + same size. + :returns: An :py:class:`~PIL.Image.Image` object. + """ + + if getmodebands(mode) != len(bands) or "*" in mode: + msg = "wrong number of bands" + raise ValueError(msg) + for band in bands[1:]: + if band.mode != getmodetype(mode): + msg = "mode mismatch" + raise ValueError(msg) + if band.size != bands[0].size: + msg = "size mismatch" + raise ValueError(msg) + for band in bands: + band.load() + return bands[0]._new(core.merge(mode, *[b.im for b in bands])) + + +# -------------------------------------------------------------------- +# Plugin registry + + +def register_open( + id: str, + factory: ( + Callable[[IO[bytes], str | bytes], ImageFile.ImageFile] + | type[ImageFile.ImageFile] + ), + accept: Callable[[bytes], bool | str] | None = None, +) -> None: + """ + Register an image file plugin. This function should not be used + in application code. + + :param id: An image format identifier. + :param factory: An image file factory method. + :param accept: An optional function that can be used to quickly + reject images having another format. + """ + id = id.upper() + if id not in ID: + ID.append(id) + OPEN[id] = factory, accept + + +def register_mime(id: str, mimetype: str) -> None: + """ + Registers an image MIME type by populating ``Image.MIME``. This function + should not be used in application code. + + ``Image.MIME`` provides a mapping from image format identifiers to mime + formats, but :py:meth:`~PIL.ImageFile.ImageFile.get_format_mimetype` can + provide a different result for specific images. + + :param id: An image format identifier. + :param mimetype: The image MIME type for this format. + """ + MIME[id.upper()] = mimetype + + +def register_save( + id: str, driver: Callable[[Image, IO[bytes], str | bytes], None] +) -> None: + """ + Registers an image save function. This function should not be + used in application code. + + :param id: An image format identifier. + :param driver: A function to save images in this format. + """ + SAVE[id.upper()] = driver + + +def register_save_all( + id: str, driver: Callable[[Image, IO[bytes], str | bytes], None] +) -> None: + """ + Registers an image function to save all the frames + of a multiframe format. This function should not be + used in application code. + + :param id: An image format identifier. + :param driver: A function to save images in this format. + """ + SAVE_ALL[id.upper()] = driver + + +def register_extension(id: str, extension: str) -> None: + """ + Registers an image extension. This function should not be + used in application code. + + :param id: An image format identifier. + :param extension: An extension used for this format. + """ + EXTENSION[extension.lower()] = id.upper() + + +def register_extensions(id: str, extensions: list[str]) -> None: + """ + Registers image extensions. This function should not be + used in application code. + + :param id: An image format identifier. + :param extensions: A list of extensions used for this format. + """ + for extension in extensions: + register_extension(id, extension) + + +def registered_extensions() -> dict[str, str]: + """ + Returns a dictionary containing all file extensions belonging + to registered plugins + """ + init() + return EXTENSION + + +def register_decoder(name: str, decoder: type[ImageFile.PyDecoder]) -> None: + """ + Registers an image decoder. This function should not be + used in application code. + + :param name: The name of the decoder + :param decoder: An ImageFile.PyDecoder object + + .. versionadded:: 4.1.0 + """ + DECODERS[name] = decoder + + +def register_encoder(name: str, encoder: type[ImageFile.PyEncoder]) -> None: + """ + Registers an image encoder. This function should not be + used in application code. + + :param name: The name of the encoder + :param encoder: An ImageFile.PyEncoder object + + .. versionadded:: 4.1.0 + """ + ENCODERS[name] = encoder + + +# -------------------------------------------------------------------- +# Simple display support. + + +def _show(image: Image, **options: Any) -> None: + from . import ImageShow + + deprecate("Image._show", 13, "ImageShow.show") + ImageShow.show(image, **options) + + +# -------------------------------------------------------------------- +# Effects + + +def effect_mandelbrot( + size: tuple[int, int], extent: tuple[float, float, float, float], quality: int +) -> Image: + """ + Generate a Mandelbrot set covering the given extent. + + :param size: The requested size in pixels, as a 2-tuple: + (width, height). + :param extent: The extent to cover, as a 4-tuple: + (x0, y0, x1, y1). + :param quality: Quality. + """ + return Image()._new(core.effect_mandelbrot(size, extent, quality)) + + +def effect_noise(size: tuple[int, int], sigma: float) -> Image: + """ + Generate Gaussian noise centered around 128. + + :param size: The requested size in pixels, as a 2-tuple: + (width, height). + :param sigma: Standard deviation of noise. + """ + return Image()._new(core.effect_noise(size, sigma)) + + +def linear_gradient(mode: str) -> Image: + """ + Generate 256x256 linear gradient from black to white, top to bottom. + + :param mode: Input mode. + """ + return Image()._new(core.linear_gradient(mode)) + + +def radial_gradient(mode: str) -> Image: + """ + Generate 256x256 radial gradient from black to white, centre to edge. + + :param mode: Input mode. + """ + return Image()._new(core.radial_gradient(mode)) + + +# -------------------------------------------------------------------- +# Resources + + +def _apply_env_variables(env: dict[str, str] | None = None) -> None: + env_dict = env if env is not None else os.environ + + for var_name, setter in [ + ("PILLOW_ALIGNMENT", core.set_alignment), + ("PILLOW_BLOCK_SIZE", core.set_block_size), + ("PILLOW_BLOCKS_MAX", core.set_blocks_max), + ]: + if var_name not in env_dict: + continue + + var = env_dict[var_name].lower() + + units = 1 + for postfix, mul in [("k", 1024), ("m", 1024 * 1024)]: + if var.endswith(postfix): + units = mul + var = var[: -len(postfix)] + + try: + var_int = int(var) * units + except ValueError: + warnings.warn(f"{var_name} is not int") + continue + + try: + setter(var_int) + except ValueError as e: + warnings.warn(f"{var_name}: {e}") + + +_apply_env_variables() +atexit.register(core.clear_cache) + + +if TYPE_CHECKING: + _ExifBase = MutableMapping[int, Any] +else: + _ExifBase = MutableMapping + + +class Exif(_ExifBase): + """ + This class provides read and write access to EXIF image data:: + + from PIL import Image + im = Image.open("exif.png") + exif = im.getexif() # Returns an instance of this class + + Information can be read and written, iterated over or deleted:: + + print(exif[274]) # 1 + exif[274] = 2 + for k, v in exif.items(): + print("Tag", k, "Value", v) # Tag 274 Value 2 + del exif[274] + + To access information beyond IFD0, :py:meth:`~PIL.Image.Exif.get_ifd` + returns a dictionary:: + + from PIL import ExifTags + im = Image.open("exif_gps.jpg") + exif = im.getexif() + gps_ifd = exif.get_ifd(ExifTags.IFD.GPSInfo) + print(gps_ifd) + + Other IFDs include ``ExifTags.IFD.Exif``, ``ExifTags.IFD.MakerNote``, + ``ExifTags.IFD.Interop`` and ``ExifTags.IFD.IFD1``. + + :py:mod:`~PIL.ExifTags` also has enum classes to provide names for data:: + + print(exif[ExifTags.Base.Software]) # PIL + print(gps_ifd[ExifTags.GPS.GPSDateStamp]) # 1999:99:99 99:99:99 + """ + + endian: str | None = None + bigtiff = False + _loaded = False + + def __init__(self) -> None: + self._data: dict[int, Any] = {} + self._hidden_data: dict[int, Any] = {} + self._ifds: dict[int, dict[int, Any]] = {} + self._info: TiffImagePlugin.ImageFileDirectory_v2 | None = None + self._loaded_exif: bytes | None = None + + def _fixup(self, value: Any) -> Any: + try: + if len(value) == 1 and isinstance(value, tuple): + return value[0] + except Exception: + pass + return value + + def _fixup_dict(self, src_dict: dict[int, Any]) -> dict[int, Any]: + # Helper function + # returns a dict with any single item tuples/lists as individual values + return {k: self._fixup(v) for k, v in src_dict.items()} + + def _get_ifd_dict( + self, offset: int, group: int | None = None + ) -> dict[int, Any] | None: + try: + # an offset pointer to the location of the nested embedded IFD. + # It should be a long, but may be corrupted. + self.fp.seek(offset) + except (KeyError, TypeError): + return None + else: + from . import TiffImagePlugin + + info = TiffImagePlugin.ImageFileDirectory_v2(self.head, group=group) + info.load(self.fp) + return self._fixup_dict(dict(info)) + + def _get_head(self) -> bytes: + version = b"\x2b" if self.bigtiff else b"\x2a" + if self.endian == "<": + head = b"II" + version + b"\x00" + o32le(8) + else: + head = b"MM\x00" + version + o32be(8) + if self.bigtiff: + head += o32le(8) if self.endian == "<" else o32be(8) + head += b"\x00\x00\x00\x00" + return head + + def load(self, data: bytes) -> None: + # Extract EXIF information. This is highly experimental, + # and is likely to be replaced with something better in a future + # version. + + # The EXIF record consists of a TIFF file embedded in a JPEG + # application marker (!). + if data == self._loaded_exif: + return + self._loaded_exif = data + self._data.clear() + self._hidden_data.clear() + self._ifds.clear() + while data and data.startswith(b"Exif\x00\x00"): + data = data[6:] + if not data: + self._info = None + return + + self.fp: IO[bytes] = io.BytesIO(data) + self.head = self.fp.read(8) + # process dictionary + from . import TiffImagePlugin + + self._info = TiffImagePlugin.ImageFileDirectory_v2(self.head) + self.endian = self._info._endian + self.fp.seek(self._info.next) + self._info.load(self.fp) + + def load_from_fp(self, fp: IO[bytes], offset: int | None = None) -> None: + self._loaded_exif = None + self._data.clear() + self._hidden_data.clear() + self._ifds.clear() + + # process dictionary + from . import TiffImagePlugin + + self.fp = fp + if offset is not None: + self.head = self._get_head() + else: + self.head = self.fp.read(8) + self._info = TiffImagePlugin.ImageFileDirectory_v2(self.head) + if self.endian is None: + self.endian = self._info._endian + if offset is None: + offset = self._info.next + self.fp.tell() + self.fp.seek(offset) + self._info.load(self.fp) + + def _get_merged_dict(self) -> dict[int, Any]: + merged_dict = dict(self) + + # get EXIF extension + if ExifTags.IFD.Exif in self: + ifd = self._get_ifd_dict(self[ExifTags.IFD.Exif], ExifTags.IFD.Exif) + if ifd: + merged_dict.update(ifd) + + # GPS + if ExifTags.IFD.GPSInfo in self: + merged_dict[ExifTags.IFD.GPSInfo] = self._get_ifd_dict( + self[ExifTags.IFD.GPSInfo], ExifTags.IFD.GPSInfo + ) + + return merged_dict + + def tobytes(self, offset: int = 8) -> bytes: + from . import TiffImagePlugin + + head = self._get_head() + ifd = TiffImagePlugin.ImageFileDirectory_v2(ifh=head) + for tag, ifd_dict in self._ifds.items(): + if tag not in self: + ifd[tag] = ifd_dict + for tag, value in self.items(): + if tag in [ + ExifTags.IFD.Exif, + ExifTags.IFD.GPSInfo, + ] and not isinstance(value, dict): + value = self.get_ifd(tag) + if ( + tag == ExifTags.IFD.Exif + and ExifTags.IFD.Interop in value + and not isinstance(value[ExifTags.IFD.Interop], dict) + ): + value = value.copy() + value[ExifTags.IFD.Interop] = self.get_ifd(ExifTags.IFD.Interop) + ifd[tag] = value + return b"Exif\x00\x00" + head + ifd.tobytes(offset) + + def get_ifd(self, tag: int) -> dict[int, Any]: + if tag not in self._ifds: + if tag == ExifTags.IFD.IFD1: + if self._info is not None and self._info.next != 0: + ifd = self._get_ifd_dict(self._info.next) + if ifd is not None: + self._ifds[tag] = ifd + elif tag in [ExifTags.IFD.Exif, ExifTags.IFD.GPSInfo]: + offset = self._hidden_data.get(tag, self.get(tag)) + if offset is not None: + ifd = self._get_ifd_dict(offset, tag) + if ifd is not None: + self._ifds[tag] = ifd + elif tag in [ExifTags.IFD.Interop, ExifTags.IFD.MakerNote]: + if ExifTags.IFD.Exif not in self._ifds: + self.get_ifd(ExifTags.IFD.Exif) + tag_data = self._ifds[ExifTags.IFD.Exif][tag] + if tag == ExifTags.IFD.MakerNote: + from .TiffImagePlugin import ImageFileDirectory_v2 + + try: + if tag_data.startswith(b"FUJIFILM"): + ifd_offset = i32le(tag_data, 8) + ifd_data = tag_data[ifd_offset:] + + makernote = {} + for i in range(struct.unpack(" 4: + (offset,) = struct.unpack("H", tag_data[:2])[0]): + ifd_tag, typ, count, data = struct.unpack( + ">HHL4s", tag_data[i * 12 + 2 : (i + 1) * 12 + 2] + ) + if ifd_tag == 0x1101: + # CameraInfo + (offset,) = struct.unpack(">L", data) + self.fp.seek(offset) + + camerainfo: dict[str, int | bytes] = { + "ModelID": self.fp.read(4) + } + + self.fp.read(4) + # Seconds since 2000 + camerainfo["TimeStamp"] = i32le(self.fp.read(12)) + + self.fp.read(4) + camerainfo["InternalSerialNumber"] = self.fp.read(4) + + self.fp.read(12) + parallax = self.fp.read(4) + handler = ImageFileDirectory_v2._load_dispatch[ + TiffTags.FLOAT + ][1] + camerainfo["Parallax"] = handler( + ImageFileDirectory_v2(), parallax, False + )[0] + + self.fp.read(4) + camerainfo["Category"] = self.fp.read(2) + + makernote = {0x1101: camerainfo} + self._ifds[tag] = makernote + except struct.error: + pass + else: + # Interop + ifd = self._get_ifd_dict(tag_data, tag) + if ifd is not None: + self._ifds[tag] = ifd + ifd = self._ifds.setdefault(tag, {}) + if tag == ExifTags.IFD.Exif and self._hidden_data: + ifd = { + k: v + for (k, v) in ifd.items() + if k not in (ExifTags.IFD.Interop, ExifTags.IFD.MakerNote) + } + return ifd + + def hide_offsets(self) -> None: + for tag in (ExifTags.IFD.Exif, ExifTags.IFD.GPSInfo): + if tag in self: + self._hidden_data[tag] = self[tag] + del self[tag] + + def __str__(self) -> str: + if self._info is not None: + # Load all keys into self._data + for tag in self._info: + self[tag] + + return str(self._data) + + def __len__(self) -> int: + keys = set(self._data) + if self._info is not None: + keys.update(self._info) + return len(keys) + + def __getitem__(self, tag: int) -> Any: + if self._info is not None and tag not in self._data and tag in self._info: + self._data[tag] = self._fixup(self._info[tag]) + del self._info[tag] + return self._data[tag] + + def __contains__(self, tag: object) -> bool: + return tag in self._data or (self._info is not None and tag in self._info) + + def __setitem__(self, tag: int, value: Any) -> None: + if self._info is not None and tag in self._info: + del self._info[tag] + self._data[tag] = value + + def __delitem__(self, tag: int) -> None: + if self._info is not None and tag in self._info: + del self._info[tag] + else: + del self._data[tag] + if tag in self._ifds: + del self._ifds[tag] + + def __iter__(self) -> Iterator[int]: + keys = set(self._data) + if self._info is not None: + keys.update(self._info) + return iter(keys) diff --git a/Python/venv/lib/python3.12/site-packages/PIL/ImageChops.py b/Python/venv/lib/python3.12/site-packages/PIL/ImageChops.py new file mode 100644 index 0000000..29a5c99 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/ImageChops.py @@ -0,0 +1,311 @@ +# +# The Python Imaging Library. +# $Id$ +# +# standard channel operations +# +# History: +# 1996-03-24 fl Created +# 1996-08-13 fl Added logical operations (for "1" images) +# 2000-10-12 fl Added offset method (from Image.py) +# +# Copyright (c) 1997-2000 by Secret Labs AB +# Copyright (c) 1996-2000 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +from __future__ import annotations + +from . import Image + + +def constant(image: Image.Image, value: int) -> Image.Image: + """Fill a channel with a given gray level. + + :rtype: :py:class:`~PIL.Image.Image` + """ + + return Image.new("L", image.size, value) + + +def duplicate(image: Image.Image) -> Image.Image: + """Copy a channel. Alias for :py:meth:`PIL.Image.Image.copy`. + + :rtype: :py:class:`~PIL.Image.Image` + """ + + return image.copy() + + +def invert(image: Image.Image) -> Image.Image: + """ + Invert an image (channel). :: + + out = MAX - image + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image.load() + return image._new(image.im.chop_invert()) + + +def lighter(image1: Image.Image, image2: Image.Image) -> Image.Image: + """ + Compares the two images, pixel by pixel, and returns a new image containing + the lighter values. :: + + out = max(image1, image2) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_lighter(image2.im)) + + +def darker(image1: Image.Image, image2: Image.Image) -> Image.Image: + """ + Compares the two images, pixel by pixel, and returns a new image containing + the darker values. :: + + out = min(image1, image2) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_darker(image2.im)) + + +def difference(image1: Image.Image, image2: Image.Image) -> Image.Image: + """ + Returns the absolute value of the pixel-by-pixel difference between the two + images. :: + + out = abs(image1 - image2) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_difference(image2.im)) + + +def multiply(image1: Image.Image, image2: Image.Image) -> Image.Image: + """ + Superimposes two images on top of each other. + + If you multiply an image with a solid black image, the result is black. If + you multiply with a solid white image, the image is unaffected. :: + + out = image1 * image2 / MAX + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_multiply(image2.im)) + + +def screen(image1: Image.Image, image2: Image.Image) -> Image.Image: + """ + Superimposes two inverted images on top of each other. :: + + out = MAX - ((MAX - image1) * (MAX - image2) / MAX) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_screen(image2.im)) + + +def soft_light(image1: Image.Image, image2: Image.Image) -> Image.Image: + """ + Superimposes two images on top of each other using the Soft Light algorithm + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_soft_light(image2.im)) + + +def hard_light(image1: Image.Image, image2: Image.Image) -> Image.Image: + """ + Superimposes two images on top of each other using the Hard Light algorithm + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_hard_light(image2.im)) + + +def overlay(image1: Image.Image, image2: Image.Image) -> Image.Image: + """ + Superimposes two images on top of each other using the Overlay algorithm + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_overlay(image2.im)) + + +def add( + image1: Image.Image, image2: Image.Image, scale: float = 1.0, offset: float = 0 +) -> Image.Image: + """ + Adds two images, dividing the result by scale and adding the + offset. If omitted, scale defaults to 1.0, and offset to 0.0. :: + + out = ((image1 + image2) / scale + offset) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_add(image2.im, scale, offset)) + + +def subtract( + image1: Image.Image, image2: Image.Image, scale: float = 1.0, offset: float = 0 +) -> Image.Image: + """ + Subtracts two images, dividing the result by scale and adding the offset. + If omitted, scale defaults to 1.0, and offset to 0.0. :: + + out = ((image1 - image2) / scale + offset) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_subtract(image2.im, scale, offset)) + + +def add_modulo(image1: Image.Image, image2: Image.Image) -> Image.Image: + """Add two images, without clipping the result. :: + + out = ((image1 + image2) % MAX) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_add_modulo(image2.im)) + + +def subtract_modulo(image1: Image.Image, image2: Image.Image) -> Image.Image: + """Subtract two images, without clipping the result. :: + + out = ((image1 - image2) % MAX) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_subtract_modulo(image2.im)) + + +def logical_and(image1: Image.Image, image2: Image.Image) -> Image.Image: + """Logical AND between two images. + + Both of the images must have mode "1". If you would like to perform a + logical AND on an image with a mode other than "1", try + :py:meth:`~PIL.ImageChops.multiply` instead, using a black-and-white mask + as the second image. :: + + out = ((image1 and image2) % MAX) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_and(image2.im)) + + +def logical_or(image1: Image.Image, image2: Image.Image) -> Image.Image: + """Logical OR between two images. + + Both of the images must have mode "1". :: + + out = ((image1 or image2) % MAX) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_or(image2.im)) + + +def logical_xor(image1: Image.Image, image2: Image.Image) -> Image.Image: + """Logical XOR between two images. + + Both of the images must have mode "1". :: + + out = ((bool(image1) != bool(image2)) % MAX) + + :rtype: :py:class:`~PIL.Image.Image` + """ + + image1.load() + image2.load() + return image1._new(image1.im.chop_xor(image2.im)) + + +def blend(image1: Image.Image, image2: Image.Image, alpha: float) -> Image.Image: + """Blend images using constant transparency weight. Alias for + :py:func:`PIL.Image.blend`. + + :rtype: :py:class:`~PIL.Image.Image` + """ + + return Image.blend(image1, image2, alpha) + + +def composite( + image1: Image.Image, image2: Image.Image, mask: Image.Image +) -> Image.Image: + """Create composite using transparency mask. Alias for + :py:func:`PIL.Image.composite`. + + :rtype: :py:class:`~PIL.Image.Image` + """ + + return Image.composite(image1, image2, mask) + + +def offset(image: Image.Image, xoffset: int, yoffset: int | None = None) -> Image.Image: + """Returns a copy of the image where data has been offset by the given + distances. Data wraps around the edges. If ``yoffset`` is omitted, it + is assumed to be equal to ``xoffset``. + + :param image: Input image. + :param xoffset: The horizontal distance. + :param yoffset: The vertical distance. If omitted, both + distances are set to the same value. + :rtype: :py:class:`~PIL.Image.Image` + """ + + if yoffset is None: + yoffset = xoffset + image.load() + return image._new(image.im.offset(xoffset, yoffset)) diff --git a/Python/venv/lib/python3.12/site-packages/PIL/ImageCms.py b/Python/venv/lib/python3.12/site-packages/PIL/ImageCms.py new file mode 100644 index 0000000..513e28a --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/ImageCms.py @@ -0,0 +1,1076 @@ +# The Python Imaging Library. +# $Id$ + +# Optional color management support, based on Kevin Cazabon's PyCMS +# library. + +# Originally released under LGPL. Graciously donated to PIL in +# March 2009, for distribution under the standard PIL license + +# History: + +# 2009-03-08 fl Added to PIL. + +# Copyright (C) 2002-2003 Kevin Cazabon +# Copyright (c) 2009 by Fredrik Lundh +# Copyright (c) 2013 by Eric Soroos + +# See the README file for information on usage and redistribution. See +# below for the original description. +from __future__ import annotations + +import operator +import sys +from enum import IntEnum, IntFlag +from functools import reduce +from typing import Any, Literal, SupportsFloat, SupportsInt, Union + +from . import Image +from ._deprecate import deprecate +from ._typing import SupportsRead + +try: + from . import _imagingcms as core + + _CmsProfileCompatible = Union[ + str, SupportsRead[bytes], core.CmsProfile, "ImageCmsProfile" + ] +except ImportError as ex: + # Allow error import for doc purposes, but error out when accessing + # anything in core. + from ._util import DeferredError + + core = DeferredError.new(ex) + +_DESCRIPTION = """ +pyCMS + + a Python / PIL interface to the littleCMS ICC Color Management System + Copyright (C) 2002-2003 Kevin Cazabon + kevin@cazabon.com + https://www.cazabon.com + + pyCMS home page: https://www.cazabon.com/pyCMS + littleCMS home page: https://www.littlecms.com + (littleCMS is Copyright (C) 1998-2001 Marti Maria) + + Originally released under LGPL. Graciously donated to PIL in + March 2009, for distribution under the standard PIL license + + The pyCMS.py module provides a "clean" interface between Python/PIL and + pyCMSdll, taking care of some of the more complex handling of the direct + pyCMSdll functions, as well as error-checking and making sure that all + relevant data is kept together. + + While it is possible to call pyCMSdll functions directly, it's not highly + recommended. + + Version History: + + 1.0.0 pil Oct 2013 Port to LCMS 2. + + 0.1.0 pil mod March 10, 2009 + + Renamed display profile to proof profile. The proof + profile is the profile of the device that is being + simulated, not the profile of the device which is + actually used to display/print the final simulation + (that'd be the output profile) - also see LCMSAPI.txt + input colorspace -> using 'renderingIntent' -> proof + colorspace -> using 'proofRenderingIntent' -> output + colorspace + + Added LCMS FLAGS support. + Added FLAGS["SOFTPROOFING"] as default flag for + buildProofTransform (otherwise the proof profile/intent + would be ignored). + + 0.1.0 pil March 2009 - added to PIL, as PIL.ImageCms + + 0.0.2 alpha Jan 6, 2002 + + Added try/except statements around type() checks of + potential CObjects... Python won't let you use type() + on them, and raises a TypeError (stupid, if you ask + me!) + + Added buildProofTransformFromOpenProfiles() function. + Additional fixes in DLL, see DLL code for details. + + 0.0.1 alpha first public release, Dec. 26, 2002 + + Known to-do list with current version (of Python interface, not pyCMSdll): + + none + +""" + +_VERSION = "1.0.0 pil" + + +# --------------------------------------------------------------------. + + +# +# intent/direction values + + +class Intent(IntEnum): + PERCEPTUAL = 0 + RELATIVE_COLORIMETRIC = 1 + SATURATION = 2 + ABSOLUTE_COLORIMETRIC = 3 + + +class Direction(IntEnum): + INPUT = 0 + OUTPUT = 1 + PROOF = 2 + + +# +# flags + + +class Flags(IntFlag): + """Flags and documentation are taken from ``lcms2.h``.""" + + NONE = 0 + NOCACHE = 0x0040 + """Inhibit 1-pixel cache""" + NOOPTIMIZE = 0x0100 + """Inhibit optimizations""" + NULLTRANSFORM = 0x0200 + """Don't transform anyway""" + GAMUTCHECK = 0x1000 + """Out of Gamut alarm""" + SOFTPROOFING = 0x4000 + """Do softproofing""" + BLACKPOINTCOMPENSATION = 0x2000 + NOWHITEONWHITEFIXUP = 0x0004 + """Don't fix scum dot""" + HIGHRESPRECALC = 0x0400 + """Use more memory to give better accuracy""" + LOWRESPRECALC = 0x0800 + """Use less memory to minimize resources""" + # this should be 8BITS_DEVICELINK, but that is not a valid name in Python: + USE_8BITS_DEVICELINK = 0x0008 + """Create 8 bits devicelinks""" + GUESSDEVICECLASS = 0x0020 + """Guess device class (for ``transform2devicelink``)""" + KEEP_SEQUENCE = 0x0080 + """Keep profile sequence for devicelink creation""" + FORCE_CLUT = 0x0002 + """Force CLUT optimization""" + CLUT_POST_LINEARIZATION = 0x0001 + """create postlinearization tables if possible""" + CLUT_PRE_LINEARIZATION = 0x0010 + """create prelinearization tables if possible""" + NONEGATIVES = 0x8000 + """Prevent negative numbers in floating point transforms""" + COPY_ALPHA = 0x04000000 + """Alpha channels are copied on ``cmsDoTransform()``""" + NODEFAULTRESOURCEDEF = 0x01000000 + + _GRIDPOINTS_1 = 1 << 16 + _GRIDPOINTS_2 = 2 << 16 + _GRIDPOINTS_4 = 4 << 16 + _GRIDPOINTS_8 = 8 << 16 + _GRIDPOINTS_16 = 16 << 16 + _GRIDPOINTS_32 = 32 << 16 + _GRIDPOINTS_64 = 64 << 16 + _GRIDPOINTS_128 = 128 << 16 + + @staticmethod + def GRIDPOINTS(n: int) -> Flags: + """ + Fine-tune control over number of gridpoints + + :param n: :py:class:`int` in range ``0 <= n <= 255`` + """ + return Flags.NONE | ((n & 0xFF) << 16) + + +_MAX_FLAG = reduce(operator.or_, Flags) + + +_FLAGS = { + "MATRIXINPUT": 1, + "MATRIXOUTPUT": 2, + "MATRIXONLY": (1 | 2), + "NOWHITEONWHITEFIXUP": 4, # Don't hot fix scum dot + # Don't create prelinearization tables on precalculated transforms + # (internal use): + "NOPRELINEARIZATION": 16, + "GUESSDEVICECLASS": 32, # Guess device class (for transform2devicelink) + "NOTCACHE": 64, # Inhibit 1-pixel cache + "NOTPRECALC": 256, + "NULLTRANSFORM": 512, # Don't transform anyway + "HIGHRESPRECALC": 1024, # Use more memory to give better accuracy + "LOWRESPRECALC": 2048, # Use less memory to minimize resources + "WHITEBLACKCOMPENSATION": 8192, + "BLACKPOINTCOMPENSATION": 8192, + "GAMUTCHECK": 4096, # Out of Gamut alarm + "SOFTPROOFING": 16384, # Do softproofing + "PRESERVEBLACK": 32768, # Black preservation + "NODEFAULTRESOURCEDEF": 16777216, # CRD special + "GRIDPOINTS": lambda n: (n & 0xFF) << 16, # Gridpoints +} + + +# --------------------------------------------------------------------. +# Experimental PIL-level API +# --------------------------------------------------------------------. + +## +# Profile. + + +class ImageCmsProfile: + def __init__(self, profile: str | SupportsRead[bytes] | core.CmsProfile) -> None: + """ + :param profile: Either a string representing a filename, + a file like object containing a profile or a + low-level profile object + + """ + self.filename: str | None = None + + if isinstance(profile, str): + if sys.platform == "win32": + profile_bytes_path = profile.encode() + try: + profile_bytes_path.decode("ascii") + except UnicodeDecodeError: + with open(profile, "rb") as f: + self.profile = core.profile_frombytes(f.read()) + return + self.filename = profile + self.profile = core.profile_open(profile) + elif hasattr(profile, "read"): + self.profile = core.profile_frombytes(profile.read()) + elif isinstance(profile, core.CmsProfile): + self.profile = profile + else: + msg = "Invalid type for Profile" # type: ignore[unreachable] + raise TypeError(msg) + + def __getattr__(self, name: str) -> Any: + if name in ("product_name", "product_info"): + deprecate(f"ImageCms.ImageCmsProfile.{name}", 13) + return None + msg = f"'{self.__class__.__name__}' object has no attribute '{name}'" + raise AttributeError(msg) + + def tobytes(self) -> bytes: + """ + Returns the profile in a format suitable for embedding in + saved images. + + :returns: a bytes object containing the ICC profile. + """ + + return core.profile_tobytes(self.profile) + + +class ImageCmsTransform(Image.ImagePointHandler): + """ + Transform. This can be used with the procedural API, or with the standard + :py:func:`~PIL.Image.Image.point` method. + + Will return the output profile in the ``output.info['icc_profile']``. + """ + + def __init__( + self, + input: ImageCmsProfile, + output: ImageCmsProfile, + input_mode: str, + output_mode: str, + intent: Intent = Intent.PERCEPTUAL, + proof: ImageCmsProfile | None = None, + proof_intent: Intent = Intent.ABSOLUTE_COLORIMETRIC, + flags: Flags = Flags.NONE, + ): + if proof is None: + self.transform = core.buildTransform( + input.profile, output.profile, input_mode, output_mode, intent, flags + ) + else: + self.transform = core.buildProofTransform( + input.profile, + output.profile, + proof.profile, + input_mode, + output_mode, + intent, + proof_intent, + flags, + ) + # Note: inputMode and outputMode are for pyCMS compatibility only + self.input_mode = self.inputMode = input_mode + self.output_mode = self.outputMode = output_mode + + self.output_profile = output + + def point(self, im: Image.Image) -> Image.Image: + return self.apply(im) + + def apply(self, im: Image.Image, imOut: Image.Image | None = None) -> Image.Image: + if imOut is None: + imOut = Image.new(self.output_mode, im.size, None) + self.transform.apply(im.getim(), imOut.getim()) + imOut.info["icc_profile"] = self.output_profile.tobytes() + return imOut + + def apply_in_place(self, im: Image.Image) -> Image.Image: + if im.mode != self.output_mode: + msg = "mode mismatch" + raise ValueError(msg) # wrong output mode + self.transform.apply(im.getim(), im.getim()) + im.info["icc_profile"] = self.output_profile.tobytes() + return im + + +def get_display_profile(handle: SupportsInt | None = None) -> ImageCmsProfile | None: + """ + (experimental) Fetches the profile for the current display device. + + :returns: ``None`` if the profile is not known. + """ + + if sys.platform != "win32": + return None + + from . import ImageWin # type: ignore[unused-ignore, unreachable] + + if isinstance(handle, ImageWin.HDC): + profile = core.get_display_profile_win32(int(handle), 1) + else: + profile = core.get_display_profile_win32(int(handle or 0)) + if profile is None: + return None + return ImageCmsProfile(profile) + + +# --------------------------------------------------------------------. +# pyCMS compatible layer +# --------------------------------------------------------------------. + + +class PyCMSError(Exception): + """(pyCMS) Exception class. + This is used for all errors in the pyCMS API.""" + + pass + + +def profileToProfile( + im: Image.Image, + inputProfile: _CmsProfileCompatible, + outputProfile: _CmsProfileCompatible, + renderingIntent: Intent = Intent.PERCEPTUAL, + outputMode: str | None = None, + inPlace: bool = False, + flags: Flags = Flags.NONE, +) -> Image.Image | None: + """ + (pyCMS) Applies an ICC transformation to a given image, mapping from + ``inputProfile`` to ``outputProfile``. + + If the input or output profiles specified are not valid filenames, a + :exc:`PyCMSError` will be raised. If ``inPlace`` is ``True`` and + ``outputMode != im.mode``, a :exc:`PyCMSError` will be raised. + If an error occurs during application of the profiles, + a :exc:`PyCMSError` will be raised. + If ``outputMode`` is not a mode supported by the ``outputProfile`` (or by pyCMS), + a :exc:`PyCMSError` will be raised. + + This function applies an ICC transformation to im from ``inputProfile``'s + color space to ``outputProfile``'s color space using the specified rendering + intent to decide how to handle out-of-gamut colors. + + ``outputMode`` can be used to specify that a color mode conversion is to + be done using these profiles, but the specified profiles must be able + to handle that mode. I.e., if converting im from RGB to CMYK using + profiles, the input profile must handle RGB data, and the output + profile must handle CMYK data. + + :param im: An open :py:class:`~PIL.Image.Image` object (i.e. Image.new(...) + or Image.open(...), etc.) + :param inputProfile: String, as a valid filename path to the ICC input + profile you wish to use for this image, or a profile object + :param outputProfile: String, as a valid filename path to the ICC output + profile you wish to use for this image, or a profile object + :param renderingIntent: Integer (0-3) specifying the rendering intent you + wish to use for the transform + + ImageCms.Intent.PERCEPTUAL = 0 (DEFAULT) + ImageCms.Intent.RELATIVE_COLORIMETRIC = 1 + ImageCms.Intent.SATURATION = 2 + ImageCms.Intent.ABSOLUTE_COLORIMETRIC = 3 + + see the pyCMS documentation for details on rendering intents and what + they do. + :param outputMode: A valid PIL mode for the output image (i.e. "RGB", + "CMYK", etc.). Note: if rendering the image "inPlace", outputMode + MUST be the same mode as the input, or omitted completely. If + omitted, the outputMode will be the same as the mode of the input + image (im.mode) + :param inPlace: Boolean. If ``True``, the original image is modified in-place, + and ``None`` is returned. If ``False`` (default), a new + :py:class:`~PIL.Image.Image` object is returned with the transform applied. + :param flags: Integer (0-...) specifying additional flags + :returns: Either None or a new :py:class:`~PIL.Image.Image` object, depending on + the value of ``inPlace`` + :exception PyCMSError: + """ + + if outputMode is None: + outputMode = im.mode + + if not isinstance(renderingIntent, int) or not (0 <= renderingIntent <= 3): + msg = "renderingIntent must be an integer between 0 and 3" + raise PyCMSError(msg) + + if not isinstance(flags, int) or not (0 <= flags <= _MAX_FLAG): + msg = f"flags must be an integer between 0 and {_MAX_FLAG}" + raise PyCMSError(msg) + + try: + if not isinstance(inputProfile, ImageCmsProfile): + inputProfile = ImageCmsProfile(inputProfile) + if not isinstance(outputProfile, ImageCmsProfile): + outputProfile = ImageCmsProfile(outputProfile) + transform = ImageCmsTransform( + inputProfile, + outputProfile, + im.mode, + outputMode, + renderingIntent, + flags=flags, + ) + if inPlace: + transform.apply_in_place(im) + imOut = None + else: + imOut = transform.apply(im) + except (OSError, TypeError, ValueError) as v: + raise PyCMSError(v) from v + + return imOut + + +def getOpenProfile( + profileFilename: str | SupportsRead[bytes] | core.CmsProfile, +) -> ImageCmsProfile: + """ + (pyCMS) Opens an ICC profile file. + + The PyCMSProfile object can be passed back into pyCMS for use in creating + transforms and such (as in ImageCms.buildTransformFromOpenProfiles()). + + If ``profileFilename`` is not a valid filename for an ICC profile, + a :exc:`PyCMSError` will be raised. + + :param profileFilename: String, as a valid filename path to the ICC profile + you wish to open, or a file-like object. + :returns: A CmsProfile class object. + :exception PyCMSError: + """ + + try: + return ImageCmsProfile(profileFilename) + except (OSError, TypeError, ValueError) as v: + raise PyCMSError(v) from v + + +def buildTransform( + inputProfile: _CmsProfileCompatible, + outputProfile: _CmsProfileCompatible, + inMode: str, + outMode: str, + renderingIntent: Intent = Intent.PERCEPTUAL, + flags: Flags = Flags.NONE, +) -> ImageCmsTransform: + """ + (pyCMS) Builds an ICC transform mapping from the ``inputProfile`` to the + ``outputProfile``. Use applyTransform to apply the transform to a given + image. + + If the input or output profiles specified are not valid filenames, a + :exc:`PyCMSError` will be raised. If an error occurs during creation + of the transform, a :exc:`PyCMSError` will be raised. + + If ``inMode`` or ``outMode`` are not a mode supported by the ``outputProfile`` + (or by pyCMS), a :exc:`PyCMSError` will be raised. + + This function builds and returns an ICC transform from the ``inputProfile`` + to the ``outputProfile`` using the ``renderingIntent`` to determine what to do + with out-of-gamut colors. It will ONLY work for converting images that + are in ``inMode`` to images that are in ``outMode`` color format (PIL mode, + i.e. "RGB", "RGBA", "CMYK", etc.). + + Building the transform is a fair part of the overhead in + ImageCms.profileToProfile(), so if you're planning on converting multiple + images using the same input/output settings, this can save you time. + Once you have a transform object, it can be used with + ImageCms.applyProfile() to convert images without the need to re-compute + the lookup table for the transform. + + The reason pyCMS returns a class object rather than a handle directly + to the transform is that it needs to keep track of the PIL input/output + modes that the transform is meant for. These attributes are stored in + the ``inMode`` and ``outMode`` attributes of the object (which can be + manually overridden if you really want to, but I don't know of any + time that would be of use, or would even work). + + :param inputProfile: String, as a valid filename path to the ICC input + profile you wish to use for this transform, or a profile object + :param outputProfile: String, as a valid filename path to the ICC output + profile you wish to use for this transform, or a profile object + :param inMode: String, as a valid PIL mode that the appropriate profile + also supports (i.e. "RGB", "RGBA", "CMYK", etc.) + :param outMode: String, as a valid PIL mode that the appropriate profile + also supports (i.e. "RGB", "RGBA", "CMYK", etc.) + :param renderingIntent: Integer (0-3) specifying the rendering intent you + wish to use for the transform + + ImageCms.Intent.PERCEPTUAL = 0 (DEFAULT) + ImageCms.Intent.RELATIVE_COLORIMETRIC = 1 + ImageCms.Intent.SATURATION = 2 + ImageCms.Intent.ABSOLUTE_COLORIMETRIC = 3 + + see the pyCMS documentation for details on rendering intents and what + they do. + :param flags: Integer (0-...) specifying additional flags + :returns: A CmsTransform class object. + :exception PyCMSError: + """ + + if not isinstance(renderingIntent, int) or not (0 <= renderingIntent <= 3): + msg = "renderingIntent must be an integer between 0 and 3" + raise PyCMSError(msg) + + if not isinstance(flags, int) or not (0 <= flags <= _MAX_FLAG): + msg = f"flags must be an integer between 0 and {_MAX_FLAG}" + raise PyCMSError(msg) + + try: + if not isinstance(inputProfile, ImageCmsProfile): + inputProfile = ImageCmsProfile(inputProfile) + if not isinstance(outputProfile, ImageCmsProfile): + outputProfile = ImageCmsProfile(outputProfile) + return ImageCmsTransform( + inputProfile, outputProfile, inMode, outMode, renderingIntent, flags=flags + ) + except (OSError, TypeError, ValueError) as v: + raise PyCMSError(v) from v + + +def buildProofTransform( + inputProfile: _CmsProfileCompatible, + outputProfile: _CmsProfileCompatible, + proofProfile: _CmsProfileCompatible, + inMode: str, + outMode: str, + renderingIntent: Intent = Intent.PERCEPTUAL, + proofRenderingIntent: Intent = Intent.ABSOLUTE_COLORIMETRIC, + flags: Flags = Flags.SOFTPROOFING, +) -> ImageCmsTransform: + """ + (pyCMS) Builds an ICC transform mapping from the ``inputProfile`` to the + ``outputProfile``, but tries to simulate the result that would be + obtained on the ``proofProfile`` device. + + If the input, output, or proof profiles specified are not valid + filenames, a :exc:`PyCMSError` will be raised. + + If an error occurs during creation of the transform, + a :exc:`PyCMSError` will be raised. + + If ``inMode`` or ``outMode`` are not a mode supported by the ``outputProfile`` + (or by pyCMS), a :exc:`PyCMSError` will be raised. + + This function builds and returns an ICC transform from the ``inputProfile`` + to the ``outputProfile``, but tries to simulate the result that would be + obtained on the ``proofProfile`` device using ``renderingIntent`` and + ``proofRenderingIntent`` to determine what to do with out-of-gamut + colors. This is known as "soft-proofing". It will ONLY work for + converting images that are in ``inMode`` to images that are in outMode + color format (PIL mode, i.e. "RGB", "RGBA", "CMYK", etc.). + + Usage of the resulting transform object is exactly the same as with + ImageCms.buildTransform(). + + Proof profiling is generally used when using an output device to get a + good idea of what the final printed/displayed image would look like on + the ``proofProfile`` device when it's quicker and easier to use the + output device for judging color. Generally, this means that the + output device is a monitor, or a dye-sub printer (etc.), and the simulated + device is something more expensive, complicated, or time consuming + (making it difficult to make a real print for color judgement purposes). + + Soft-proofing basically functions by adjusting the colors on the + output device to match the colors of the device being simulated. However, + when the simulated device has a much wider gamut than the output + device, you may obtain marginal results. + + :param inputProfile: String, as a valid filename path to the ICC input + profile you wish to use for this transform, or a profile object + :param outputProfile: String, as a valid filename path to the ICC output + (monitor, usually) profile you wish to use for this transform, or a + profile object + :param proofProfile: String, as a valid filename path to the ICC proof + profile you wish to use for this transform, or a profile object + :param inMode: String, as a valid PIL mode that the appropriate profile + also supports (i.e. "RGB", "RGBA", "CMYK", etc.) + :param outMode: String, as a valid PIL mode that the appropriate profile + also supports (i.e. "RGB", "RGBA", "CMYK", etc.) + :param renderingIntent: Integer (0-3) specifying the rendering intent you + wish to use for the input->proof (simulated) transform + + ImageCms.Intent.PERCEPTUAL = 0 (DEFAULT) + ImageCms.Intent.RELATIVE_COLORIMETRIC = 1 + ImageCms.Intent.SATURATION = 2 + ImageCms.Intent.ABSOLUTE_COLORIMETRIC = 3 + + see the pyCMS documentation for details on rendering intents and what + they do. + :param proofRenderingIntent: Integer (0-3) specifying the rendering intent + you wish to use for proof->output transform + + ImageCms.Intent.PERCEPTUAL = 0 (DEFAULT) + ImageCms.Intent.RELATIVE_COLORIMETRIC = 1 + ImageCms.Intent.SATURATION = 2 + ImageCms.Intent.ABSOLUTE_COLORIMETRIC = 3 + + see the pyCMS documentation for details on rendering intents and what + they do. + :param flags: Integer (0-...) specifying additional flags + :returns: A CmsTransform class object. + :exception PyCMSError: + """ + + if not isinstance(renderingIntent, int) or not (0 <= renderingIntent <= 3): + msg = "renderingIntent must be an integer between 0 and 3" + raise PyCMSError(msg) + + if not isinstance(flags, int) or not (0 <= flags <= _MAX_FLAG): + msg = f"flags must be an integer between 0 and {_MAX_FLAG}" + raise PyCMSError(msg) + + try: + if not isinstance(inputProfile, ImageCmsProfile): + inputProfile = ImageCmsProfile(inputProfile) + if not isinstance(outputProfile, ImageCmsProfile): + outputProfile = ImageCmsProfile(outputProfile) + if not isinstance(proofProfile, ImageCmsProfile): + proofProfile = ImageCmsProfile(proofProfile) + return ImageCmsTransform( + inputProfile, + outputProfile, + inMode, + outMode, + renderingIntent, + proofProfile, + proofRenderingIntent, + flags, + ) + except (OSError, TypeError, ValueError) as v: + raise PyCMSError(v) from v + + +buildTransformFromOpenProfiles = buildTransform +buildProofTransformFromOpenProfiles = buildProofTransform + + +def applyTransform( + im: Image.Image, transform: ImageCmsTransform, inPlace: bool = False +) -> Image.Image | None: + """ + (pyCMS) Applies a transform to a given image. + + If ``im.mode != transform.input_mode``, a :exc:`PyCMSError` is raised. + + If ``inPlace`` is ``True`` and ``transform.input_mode != transform.output_mode``, a + :exc:`PyCMSError` is raised. + + If ``im.mode``, ``transform.input_mode`` or ``transform.output_mode`` is not + supported by pyCMSdll or the profiles you used for the transform, a + :exc:`PyCMSError` is raised. + + If an error occurs while the transform is being applied, + a :exc:`PyCMSError` is raised. + + This function applies a pre-calculated transform (from + ImageCms.buildTransform() or ImageCms.buildTransformFromOpenProfiles()) + to an image. The transform can be used for multiple images, saving + considerable calculation time if doing the same conversion multiple times. + + If you want to modify im in-place instead of receiving a new image as + the return value, set ``inPlace`` to ``True``. This can only be done if + ``transform.input_mode`` and ``transform.output_mode`` are the same, because we + can't change the mode in-place (the buffer sizes for some modes are + different). The default behavior is to return a new :py:class:`~PIL.Image.Image` + object of the same dimensions in mode ``transform.output_mode``. + + :param im: An :py:class:`~PIL.Image.Image` object, and ``im.mode`` must be the same + as the ``input_mode`` supported by the transform. + :param transform: A valid CmsTransform class object + :param inPlace: Bool. If ``True``, ``im`` is modified in place and ``None`` is + returned, if ``False``, a new :py:class:`~PIL.Image.Image` object with the + transform applied is returned (and ``im`` is not changed). The default is + ``False``. + :returns: Either ``None``, or a new :py:class:`~PIL.Image.Image` object, + depending on the value of ``inPlace``. The profile will be returned in + the image's ``info['icc_profile']``. + :exception PyCMSError: + """ + + try: + if inPlace: + transform.apply_in_place(im) + imOut = None + else: + imOut = transform.apply(im) + except (TypeError, ValueError) as v: + raise PyCMSError(v) from v + + return imOut + + +def createProfile( + colorSpace: Literal["LAB", "XYZ", "sRGB"], colorTemp: SupportsFloat = 0 +) -> core.CmsProfile: + """ + (pyCMS) Creates a profile. + + If colorSpace not in ``["LAB", "XYZ", "sRGB"]``, + a :exc:`PyCMSError` is raised. + + If using LAB and ``colorTemp`` is not a positive integer, + a :exc:`PyCMSError` is raised. + + If an error occurs while creating the profile, + a :exc:`PyCMSError` is raised. + + Use this function to create common profiles on-the-fly instead of + having to supply a profile on disk and knowing the path to it. It + returns a normal CmsProfile object that can be passed to + ImageCms.buildTransformFromOpenProfiles() to create a transform to apply + to images. + + :param colorSpace: String, the color space of the profile you wish to + create. + Currently only "LAB", "XYZ", and "sRGB" are supported. + :param colorTemp: Positive number for the white point for the profile, in + degrees Kelvin (i.e. 5000, 6500, 9600, etc.). The default is for D50 + illuminant if omitted (5000k). colorTemp is ONLY applied to LAB + profiles, and is ignored for XYZ and sRGB. + :returns: A CmsProfile class object + :exception PyCMSError: + """ + + if colorSpace not in ["LAB", "XYZ", "sRGB"]: + msg = ( + f"Color space not supported for on-the-fly profile creation ({colorSpace})" + ) + raise PyCMSError(msg) + + if colorSpace == "LAB": + try: + colorTemp = float(colorTemp) + except (TypeError, ValueError) as e: + msg = f'Color temperature must be numeric, "{colorTemp}" not valid' + raise PyCMSError(msg) from e + + try: + return core.createProfile(colorSpace, colorTemp) + except (TypeError, ValueError) as v: + raise PyCMSError(v) from v + + +def getProfileName(profile: _CmsProfileCompatible) -> str: + """ + + (pyCMS) Gets the internal product name for the given profile. + + If ``profile`` isn't a valid CmsProfile object or filename to a profile, + a :exc:`PyCMSError` is raised If an error occurs while trying + to obtain the name tag, a :exc:`PyCMSError` is raised. + + Use this function to obtain the INTERNAL name of the profile (stored + in an ICC tag in the profile itself), usually the one used when the + profile was originally created. Sometimes this tag also contains + additional information supplied by the creator. + + :param profile: EITHER a valid CmsProfile object, OR a string of the + filename of an ICC profile. + :returns: A string containing the internal name of the profile as stored + in an ICC tag. + :exception PyCMSError: + """ + + try: + # add an extra newline to preserve pyCMS compatibility + if not isinstance(profile, ImageCmsProfile): + profile = ImageCmsProfile(profile) + # do it in python, not c. + # // name was "%s - %s" (model, manufacturer) || Description , + # // but if the Model and Manufacturer were the same or the model + # // was long, Just the model, in 1.x + model = profile.profile.model + manufacturer = profile.profile.manufacturer + + if not (model or manufacturer): + return (profile.profile.profile_description or "") + "\n" + if not manufacturer or (model and len(model) > 30): + return f"{model}\n" + return f"{model} - {manufacturer}\n" + + except (AttributeError, OSError, TypeError, ValueError) as v: + raise PyCMSError(v) from v + + +def getProfileInfo(profile: _CmsProfileCompatible) -> str: + """ + (pyCMS) Gets the internal product information for the given profile. + + If ``profile`` isn't a valid CmsProfile object or filename to a profile, + a :exc:`PyCMSError` is raised. + + If an error occurs while trying to obtain the info tag, + a :exc:`PyCMSError` is raised. + + Use this function to obtain the information stored in the profile's + info tag. This often contains details about the profile, and how it + was created, as supplied by the creator. + + :param profile: EITHER a valid CmsProfile object, OR a string of the + filename of an ICC profile. + :returns: A string containing the internal profile information stored in + an ICC tag. + :exception PyCMSError: + """ + + try: + if not isinstance(profile, ImageCmsProfile): + profile = ImageCmsProfile(profile) + # add an extra newline to preserve pyCMS compatibility + # Python, not C. the white point bits weren't working well, + # so skipping. + # info was description \r\n\r\n copyright \r\n\r\n K007 tag \r\n\r\n whitepoint + description = profile.profile.profile_description + cpright = profile.profile.copyright + elements = [element for element in (description, cpright) if element] + return "\r\n\r\n".join(elements) + "\r\n\r\n" + + except (AttributeError, OSError, TypeError, ValueError) as v: + raise PyCMSError(v) from v + + +def getProfileCopyright(profile: _CmsProfileCompatible) -> str: + """ + (pyCMS) Gets the copyright for the given profile. + + If ``profile`` isn't a valid CmsProfile object or filename to a profile, a + :exc:`PyCMSError` is raised. + + If an error occurs while trying to obtain the copyright tag, + a :exc:`PyCMSError` is raised. + + Use this function to obtain the information stored in the profile's + copyright tag. + + :param profile: EITHER a valid CmsProfile object, OR a string of the + filename of an ICC profile. + :returns: A string containing the internal profile information stored in + an ICC tag. + :exception PyCMSError: + """ + try: + # add an extra newline to preserve pyCMS compatibility + if not isinstance(profile, ImageCmsProfile): + profile = ImageCmsProfile(profile) + return (profile.profile.copyright or "") + "\n" + except (AttributeError, OSError, TypeError, ValueError) as v: + raise PyCMSError(v) from v + + +def getProfileManufacturer(profile: _CmsProfileCompatible) -> str: + """ + (pyCMS) Gets the manufacturer for the given profile. + + If ``profile`` isn't a valid CmsProfile object or filename to a profile, a + :exc:`PyCMSError` is raised. + + If an error occurs while trying to obtain the manufacturer tag, a + :exc:`PyCMSError` is raised. + + Use this function to obtain the information stored in the profile's + manufacturer tag. + + :param profile: EITHER a valid CmsProfile object, OR a string of the + filename of an ICC profile. + :returns: A string containing the internal profile information stored in + an ICC tag. + :exception PyCMSError: + """ + try: + # add an extra newline to preserve pyCMS compatibility + if not isinstance(profile, ImageCmsProfile): + profile = ImageCmsProfile(profile) + return (profile.profile.manufacturer or "") + "\n" + except (AttributeError, OSError, TypeError, ValueError) as v: + raise PyCMSError(v) from v + + +def getProfileModel(profile: _CmsProfileCompatible) -> str: + """ + (pyCMS) Gets the model for the given profile. + + If ``profile`` isn't a valid CmsProfile object or filename to a profile, a + :exc:`PyCMSError` is raised. + + If an error occurs while trying to obtain the model tag, + a :exc:`PyCMSError` is raised. + + Use this function to obtain the information stored in the profile's + model tag. + + :param profile: EITHER a valid CmsProfile object, OR a string of the + filename of an ICC profile. + :returns: A string containing the internal profile information stored in + an ICC tag. + :exception PyCMSError: + """ + + try: + # add an extra newline to preserve pyCMS compatibility + if not isinstance(profile, ImageCmsProfile): + profile = ImageCmsProfile(profile) + return (profile.profile.model or "") + "\n" + except (AttributeError, OSError, TypeError, ValueError) as v: + raise PyCMSError(v) from v + + +def getProfileDescription(profile: _CmsProfileCompatible) -> str: + """ + (pyCMS) Gets the description for the given profile. + + If ``profile`` isn't a valid CmsProfile object or filename to a profile, a + :exc:`PyCMSError` is raised. + + If an error occurs while trying to obtain the description tag, + a :exc:`PyCMSError` is raised. + + Use this function to obtain the information stored in the profile's + description tag. + + :param profile: EITHER a valid CmsProfile object, OR a string of the + filename of an ICC profile. + :returns: A string containing the internal profile information stored in an + ICC tag. + :exception PyCMSError: + """ + + try: + # add an extra newline to preserve pyCMS compatibility + if not isinstance(profile, ImageCmsProfile): + profile = ImageCmsProfile(profile) + return (profile.profile.profile_description or "") + "\n" + except (AttributeError, OSError, TypeError, ValueError) as v: + raise PyCMSError(v) from v + + +def getDefaultIntent(profile: _CmsProfileCompatible) -> int: + """ + (pyCMS) Gets the default intent name for the given profile. + + If ``profile`` isn't a valid CmsProfile object or filename to a profile, a + :exc:`PyCMSError` is raised. + + If an error occurs while trying to obtain the default intent, a + :exc:`PyCMSError` is raised. + + Use this function to determine the default (and usually best optimized) + rendering intent for this profile. Most profiles support multiple + rendering intents, but are intended mostly for one type of conversion. + If you wish to use a different intent than returned, use + ImageCms.isIntentSupported() to verify it will work first. + + :param profile: EITHER a valid CmsProfile object, OR a string of the + filename of an ICC profile. + :returns: Integer 0-3 specifying the default rendering intent for this + profile. + + ImageCms.Intent.PERCEPTUAL = 0 (DEFAULT) + ImageCms.Intent.RELATIVE_COLORIMETRIC = 1 + ImageCms.Intent.SATURATION = 2 + ImageCms.Intent.ABSOLUTE_COLORIMETRIC = 3 + + see the pyCMS documentation for details on rendering intents and what + they do. + :exception PyCMSError: + """ + + try: + if not isinstance(profile, ImageCmsProfile): + profile = ImageCmsProfile(profile) + return profile.profile.rendering_intent + except (AttributeError, OSError, TypeError, ValueError) as v: + raise PyCMSError(v) from v + + +def isIntentSupported( + profile: _CmsProfileCompatible, intent: Intent, direction: Direction +) -> Literal[-1, 1]: + """ + (pyCMS) Checks if a given intent is supported. + + Use this function to verify that you can use your desired + ``intent`` with ``profile``, and that ``profile`` can be used for the + input/output/proof profile as you desire. + + Some profiles are created specifically for one "direction", can cannot + be used for others. Some profiles can only be used for certain + rendering intents, so it's best to either verify this before trying + to create a transform with them (using this function), or catch the + potential :exc:`PyCMSError` that will occur if they don't + support the modes you select. + + :param profile: EITHER a valid CmsProfile object, OR a string of the + filename of an ICC profile. + :param intent: Integer (0-3) specifying the rendering intent you wish to + use with this profile + + ImageCms.Intent.PERCEPTUAL = 0 (DEFAULT) + ImageCms.Intent.RELATIVE_COLORIMETRIC = 1 + ImageCms.Intent.SATURATION = 2 + ImageCms.Intent.ABSOLUTE_COLORIMETRIC = 3 + + see the pyCMS documentation for details on rendering intents and what + they do. + :param direction: Integer specifying if the profile is to be used for + input, output, or proof + + INPUT = 0 (or use ImageCms.Direction.INPUT) + OUTPUT = 1 (or use ImageCms.Direction.OUTPUT) + PROOF = 2 (or use ImageCms.Direction.PROOF) + + :returns: 1 if the intent/direction are supported, -1 if they are not. + :exception PyCMSError: + """ + + try: + if not isinstance(profile, ImageCmsProfile): + profile = ImageCmsProfile(profile) + # FIXME: I get different results for the same data w. different + # compilers. Bug in LittleCMS or in the binding? + if profile.profile.is_intent_supported(intent, direction): + return 1 + else: + return -1 + except (AttributeError, OSError, TypeError, ValueError) as v: + raise PyCMSError(v) from v diff --git a/Python/venv/lib/python3.12/site-packages/PIL/ImageColor.py b/Python/venv/lib/python3.12/site-packages/PIL/ImageColor.py new file mode 100644 index 0000000..9a15a8e --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/ImageColor.py @@ -0,0 +1,320 @@ +# +# The Python Imaging Library +# $Id$ +# +# map CSS3-style colour description strings to RGB +# +# History: +# 2002-10-24 fl Added support for CSS-style color strings +# 2002-12-15 fl Added RGBA support +# 2004-03-27 fl Fixed remaining int() problems for Python 1.5.2 +# 2004-07-19 fl Fixed gray/grey spelling issues +# 2009-03-05 fl Fixed rounding error in grayscale calculation +# +# Copyright (c) 2002-2004 by Secret Labs AB +# Copyright (c) 2002-2004 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import re +from functools import lru_cache + +from . import Image + + +@lru_cache +def getrgb(color: str) -> tuple[int, int, int] | tuple[int, int, int, int]: + """ + Convert a color string to an RGB or RGBA tuple. If the string cannot be + parsed, this function raises a :py:exc:`ValueError` exception. + + .. versionadded:: 1.1.4 + + :param color: A color string + :return: ``(red, green, blue[, alpha])`` + """ + if len(color) > 100: + msg = "color specifier is too long" + raise ValueError(msg) + color = color.lower() + + rgb = colormap.get(color, None) + if rgb: + if isinstance(rgb, tuple): + return rgb + rgb_tuple = getrgb(rgb) + assert len(rgb_tuple) == 3 + colormap[color] = rgb_tuple + return rgb_tuple + + # check for known string formats + if re.match("#[a-f0-9]{3}$", color): + return int(color[1] * 2, 16), int(color[2] * 2, 16), int(color[3] * 2, 16) + + if re.match("#[a-f0-9]{4}$", color): + return ( + int(color[1] * 2, 16), + int(color[2] * 2, 16), + int(color[3] * 2, 16), + int(color[4] * 2, 16), + ) + + if re.match("#[a-f0-9]{6}$", color): + return int(color[1:3], 16), int(color[3:5], 16), int(color[5:7], 16) + + if re.match("#[a-f0-9]{8}$", color): + return ( + int(color[1:3], 16), + int(color[3:5], 16), + int(color[5:7], 16), + int(color[7:9], 16), + ) + + m = re.match(r"rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$", color) + if m: + return int(m.group(1)), int(m.group(2)), int(m.group(3)) + + m = re.match(r"rgb\(\s*(\d+)%\s*,\s*(\d+)%\s*,\s*(\d+)%\s*\)$", color) + if m: + return ( + int((int(m.group(1)) * 255) / 100.0 + 0.5), + int((int(m.group(2)) * 255) / 100.0 + 0.5), + int((int(m.group(3)) * 255) / 100.0 + 0.5), + ) + + m = re.match( + r"hsl\(\s*(\d+\.?\d*)\s*,\s*(\d+\.?\d*)%\s*,\s*(\d+\.?\d*)%\s*\)$", color + ) + if m: + from colorsys import hls_to_rgb + + rgb_floats = hls_to_rgb( + float(m.group(1)) / 360.0, + float(m.group(3)) / 100.0, + float(m.group(2)) / 100.0, + ) + return ( + int(rgb_floats[0] * 255 + 0.5), + int(rgb_floats[1] * 255 + 0.5), + int(rgb_floats[2] * 255 + 0.5), + ) + + m = re.match( + r"hs[bv]\(\s*(\d+\.?\d*)\s*,\s*(\d+\.?\d*)%\s*,\s*(\d+\.?\d*)%\s*\)$", color + ) + if m: + from colorsys import hsv_to_rgb + + rgb_floats = hsv_to_rgb( + float(m.group(1)) / 360.0, + float(m.group(2)) / 100.0, + float(m.group(3)) / 100.0, + ) + return ( + int(rgb_floats[0] * 255 + 0.5), + int(rgb_floats[1] * 255 + 0.5), + int(rgb_floats[2] * 255 + 0.5), + ) + + m = re.match(r"rgba\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$", color) + if m: + return int(m.group(1)), int(m.group(2)), int(m.group(3)), int(m.group(4)) + msg = f"unknown color specifier: {repr(color)}" + raise ValueError(msg) + + +@lru_cache +def getcolor(color: str, mode: str) -> int | tuple[int, ...]: + """ + Same as :py:func:`~PIL.ImageColor.getrgb` for most modes. However, if + ``mode`` is HSV, converts the RGB value to a HSV value, or if ``mode`` is + not color or a palette image, converts the RGB value to a grayscale value. + If the string cannot be parsed, this function raises a :py:exc:`ValueError` + exception. + + .. versionadded:: 1.1.4 + + :param color: A color string + :param mode: Convert result to this mode + :return: ``graylevel, (graylevel, alpha) or (red, green, blue[, alpha])`` + """ + # same as getrgb, but converts the result to the given mode + rgb, alpha = getrgb(color), 255 + if len(rgb) == 4: + alpha = rgb[3] + rgb = rgb[:3] + + if mode == "HSV": + from colorsys import rgb_to_hsv + + r, g, b = rgb + h, s, v = rgb_to_hsv(r / 255, g / 255, b / 255) + return int(h * 255), int(s * 255), int(v * 255) + elif Image.getmodebase(mode) == "L": + r, g, b = rgb + # ITU-R Recommendation 601-2 for nonlinear RGB + # scaled to 24 bits to match the convert's implementation. + graylevel = (r * 19595 + g * 38470 + b * 7471 + 0x8000) >> 16 + if mode[-1] == "A": + return graylevel, alpha + return graylevel + elif mode[-1] == "A": + return rgb + (alpha,) + return rgb + + +colormap: dict[str, str | tuple[int, int, int]] = { + # X11 colour table from https://drafts.csswg.org/css-color-4/, with + # gray/grey spelling issues fixed. This is a superset of HTML 4.0 + # colour names used in CSS 1. + "aliceblue": "#f0f8ff", + "antiquewhite": "#faebd7", + "aqua": "#00ffff", + "aquamarine": "#7fffd4", + "azure": "#f0ffff", + "beige": "#f5f5dc", + "bisque": "#ffe4c4", + "black": "#000000", + "blanchedalmond": "#ffebcd", + "blue": "#0000ff", + "blueviolet": "#8a2be2", + "brown": "#a52a2a", + "burlywood": "#deb887", + "cadetblue": "#5f9ea0", + "chartreuse": "#7fff00", + "chocolate": "#d2691e", + "coral": "#ff7f50", + "cornflowerblue": "#6495ed", + "cornsilk": "#fff8dc", + "crimson": "#dc143c", + "cyan": "#00ffff", + "darkblue": "#00008b", + "darkcyan": "#008b8b", + "darkgoldenrod": "#b8860b", + "darkgray": "#a9a9a9", + "darkgrey": "#a9a9a9", + "darkgreen": "#006400", + "darkkhaki": "#bdb76b", + "darkmagenta": "#8b008b", + "darkolivegreen": "#556b2f", + "darkorange": "#ff8c00", + "darkorchid": "#9932cc", + "darkred": "#8b0000", + "darksalmon": "#e9967a", + "darkseagreen": "#8fbc8f", + "darkslateblue": "#483d8b", + "darkslategray": "#2f4f4f", + "darkslategrey": "#2f4f4f", + "darkturquoise": "#00ced1", + "darkviolet": "#9400d3", + "deeppink": "#ff1493", + "deepskyblue": "#00bfff", + "dimgray": "#696969", + "dimgrey": "#696969", + "dodgerblue": "#1e90ff", + "firebrick": "#b22222", + "floralwhite": "#fffaf0", + "forestgreen": "#228b22", + "fuchsia": "#ff00ff", + "gainsboro": "#dcdcdc", + "ghostwhite": "#f8f8ff", + "gold": "#ffd700", + "goldenrod": "#daa520", + "gray": "#808080", + "grey": "#808080", + "green": "#008000", + "greenyellow": "#adff2f", + "honeydew": "#f0fff0", + "hotpink": "#ff69b4", + "indianred": "#cd5c5c", + "indigo": "#4b0082", + "ivory": "#fffff0", + "khaki": "#f0e68c", + "lavender": "#e6e6fa", + "lavenderblush": "#fff0f5", + "lawngreen": "#7cfc00", + "lemonchiffon": "#fffacd", + "lightblue": "#add8e6", + "lightcoral": "#f08080", + "lightcyan": "#e0ffff", + "lightgoldenrodyellow": "#fafad2", + "lightgreen": "#90ee90", + "lightgray": "#d3d3d3", + "lightgrey": "#d3d3d3", + "lightpink": "#ffb6c1", + "lightsalmon": "#ffa07a", + "lightseagreen": "#20b2aa", + "lightskyblue": "#87cefa", + "lightslategray": "#778899", + "lightslategrey": "#778899", + "lightsteelblue": "#b0c4de", + "lightyellow": "#ffffe0", + "lime": "#00ff00", + "limegreen": "#32cd32", + "linen": "#faf0e6", + "magenta": "#ff00ff", + "maroon": "#800000", + "mediumaquamarine": "#66cdaa", + "mediumblue": "#0000cd", + "mediumorchid": "#ba55d3", + "mediumpurple": "#9370db", + "mediumseagreen": "#3cb371", + "mediumslateblue": "#7b68ee", + "mediumspringgreen": "#00fa9a", + "mediumturquoise": "#48d1cc", + "mediumvioletred": "#c71585", + "midnightblue": "#191970", + "mintcream": "#f5fffa", + "mistyrose": "#ffe4e1", + "moccasin": "#ffe4b5", + "navajowhite": "#ffdead", + "navy": "#000080", + "oldlace": "#fdf5e6", + "olive": "#808000", + "olivedrab": "#6b8e23", + "orange": "#ffa500", + "orangered": "#ff4500", + "orchid": "#da70d6", + "palegoldenrod": "#eee8aa", + "palegreen": "#98fb98", + "paleturquoise": "#afeeee", + "palevioletred": "#db7093", + "papayawhip": "#ffefd5", + "peachpuff": "#ffdab9", + "peru": "#cd853f", + "pink": "#ffc0cb", + "plum": "#dda0dd", + "powderblue": "#b0e0e6", + "purple": "#800080", + "rebeccapurple": "#663399", + "red": "#ff0000", + "rosybrown": "#bc8f8f", + "royalblue": "#4169e1", + "saddlebrown": "#8b4513", + "salmon": "#fa8072", + "sandybrown": "#f4a460", + "seagreen": "#2e8b57", + "seashell": "#fff5ee", + "sienna": "#a0522d", + "silver": "#c0c0c0", + "skyblue": "#87ceeb", + "slateblue": "#6a5acd", + "slategray": "#708090", + "slategrey": "#708090", + "snow": "#fffafa", + "springgreen": "#00ff7f", + "steelblue": "#4682b4", + "tan": "#d2b48c", + "teal": "#008080", + "thistle": "#d8bfd8", + "tomato": "#ff6347", + "turquoise": "#40e0d0", + "violet": "#ee82ee", + "wheat": "#f5deb3", + "white": "#ffffff", + "whitesmoke": "#f5f5f5", + "yellow": "#ffff00", + "yellowgreen": "#9acd32", +} diff --git a/Python/venv/lib/python3.12/site-packages/PIL/ImageDraw.py b/Python/venv/lib/python3.12/site-packages/PIL/ImageDraw.py new file mode 100644 index 0000000..9b0864d --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/ImageDraw.py @@ -0,0 +1,1035 @@ +# +# The Python Imaging Library +# $Id$ +# +# drawing interface operations +# +# History: +# 1996-04-13 fl Created (experimental) +# 1996-08-07 fl Filled polygons, ellipses. +# 1996-08-13 fl Added text support +# 1998-06-28 fl Handle I and F images +# 1998-12-29 fl Added arc; use arc primitive to draw ellipses +# 1999-01-10 fl Added shape stuff (experimental) +# 1999-02-06 fl Added bitmap support +# 1999-02-11 fl Changed all primitives to take options +# 1999-02-20 fl Fixed backwards compatibility +# 2000-10-12 fl Copy on write, when necessary +# 2001-02-18 fl Use default ink for bitmap/text also in fill mode +# 2002-10-24 fl Added support for CSS-style color strings +# 2002-12-10 fl Added experimental support for RGBA-on-RGB drawing +# 2002-12-11 fl Refactored low-level drawing API (work in progress) +# 2004-08-26 fl Made Draw() a factory function, added getdraw() support +# 2004-09-04 fl Added width support to line primitive +# 2004-09-10 fl Added font mode handling +# 2006-06-19 fl Added font bearing support (getmask2) +# +# Copyright (c) 1997-2006 by Secret Labs AB +# Copyright (c) 1996-2006 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import math +import struct +from collections.abc import Sequence +from typing import cast + +from . import Image, ImageColor, ImageText + +TYPE_CHECKING = False +if TYPE_CHECKING: + from collections.abc import Callable + from types import ModuleType + from typing import Any, AnyStr + + from . import ImageDraw2, ImageFont + from ._typing import Coords, _Ink + +# experimental access to the outline API +Outline: Callable[[], Image.core._Outline] = Image.core.outline + +""" +A simple 2D drawing interface for PIL images. +

+Application code should use the Draw factory, instead of +directly. +""" + + +class ImageDraw: + font: ( + ImageFont.ImageFont | ImageFont.FreeTypeFont | ImageFont.TransposedFont | None + ) = None + + def __init__(self, im: Image.Image, mode: str | None = None) -> None: + """ + Create a drawing instance. + + :param im: The image to draw in. + :param mode: Optional mode to use for color values. For RGB + images, this argument can be RGB or RGBA (to blend the + drawing into the image). For all other modes, this argument + must be the same as the image mode. If omitted, the mode + defaults to the mode of the image. + """ + im._ensure_mutable() + blend = 0 + if mode is None: + mode = im.mode + if mode != im.mode: + if mode == "RGBA" and im.mode == "RGB": + blend = 1 + else: + msg = "mode mismatch" + raise ValueError(msg) + if mode == "P": + self.palette = im.palette + else: + self.palette = None + self._image = im + self.im = im.im + self.draw = Image.core.draw(self.im, blend) + self.mode = mode + if mode in ("I", "F"): + self.ink = self.draw.draw_ink(1) + else: + self.ink = self.draw.draw_ink(-1) + if mode in ("1", "P", "I", "F"): + # FIXME: fix Fill2 to properly support matte for I+F images + self.fontmode = "1" + else: + self.fontmode = "L" # aliasing is okay for other modes + self.fill = False + + def getfont( + self, + ) -> ImageFont.ImageFont | ImageFont.FreeTypeFont | ImageFont.TransposedFont: + """ + Get the current default font. + + To set the default font for this ImageDraw instance:: + + from PIL import ImageDraw, ImageFont + draw.font = ImageFont.truetype("Tests/fonts/FreeMono.ttf") + + To set the default font for all future ImageDraw instances:: + + from PIL import ImageDraw, ImageFont + ImageDraw.ImageDraw.font = ImageFont.truetype("Tests/fonts/FreeMono.ttf") + + If the current default font is ``None``, + it is initialized with ``ImageFont.load_default()``. + + :returns: An image font.""" + if not self.font: + # FIXME: should add a font repository + from . import ImageFont + + self.font = ImageFont.load_default() + return self.font + + def _getfont( + self, font_size: float | None + ) -> ImageFont.ImageFont | ImageFont.FreeTypeFont | ImageFont.TransposedFont: + if font_size is not None: + from . import ImageFont + + return ImageFont.load_default(font_size) + else: + return self.getfont() + + def _getink( + self, ink: _Ink | None, fill: _Ink | None = None + ) -> tuple[int | None, int | None]: + result_ink = None + result_fill = None + if ink is None and fill is None: + if self.fill: + result_fill = self.ink + else: + result_ink = self.ink + else: + if ink is not None: + if isinstance(ink, str): + ink = ImageColor.getcolor(ink, self.mode) + if self.palette and isinstance(ink, tuple): + ink = self.palette.getcolor(ink, self._image) + result_ink = self.draw.draw_ink(ink) + if fill is not None: + if isinstance(fill, str): + fill = ImageColor.getcolor(fill, self.mode) + if self.palette and isinstance(fill, tuple): + fill = self.palette.getcolor(fill, self._image) + result_fill = self.draw.draw_ink(fill) + return result_ink, result_fill + + def arc( + self, + xy: Coords, + start: float, + end: float, + fill: _Ink | None = None, + width: int = 1, + ) -> None: + """Draw an arc.""" + ink, fill = self._getink(fill) + if ink is not None: + self.draw.draw_arc(xy, start, end, ink, width) + + def bitmap( + self, xy: Sequence[int], bitmap: Image.Image, fill: _Ink | None = None + ) -> None: + """Draw a bitmap.""" + bitmap.load() + ink, fill = self._getink(fill) + if ink is None: + ink = fill + if ink is not None: + self.draw.draw_bitmap(xy, bitmap.im, ink) + + def chord( + self, + xy: Coords, + start: float, + end: float, + fill: _Ink | None = None, + outline: _Ink | None = None, + width: int = 1, + ) -> None: + """Draw a chord.""" + ink, fill_ink = self._getink(outline, fill) + if fill_ink is not None: + self.draw.draw_chord(xy, start, end, fill_ink, 1) + if ink is not None and ink != fill_ink and width != 0: + self.draw.draw_chord(xy, start, end, ink, 0, width) + + def ellipse( + self, + xy: Coords, + fill: _Ink | None = None, + outline: _Ink | None = None, + width: int = 1, + ) -> None: + """Draw an ellipse.""" + ink, fill_ink = self._getink(outline, fill) + if fill_ink is not None: + self.draw.draw_ellipse(xy, fill_ink, 1) + if ink is not None and ink != fill_ink and width != 0: + self.draw.draw_ellipse(xy, ink, 0, width) + + def circle( + self, + xy: Sequence[float], + radius: float, + fill: _Ink | None = None, + outline: _Ink | None = None, + width: int = 1, + ) -> None: + """Draw a circle given center coordinates and a radius.""" + ellipse_xy = (xy[0] - radius, xy[1] - radius, xy[0] + radius, xy[1] + radius) + self.ellipse(ellipse_xy, fill, outline, width) + + def line( + self, + xy: Coords, + fill: _Ink | None = None, + width: int = 0, + joint: str | None = None, + ) -> None: + """Draw a line, or a connected sequence of line segments.""" + ink = self._getink(fill)[0] + if ink is not None: + self.draw.draw_lines(xy, ink, width) + if joint == "curve" and width > 4: + points: Sequence[Sequence[float]] + if isinstance(xy[0], (list, tuple)): + points = cast(Sequence[Sequence[float]], xy) + else: + points = [ + cast(Sequence[float], tuple(xy[i : i + 2])) + for i in range(0, len(xy), 2) + ] + for i in range(1, len(points) - 1): + point = points[i] + angles = [ + math.degrees(math.atan2(end[0] - start[0], start[1] - end[1])) + % 360 + for start, end in ( + (points[i - 1], point), + (point, points[i + 1]), + ) + ] + if angles[0] == angles[1]: + # This is a straight line, so no joint is required + continue + + def coord_at_angle( + coord: Sequence[float], angle: float + ) -> tuple[float, ...]: + x, y = coord + angle -= 90 + distance = width / 2 - 1 + return tuple( + p + (math.floor(p_d) if p_d > 0 else math.ceil(p_d)) + for p, p_d in ( + (x, distance * math.cos(math.radians(angle))), + (y, distance * math.sin(math.radians(angle))), + ) + ) + + flipped = ( + angles[1] > angles[0] and angles[1] - 180 > angles[0] + ) or (angles[1] < angles[0] and angles[1] + 180 > angles[0]) + coords = [ + (point[0] - width / 2 + 1, point[1] - width / 2 + 1), + (point[0] + width / 2 - 1, point[1] + width / 2 - 1), + ] + if flipped: + start, end = (angles[1] + 90, angles[0] + 90) + else: + start, end = (angles[0] - 90, angles[1] - 90) + self.pieslice(coords, start - 90, end - 90, fill) + + if width > 8: + # Cover potential gaps between the line and the joint + if flipped: + gap_coords = [ + coord_at_angle(point, angles[0] + 90), + point, + coord_at_angle(point, angles[1] + 90), + ] + else: + gap_coords = [ + coord_at_angle(point, angles[0] - 90), + point, + coord_at_angle(point, angles[1] - 90), + ] + self.line(gap_coords, fill, width=3) + + def shape( + self, + shape: Image.core._Outline, + fill: _Ink | None = None, + outline: _Ink | None = None, + ) -> None: + """(Experimental) Draw a shape.""" + shape.close() + ink, fill_ink = self._getink(outline, fill) + if fill_ink is not None: + self.draw.draw_outline(shape, fill_ink, 1) + if ink is not None and ink != fill_ink: + self.draw.draw_outline(shape, ink, 0) + + def pieslice( + self, + xy: Coords, + start: float, + end: float, + fill: _Ink | None = None, + outline: _Ink | None = None, + width: int = 1, + ) -> None: + """Draw a pieslice.""" + ink, fill_ink = self._getink(outline, fill) + if fill_ink is not None: + self.draw.draw_pieslice(xy, start, end, fill_ink, 1) + if ink is not None and ink != fill_ink and width != 0: + self.draw.draw_pieslice(xy, start, end, ink, 0, width) + + def point(self, xy: Coords, fill: _Ink | None = None) -> None: + """Draw one or more individual pixels.""" + ink, fill = self._getink(fill) + if ink is not None: + self.draw.draw_points(xy, ink) + + def polygon( + self, + xy: Coords, + fill: _Ink | None = None, + outline: _Ink | None = None, + width: int = 1, + ) -> None: + """Draw a polygon.""" + ink, fill_ink = self._getink(outline, fill) + if fill_ink is not None: + self.draw.draw_polygon(xy, fill_ink, 1) + if ink is not None and ink != fill_ink and width != 0: + if width == 1: + self.draw.draw_polygon(xy, ink, 0, width) + elif self.im is not None: + # To avoid expanding the polygon outwards, + # use the fill as a mask + mask = Image.new("1", self.im.size) + mask_ink = self._getink(1)[0] + draw = Draw(mask) + draw.draw.draw_polygon(xy, mask_ink, 1) + + self.draw.draw_polygon(xy, ink, 0, width * 2 - 1, mask.im) + + def regular_polygon( + self, + bounding_circle: Sequence[Sequence[float] | float], + n_sides: int, + rotation: float = 0, + fill: _Ink | None = None, + outline: _Ink | None = None, + width: int = 1, + ) -> None: + """Draw a regular polygon.""" + xy = _compute_regular_polygon_vertices(bounding_circle, n_sides, rotation) + self.polygon(xy, fill, outline, width) + + def rectangle( + self, + xy: Coords, + fill: _Ink | None = None, + outline: _Ink | None = None, + width: int = 1, + ) -> None: + """Draw a rectangle.""" + ink, fill_ink = self._getink(outline, fill) + if fill_ink is not None: + self.draw.draw_rectangle(xy, fill_ink, 1) + if ink is not None and ink != fill_ink and width != 0: + self.draw.draw_rectangle(xy, ink, 0, width) + + def rounded_rectangle( + self, + xy: Coords, + radius: float = 0, + fill: _Ink | None = None, + outline: _Ink | None = None, + width: int = 1, + *, + corners: tuple[bool, bool, bool, bool] | None = None, + ) -> None: + """Draw a rounded rectangle.""" + if isinstance(xy[0], (list, tuple)): + (x0, y0), (x1, y1) = cast(Sequence[Sequence[float]], xy) + else: + x0, y0, x1, y1 = cast(Sequence[float], xy) + if x1 < x0: + msg = "x1 must be greater than or equal to x0" + raise ValueError(msg) + if y1 < y0: + msg = "y1 must be greater than or equal to y0" + raise ValueError(msg) + if corners is None: + corners = (True, True, True, True) + + d = radius * 2 + + x0 = round(x0) + y0 = round(y0) + x1 = round(x1) + y1 = round(y1) + full_x, full_y = False, False + if all(corners): + full_x = d >= x1 - x0 - 1 + if full_x: + # The two left and two right corners are joined + d = x1 - x0 + full_y = d >= y1 - y0 - 1 + if full_y: + # The two top and two bottom corners are joined + d = y1 - y0 + if full_x and full_y: + # If all corners are joined, that is a circle + return self.ellipse(xy, fill, outline, width) + + if d == 0 or not any(corners): + # If the corners have no curve, + # or there are no corners, + # that is a rectangle + return self.rectangle(xy, fill, outline, width) + + r = int(d // 2) + ink, fill_ink = self._getink(outline, fill) + + def draw_corners(pieslice: bool) -> None: + parts: tuple[tuple[tuple[float, float, float, float], int, int], ...] + if full_x: + # Draw top and bottom halves + parts = ( + ((x0, y0, x0 + d, y0 + d), 180, 360), + ((x0, y1 - d, x0 + d, y1), 0, 180), + ) + elif full_y: + # Draw left and right halves + parts = ( + ((x0, y0, x0 + d, y0 + d), 90, 270), + ((x1 - d, y0, x1, y0 + d), 270, 90), + ) + else: + # Draw four separate corners + parts = tuple( + part + for i, part in enumerate( + ( + ((x0, y0, x0 + d, y0 + d), 180, 270), + ((x1 - d, y0, x1, y0 + d), 270, 360), + ((x1 - d, y1 - d, x1, y1), 0, 90), + ((x0, y1 - d, x0 + d, y1), 90, 180), + ) + ) + if corners[i] + ) + for part in parts: + if pieslice: + self.draw.draw_pieslice(*(part + (fill_ink, 1))) + else: + self.draw.draw_arc(*(part + (ink, width))) + + if fill_ink is not None: + draw_corners(True) + + if full_x: + self.draw.draw_rectangle((x0, y0 + r + 1, x1, y1 - r - 1), fill_ink, 1) + elif x1 - r - 1 >= x0 + r + 1: + self.draw.draw_rectangle((x0 + r + 1, y0, x1 - r - 1, y1), fill_ink, 1) + if not full_x and not full_y: + left = [x0, y0, x0 + r, y1] + if corners[0]: + left[1] += r + 1 + if corners[3]: + left[3] -= r + 1 + self.draw.draw_rectangle(left, fill_ink, 1) + + right = [x1 - r, y0, x1, y1] + if corners[1]: + right[1] += r + 1 + if corners[2]: + right[3] -= r + 1 + self.draw.draw_rectangle(right, fill_ink, 1) + if ink is not None and ink != fill_ink and width != 0: + draw_corners(False) + + if not full_x: + top = [x0, y0, x1, y0 + width - 1] + if corners[0]: + top[0] += r + 1 + if corners[1]: + top[2] -= r + 1 + self.draw.draw_rectangle(top, ink, 1) + + bottom = [x0, y1 - width + 1, x1, y1] + if corners[3]: + bottom[0] += r + 1 + if corners[2]: + bottom[2] -= r + 1 + self.draw.draw_rectangle(bottom, ink, 1) + if not full_y: + left = [x0, y0, x0 + width - 1, y1] + if corners[0]: + left[1] += r + 1 + if corners[3]: + left[3] -= r + 1 + self.draw.draw_rectangle(left, ink, 1) + + right = [x1 - width + 1, y0, x1, y1] + if corners[1]: + right[1] += r + 1 + if corners[2]: + right[3] -= r + 1 + self.draw.draw_rectangle(right, ink, 1) + + def text( + self, + xy: tuple[float, float], + text: AnyStr | ImageText.Text[AnyStr], + fill: _Ink | None = None, + font: ( + ImageFont.ImageFont + | ImageFont.FreeTypeFont + | ImageFont.TransposedFont + | None + ) = None, + anchor: str | None = None, + spacing: float = 4, + align: str = "left", + direction: str | None = None, + features: list[str] | None = None, + language: str | None = None, + stroke_width: float = 0, + stroke_fill: _Ink | None = None, + embedded_color: bool = False, + *args: Any, + **kwargs: Any, + ) -> None: + """Draw text.""" + if isinstance(text, ImageText.Text): + image_text = text + else: + if font is None: + font = self._getfont(kwargs.get("font_size")) + image_text = ImageText.Text( + text, font, self.mode, spacing, direction, features, language + ) + if embedded_color: + image_text.embed_color() + if stroke_width: + image_text.stroke(stroke_width, stroke_fill) + + def getink(fill: _Ink | None) -> int: + ink, fill_ink = self._getink(fill) + if ink is None: + assert fill_ink is not None + return fill_ink + return ink + + ink = getink(fill) + if ink is None: + return + + stroke_ink = None + if image_text.stroke_width: + stroke_ink = ( + getink(image_text.stroke_fill) + if image_text.stroke_fill is not None + else ink + ) + + for line in image_text._split(xy, anchor, align): + + def draw_text(ink: int, stroke_width: float = 0) -> None: + mode = self.fontmode + if stroke_width == 0 and embedded_color: + mode = "RGBA" + x = int(line.x) + y = int(line.y) + start = (math.modf(line.x)[0], math.modf(line.y)[0]) + try: + mask, offset = image_text.font.getmask2( # type: ignore[union-attr,misc] + line.text, + mode, + direction=direction, + features=features, + language=language, + stroke_width=stroke_width, + stroke_filled=True, + anchor=line.anchor, + ink=ink, + start=start, + *args, + **kwargs, + ) + x += offset[0] + y += offset[1] + except AttributeError: + try: + mask = image_text.font.getmask( # type: ignore[misc] + line.text, + mode, + direction, + features, + language, + stroke_width, + line.anchor, + ink, + start=start, + *args, + **kwargs, + ) + except TypeError: + mask = image_text.font.getmask(line.text) + if mode == "RGBA": + # image_text.font.getmask2(mode="RGBA") + # returns color in RGB bands and mask in A + # extract mask and set text alpha + color, mask = mask, mask.getband(3) + ink_alpha = struct.pack("i", ink)[3] + color.fillband(3, ink_alpha) + if self.im is not None: + self.im.paste( + color, (x, y, x + mask.size[0], y + mask.size[1]), mask + ) + else: + self.draw.draw_bitmap((x, y), mask, ink) + + if stroke_ink is not None: + # Draw stroked text + draw_text(stroke_ink, image_text.stroke_width) + + # Draw normal text + if ink != stroke_ink: + draw_text(ink) + else: + # Only draw normal text + draw_text(ink) + + def multiline_text( + self, + xy: tuple[float, float], + text: AnyStr, + fill: _Ink | None = None, + font: ( + ImageFont.ImageFont + | ImageFont.FreeTypeFont + | ImageFont.TransposedFont + | None + ) = None, + anchor: str | None = None, + spacing: float = 4, + align: str = "left", + direction: str | None = None, + features: list[str] | None = None, + language: str | None = None, + stroke_width: float = 0, + stroke_fill: _Ink | None = None, + embedded_color: bool = False, + *, + font_size: float | None = None, + ) -> None: + return self.text( + xy, + text, + fill, + font, + anchor, + spacing, + align, + direction, + features, + language, + stroke_width, + stroke_fill, + embedded_color, + font_size=font_size, + ) + + def textlength( + self, + text: AnyStr, + font: ( + ImageFont.ImageFont + | ImageFont.FreeTypeFont + | ImageFont.TransposedFont + | None + ) = None, + direction: str | None = None, + features: list[str] | None = None, + language: str | None = None, + embedded_color: bool = False, + *, + font_size: float | None = None, + ) -> float: + """Get the length of a given string, in pixels with 1/64 precision.""" + if font is None: + font = self._getfont(font_size) + image_text = ImageText.Text( + text, + font, + self.mode, + direction=direction, + features=features, + language=language, + ) + if embedded_color: + image_text.embed_color() + return image_text.get_length() + + def textbbox( + self, + xy: tuple[float, float], + text: AnyStr, + font: ( + ImageFont.ImageFont + | ImageFont.FreeTypeFont + | ImageFont.TransposedFont + | None + ) = None, + anchor: str | None = None, + spacing: float = 4, + align: str = "left", + direction: str | None = None, + features: list[str] | None = None, + language: str | None = None, + stroke_width: float = 0, + embedded_color: bool = False, + *, + font_size: float | None = None, + ) -> tuple[float, float, float, float]: + """Get the bounding box of a given string, in pixels.""" + if font is None: + font = self._getfont(font_size) + image_text = ImageText.Text( + text, font, self.mode, spacing, direction, features, language + ) + if embedded_color: + image_text.embed_color() + if stroke_width: + image_text.stroke(stroke_width) + return image_text.get_bbox(xy, anchor, align) + + def multiline_textbbox( + self, + xy: tuple[float, float], + text: AnyStr, + font: ( + ImageFont.ImageFont + | ImageFont.FreeTypeFont + | ImageFont.TransposedFont + | None + ) = None, + anchor: str | None = None, + spacing: float = 4, + align: str = "left", + direction: str | None = None, + features: list[str] | None = None, + language: str | None = None, + stroke_width: float = 0, + embedded_color: bool = False, + *, + font_size: float | None = None, + ) -> tuple[float, float, float, float]: + return self.textbbox( + xy, + text, + font, + anchor, + spacing, + align, + direction, + features, + language, + stroke_width, + embedded_color, + font_size=font_size, + ) + + +def Draw(im: Image.Image, mode: str | None = None) -> ImageDraw: + """ + A simple 2D drawing interface for PIL images. + + :param im: The image to draw in. + :param mode: Optional mode to use for color values. For RGB + images, this argument can be RGB or RGBA (to blend the + drawing into the image). For all other modes, this argument + must be the same as the image mode. If omitted, the mode + defaults to the mode of the image. + """ + try: + return getattr(im, "getdraw")(mode) + except AttributeError: + return ImageDraw(im, mode) + + +def getdraw(im: Image.Image | None = None) -> tuple[ImageDraw2.Draw | None, ModuleType]: + """ + :param im: The image to draw in. + :returns: A (drawing context, drawing resource factory) tuple. + """ + from . import ImageDraw2 + + draw = ImageDraw2.Draw(im) if im is not None else None + return draw, ImageDraw2 + + +def floodfill( + image: Image.Image, + xy: tuple[int, int], + value: float | tuple[int, ...], + border: float | tuple[int, ...] | None = None, + thresh: float = 0, +) -> None: + """ + .. warning:: This method is experimental. + + Fills a bounded region with a given color. + + :param image: Target image. + :param xy: Seed position (a 2-item coordinate tuple). See + :ref:`coordinate-system`. + :param value: Fill color. + :param border: Optional border value. If given, the region consists of + pixels with a color different from the border color. If not given, + the region consists of pixels having the same color as the seed + pixel. + :param thresh: Optional threshold value which specifies a maximum + tolerable difference of a pixel value from the 'background' in + order for it to be replaced. Useful for filling regions of + non-homogeneous, but similar, colors. + """ + # based on an implementation by Eric S. Raymond + # amended by yo1995 @20180806 + pixel = image.load() + assert pixel is not None + x, y = xy + try: + background = pixel[x, y] + if _color_diff(value, background) <= thresh: + return # seed point already has fill color + pixel[x, y] = value + except (ValueError, IndexError): + return # seed point outside image + edge = {(x, y)} + # use a set to keep record of current and previous edge pixels + # to reduce memory consumption + full_edge = set() + while edge: + new_edge = set() + for x, y in edge: # 4 adjacent method + for s, t in ((x + 1, y), (x - 1, y), (x, y + 1), (x, y - 1)): + # If already processed, or if a coordinate is negative, skip + if (s, t) in full_edge or s < 0 or t < 0: + continue + try: + p = pixel[s, t] + except (ValueError, IndexError): + pass + else: + full_edge.add((s, t)) + if border is None: + fill = _color_diff(p, background) <= thresh + else: + fill = p not in (value, border) + if fill: + pixel[s, t] = value + new_edge.add((s, t)) + full_edge = edge # discard pixels processed + edge = new_edge + + +def _compute_regular_polygon_vertices( + bounding_circle: Sequence[Sequence[float] | float], n_sides: int, rotation: float +) -> list[tuple[float, float]]: + """ + Generate a list of vertices for a 2D regular polygon. + + :param bounding_circle: The bounding circle is a sequence defined + by a point and radius. The polygon is inscribed in this circle. + (e.g. ``bounding_circle=(x, y, r)`` or ``((x, y), r)``) + :param n_sides: Number of sides + (e.g. ``n_sides=3`` for a triangle, ``6`` for a hexagon) + :param rotation: Apply an arbitrary rotation to the polygon + (e.g. ``rotation=90``, applies a 90 degree rotation) + :return: List of regular polygon vertices + (e.g. ``[(25, 50), (50, 50), (50, 25), (25, 25)]``) + + How are the vertices computed? + 1. Compute the following variables + - theta: Angle between the apothem & the nearest polygon vertex + - side_length: Length of each polygon edge + - centroid: Center of bounding circle (1st, 2nd elements of bounding_circle) + - polygon_radius: Polygon radius (last element of bounding_circle) + - angles: Location of each polygon vertex in polar grid + (e.g. A square with 0 degree rotation => [225.0, 315.0, 45.0, 135.0]) + + 2. For each angle in angles, get the polygon vertex at that angle + The vertex is computed using the equation below. + X= xcos(φ) + ysin(φ) + Y= −xsin(φ) + ycos(φ) + + Note: + φ = angle in degrees + x = 0 + y = polygon_radius + + The formula above assumes rotation around the origin. + In our case, we are rotating around the centroid. + To account for this, we use the formula below + X = xcos(φ) + ysin(φ) + centroid_x + Y = −xsin(φ) + ycos(φ) + centroid_y + """ + # 1. Error Handling + # 1.1 Check `n_sides` has an appropriate value + if not isinstance(n_sides, int): + msg = "n_sides should be an int" # type: ignore[unreachable] + raise TypeError(msg) + if n_sides < 3: + msg = "n_sides should be an int > 2" + raise ValueError(msg) + + # 1.2 Check `bounding_circle` has an appropriate value + if not isinstance(bounding_circle, (list, tuple)): + msg = "bounding_circle should be a sequence" + raise TypeError(msg) + + if len(bounding_circle) == 3: + if not all(isinstance(i, (int, float)) for i in bounding_circle): + msg = "bounding_circle should only contain numeric data" + raise ValueError(msg) + + *centroid, polygon_radius = cast(list[float], list(bounding_circle)) + elif len(bounding_circle) == 2 and isinstance(bounding_circle[0], (list, tuple)): + if not all( + isinstance(i, (int, float)) for i in bounding_circle[0] + ) or not isinstance(bounding_circle[1], (int, float)): + msg = "bounding_circle should only contain numeric data" + raise ValueError(msg) + + if len(bounding_circle[0]) != 2: + msg = "bounding_circle centre should contain 2D coordinates (e.g. (x, y))" + raise ValueError(msg) + + centroid = cast(list[float], list(bounding_circle[0])) + polygon_radius = cast(float, bounding_circle[1]) + else: + msg = ( + "bounding_circle should contain 2D coordinates " + "and a radius (e.g. (x, y, r) or ((x, y), r) )" + ) + raise ValueError(msg) + + if polygon_radius <= 0: + msg = "bounding_circle radius should be > 0" + raise ValueError(msg) + + # 1.3 Check `rotation` has an appropriate value + if not isinstance(rotation, (int, float)): + msg = "rotation should be an int or float" # type: ignore[unreachable] + raise ValueError(msg) + + # 2. Define Helper Functions + def _apply_rotation(point: list[float], degrees: float) -> tuple[float, float]: + return ( + round( + point[0] * math.cos(math.radians(360 - degrees)) + - point[1] * math.sin(math.radians(360 - degrees)) + + centroid[0], + 2, + ), + round( + point[1] * math.cos(math.radians(360 - degrees)) + + point[0] * math.sin(math.radians(360 - degrees)) + + centroid[1], + 2, + ), + ) + + def _compute_polygon_vertex(angle: float) -> tuple[float, float]: + start_point = [polygon_radius, 0] + return _apply_rotation(start_point, angle) + + def _get_angles(n_sides: int, rotation: float) -> list[float]: + angles = [] + degrees = 360 / n_sides + # Start with the bottom left polygon vertex + current_angle = (270 - 0.5 * degrees) + rotation + for _ in range(n_sides): + angles.append(current_angle) + current_angle += degrees + if current_angle > 360: + current_angle -= 360 + return angles + + # 3. Variable Declarations + angles = _get_angles(n_sides, rotation) + + # 4. Compute Vertices + return [_compute_polygon_vertex(angle) for angle in angles] + + +def _color_diff( + color1: float | tuple[int, ...], color2: float | tuple[int, ...] +) -> float: + """ + Uses 1-norm distance to calculate difference between two values. + """ + first = color1 if isinstance(color1, tuple) else (color1,) + second = color2 if isinstance(color2, tuple) else (color2,) + + return sum(abs(first[i] - second[i]) for i in range(len(second))) diff --git a/Python/venv/lib/python3.12/site-packages/PIL/ImageDraw2.py b/Python/venv/lib/python3.12/site-packages/PIL/ImageDraw2.py new file mode 100644 index 0000000..2c9e39b --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/ImageDraw2.py @@ -0,0 +1,244 @@ +# +# The Python Imaging Library +# $Id$ +# +# WCK-style drawing interface operations +# +# History: +# 2003-12-07 fl created +# 2005-05-15 fl updated; added to PIL as ImageDraw2 +# 2005-05-15 fl added text support +# 2005-05-20 fl added arc/chord/pieslice support +# +# Copyright (c) 2003-2005 by Secret Labs AB +# Copyright (c) 2003-2005 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + + +""" +(Experimental) WCK-style drawing interface operations + +.. seealso:: :py:mod:`PIL.ImageDraw` +""" + +from __future__ import annotations + +from typing import Any, AnyStr, BinaryIO + +from . import Image, ImageColor, ImageDraw, ImageFont, ImagePath +from ._typing import Coords, StrOrBytesPath + + +class Pen: + """Stores an outline color and width.""" + + def __init__(self, color: str, width: int = 1, opacity: int = 255) -> None: + self.color = ImageColor.getrgb(color) + self.width = width + + +class Brush: + """Stores a fill color""" + + def __init__(self, color: str, opacity: int = 255) -> None: + self.color = ImageColor.getrgb(color) + + +class Font: + """Stores a TrueType font and color""" + + def __init__( + self, color: str, file: StrOrBytesPath | BinaryIO, size: float = 12 + ) -> None: + # FIXME: add support for bitmap fonts + self.color = ImageColor.getrgb(color) + self.font = ImageFont.truetype(file, size) + + +class Draw: + """ + (Experimental) WCK-style drawing interface + """ + + def __init__( + self, + image: Image.Image | str, + size: tuple[int, int] | list[int] | None = None, + color: float | tuple[float, ...] | str | None = None, + ) -> None: + if isinstance(image, str): + if size is None: + msg = "If image argument is mode string, size must be a list or tuple" + raise ValueError(msg) + image = Image.new(image, size, color) + self.draw = ImageDraw.Draw(image) + self.image = image + self.transform: tuple[float, float, float, float, float, float] | None = None + + def flush(self) -> Image.Image: + return self.image + + def render( + self, + op: str, + xy: Coords, + pen: Pen | Brush | None, + brush: Brush | Pen | None = None, + **kwargs: Any, + ) -> None: + # handle color arguments + outline = fill = None + width = 1 + if isinstance(pen, Pen): + outline = pen.color + width = pen.width + elif isinstance(brush, Pen): + outline = brush.color + width = brush.width + if isinstance(brush, Brush): + fill = brush.color + elif isinstance(pen, Brush): + fill = pen.color + # handle transformation + if self.transform: + path = ImagePath.Path(xy) + path.transform(self.transform) + xy = path + # render the item + if op in ("arc", "line"): + kwargs.setdefault("fill", outline) + else: + kwargs.setdefault("fill", fill) + kwargs.setdefault("outline", outline) + if op == "line": + kwargs.setdefault("width", width) + getattr(self.draw, op)(xy, **kwargs) + + def settransform(self, offset: tuple[float, float]) -> None: + """Sets a transformation offset.""" + xoffset, yoffset = offset + self.transform = (1, 0, xoffset, 0, 1, yoffset) + + def arc( + self, + xy: Coords, + pen: Pen | Brush | None, + start: float, + end: float, + *options: Any, + ) -> None: + """ + Draws an arc (a portion of a circle outline) between the start and end + angles, inside the given bounding box. + + .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.arc` + """ + self.render("arc", xy, pen, *options, start=start, end=end) + + def chord( + self, + xy: Coords, + pen: Pen | Brush | None, + start: float, + end: float, + *options: Any, + ) -> None: + """ + Same as :py:meth:`~PIL.ImageDraw2.Draw.arc`, but connects the end points + with a straight line. + + .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.chord` + """ + self.render("chord", xy, pen, *options, start=start, end=end) + + def ellipse(self, xy: Coords, pen: Pen | Brush | None, *options: Any) -> None: + """ + Draws an ellipse inside the given bounding box. + + .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.ellipse` + """ + self.render("ellipse", xy, pen, *options) + + def line(self, xy: Coords, pen: Pen | Brush | None, *options: Any) -> None: + """ + Draws a line between the coordinates in the ``xy`` list. + + .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.line` + """ + self.render("line", xy, pen, *options) + + def pieslice( + self, + xy: Coords, + pen: Pen | Brush | None, + start: float, + end: float, + *options: Any, + ) -> None: + """ + Same as arc, but also draws straight lines between the end points and the + center of the bounding box. + + .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.pieslice` + """ + self.render("pieslice", xy, pen, *options, start=start, end=end) + + def polygon(self, xy: Coords, pen: Pen | Brush | None, *options: Any) -> None: + """ + Draws a polygon. + + The polygon outline consists of straight lines between the given + coordinates, plus a straight line between the last and the first + coordinate. + + + .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.polygon` + """ + self.render("polygon", xy, pen, *options) + + def rectangle(self, xy: Coords, pen: Pen | Brush | None, *options: Any) -> None: + """ + Draws a rectangle. + + .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.rectangle` + """ + self.render("rectangle", xy, pen, *options) + + def text(self, xy: tuple[float, float], text: AnyStr, font: Font) -> None: + """ + Draws the string at the given position. + + .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.text` + """ + if self.transform: + path = ImagePath.Path(xy) + path.transform(self.transform) + xy = path + self.draw.text(xy, text, font=font.font, fill=font.color) + + def textbbox( + self, xy: tuple[float, float], text: AnyStr, font: Font + ) -> tuple[float, float, float, float]: + """ + Returns bounding box (in pixels) of given text. + + :return: ``(left, top, right, bottom)`` bounding box + + .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.textbbox` + """ + if self.transform: + path = ImagePath.Path(xy) + path.transform(self.transform) + xy = path + return self.draw.textbbox(xy, text, font=font.font) + + def textlength(self, text: AnyStr, font: Font) -> float: + """ + Returns length (in pixels) of given text. + This is the amount by which following text should be offset. + + .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.textlength` + """ + return self.draw.textlength(text, font=font.font) diff --git a/Python/venv/lib/python3.12/site-packages/PIL/ImageEnhance.py b/Python/venv/lib/python3.12/site-packages/PIL/ImageEnhance.py new file mode 100644 index 0000000..0e7e6dd --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/ImageEnhance.py @@ -0,0 +1,113 @@ +# +# The Python Imaging Library. +# $Id$ +# +# image enhancement classes +# +# For a background, see "Image Processing By Interpolation and +# Extrapolation", Paul Haeberli and Douglas Voorhies. Available +# at http://www.graficaobscura.com/interp/index.html +# +# History: +# 1996-03-23 fl Created +# 2009-06-16 fl Fixed mean calculation +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1996. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +from . import Image, ImageFilter, ImageStat + + +class _Enhance: + image: Image.Image + degenerate: Image.Image + + def enhance(self, factor: float) -> Image.Image: + """ + Returns an enhanced image. + + :param factor: A floating point value controlling the enhancement. + Factor 1.0 always returns a copy of the original image, + lower factors mean less color (brightness, contrast, + etc), and higher values more. There are no restrictions + on this value. + :rtype: :py:class:`~PIL.Image.Image` + """ + return Image.blend(self.degenerate, self.image, factor) + + +class Color(_Enhance): + """Adjust image color balance. + + This class can be used to adjust the colour balance of an image, in + a manner similar to the controls on a colour TV set. An enhancement + factor of 0.0 gives a black and white image. A factor of 1.0 gives + the original image. + """ + + def __init__(self, image: Image.Image) -> None: + self.image = image + self.intermediate_mode = "L" + if "A" in image.getbands(): + self.intermediate_mode = "LA" + + if self.intermediate_mode != image.mode: + image = image.convert(self.intermediate_mode).convert(image.mode) + self.degenerate = image + + +class Contrast(_Enhance): + """Adjust image contrast. + + This class can be used to control the contrast of an image, similar + to the contrast control on a TV set. An enhancement factor of 0.0 + gives a solid gray image. A factor of 1.0 gives the original image. + """ + + def __init__(self, image: Image.Image) -> None: + self.image = image + if image.mode != "L": + image = image.convert("L") + mean = int(ImageStat.Stat(image).mean[0] + 0.5) + self.degenerate = Image.new("L", image.size, mean) + if self.degenerate.mode != self.image.mode: + self.degenerate = self.degenerate.convert(self.image.mode) + + if "A" in self.image.getbands(): + self.degenerate.putalpha(self.image.getchannel("A")) + + +class Brightness(_Enhance): + """Adjust image brightness. + + This class can be used to control the brightness of an image. An + enhancement factor of 0.0 gives a black image. A factor of 1.0 gives the + original image. + """ + + def __init__(self, image: Image.Image) -> None: + self.image = image + self.degenerate = Image.new(image.mode, image.size, 0) + + if "A" in image.getbands(): + self.degenerate.putalpha(image.getchannel("A")) + + +class Sharpness(_Enhance): + """Adjust image sharpness. + + This class can be used to adjust the sharpness of an image. An + enhancement factor of 0.0 gives a blurred image, a factor of 1.0 gives the + original image, and a factor of 2.0 gives a sharpened image. + """ + + def __init__(self, image: Image.Image) -> None: + self.image = image + self.degenerate = image.filter(ImageFilter.SMOOTH) + + if "A" in image.getbands(): + self.degenerate.putalpha(image.getchannel("A")) diff --git a/Python/venv/lib/python3.12/site-packages/PIL/ImageFile.py b/Python/venv/lib/python3.12/site-packages/PIL/ImageFile.py new file mode 100644 index 0000000..c70d93f --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/ImageFile.py @@ -0,0 +1,935 @@ +# +# The Python Imaging Library. +# $Id$ +# +# base class for image file handlers +# +# history: +# 1995-09-09 fl Created +# 1996-03-11 fl Fixed load mechanism. +# 1996-04-15 fl Added pcx/xbm decoders. +# 1996-04-30 fl Added encoders. +# 1996-12-14 fl Added load helpers +# 1997-01-11 fl Use encode_to_file where possible +# 1997-08-27 fl Flush output in _save +# 1998-03-05 fl Use memory mapping for some modes +# 1999-02-04 fl Use memory mapping also for "I;16" and "I;16B" +# 1999-05-31 fl Added image parser +# 2000-10-12 fl Set readonly flag on memory-mapped images +# 2002-03-20 fl Use better messages for common decoder errors +# 2003-04-21 fl Fall back on mmap/map_buffer if map is not available +# 2003-10-30 fl Added StubImageFile class +# 2004-02-25 fl Made incremental parser more robust +# +# Copyright (c) 1997-2004 by Secret Labs AB +# Copyright (c) 1995-2004 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import abc +import io +import itertools +import logging +import os +import struct +from typing import IO, Any, NamedTuple, cast + +from . import ExifTags, Image +from ._util import DeferredError, is_path + +TYPE_CHECKING = False +if TYPE_CHECKING: + from ._typing import StrOrBytesPath + +logger = logging.getLogger(__name__) + +MAXBLOCK = 65536 +""" +By default, Pillow processes image data in blocks. This helps to prevent excessive use +of resources. Codecs may disable this behaviour with ``_pulls_fd`` or ``_pushes_fd``. + +When reading an image, this is the number of bytes to read at once. + +When writing an image, this is the number of bytes to write at once. +If the image width times 4 is greater, then that will be used instead. +Plugins may also set a greater number. + +User code may set this to another number. +""" + +SAFEBLOCK = 1024 * 1024 + +LOAD_TRUNCATED_IMAGES = False +"""Whether or not to load truncated image files. User code may change this.""" + +ERRORS = { + -1: "image buffer overrun error", + -2: "decoding error", + -3: "unknown error", + -8: "bad configuration", + -9: "out of memory error", +} +""" +Dict of known error codes returned from :meth:`.PyDecoder.decode`, +:meth:`.PyEncoder.encode` :meth:`.PyEncoder.encode_to_pyfd` and +:meth:`.PyEncoder.encode_to_file`. +""" + + +# +# -------------------------------------------------------------------- +# Helpers + + +def _get_oserror(error: int, *, encoder: bool) -> OSError: + try: + msg = Image.core.getcodecstatus(error) + except AttributeError: + msg = ERRORS.get(error) + if not msg: + msg = f"{'encoder' if encoder else 'decoder'} error {error}" + msg += f" when {'writing' if encoder else 'reading'} image file" + return OSError(msg) + + +def _tilesort(t: _Tile) -> int: + # sort on offset + return t[2] + + +class _Tile(NamedTuple): + codec_name: str + extents: tuple[int, int, int, int] | None + offset: int = 0 + args: tuple[Any, ...] | str | None = None + + +# +# -------------------------------------------------------------------- +# ImageFile base class + + +class ImageFile(Image.Image): + """Base class for image file format handlers.""" + + def __init__( + self, fp: StrOrBytesPath | IO[bytes], filename: str | bytes | None = None + ) -> None: + super().__init__() + + self._min_frame = 0 + + self.custom_mimetype: str | None = None + + self.tile: list[_Tile] = [] + """ A list of tile descriptors """ + + self.readonly = 1 # until we know better + + self.decoderconfig: tuple[Any, ...] = () + self.decodermaxblock = MAXBLOCK + + self.fp: IO[bytes] | None + self._fp: IO[bytes] | DeferredError + if is_path(fp): + # filename + self.fp = open(fp, "rb") + self.filename = os.fspath(fp) + self._exclusive_fp = True + else: + # stream + self.fp = cast(IO[bytes], fp) + self.filename = filename if filename is not None else "" + # can be overridden + self._exclusive_fp = False + + try: + try: + self._open() + + if isinstance(self, StubImageFile): + if loader := self._load(): + loader.open(self) + except ( + IndexError, # end of data + TypeError, # end of data (ord) + KeyError, # unsupported mode + EOFError, # got header but not the first frame + struct.error, + ) as v: + raise SyntaxError(v) from v + + if not self.mode or self.size[0] <= 0 or self.size[1] <= 0: + msg = "not identified by this driver" + raise SyntaxError(msg) + except BaseException: + # close the file only if we have opened it this constructor + if self._exclusive_fp: + self.fp.close() + raise + + def _open(self) -> None: + pass + + # Context manager support + def __enter__(self) -> ImageFile: + return self + + def _close_fp(self) -> None: + if getattr(self, "_fp", False) and not isinstance(self._fp, DeferredError): + if self._fp != self.fp: + self._fp.close() + self._fp = DeferredError(ValueError("Operation on closed image")) + if self.fp: + self.fp.close() + + def __exit__(self, *args: object) -> None: + if getattr(self, "_exclusive_fp", False): + self._close_fp() + self.fp = None + + def close(self) -> None: + """ + Closes the file pointer, if possible. + + This operation will destroy the image core and release its memory. + The image data will be unusable afterward. + + This function is required to close images that have multiple frames or + have not had their file read and closed by the + :py:meth:`~PIL.Image.Image.load` method. See :ref:`file-handling` for + more information. + """ + try: + self._close_fp() + self.fp = None + except Exception as msg: + logger.debug("Error closing: %s", msg) + + super().close() + + def get_child_images(self) -> list[ImageFile]: + child_images = [] + exif = self.getexif() + ifds = [] + if ExifTags.Base.SubIFDs in exif: + subifd_offsets = exif[ExifTags.Base.SubIFDs] + if subifd_offsets: + if not isinstance(subifd_offsets, tuple): + subifd_offsets = (subifd_offsets,) + ifds = [ + (exif._get_ifd_dict(subifd_offset), subifd_offset) + for subifd_offset in subifd_offsets + ] + ifd1 = exif.get_ifd(ExifTags.IFD.IFD1) + if ifd1 and ifd1.get(ExifTags.Base.JpegIFOffset): + assert exif._info is not None + ifds.append((ifd1, exif._info.next)) + + offset = None + for ifd, ifd_offset in ifds: + assert self.fp is not None + current_offset = self.fp.tell() + if offset is None: + offset = current_offset + + fp = self.fp + if ifd is not None: + thumbnail_offset = ifd.get(ExifTags.Base.JpegIFOffset) + if thumbnail_offset is not None: + thumbnail_offset += getattr(self, "_exif_offset", 0) + self.fp.seek(thumbnail_offset) + + length = ifd.get(ExifTags.Base.JpegIFByteCount) + assert isinstance(length, int) + data = self.fp.read(length) + fp = io.BytesIO(data) + + with Image.open(fp) as im: + from . import TiffImagePlugin + + if thumbnail_offset is None and isinstance( + im, TiffImagePlugin.TiffImageFile + ): + im._frame_pos = [ifd_offset] + im._seek(0) + im.load() + child_images.append(im) + + if offset is not None: + assert self.fp is not None + self.fp.seek(offset) + return child_images + + def get_format_mimetype(self) -> str | None: + if self.custom_mimetype: + return self.custom_mimetype + if self.format is not None: + return Image.MIME.get(self.format.upper()) + return None + + def __getstate__(self) -> list[Any]: + return super().__getstate__() + [self.filename] + + def __setstate__(self, state: list[Any]) -> None: + self.tile = [] + if len(state) > 5: + self.filename = state[5] + super().__setstate__(state) + + def verify(self) -> None: + """Check file integrity""" + + # raise exception if something's wrong. must be called + # directly after open, and closes file when finished. + if self._exclusive_fp and self.fp: + self.fp.close() + self.fp = None + + def load(self) -> Image.core.PixelAccess | None: + """Load image data based on tile list""" + + if not self.tile and self._im is None: + msg = "cannot load this image" + raise OSError(msg) + + pixel = Image.Image.load(self) + if not self.tile: + return pixel + + self.map: mmap.mmap | None = None + use_mmap = self.filename and len(self.tile) == 1 + + assert self.fp is not None + readonly = 0 + + # look for read/seek overrides + if hasattr(self, "load_read"): + read = self.load_read + # don't use mmap if there are custom read/seek functions + use_mmap = False + else: + read = self.fp.read + + if hasattr(self, "load_seek"): + seek = self.load_seek + use_mmap = False + else: + seek = self.fp.seek + + if use_mmap: + # try memory mapping + decoder_name, extents, offset, args = self.tile[0] + if isinstance(args, str): + args = (args, 0, 1) + if ( + decoder_name == "raw" + and isinstance(args, tuple) + and len(args) >= 3 + and args[0] == self.mode + and args[0] in Image._MAPMODES + ): + if offset < 0: + msg = "Tile offset cannot be negative" + raise ValueError(msg) + try: + # use mmap, if possible + import mmap + + with open(self.filename) as fp: + self.map = mmap.mmap(fp.fileno(), 0, access=mmap.ACCESS_READ) + if offset + self.size[1] * args[1] > self.map.size(): + msg = "buffer is not large enough" + raise OSError(msg) + self.im = Image.core.map_buffer( + self.map, self.size, decoder_name, offset, args + ) + readonly = 1 + # After trashing self.im, + # we might need to reload the palette data. + if self.palette: + self.palette.dirty = 1 + except (AttributeError, OSError, ImportError): + self.map = None + + self.load_prepare() + err_code = -3 # initialize to unknown error + if not self.map: + # sort tiles in file order + self.tile.sort(key=_tilesort) + + # FIXME: This is a hack to handle TIFF's JpegTables tag. + prefix = getattr(self, "tile_prefix", b"") + + # Remove consecutive duplicates that only differ by their offset + self.tile = [ + list(tiles)[-1] + for _, tiles in itertools.groupby( + self.tile, lambda tile: (tile[0], tile[1], tile[3]) + ) + ] + for i, (decoder_name, extents, offset, args) in enumerate(self.tile): + seek(offset) + decoder = Image._getdecoder( + self.mode, decoder_name, args, self.decoderconfig + ) + try: + decoder.setimage(self.im, extents) + if decoder.pulls_fd: + decoder.setfd(self.fp) + err_code = decoder.decode(b"")[1] + else: + b = prefix + while True: + read_bytes = self.decodermaxblock + if i + 1 < len(self.tile): + next_offset = self.tile[i + 1].offset + if next_offset > offset: + read_bytes = next_offset - offset + try: + s = read(read_bytes) + except (IndexError, struct.error) as e: + # truncated png/gif + if LOAD_TRUNCATED_IMAGES: + break + else: + msg = "image file is truncated" + raise OSError(msg) from e + + if not s: # truncated jpeg + if LOAD_TRUNCATED_IMAGES: + break + else: + msg = ( + "image file is truncated " + f"({len(b)} bytes not processed)" + ) + raise OSError(msg) + + b = b + s + n, err_code = decoder.decode(b) + if n < 0: + break + b = b[n:] + finally: + # Need to cleanup here to prevent leaks + decoder.cleanup() + + self.tile = [] + self.readonly = readonly + + self.load_end() + + if self._exclusive_fp and self._close_exclusive_fp_after_loading: + self.fp.close() + self.fp = None + + if not self.map and not LOAD_TRUNCATED_IMAGES and err_code < 0: + # still raised if decoder fails to return anything + raise _get_oserror(err_code, encoder=False) + + return Image.Image.load(self) + + def load_prepare(self) -> None: + # create image memory if necessary + if self._im is None: + self.im = Image.core.new(self.mode, self.size) + # create palette (optional) + if self.mode == "P": + Image.Image.load(self) + + def load_end(self) -> None: + # may be overridden + pass + + # may be defined for contained formats + # def load_seek(self, pos: int) -> None: + # pass + + # may be defined for blocked formats (e.g. PNG) + # def load_read(self, read_bytes: int) -> bytes: + # pass + + def _seek_check(self, frame: int) -> bool: + if ( + frame < self._min_frame + # Only check upper limit on frames if additional seek operations + # are not required to do so + or ( + not (hasattr(self, "_n_frames") and self._n_frames is None) + and frame >= getattr(self, "n_frames") + self._min_frame + ) + ): + msg = "attempt to seek outside sequence" + raise EOFError(msg) + + return self.tell() != frame + + +class StubHandler(abc.ABC): + def open(self, im: StubImageFile) -> None: + pass + + @abc.abstractmethod + def load(self, im: StubImageFile) -> Image.Image: + pass + + +class StubImageFile(ImageFile, metaclass=abc.ABCMeta): + """ + Base class for stub image loaders. + + A stub loader is an image loader that can identify files of a + certain format, but relies on external code to load the file. + """ + + @abc.abstractmethod + def _open(self) -> None: + pass + + def load(self) -> Image.core.PixelAccess | None: + loader = self._load() + if loader is None: + msg = f"cannot find loader for this {self.format} file" + raise OSError(msg) + image = loader.load(self) + assert image is not None + # become the other object (!) + self.__class__ = image.__class__ # type: ignore[assignment] + self.__dict__ = image.__dict__ + return image.load() + + @abc.abstractmethod + def _load(self) -> StubHandler | None: + """(Hook) Find actual image loader.""" + pass + + +class Parser: + """ + Incremental image parser. This class implements the standard + feed/close consumer interface. + """ + + incremental = None + image: Image.Image | None = None + data: bytes | None = None + decoder: Image.core.ImagingDecoder | PyDecoder | None = None + offset = 0 + finished = 0 + + def reset(self) -> None: + """ + (Consumer) Reset the parser. Note that you can only call this + method immediately after you've created a parser; parser + instances cannot be reused. + """ + assert self.data is None, "cannot reuse parsers" + + def feed(self, data: bytes) -> None: + """ + (Consumer) Feed data to the parser. + + :param data: A string buffer. + :exception OSError: If the parser failed to parse the image file. + """ + # collect data + + if self.finished: + return + + if self.data is None: + self.data = data + else: + self.data = self.data + data + + # parse what we have + if self.decoder: + if self.offset > 0: + # skip header + skip = min(len(self.data), self.offset) + self.data = self.data[skip:] + self.offset = self.offset - skip + if self.offset > 0 or not self.data: + return + + n, e = self.decoder.decode(self.data) + + if n < 0: + # end of stream + self.data = None + self.finished = 1 + if e < 0: + # decoding error + self.image = None + raise _get_oserror(e, encoder=False) + else: + # end of image + return + self.data = self.data[n:] + + elif self.image: + # if we end up here with no decoder, this file cannot + # be incrementally parsed. wait until we've gotten all + # available data + pass + + else: + # attempt to open this file + try: + with io.BytesIO(self.data) as fp: + im = Image.open(fp) + except OSError: + pass # not enough data + else: + flag = hasattr(im, "load_seek") or hasattr(im, "load_read") + if not flag and len(im.tile) == 1: + # initialize decoder + im.load_prepare() + d, e, o, a = im.tile[0] + im.tile = [] + self.decoder = Image._getdecoder(im.mode, d, a, im.decoderconfig) + self.decoder.setimage(im.im, e) + + # calculate decoder offset + self.offset = o + if self.offset <= len(self.data): + self.data = self.data[self.offset :] + self.offset = 0 + + self.image = im + + def __enter__(self) -> Parser: + return self + + def __exit__(self, *args: object) -> None: + self.close() + + def close(self) -> Image.Image: + """ + (Consumer) Close the stream. + + :returns: An image object. + :exception OSError: If the parser failed to parse the image file either + because it cannot be identified or cannot be + decoded. + """ + # finish decoding + if self.decoder: + # get rid of what's left in the buffers + self.feed(b"") + self.data = self.decoder = None + if not self.finished: + msg = "image was incomplete" + raise OSError(msg) + if not self.image: + msg = "cannot parse this image" + raise OSError(msg) + if self.data: + # incremental parsing not possible; reopen the file + # not that we have all data + with io.BytesIO(self.data) as fp: + try: + self.image = Image.open(fp) + finally: + self.image.load() + return self.image + + +# -------------------------------------------------------------------- + + +def _save(im: Image.Image, fp: IO[bytes], tile: list[_Tile], bufsize: int = 0) -> None: + """Helper to save image based on tile list + + :param im: Image object. + :param fp: File object. + :param tile: Tile list. + :param bufsize: Optional buffer size + """ + + im.load() + if not hasattr(im, "encoderconfig"): + im.encoderconfig = () + tile.sort(key=_tilesort) + # FIXME: make MAXBLOCK a configuration parameter + # It would be great if we could have the encoder specify what it needs + # But, it would need at least the image size in most cases. RawEncode is + # a tricky case. + bufsize = max(MAXBLOCK, bufsize, im.size[0] * 4) # see RawEncode.c + try: + fh = fp.fileno() + fp.flush() + _encode_tile(im, fp, tile, bufsize, fh) + except (AttributeError, io.UnsupportedOperation) as exc: + _encode_tile(im, fp, tile, bufsize, None, exc) + if hasattr(fp, "flush"): + fp.flush() + + +def _encode_tile( + im: Image.Image, + fp: IO[bytes], + tile: list[_Tile], + bufsize: int, + fh: int | None, + exc: BaseException | None = None, +) -> None: + for encoder_name, extents, offset, args in tile: + if offset > 0: + fp.seek(offset) + encoder = Image._getencoder(im.mode, encoder_name, args, im.encoderconfig) + try: + encoder.setimage(im.im, extents) + if encoder.pushes_fd: + encoder.setfd(fp) + errcode = encoder.encode_to_pyfd()[1] + else: + if exc: + # compress to Python file-compatible object + while True: + errcode, data = encoder.encode(bufsize)[1:] + fp.write(data) + if errcode: + break + else: + # slight speedup: compress to real file object + assert fh is not None + errcode = encoder.encode_to_file(fh, bufsize) + if errcode < 0: + raise _get_oserror(errcode, encoder=True) from exc + finally: + encoder.cleanup() + + +def _safe_read(fp: IO[bytes], size: int) -> bytes: + """ + Reads large blocks in a safe way. Unlike fp.read(n), this function + doesn't trust the user. If the requested size is larger than + SAFEBLOCK, the file is read block by block. + + :param fp: File handle. Must implement a read method. + :param size: Number of bytes to read. + :returns: A string containing size bytes of data. + + Raises an OSError if the file is truncated and the read cannot be completed + + """ + if size <= 0: + return b"" + if size <= SAFEBLOCK: + data = fp.read(size) + if len(data) < size: + msg = "Truncated File Read" + raise OSError(msg) + return data + blocks: list[bytes] = [] + remaining_size = size + while remaining_size > 0: + block = fp.read(min(remaining_size, SAFEBLOCK)) + if not block: + break + blocks.append(block) + remaining_size -= len(block) + if sum(len(block) for block in blocks) < size: + msg = "Truncated File Read" + raise OSError(msg) + return b"".join(blocks) + + +class PyCodecState: + def __init__(self) -> None: + self.xsize = 0 + self.ysize = 0 + self.xoff = 0 + self.yoff = 0 + + def extents(self) -> tuple[int, int, int, int]: + return self.xoff, self.yoff, self.xoff + self.xsize, self.yoff + self.ysize + + +class PyCodec: + fd: IO[bytes] | None + + def __init__(self, mode: str, *args: Any) -> None: + self.im: Image.core.ImagingCore | None = None + self.state = PyCodecState() + self.fd = None + self.mode = mode + self.init(args) + + def init(self, args: tuple[Any, ...]) -> None: + """ + Override to perform codec specific initialization + + :param args: Tuple of arg items from the tile entry + :returns: None + """ + self.args = args + + def cleanup(self) -> None: + """ + Override to perform codec specific cleanup + + :returns: None + """ + pass + + def setfd(self, fd: IO[bytes]) -> None: + """ + Called from ImageFile to set the Python file-like object + + :param fd: A Python file-like object + :returns: None + """ + self.fd = fd + + def setimage( + self, + im: Image.core.ImagingCore, + extents: tuple[int, int, int, int] | None = None, + ) -> None: + """ + Called from ImageFile to set the core output image for the codec + + :param im: A core image object + :param extents: a 4 tuple of (x0, y0, x1, y1) defining the rectangle + for this tile + :returns: None + """ + + # following c code + self.im = im + + if extents: + x0, y0, x1, y1 = extents + + if x0 < 0 or y0 < 0 or x1 > self.im.size[0] or y1 > self.im.size[1]: + msg = "Tile cannot extend outside image" + raise ValueError(msg) + + self.state.xoff = x0 + self.state.yoff = y0 + self.state.xsize = x1 - x0 + self.state.ysize = y1 - y0 + else: + self.state.xsize, self.state.ysize = self.im.size + + if self.state.xsize <= 0 or self.state.ysize <= 0: + msg = "Size must be positive" + raise ValueError(msg) + + +class PyDecoder(PyCodec): + """ + Python implementation of a format decoder. Override this class and + add the decoding logic in the :meth:`decode` method. + + See :ref:`Writing Your Own File Codec in Python` + """ + + _pulls_fd = False + + @property + def pulls_fd(self) -> bool: + return self._pulls_fd + + def decode(self, buffer: bytes | Image.SupportsArrayInterface) -> tuple[int, int]: + """ + Override to perform the decoding process. + + :param buffer: A bytes object with the data to be decoded. + :returns: A tuple of ``(bytes consumed, errcode)``. + If finished with decoding return -1 for the bytes consumed. + Err codes are from :data:`.ImageFile.ERRORS`. + """ + msg = "unavailable in base decoder" + raise NotImplementedError(msg) + + def set_as_raw( + self, data: bytes, rawmode: str | None = None, extra: tuple[Any, ...] = () + ) -> None: + """ + Convenience method to set the internal image from a stream of raw data + + :param data: Bytes to be set + :param rawmode: The rawmode to be used for the decoder. + If not specified, it will default to the mode of the image + :param extra: Extra arguments for the decoder. + :returns: None + """ + + if not rawmode: + rawmode = self.mode + d = Image._getdecoder(self.mode, "raw", rawmode, extra) + assert self.im is not None + d.setimage(self.im, self.state.extents()) + s = d.decode(data) + + if s[0] >= 0: + msg = "not enough image data" + raise ValueError(msg) + if s[1] != 0: + msg = "cannot decode image data" + raise ValueError(msg) + + +class PyEncoder(PyCodec): + """ + Python implementation of a format encoder. Override this class and + add the decoding logic in the :meth:`encode` method. + + See :ref:`Writing Your Own File Codec in Python` + """ + + _pushes_fd = False + + @property + def pushes_fd(self) -> bool: + return self._pushes_fd + + def encode(self, bufsize: int) -> tuple[int, int, bytes]: + """ + Override to perform the encoding process. + + :param bufsize: Buffer size. + :returns: A tuple of ``(bytes encoded, errcode, bytes)``. + If finished with encoding return 1 for the error code. + Err codes are from :data:`.ImageFile.ERRORS`. + """ + msg = "unavailable in base encoder" + raise NotImplementedError(msg) + + def encode_to_pyfd(self) -> tuple[int, int]: + """ + If ``pushes_fd`` is ``True``, then this method will be used, + and ``encode()`` will only be called once. + + :returns: A tuple of ``(bytes consumed, errcode)``. + Err codes are from :data:`.ImageFile.ERRORS`. + """ + if not self.pushes_fd: + return 0, -8 # bad configuration + bytes_consumed, errcode, data = self.encode(0) + if data: + assert self.fd is not None + self.fd.write(data) + return bytes_consumed, errcode + + def encode_to_file(self, fh: int, bufsize: int) -> int: + """ + :param fh: File handle. + :param bufsize: Buffer size. + + :returns: If finished successfully, return 0. + Otherwise, return an error code. Err codes are from + :data:`.ImageFile.ERRORS`. + """ + errcode = 0 + while errcode == 0: + status, errcode, buf = self.encode(bufsize) + if status > 0: + os.write(fh, buf[status:]) + return errcode diff --git a/Python/venv/lib/python3.12/site-packages/PIL/ImageFilter.py b/Python/venv/lib/python3.12/site-packages/PIL/ImageFilter.py new file mode 100644 index 0000000..9326eee --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/ImageFilter.py @@ -0,0 +1,607 @@ +# +# The Python Imaging Library. +# $Id$ +# +# standard filters +# +# History: +# 1995-11-27 fl Created +# 2002-06-08 fl Added rank and mode filters +# 2003-09-15 fl Fixed rank calculation in rank filter; added expand call +# +# Copyright (c) 1997-2003 by Secret Labs AB. +# Copyright (c) 1995-2002 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import abc +import functools +from collections.abc import Sequence +from typing import cast + +TYPE_CHECKING = False +if TYPE_CHECKING: + from collections.abc import Callable + from types import ModuleType + from typing import Any + + from . import _imaging + from ._typing import NumpyArray + + +class Filter(abc.ABC): + @abc.abstractmethod + def filter(self, image: _imaging.ImagingCore) -> _imaging.ImagingCore: + pass + + +class MultibandFilter(Filter): + pass + + +class BuiltinFilter(MultibandFilter): + filterargs: tuple[Any, ...] + + def filter(self, image: _imaging.ImagingCore) -> _imaging.ImagingCore: + if image.mode == "P": + msg = "cannot filter palette images" + raise ValueError(msg) + return image.filter(*self.filterargs) + + +class Kernel(BuiltinFilter): + """ + Create a convolution kernel. This only supports 3x3 and 5x5 integer and floating + point kernels. + + Kernels can only be applied to "L" and "RGB" images. + + :param size: Kernel size, given as (width, height). This must be (3,3) or (5,5). + :param kernel: A sequence containing kernel weights. The kernel will be flipped + vertically before being applied to the image. + :param scale: Scale factor. If given, the result for each pixel is divided by this + value. The default is the sum of the kernel weights. + :param offset: Offset. If given, this value is added to the result, after it has + been divided by the scale factor. + """ + + name = "Kernel" + + def __init__( + self, + size: tuple[int, int], + kernel: Sequence[float], + scale: float | None = None, + offset: float = 0, + ) -> None: + if scale is None: + # default scale is sum of kernel + scale = functools.reduce(lambda a, b: a + b, kernel) + if size[0] * size[1] != len(kernel): + msg = "not enough coefficients in kernel" + raise ValueError(msg) + self.filterargs = size, scale, offset, kernel + + +class RankFilter(Filter): + """ + Create a rank filter. The rank filter sorts all pixels in + a window of the given size, and returns the ``rank``'th value. + + :param size: The kernel size, in pixels. + :param rank: What pixel value to pick. Use 0 for a min filter, + ``size * size / 2`` for a median filter, ``size * size - 1`` + for a max filter, etc. + """ + + name = "Rank" + + def __init__(self, size: int, rank: int) -> None: + self.size = size + self.rank = rank + + def filter(self, image: _imaging.ImagingCore) -> _imaging.ImagingCore: + if image.mode == "P": + msg = "cannot filter palette images" + raise ValueError(msg) + image = image.expand(self.size // 2, self.size // 2) + return image.rankfilter(self.size, self.rank) + + +class MedianFilter(RankFilter): + """ + Create a median filter. Picks the median pixel value in a window with the + given size. + + :param size: The kernel size, in pixels. + """ + + name = "Median" + + def __init__(self, size: int = 3) -> None: + self.size = size + self.rank = size * size // 2 + + +class MinFilter(RankFilter): + """ + Create a min filter. Picks the lowest pixel value in a window with the + given size. + + :param size: The kernel size, in pixels. + """ + + name = "Min" + + def __init__(self, size: int = 3) -> None: + self.size = size + self.rank = 0 + + +class MaxFilter(RankFilter): + """ + Create a max filter. Picks the largest pixel value in a window with the + given size. + + :param size: The kernel size, in pixels. + """ + + name = "Max" + + def __init__(self, size: int = 3) -> None: + self.size = size + self.rank = size * size - 1 + + +class ModeFilter(Filter): + """ + Create a mode filter. Picks the most frequent pixel value in a box with the + given size. Pixel values that occur only once or twice are ignored; if no + pixel value occurs more than twice, the original pixel value is preserved. + + :param size: The kernel size, in pixels. + """ + + name = "Mode" + + def __init__(self, size: int = 3) -> None: + self.size = size + + def filter(self, image: _imaging.ImagingCore) -> _imaging.ImagingCore: + return image.modefilter(self.size) + + +class GaussianBlur(MultibandFilter): + """Blurs the image with a sequence of extended box filters, which + approximates a Gaussian kernel. For details on accuracy see + + + :param radius: Standard deviation of the Gaussian kernel. Either a sequence of two + numbers for x and y, or a single number for both. + """ + + name = "GaussianBlur" + + def __init__(self, radius: float | Sequence[float] = 2) -> None: + self.radius = radius + + def filter(self, image: _imaging.ImagingCore) -> _imaging.ImagingCore: + xy = self.radius + if isinstance(xy, (int, float)): + xy = (xy, xy) + if xy == (0, 0): + return image.copy() + return image.gaussian_blur(xy) + + +class BoxBlur(MultibandFilter): + """Blurs the image by setting each pixel to the average value of the pixels + in a square box extending radius pixels in each direction. + Supports float radius of arbitrary size. Uses an optimized implementation + which runs in linear time relative to the size of the image + for any radius value. + + :param radius: Size of the box in a direction. Either a sequence of two numbers for + x and y, or a single number for both. + + Radius 0 does not blur, returns an identical image. + Radius 1 takes 1 pixel in each direction, i.e. 9 pixels in total. + """ + + name = "BoxBlur" + + def __init__(self, radius: float | Sequence[float]) -> None: + xy = radius if isinstance(radius, (tuple, list)) else (radius, radius) + if xy[0] < 0 or xy[1] < 0: + msg = "radius must be >= 0" + raise ValueError(msg) + self.radius = radius + + def filter(self, image: _imaging.ImagingCore) -> _imaging.ImagingCore: + xy = self.radius + if isinstance(xy, (int, float)): + xy = (xy, xy) + if xy == (0, 0): + return image.copy() + return image.box_blur(xy) + + +class UnsharpMask(MultibandFilter): + """Unsharp mask filter. + + See Wikipedia's entry on `digital unsharp masking`_ for an explanation of + the parameters. + + :param radius: Blur Radius + :param percent: Unsharp strength, in percent + :param threshold: Threshold controls the minimum brightness change that + will be sharpened + + .. _digital unsharp masking: https://en.wikipedia.org/wiki/Unsharp_masking#Digital_unsharp_masking + + """ + + name = "UnsharpMask" + + def __init__( + self, radius: float = 2, percent: int = 150, threshold: int = 3 + ) -> None: + self.radius = radius + self.percent = percent + self.threshold = threshold + + def filter(self, image: _imaging.ImagingCore) -> _imaging.ImagingCore: + return image.unsharp_mask(self.radius, self.percent, self.threshold) + + +class BLUR(BuiltinFilter): + name = "Blur" + # fmt: off + filterargs = (5, 5), 16, 0, ( + 1, 1, 1, 1, 1, + 1, 0, 0, 0, 1, + 1, 0, 0, 0, 1, + 1, 0, 0, 0, 1, + 1, 1, 1, 1, 1, + ) + # fmt: on + + +class CONTOUR(BuiltinFilter): + name = "Contour" + # fmt: off + filterargs = (3, 3), 1, 255, ( + -1, -1, -1, + -1, 8, -1, + -1, -1, -1, + ) + # fmt: on + + +class DETAIL(BuiltinFilter): + name = "Detail" + # fmt: off + filterargs = (3, 3), 6, 0, ( + 0, -1, 0, + -1, 10, -1, + 0, -1, 0, + ) + # fmt: on + + +class EDGE_ENHANCE(BuiltinFilter): + name = "Edge-enhance" + # fmt: off + filterargs = (3, 3), 2, 0, ( + -1, -1, -1, + -1, 10, -1, + -1, -1, -1, + ) + # fmt: on + + +class EDGE_ENHANCE_MORE(BuiltinFilter): + name = "Edge-enhance More" + # fmt: off + filterargs = (3, 3), 1, 0, ( + -1, -1, -1, + -1, 9, -1, + -1, -1, -1, + ) + # fmt: on + + +class EMBOSS(BuiltinFilter): + name = "Emboss" + # fmt: off + filterargs = (3, 3), 1, 128, ( + -1, 0, 0, + 0, 1, 0, + 0, 0, 0, + ) + # fmt: on + + +class FIND_EDGES(BuiltinFilter): + name = "Find Edges" + # fmt: off + filterargs = (3, 3), 1, 0, ( + -1, -1, -1, + -1, 8, -1, + -1, -1, -1, + ) + # fmt: on + + +class SHARPEN(BuiltinFilter): + name = "Sharpen" + # fmt: off + filterargs = (3, 3), 16, 0, ( + -2, -2, -2, + -2, 32, -2, + -2, -2, -2, + ) + # fmt: on + + +class SMOOTH(BuiltinFilter): + name = "Smooth" + # fmt: off + filterargs = (3, 3), 13, 0, ( + 1, 1, 1, + 1, 5, 1, + 1, 1, 1, + ) + # fmt: on + + +class SMOOTH_MORE(BuiltinFilter): + name = "Smooth More" + # fmt: off + filterargs = (5, 5), 100, 0, ( + 1, 1, 1, 1, 1, + 1, 5, 5, 5, 1, + 1, 5, 44, 5, 1, + 1, 5, 5, 5, 1, + 1, 1, 1, 1, 1, + ) + # fmt: on + + +class Color3DLUT(MultibandFilter): + """Three-dimensional color lookup table. + + Transforms 3-channel pixels using the values of the channels as coordinates + in the 3D lookup table and interpolating the nearest elements. + + This method allows you to apply almost any color transformation + in constant time by using pre-calculated decimated tables. + + .. versionadded:: 5.2.0 + + :param size: Size of the table. One int or tuple of (int, int, int). + Minimal size in any dimension is 2, maximum is 65. + :param table: Flat lookup table. A list of ``channels * size**3`` + float elements or a list of ``size**3`` channels-sized + tuples with floats. Channels are changed first, + then first dimension, then second, then third. + Value 0.0 corresponds lowest value of output, 1.0 highest. + :param channels: Number of channels in the table. Could be 3 or 4. + Default is 3. + :param target_mode: A mode for the result image. Should have not less + than ``channels`` channels. Default is ``None``, + which means that mode wouldn't be changed. + """ + + name = "Color 3D LUT" + + def __init__( + self, + size: int | tuple[int, int, int], + table: Sequence[float] | Sequence[Sequence[int]] | NumpyArray, + channels: int = 3, + target_mode: str | None = None, + **kwargs: bool, + ) -> None: + if channels not in (3, 4): + msg = "Only 3 or 4 output channels are supported" + raise ValueError(msg) + self.size = size = self._check_size(size) + self.channels = channels + self.mode = target_mode + + # Hidden flag `_copy_table=False` could be used to avoid extra copying + # of the table if the table is specially made for the constructor. + copy_table = kwargs.get("_copy_table", True) + items = size[0] * size[1] * size[2] + wrong_size = False + + numpy: ModuleType | None = None + if hasattr(table, "shape"): + try: + import numpy + except ImportError: + pass + + if numpy and isinstance(table, numpy.ndarray): + numpy_table: NumpyArray = table + if copy_table: + numpy_table = numpy_table.copy() + + if numpy_table.shape in [ + (items * channels,), + (items, channels), + (size[2], size[1], size[0], channels), + ]: + table = numpy_table.reshape(items * channels) + else: + wrong_size = True + + else: + if copy_table: + table = list(table) + + # Convert to a flat list + if table and isinstance(table[0], (list, tuple)): + raw_table = cast(Sequence[Sequence[int]], table) + flat_table: list[int] = [] + for pixel in raw_table: + if len(pixel) != channels: + msg = ( + "The elements of the table should " + f"have a length of {channels}." + ) + raise ValueError(msg) + flat_table.extend(pixel) + table = flat_table + + if wrong_size or len(table) != items * channels: + msg = ( + "The table should have either channels * size**3 float items " + "or size**3 items of channels-sized tuples with floats. " + f"Table should be: {channels}x{size[0]}x{size[1]}x{size[2]}. " + f"Actual length: {len(table)}" + ) + raise ValueError(msg) + self.table = table + + @staticmethod + def _check_size(size: Any) -> tuple[int, int, int]: + try: + _, _, _ = size + except ValueError as e: + msg = "Size should be either an integer or a tuple of three integers." + raise ValueError(msg) from e + except TypeError: + size = (size, size, size) + size = tuple(int(x) for x in size) + for size_1d in size: + if not 2 <= size_1d <= 65: + msg = "Size should be in [2, 65] range." + raise ValueError(msg) + return size + + @classmethod + def generate( + cls, + size: int | tuple[int, int, int], + callback: Callable[[float, float, float], tuple[float, ...]], + channels: int = 3, + target_mode: str | None = None, + ) -> Color3DLUT: + """Generates new LUT using provided callback. + + :param size: Size of the table. Passed to the constructor. + :param callback: Function with three parameters which correspond + three color channels. Will be called ``size**3`` + times with values from 0.0 to 1.0 and should return + a tuple with ``channels`` elements. + :param channels: The number of channels which should return callback. + :param target_mode: Passed to the constructor of the resulting + lookup table. + """ + size_1d, size_2d, size_3d = cls._check_size(size) + if channels not in (3, 4): + msg = "Only 3 or 4 output channels are supported" + raise ValueError(msg) + + table: list[float] = [0] * (size_1d * size_2d * size_3d * channels) + idx_out = 0 + for b in range(size_3d): + for g in range(size_2d): + for r in range(size_1d): + table[idx_out : idx_out + channels] = callback( + r / (size_1d - 1), g / (size_2d - 1), b / (size_3d - 1) + ) + idx_out += channels + + return cls( + (size_1d, size_2d, size_3d), + table, + channels=channels, + target_mode=target_mode, + _copy_table=False, + ) + + def transform( + self, + callback: Callable[..., tuple[float, ...]], + with_normals: bool = False, + channels: int | None = None, + target_mode: str | None = None, + ) -> Color3DLUT: + """Transforms the table values using provided callback and returns + a new LUT with altered values. + + :param callback: A function which takes old lookup table values + and returns a new set of values. The number + of arguments which function should take is + ``self.channels`` or ``3 + self.channels`` + if ``with_normals`` flag is set. + Should return a tuple of ``self.channels`` or + ``channels`` elements if it is set. + :param with_normals: If true, ``callback`` will be called with + coordinates in the color cube as the first + three arguments. Otherwise, ``callback`` + will be called only with actual color values. + :param channels: The number of channels in the resulting lookup table. + :param target_mode: Passed to the constructor of the resulting + lookup table. + """ + if channels not in (None, 3, 4): + msg = "Only 3 or 4 output channels are supported" + raise ValueError(msg) + ch_in = self.channels + ch_out = channels or ch_in + size_1d, size_2d, size_3d = self.size + + table: list[float] = [0] * (size_1d * size_2d * size_3d * ch_out) + idx_in = 0 + idx_out = 0 + for b in range(size_3d): + for g in range(size_2d): + for r in range(size_1d): + values = self.table[idx_in : idx_in + ch_in] + if with_normals: + values = callback( + r / (size_1d - 1), + g / (size_2d - 1), + b / (size_3d - 1), + *values, + ) + else: + values = callback(*values) + table[idx_out : idx_out + ch_out] = values + idx_in += ch_in + idx_out += ch_out + + return type(self)( + self.size, + table, + channels=ch_out, + target_mode=target_mode or self.mode, + _copy_table=False, + ) + + def __repr__(self) -> str: + r = [ + f"{self.__class__.__name__} from {self.table.__class__.__name__}", + "size={:d}x{:d}x{:d}".format(*self.size), + f"channels={self.channels:d}", + ] + if self.mode: + r.append(f"target_mode={self.mode}") + return "<{}>".format(" ".join(r)) + + def filter(self, image: _imaging.ImagingCore) -> _imaging.ImagingCore: + from . import Image + + return image.color_lut_3d( + self.mode or image.mode, + Image.Resampling.BILINEAR, + self.channels, + self.size, + self.table, + ) diff --git a/Python/venv/lib/python3.12/site-packages/PIL/ImageFont.py b/Python/venv/lib/python3.12/site-packages/PIL/ImageFont.py new file mode 100644 index 0000000..06ea035 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/ImageFont.py @@ -0,0 +1,1309 @@ +# +# The Python Imaging Library. +# $Id$ +# +# PIL raster font management +# +# History: +# 1996-08-07 fl created (experimental) +# 1997-08-25 fl minor adjustments to handle fonts from pilfont 0.3 +# 1999-02-06 fl rewrote most font management stuff in C +# 1999-03-17 fl take pth files into account in load_path (from Richard Jones) +# 2001-02-17 fl added freetype support +# 2001-05-09 fl added TransposedFont wrapper class +# 2002-03-04 fl make sure we have a "L" or "1" font +# 2002-12-04 fl skip non-directory entries in the system path +# 2003-04-29 fl add embedded default font +# 2003-09-27 fl added support for truetype charmap encodings +# +# Todo: +# Adapt to PILFONT2 format (16-bit fonts, compressed, single file) +# +# Copyright (c) 1997-2003 by Secret Labs AB +# Copyright (c) 1996-2003 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +from __future__ import annotations + +import base64 +import os +import sys +import warnings +from enum import IntEnum +from io import BytesIO +from types import ModuleType +from typing import IO, Any, BinaryIO, TypedDict, cast + +from . import Image +from ._typing import StrOrBytesPath +from ._util import DeferredError, is_path + +TYPE_CHECKING = False +if TYPE_CHECKING: + from . import ImageFile + from ._imaging import ImagingFont + from ._imagingft import Font + + +class Axis(TypedDict): + minimum: int | None + default: int | None + maximum: int | None + name: bytes | None + + +class Layout(IntEnum): + BASIC = 0 + RAQM = 1 + + +MAX_STRING_LENGTH = 1_000_000 + + +core: ModuleType | DeferredError +try: + from . import _imagingft as core +except ImportError as ex: + core = DeferredError.new(ex) + + +def _string_length_check(text: str | bytes | bytearray) -> None: + if MAX_STRING_LENGTH is not None and len(text) > MAX_STRING_LENGTH: + msg = "too many characters in string" + raise ValueError(msg) + + +# FIXME: add support for pilfont2 format (see FontFile.py) + +# -------------------------------------------------------------------- +# Font metrics format: +# "PILfont" LF +# fontdescriptor LF +# (optional) key=value... LF +# "DATA" LF +# binary data: 256*10*2 bytes (dx, dy, dstbox, srcbox) +# +# To place a character, cut out srcbox and paste at dstbox, +# relative to the character position. Then move the character +# position according to dx, dy. +# -------------------------------------------------------------------- + + +class ImageFont: + """PIL font wrapper""" + + font: ImagingFont + + def _load_pilfont(self, filename: str) -> None: + with open(filename, "rb") as fp: + image: ImageFile.ImageFile | None = None + root = os.path.splitext(filename)[0] + + for ext in (".png", ".gif", ".pbm"): + if image: + image.close() + try: + fullname = root + ext + image = Image.open(fullname) + except Exception: + pass + else: + if image.mode in ("1", "L"): + break + else: + if image: + image.close() + + msg = f"cannot find glyph data file {root}.{{gif|pbm|png}}" + raise OSError(msg) + + self.file = fullname + + self._load_pilfont_data(fp, image) + image.close() + + def _load_pilfont_data(self, file: IO[bytes], image: Image.Image) -> None: + # check image + if image.mode not in ("1", "L"): + image.close() + + msg = "invalid font image mode" + raise TypeError(msg) + + # read PILfont header + if file.read(8) != b"PILfont\n": + image.close() + + msg = "Not a PILfont file" + raise SyntaxError(msg) + file.readline() + self.info = [] # FIXME: should be a dictionary + while True: + s = file.readline() + if not s or s == b"DATA\n": + break + self.info.append(s) + + # read PILfont metrics + data = file.read(256 * 20) + + self._load(image, data) + + def _load(self, image: Image.Image, data: bytes) -> None: + image.load() + + self.font = Image.core.font(image.im, data) + + def getmask( + self, text: str | bytes, mode: str = "", *args: Any, **kwargs: Any + ) -> Image.core.ImagingCore: + """ + Create a bitmap for the text. + + If the font uses antialiasing, the bitmap should have mode ``L`` and use a + maximum value of 255. Otherwise, it should have mode ``1``. + + :param text: Text to render. + :param mode: Used by some graphics drivers to indicate what mode the + driver prefers; if empty, the renderer may return either + mode. Note that the mode is always a string, to simplify + C-level implementations. + + .. versionadded:: 1.1.5 + + :return: An internal PIL storage memory instance as defined by the + :py:mod:`PIL.Image.core` interface module. + """ + _string_length_check(text) + Image._decompression_bomb_check(self.font.getsize(text)) + return self.font.getmask(text, mode) + + def getbbox( + self, text: str | bytes | bytearray, *args: Any, **kwargs: Any + ) -> tuple[int, int, int, int]: + """ + Returns bounding box (in pixels) of given text. + + .. versionadded:: 9.2.0 + + :param text: Text to render. + + :return: ``(left, top, right, bottom)`` bounding box + """ + _string_length_check(text) + width, height = self.font.getsize(text) + return 0, 0, width, height + + def getlength( + self, text: str | bytes | bytearray, *args: Any, **kwargs: Any + ) -> int: + """ + Returns length (in pixels) of given text. + This is the amount by which following text should be offset. + + .. versionadded:: 9.2.0 + """ + _string_length_check(text) + width, height = self.font.getsize(text) + return width + + +## +# Wrapper for FreeType fonts. Application code should use the +# truetype factory function to create font objects. + + +class FreeTypeFont: + """FreeType font wrapper (requires _imagingft service)""" + + font: Font + font_bytes: bytes + + def __init__( + self, + font: StrOrBytesPath | BinaryIO, + size: float = 10, + index: int = 0, + encoding: str = "", + layout_engine: Layout | None = None, + ) -> None: + # FIXME: use service provider instead + + if isinstance(core, DeferredError): + raise core.ex + + if size <= 0: + msg = f"font size must be greater than 0, not {size}" + raise ValueError(msg) + + self.path = font + self.size = size + self.index = index + self.encoding = encoding + + if layout_engine not in (Layout.BASIC, Layout.RAQM): + layout_engine = Layout.BASIC + if core.HAVE_RAQM: + layout_engine = Layout.RAQM + elif layout_engine == Layout.RAQM and not core.HAVE_RAQM: + warnings.warn( + "Raqm layout was requested, but Raqm is not available. " + "Falling back to basic layout." + ) + layout_engine = Layout.BASIC + + self.layout_engine = layout_engine + + def load_from_bytes(f: IO[bytes]) -> None: + self.font_bytes = f.read() + self.font = core.getfont( + "", size, index, encoding, self.font_bytes, layout_engine + ) + + if is_path(font): + font = os.fspath(font) + if sys.platform == "win32": + font_bytes_path = font if isinstance(font, bytes) else font.encode() + try: + font_bytes_path.decode("ascii") + except UnicodeDecodeError: + # FreeType cannot load fonts with non-ASCII characters on Windows + # So load it into memory first + with open(font, "rb") as f: + load_from_bytes(f) + return + self.font = core.getfont( + font, size, index, encoding, layout_engine=layout_engine + ) + else: + load_from_bytes(cast(IO[bytes], font)) + + def __getstate__(self) -> list[Any]: + return [self.path, self.size, self.index, self.encoding, self.layout_engine] + + def __setstate__(self, state: list[Any]) -> None: + path, size, index, encoding, layout_engine = state + FreeTypeFont.__init__(self, path, size, index, encoding, layout_engine) + + def getname(self) -> tuple[str | None, str | None]: + """ + :return: A tuple of the font family (e.g. Helvetica) and the font style + (e.g. Bold) + """ + return self.font.family, self.font.style + + def getmetrics(self) -> tuple[int, int]: + """ + :return: A tuple of the font ascent (the distance from the baseline to + the highest outline point) and descent (the distance from the + baseline to the lowest outline point, a negative value) + """ + return self.font.ascent, self.font.descent + + def getlength( + self, + text: str | bytes, + mode: str = "", + direction: str | None = None, + features: list[str] | None = None, + language: str | None = None, + ) -> float: + """ + Returns length (in pixels with 1/64 precision) of given text when rendered + in font with provided direction, features, and language. + + This is the amount by which following text should be offset. + Text bounding box may extend past the length in some fonts, + e.g. when using italics or accents. + + The result is returned as a float; it is a whole number if using basic layout. + + Note that the sum of two lengths may not equal the length of a concatenated + string due to kerning. If you need to adjust for kerning, include the following + character and subtract its length. + + For example, instead of :: + + hello = font.getlength("Hello") + world = font.getlength("World") + hello_world = hello + world # not adjusted for kerning + assert hello_world == font.getlength("HelloWorld") # may fail + + use :: + + hello = font.getlength("HelloW") - font.getlength("W") # adjusted for kerning + world = font.getlength("World") + hello_world = hello + world # adjusted for kerning + assert hello_world == font.getlength("HelloWorld") # True + + or disable kerning with (requires libraqm) :: + + hello = draw.textlength("Hello", font, features=["-kern"]) + world = draw.textlength("World", font, features=["-kern"]) + hello_world = hello + world # kerning is disabled, no need to adjust + assert hello_world == draw.textlength("HelloWorld", font, features=["-kern"]) + + .. versionadded:: 8.0.0 + + :param text: Text to measure. + :param mode: Used by some graphics drivers to indicate what mode the + driver prefers; if empty, the renderer may return either + mode. Note that the mode is always a string, to simplify + C-level implementations. + + :param direction: Direction of the text. It can be 'rtl' (right to + left), 'ltr' (left to right) or 'ttb' (top to bottom). + Requires libraqm. + + :param features: A list of OpenType font features to be used during text + layout. This is usually used to turn on optional + font features that are not enabled by default, + for example 'dlig' or 'ss01', but can be also + used to turn off default font features for + example '-liga' to disable ligatures or '-kern' + to disable kerning. To get all supported + features, see + https://learn.microsoft.com/en-us/typography/opentype/spec/featurelist + Requires libraqm. + + :param language: Language of the text. Different languages may use + different glyph shapes or ligatures. This parameter tells + the font which language the text is in, and to apply the + correct substitutions as appropriate, if available. + It should be a `BCP 47 language code + `_ + Requires libraqm. + + :return: Either width for horizontal text, or height for vertical text. + """ + _string_length_check(text) + return self.font.getlength(text, mode, direction, features, language) / 64 + + def getbbox( + self, + text: str | bytes, + mode: str = "", + direction: str | None = None, + features: list[str] | None = None, + language: str | None = None, + stroke_width: float = 0, + anchor: str | None = None, + ) -> tuple[float, float, float, float]: + """ + Returns bounding box (in pixels) of given text relative to given anchor + when rendered in font with provided direction, features, and language. + + Use :py:meth:`getlength()` to get the offset of following text with + 1/64 pixel precision. The bounding box includes extra margins for + some fonts, e.g. italics or accents. + + .. versionadded:: 8.0.0 + + :param text: Text to render. + :param mode: Used by some graphics drivers to indicate what mode the + driver prefers; if empty, the renderer may return either + mode. Note that the mode is always a string, to simplify + C-level implementations. + + :param direction: Direction of the text. It can be 'rtl' (right to + left), 'ltr' (left to right) or 'ttb' (top to bottom). + Requires libraqm. + + :param features: A list of OpenType font features to be used during text + layout. This is usually used to turn on optional + font features that are not enabled by default, + for example 'dlig' or 'ss01', but can be also + used to turn off default font features for + example '-liga' to disable ligatures or '-kern' + to disable kerning. To get all supported + features, see + https://learn.microsoft.com/en-us/typography/opentype/spec/featurelist + Requires libraqm. + + :param language: Language of the text. Different languages may use + different glyph shapes or ligatures. This parameter tells + the font which language the text is in, and to apply the + correct substitutions as appropriate, if available. + It should be a `BCP 47 language code + `_ + Requires libraqm. + + :param stroke_width: The width of the text stroke. + + :param anchor: The text anchor alignment. Determines the relative location of + the anchor to the text. The default alignment is top left, + specifically ``la`` for horizontal text and ``lt`` for + vertical text. See :ref:`text-anchors` for details. + + :return: ``(left, top, right, bottom)`` bounding box + """ + _string_length_check(text) + size, offset = self.font.getsize( + text, mode, direction, features, language, anchor + ) + left, top = offset[0] - stroke_width, offset[1] - stroke_width + width, height = size[0] + 2 * stroke_width, size[1] + 2 * stroke_width + return left, top, left + width, top + height + + def getmask( + self, + text: str | bytes, + mode: str = "", + direction: str | None = None, + features: list[str] | None = None, + language: str | None = None, + stroke_width: float = 0, + anchor: str | None = None, + ink: int = 0, + start: tuple[float, float] | None = None, + ) -> Image.core.ImagingCore: + """ + Create a bitmap for the text. + + If the font uses antialiasing, the bitmap should have mode ``L`` and use a + maximum value of 255. If the font has embedded color data, the bitmap + should have mode ``RGBA``. Otherwise, it should have mode ``1``. + + :param text: Text to render. + :param mode: Used by some graphics drivers to indicate what mode the + driver prefers; if empty, the renderer may return either + mode. Note that the mode is always a string, to simplify + C-level implementations. + + .. versionadded:: 1.1.5 + + :param direction: Direction of the text. It can be 'rtl' (right to + left), 'ltr' (left to right) or 'ttb' (top to bottom). + Requires libraqm. + + .. versionadded:: 4.2.0 + + :param features: A list of OpenType font features to be used during text + layout. This is usually used to turn on optional + font features that are not enabled by default, + for example 'dlig' or 'ss01', but can be also + used to turn off default font features for + example '-liga' to disable ligatures or '-kern' + to disable kerning. To get all supported + features, see + https://learn.microsoft.com/en-us/typography/opentype/spec/featurelist + Requires libraqm. + + .. versionadded:: 4.2.0 + + :param language: Language of the text. Different languages may use + different glyph shapes or ligatures. This parameter tells + the font which language the text is in, and to apply the + correct substitutions as appropriate, if available. + It should be a `BCP 47 language code + `_ + Requires libraqm. + + .. versionadded:: 6.0.0 + + :param stroke_width: The width of the text stroke. + + .. versionadded:: 6.2.0 + + :param anchor: The text anchor alignment. Determines the relative location of + the anchor to the text. The default alignment is top left, + specifically ``la`` for horizontal text and ``lt`` for + vertical text. See :ref:`text-anchors` for details. + + .. versionadded:: 8.0.0 + + :param ink: Foreground ink for rendering in RGBA mode. + + .. versionadded:: 8.0.0 + + :param start: Tuple of horizontal and vertical offset, as text may render + differently when starting at fractional coordinates. + + .. versionadded:: 9.4.0 + + :return: An internal PIL storage memory instance as defined by the + :py:mod:`PIL.Image.core` interface module. + """ + return self.getmask2( + text, + mode, + direction=direction, + features=features, + language=language, + stroke_width=stroke_width, + anchor=anchor, + ink=ink, + start=start, + )[0] + + def getmask2( + self, + text: str | bytes, + mode: str = "", + direction: str | None = None, + features: list[str] | None = None, + language: str | None = None, + stroke_width: float = 0, + anchor: str | None = None, + ink: int = 0, + start: tuple[float, float] | None = None, + *args: Any, + **kwargs: Any, + ) -> tuple[Image.core.ImagingCore, tuple[int, int]]: + """ + Create a bitmap for the text. + + If the font uses antialiasing, the bitmap should have mode ``L`` and use a + maximum value of 255. If the font has embedded color data, the bitmap + should have mode ``RGBA``. Otherwise, it should have mode ``1``. + + :param text: Text to render. + :param mode: Used by some graphics drivers to indicate what mode the + driver prefers; if empty, the renderer may return either + mode. Note that the mode is always a string, to simplify + C-level implementations. + + .. versionadded:: 1.1.5 + + :param direction: Direction of the text. It can be 'rtl' (right to + left), 'ltr' (left to right) or 'ttb' (top to bottom). + Requires libraqm. + + .. versionadded:: 4.2.0 + + :param features: A list of OpenType font features to be used during text + layout. This is usually used to turn on optional + font features that are not enabled by default, + for example 'dlig' or 'ss01', but can be also + used to turn off default font features for + example '-liga' to disable ligatures or '-kern' + to disable kerning. To get all supported + features, see + https://learn.microsoft.com/en-us/typography/opentype/spec/featurelist + Requires libraqm. + + .. versionadded:: 4.2.0 + + :param language: Language of the text. Different languages may use + different glyph shapes or ligatures. This parameter tells + the font which language the text is in, and to apply the + correct substitutions as appropriate, if available. + It should be a `BCP 47 language code + `_ + Requires libraqm. + + .. versionadded:: 6.0.0 + + :param stroke_width: The width of the text stroke. + + .. versionadded:: 6.2.0 + + :param anchor: The text anchor alignment. Determines the relative location of + the anchor to the text. The default alignment is top left, + specifically ``la`` for horizontal text and ``lt`` for + vertical text. See :ref:`text-anchors` for details. + + .. versionadded:: 8.0.0 + + :param ink: Foreground ink for rendering in RGBA mode. + + .. versionadded:: 8.0.0 + + :param start: Tuple of horizontal and vertical offset, as text may render + differently when starting at fractional coordinates. + + .. versionadded:: 9.4.0 + + :return: A tuple of an internal PIL storage memory instance as defined by the + :py:mod:`PIL.Image.core` interface module, and the text offset, the + gap between the starting coordinate and the first marking + """ + _string_length_check(text) + if start is None: + start = (0, 0) + + def fill(width: int, height: int) -> Image.core.ImagingCore: + size = (width, height) + Image._decompression_bomb_check(size) + return Image.core.fill("RGBA" if mode == "RGBA" else "L", size) + + return self.font.render( + text, + fill, + mode, + direction, + features, + language, + stroke_width, + kwargs.get("stroke_filled", False), + anchor, + ink, + start, + ) + + def font_variant( + self, + font: StrOrBytesPath | BinaryIO | None = None, + size: float | None = None, + index: int | None = None, + encoding: str | None = None, + layout_engine: Layout | None = None, + ) -> FreeTypeFont: + """ + Create a copy of this FreeTypeFont object, + using any specified arguments to override the settings. + + Parameters are identical to the parameters used to initialize this + object. + + :return: A FreeTypeFont object. + """ + if font is None: + try: + font = BytesIO(self.font_bytes) + except AttributeError: + font = self.path + return FreeTypeFont( + font=font, + size=self.size if size is None else size, + index=self.index if index is None else index, + encoding=self.encoding if encoding is None else encoding, + layout_engine=layout_engine or self.layout_engine, + ) + + def get_variation_names(self) -> list[bytes]: + """ + :returns: A list of the named styles in a variation font. + :exception OSError: If the font is not a variation font. + """ + names = [] + for name in self.font.getvarnames(): + name = name.replace(b"\x00", b"") + if name not in names: + names.append(name) + return names + + def set_variation_by_name(self, name: str | bytes) -> None: + """ + :param name: The name of the style. + :exception OSError: If the font is not a variation font. + """ + names = self.get_variation_names() + if not isinstance(name, bytes): + name = name.encode() + index = names.index(name) + 1 + + if index == getattr(self, "_last_variation_index", None): + # When the same name is set twice in a row, + # there is an 'unknown freetype error' + # https://savannah.nongnu.org/bugs/?56186 + return + self._last_variation_index = index + + self.font.setvarname(index) + + def get_variation_axes(self) -> list[Axis]: + """ + :returns: A list of the axes in a variation font. + :exception OSError: If the font is not a variation font. + """ + axes = self.font.getvaraxes() + for axis in axes: + if axis["name"]: + axis["name"] = axis["name"].replace(b"\x00", b"") + return axes + + def set_variation_by_axes(self, axes: list[float]) -> None: + """ + :param axes: A list of values for each axis. + :exception OSError: If the font is not a variation font. + """ + self.font.setvaraxes(axes) + + +class TransposedFont: + """Wrapper for writing rotated or mirrored text""" + + def __init__( + self, font: ImageFont | FreeTypeFont, orientation: Image.Transpose | None = None + ): + """ + Wrapper that creates a transposed font from any existing font + object. + + :param font: A font object. + :param orientation: An optional orientation. If given, this should + be one of Image.Transpose.FLIP_LEFT_RIGHT, Image.Transpose.FLIP_TOP_BOTTOM, + Image.Transpose.ROTATE_90, Image.Transpose.ROTATE_180, or + Image.Transpose.ROTATE_270. + """ + self.font = font + self.orientation = orientation # any 'transpose' argument, or None + + def getmask( + self, text: str | bytes, mode: str = "", *args: Any, **kwargs: Any + ) -> Image.core.ImagingCore: + im = self.font.getmask(text, mode, *args, **kwargs) + if self.orientation is not None: + return im.transpose(self.orientation) + return im + + def getbbox( + self, text: str | bytes, *args: Any, **kwargs: Any + ) -> tuple[int, int, float, float]: + # TransposedFont doesn't support getmask2, move top-left point to (0, 0) + # this has no effect on ImageFont and simulates anchor="lt" for FreeTypeFont + left, top, right, bottom = self.font.getbbox(text, *args, **kwargs) + width = right - left + height = bottom - top + if self.orientation in (Image.Transpose.ROTATE_90, Image.Transpose.ROTATE_270): + return 0, 0, height, width + return 0, 0, width, height + + def getlength(self, text: str | bytes, *args: Any, **kwargs: Any) -> float: + if self.orientation in (Image.Transpose.ROTATE_90, Image.Transpose.ROTATE_270): + msg = "text length is undefined for text rotated by 90 or 270 degrees" + raise ValueError(msg) + return self.font.getlength(text, *args, **kwargs) + + +def load(filename: str) -> ImageFont: + """ + Load a font file. This function loads a font object from the given + bitmap font file, and returns the corresponding font object. For loading TrueType + or OpenType fonts instead, see :py:func:`~PIL.ImageFont.truetype`. + + :param filename: Name of font file. + :return: A font object. + :exception OSError: If the file could not be read. + """ + f = ImageFont() + f._load_pilfont(filename) + return f + + +def truetype( + font: StrOrBytesPath | BinaryIO, + size: float = 10, + index: int = 0, + encoding: str = "", + layout_engine: Layout | None = None, +) -> FreeTypeFont: + """ + Load a TrueType or OpenType font from a file or file-like object, + and create a font object. This function loads a font object from the given + file or file-like object, and creates a font object for a font of the given + size. For loading bitmap fonts instead, see :py:func:`~PIL.ImageFont.load` + and :py:func:`~PIL.ImageFont.load_path`. + + Pillow uses FreeType to open font files. On Windows, be aware that FreeType + will keep the file open as long as the FreeTypeFont object exists. Windows + limits the number of files that can be open in C at once to 512, so if many + fonts are opened simultaneously and that limit is approached, an + ``OSError`` may be thrown, reporting that FreeType "cannot open resource". + A workaround would be to copy the file(s) into memory, and open that instead. + + This function requires the _imagingft service. + + :param font: A filename or file-like object containing a TrueType font. + If the file is not found in this filename, the loader may also + search in other directories, such as: + + * The :file:`fonts/` directory on Windows, + * :file:`/Library/Fonts/`, :file:`/System/Library/Fonts/` + and :file:`~/Library/Fonts/` on macOS. + * :file:`~/.local/share/fonts`, :file:`/usr/local/share/fonts`, + and :file:`/usr/share/fonts` on Linux; or those specified by + the ``XDG_DATA_HOME`` and ``XDG_DATA_DIRS`` environment variables + for user-installed and system-wide fonts, respectively. + + :param size: The requested size, in pixels. + :param index: Which font face to load (default is first available face). + :param encoding: Which font encoding to use (default is Unicode). Possible + encodings include (see the FreeType documentation for more + information): + + * "unic" (Unicode) + * "symb" (Microsoft Symbol) + * "ADOB" (Adobe Standard) + * "ADBE" (Adobe Expert) + * "ADBC" (Adobe Custom) + * "armn" (Apple Roman) + * "sjis" (Shift JIS) + * "gb " (PRC) + * "big5" + * "wans" (Extended Wansung) + * "joha" (Johab) + * "lat1" (Latin-1) + + This specifies the character set to use. It does not alter the + encoding of any text provided in subsequent operations. + :param layout_engine: Which layout engine to use, if available: + :attr:`.ImageFont.Layout.BASIC` or :attr:`.ImageFont.Layout.RAQM`. + If it is available, Raqm layout will be used by default. + Otherwise, basic layout will be used. + + Raqm layout is recommended for all non-English text. If Raqm layout + is not required, basic layout will have better performance. + + You can check support for Raqm layout using + :py:func:`PIL.features.check_feature` with ``feature="raqm"``. + + .. versionadded:: 4.2.0 + :return: A font object. + :exception OSError: If the file could not be read. + :exception ValueError: If the font size is not greater than zero. + """ + + def freetype(font: StrOrBytesPath | BinaryIO) -> FreeTypeFont: + return FreeTypeFont(font, size, index, encoding, layout_engine) + + try: + return freetype(font) + except OSError: + if not is_path(font): + raise + ttf_filename = os.path.basename(font) + + dirs = [] + if sys.platform == "win32": + # check the windows font repository + # NOTE: must use uppercase WINDIR, to work around bugs in + # 1.5.2's os.environ.get() + windir = os.environ.get("WINDIR") + if windir: + dirs.append(os.path.join(windir, "fonts")) + elif sys.platform in ("linux", "linux2"): + data_home = os.environ.get("XDG_DATA_HOME") + if not data_home: + # The freedesktop spec defines the following default directory for + # when XDG_DATA_HOME is unset or empty. This user-level directory + # takes precedence over system-level directories. + data_home = os.path.expanduser("~/.local/share") + xdg_dirs = [data_home] + + data_dirs = os.environ.get("XDG_DATA_DIRS") + if not data_dirs: + # Similarly, defaults are defined for the system-level directories + data_dirs = "/usr/local/share:/usr/share" + xdg_dirs += data_dirs.split(":") + + dirs += [os.path.join(xdg_dir, "fonts") for xdg_dir in xdg_dirs] + elif sys.platform == "darwin": + dirs += [ + "/Library/Fonts", + "/System/Library/Fonts", + os.path.expanduser("~/Library/Fonts"), + ] + + ext = os.path.splitext(ttf_filename)[1] + first_font_with_a_different_extension = None + for directory in dirs: + for walkroot, walkdir, walkfilenames in os.walk(directory): + for walkfilename in walkfilenames: + if ext and walkfilename == ttf_filename: + return freetype(os.path.join(walkroot, walkfilename)) + elif not ext and os.path.splitext(walkfilename)[0] == ttf_filename: + fontpath = os.path.join(walkroot, walkfilename) + if os.path.splitext(fontpath)[1] == ".ttf": + return freetype(fontpath) + if not ext and first_font_with_a_different_extension is None: + first_font_with_a_different_extension = fontpath + if first_font_with_a_different_extension: + return freetype(first_font_with_a_different_extension) + raise + + +def load_path(filename: str | bytes) -> ImageFont: + """ + Load font file. Same as :py:func:`~PIL.ImageFont.load`, but searches for a + bitmap font along the Python path. + + :param filename: Name of font file. + :return: A font object. + :exception OSError: If the file could not be read. + """ + if not isinstance(filename, str): + filename = filename.decode("utf-8") + for directory in sys.path: + try: + return load(os.path.join(directory, filename)) + except OSError: # noqa: PERF203 + pass + msg = f'cannot find font file "{filename}" in sys.path' + if os.path.exists(filename): + msg += f', did you mean ImageFont.load("{filename}") instead?' + + raise OSError(msg) + + +def load_default_imagefont() -> ImageFont: + f = ImageFont() + f._load_pilfont_data( + # courB08 + BytesIO(base64.b64decode(b""" +UElMZm9udAo7Ozs7OzsxMDsKREFUQQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAA//8AAQAAAAAAAAABAAEA +BgAAAAH/+gADAAAAAQAAAAMABgAGAAAAAf/6AAT//QADAAAABgADAAYAAAAA//kABQABAAYAAAAL +AAgABgAAAAD/+AAFAAEACwAAABAACQAGAAAAAP/5AAUAAAAQAAAAFQAHAAYAAP////oABQAAABUA +AAAbAAYABgAAAAH/+QAE//wAGwAAAB4AAwAGAAAAAf/5AAQAAQAeAAAAIQAIAAYAAAAB//kABAAB +ACEAAAAkAAgABgAAAAD/+QAE//0AJAAAACgABAAGAAAAAP/6AAX//wAoAAAALQAFAAYAAAAB//8A +BAACAC0AAAAwAAMABgAAAAD//AAF//0AMAAAADUAAQAGAAAAAf//AAMAAAA1AAAANwABAAYAAAAB +//kABQABADcAAAA7AAgABgAAAAD/+QAFAAAAOwAAAEAABwAGAAAAAP/5AAYAAABAAAAARgAHAAYA +AAAA//kABQAAAEYAAABLAAcABgAAAAD/+QAFAAAASwAAAFAABwAGAAAAAP/5AAYAAABQAAAAVgAH +AAYAAAAA//kABQAAAFYAAABbAAcABgAAAAD/+QAFAAAAWwAAAGAABwAGAAAAAP/5AAUAAABgAAAA +ZQAHAAYAAAAA//kABQAAAGUAAABqAAcABgAAAAD/+QAFAAAAagAAAG8ABwAGAAAAAf/8AAMAAABv +AAAAcQAEAAYAAAAA//wAAwACAHEAAAB0AAYABgAAAAD/+gAE//8AdAAAAHgABQAGAAAAAP/7AAT/ +/gB4AAAAfAADAAYAAAAB//oABf//AHwAAACAAAUABgAAAAD/+gAFAAAAgAAAAIUABgAGAAAAAP/5 +AAYAAQCFAAAAiwAIAAYAAP////oABgAAAIsAAACSAAYABgAA////+gAFAAAAkgAAAJgABgAGAAAA +AP/6AAUAAACYAAAAnQAGAAYAAP////oABQAAAJ0AAACjAAYABgAA////+gAFAAAAowAAAKkABgAG +AAD////6AAUAAACpAAAArwAGAAYAAAAA//oABQAAAK8AAAC0AAYABgAA////+gAGAAAAtAAAALsA +BgAGAAAAAP/6AAQAAAC7AAAAvwAGAAYAAP////oABQAAAL8AAADFAAYABgAA////+gAGAAAAxQAA +AMwABgAGAAD////6AAUAAADMAAAA0gAGAAYAAP////oABQAAANIAAADYAAYABgAA////+gAGAAAA +2AAAAN8ABgAGAAAAAP/6AAUAAADfAAAA5AAGAAYAAP////oABQAAAOQAAADqAAYABgAAAAD/+gAF +AAEA6gAAAO8ABwAGAAD////6AAYAAADvAAAA9gAGAAYAAAAA//oABQAAAPYAAAD7AAYABgAA//// ++gAFAAAA+wAAAQEABgAGAAD////6AAYAAAEBAAABCAAGAAYAAP////oABgAAAQgAAAEPAAYABgAA +////+gAGAAABDwAAARYABgAGAAAAAP/6AAYAAAEWAAABHAAGAAYAAP////oABgAAARwAAAEjAAYA +BgAAAAD/+gAFAAABIwAAASgABgAGAAAAAf/5AAQAAQEoAAABKwAIAAYAAAAA//kABAABASsAAAEv +AAgABgAAAAH/+QAEAAEBLwAAATIACAAGAAAAAP/5AAX//AEyAAABNwADAAYAAAAAAAEABgACATcA +AAE9AAEABgAAAAH/+QAE//wBPQAAAUAAAwAGAAAAAP/7AAYAAAFAAAABRgAFAAYAAP////kABQAA +AUYAAAFMAAcABgAAAAD/+wAFAAABTAAAAVEABQAGAAAAAP/5AAYAAAFRAAABVwAHAAYAAAAA//sA +BQAAAVcAAAFcAAUABgAAAAD/+QAFAAABXAAAAWEABwAGAAAAAP/7AAYAAgFhAAABZwAHAAYAAP// +//kABQAAAWcAAAFtAAcABgAAAAD/+QAGAAABbQAAAXMABwAGAAAAAP/5AAQAAgFzAAABdwAJAAYA +AP////kABgAAAXcAAAF+AAcABgAAAAD/+QAGAAABfgAAAYQABwAGAAD////7AAUAAAGEAAABigAF +AAYAAP////sABQAAAYoAAAGQAAUABgAAAAD/+wAFAAABkAAAAZUABQAGAAD////7AAUAAgGVAAAB +mwAHAAYAAAAA//sABgACAZsAAAGhAAcABgAAAAD/+wAGAAABoQAAAacABQAGAAAAAP/7AAYAAAGn +AAABrQAFAAYAAAAA//kABgAAAa0AAAGzAAcABgAA////+wAGAAABswAAAboABQAGAAD////7AAUA +AAG6AAABwAAFAAYAAP////sABgAAAcAAAAHHAAUABgAAAAD/+wAGAAABxwAAAc0ABQAGAAD////7 +AAYAAgHNAAAB1AAHAAYAAAAA//sABQAAAdQAAAHZAAUABgAAAAH/+QAFAAEB2QAAAd0ACAAGAAAA +Av/6AAMAAQHdAAAB3gAHAAYAAAAA//kABAABAd4AAAHiAAgABgAAAAD/+wAF//0B4gAAAecAAgAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAB +//sAAwACAecAAAHpAAcABgAAAAD/+QAFAAEB6QAAAe4ACAAGAAAAAP/5AAYAAAHuAAAB9AAHAAYA +AAAA//oABf//AfQAAAH5AAUABgAAAAD/+QAGAAAB+QAAAf8ABwAGAAAAAv/5AAMAAgH/AAACAAAJ +AAYAAAAA//kABQABAgAAAAIFAAgABgAAAAH/+gAE//sCBQAAAggAAQAGAAAAAP/5AAYAAAIIAAAC +DgAHAAYAAAAB//kABf/+Ag4AAAISAAUABgAA////+wAGAAACEgAAAhkABQAGAAAAAP/7AAX//gIZ +AAACHgADAAYAAAAA//wABf/9Ah4AAAIjAAEABgAAAAD/+QAHAAACIwAAAioABwAGAAAAAP/6AAT/ ++wIqAAACLgABAAYAAAAA//kABP/8Ai4AAAIyAAMABgAAAAD/+gAFAAACMgAAAjcABgAGAAAAAf/5 +AAT//QI3AAACOgAEAAYAAAAB//kABP/9AjoAAAI9AAQABgAAAAL/+QAE//sCPQAAAj8AAgAGAAD/ +///7AAYAAgI/AAACRgAHAAYAAAAA//kABgABAkYAAAJMAAgABgAAAAH//AAD//0CTAAAAk4AAQAG +AAAAAf//AAQAAgJOAAACUQADAAYAAAAB//kABP/9AlEAAAJUAAQABgAAAAH/+QAF//4CVAAAAlgA +BQAGAAD////7AAYAAAJYAAACXwAFAAYAAP////kABgAAAl8AAAJmAAcABgAA////+QAGAAACZgAA +Am0ABwAGAAD////5AAYAAAJtAAACdAAHAAYAAAAA//sABQACAnQAAAJ5AAcABgAA////9wAGAAAC +eQAAAoAACQAGAAD////3AAYAAAKAAAAChwAJAAYAAP////cABgAAAocAAAKOAAkABgAA////9wAG +AAACjgAAApUACQAGAAD////4AAYAAAKVAAACnAAIAAYAAP////cABgAAApwAAAKjAAkABgAA//// ++gAGAAACowAAAqoABgAGAAAAAP/6AAUAAgKqAAACrwAIAAYAAP////cABQAAAq8AAAK1AAkABgAA +////9wAFAAACtQAAArsACQAGAAD////3AAUAAAK7AAACwQAJAAYAAP////gABQAAAsEAAALHAAgA +BgAAAAD/9wAEAAACxwAAAssACQAGAAAAAP/3AAQAAALLAAACzwAJAAYAAAAA//cABAAAAs8AAALT +AAkABgAAAAD/+AAEAAAC0wAAAtcACAAGAAD////6AAUAAALXAAAC3QAGAAYAAP////cABgAAAt0A +AALkAAkABgAAAAD/9wAFAAAC5AAAAukACQAGAAAAAP/3AAUAAALpAAAC7gAJAAYAAAAA//cABQAA +Au4AAALzAAkABgAAAAD/9wAFAAAC8wAAAvgACQAGAAAAAP/4AAUAAAL4AAAC/QAIAAYAAAAA//oA +Bf//Av0AAAMCAAUABgAA////+gAGAAADAgAAAwkABgAGAAD////3AAYAAAMJAAADEAAJAAYAAP// +//cABgAAAxAAAAMXAAkABgAA////9wAGAAADFwAAAx4ACQAGAAD////4AAYAAAAAAAoABwASAAYA +AP////cABgAAAAcACgAOABMABgAA////+gAFAAAADgAKABQAEAAGAAD////6AAYAAAAUAAoAGwAQ +AAYAAAAA//gABgAAABsACgAhABIABgAAAAD/+AAGAAAAIQAKACcAEgAGAAAAAP/4AAYAAAAnAAoA +LQASAAYAAAAA//gABgAAAC0ACgAzABIABgAAAAD/+QAGAAAAMwAKADkAEQAGAAAAAP/3AAYAAAA5 +AAoAPwATAAYAAP////sABQAAAD8ACgBFAA8ABgAAAAD/+wAFAAIARQAKAEoAEQAGAAAAAP/4AAUA +AABKAAoATwASAAYAAAAA//gABQAAAE8ACgBUABIABgAAAAD/+AAFAAAAVAAKAFkAEgAGAAAAAP/5 +AAUAAABZAAoAXgARAAYAAAAA//gABgAAAF4ACgBkABIABgAAAAD/+AAGAAAAZAAKAGoAEgAGAAAA +AP/4AAYAAABqAAoAcAASAAYAAAAA//kABgAAAHAACgB2ABEABgAAAAD/+AAFAAAAdgAKAHsAEgAG +AAD////4AAYAAAB7AAoAggASAAYAAAAA//gABQAAAIIACgCHABIABgAAAAD/+AAFAAAAhwAKAIwA +EgAGAAAAAP/4AAUAAACMAAoAkQASAAYAAAAA//gABQAAAJEACgCWABIABgAAAAD/+QAFAAAAlgAK +AJsAEQAGAAAAAP/6AAX//wCbAAoAoAAPAAYAAAAA//oABQABAKAACgClABEABgAA////+AAGAAAA +pQAKAKwAEgAGAAD////4AAYAAACsAAoAswASAAYAAP////gABgAAALMACgC6ABIABgAA////+QAG +AAAAugAKAMEAEQAGAAD////4AAYAAgDBAAoAyAAUAAYAAP////kABQACAMgACgDOABMABgAA//// ++QAGAAIAzgAKANUAEw== +""")), + Image.open(BytesIO(base64.b64decode(b""" +iVBORw0KGgoAAAANSUhEUgAAAx4AAAAUAQAAAAArMtZoAAAEwElEQVR4nABlAJr/AHVE4czCI/4u +Mc4b7vuds/xzjz5/3/7u/n9vMe7vnfH/9++vPn/xyf5zhxzjt8GHw8+2d83u8x27199/nxuQ6Od9 +M43/5z2I+9n9ZtmDBwMQECDRQw/eQIQohJXxpBCNVE6QCCAAAAD//wBlAJr/AgALyj1t/wINwq0g +LeNZUworuN1cjTPIzrTX6ofHWeo3v336qPzfEwRmBnHTtf95/fglZK5N0PDgfRTslpGBvz7LFc4F +IUXBWQGjQ5MGCx34EDFPwXiY4YbYxavpnhHFrk14CDAAAAD//wBlAJr/AgKqRooH2gAgPeggvUAA +Bu2WfgPoAwzRAABAAAAAAACQgLz/3Uv4Gv+gX7BJgDeeGP6AAAD1NMDzKHD7ANWr3loYbxsAD791 +NAADfcoIDyP44K/jv4Y63/Z+t98Ovt+ub4T48LAAAAD//wBlAJr/AuplMlADJAAAAGuAphWpqhMx +in0A/fRvAYBABPgBwBUgABBQ/sYAyv9g0bCHgOLoGAAAAAAAREAAwI7nr0ArYpow7aX8//9LaP/9 +SjdavWA8ePHeBIKB//81/83ndznOaXx379wAAAD//wBlAJr/AqDxW+D3AABAAbUh/QMnbQag/gAY +AYDAAACgtgD/gOqAAAB5IA/8AAAk+n9w0AAA8AAAmFRJuPo27ciC0cD5oeW4E7KA/wD3ECMAn2tt +y8PgwH8AfAxFzC0JzeAMtratAsC/ffwAAAD//wBlAJr/BGKAyCAA4AAAAvgeYTAwHd1kmQF5chkG +ABoMIHcL5xVpTfQbUqzlAAAErwAQBgAAEOClA5D9il08AEh/tUzdCBsXkbgACED+woQg8Si9VeqY +lODCn7lmF6NhnAEYgAAA/NMIAAAAAAD//2JgjLZgVGBg5Pv/Tvpc8hwGBjYGJADjHDrAwPzAjv/H +/Wf3PzCwtzcwHmBgYGcwbZz8wHaCAQMDOwMDQ8MCBgYOC3W7mp+f0w+wHOYxO3OG+e376hsMZjk3 +AAAAAP//YmCMY2A4wMAIN5e5gQETPD6AZisDAwMDgzSDAAPjByiHcQMDAwMDg1nOze1lByRu5/47 +c4859311AYNZzg0AAAAA//9iYGDBYihOIIMuwIjGL39/fwffA8b//xv/P2BPtzzHwCBjUQAAAAD/ +/yLFBrIBAAAA//9i1HhcwdhizX7u8NZNzyLbvT97bfrMf/QHI8evOwcSqGUJAAAA//9iYBB81iSw +pEE170Qrg5MIYydHqwdDQRMrAwcVrQAAAAD//2J4x7j9AAMDn8Q/BgYLBoaiAwwMjPdvMDBYM1Tv +oJodAAAAAP//Yqo/83+dxePWlxl3npsel9lvLfPcqlE9725C+acfVLMEAAAA//9i+s9gwCoaaGMR +evta/58PTEWzr21hufPjA8N+qlnBwAAAAAD//2JiWLci5v1+HmFXDqcnULE/MxgYGBj+f6CaJQAA +AAD//2Ji2FrkY3iYpYC5qDeGgeEMAwPDvwQBBoYvcTwOVLMEAAAA//9isDBgkP///0EOg9z35v// +Gc/eeW7BwPj5+QGZhANUswMAAAD//2JgqGBgYGBgqEMXlvhMPUsAAAAA//8iYDd1AAAAAP//AwDR +w7IkEbzhVQAAAABJRU5ErkJggg== +"""))), + ) + return f + + +def load_default(size: float | None = None) -> FreeTypeFont | ImageFont: + """If FreeType support is available, load a version of Aileron Regular, + https://dotcolon.net/fonts/aileron, with a more limited character set. + + Otherwise, load a "better than nothing" font. + + .. versionadded:: 1.1.4 + + :param size: The font size of Aileron Regular. + + .. versionadded:: 10.1.0 + + :return: A font object. + """ + if isinstance(core, ModuleType) or size is not None: + return truetype( + BytesIO(base64.b64decode(b""" +AAEAAAAPAIAAAwBwRkZUTYwDlUAAADFoAAAAHEdERUYAqADnAAAo8AAAACRHUE9ThhmITwAAKfgAA +AduR1NVQnHxefoAACkUAAAA4k9TLzJovoHLAAABeAAAAGBjbWFw5lFQMQAAA6gAAAGqZ2FzcP//AA +MAACjoAAAACGdseWYmRXoPAAAGQAAAHfhoZWFkE18ayQAAAPwAAAA2aGhlYQboArEAAAE0AAAAJGh +tdHjjERZ8AAAB2AAAAdBsb2NhuOexrgAABVQAAADqbWF4cAC7AEYAAAFYAAAAIG5hbWUr+h5lAAAk +OAAAA6Jwb3N0D3oPTQAAJ9wAAAEKAAEAAAABGhxJDqIhXw889QALA+gAAAAA0Bqf2QAAAADhCh2h/ +2r/LgOxAyAAAAAIAAIAAAAAAAAAAQAAA8r/GgAAA7j/av9qA7EAAQAAAAAAAAAAAAAAAAAAAHQAAQ +AAAHQAQwAFAAAAAAACAAAAAQABAAAAQAAAAAAAAAADAfoBkAAFAAgCigJYAAAASwKKAlgAAAFeADI +BPgAAAAAFAAAAAAAAAAAAAAcAAAAAAAAAAAAAAABVS1dOAEAAIPsCAwL/GgDIA8oA5iAAAJMAAAAA +AhICsgAAACAAAwH0AAAAAAAAAU0AAADYAAAA8gA5AVMAVgJEAEYCRAA1AuQAKQKOAEAAsAArATsAZ +AE7AB4CMABVAkQAUADc/+EBEgAgANwAJQEv//sCRAApAkQAggJEADwCRAAtAkQAIQJEADkCRAArAk +QAMgJEACwCRAAxANwAJQDc/+ECRABnAkQAUAJEAEQB8wAjA1QANgJ/AB0CcwBkArsALwLFAGQCSwB +kAjcAZALGAC8C2gBkAQgAZAIgADcCYQBkAj8AZANiAGQCzgBkAuEALwJWAGQC3QAvAmsAZAJJADQC +ZAAiAqoAXgJuACADuAAaAnEAGQJFABMCTwAuATMAYgEv//sBJwAiAkQAUAH0ADIBLAApAhMAJAJjA +EoCEQAeAmcAHgIlAB4BIgAVAmcAHgJRAEoA7gA+AOn/8wIKAEoA9wBGA1cASgJRAEoCSgAeAmMASg +JnAB4BSgBKAcsAGAE5ABQCUABCAgIAAQMRAAEB4v/6AgEAAQHOABQBLwBAAPoAYAEvACECRABNA0Y +AJAItAHgBKgAcAkQAUAEsAHQAygAgAi0AOQD3ADYA9wAWAaEANgGhABYCbAAlAYMAeAGDADkA6/9q +AhsAFAIKABUB/QAVAAAAAwAAAAMAAAAcAAEAAAAAAKQAAwABAAAAHAAEAIgAAAAeABAAAwAOAH4Aq +QCrALEAtAC3ALsgGSAdICYgOiBEISL7Av//AAAAIACpAKsAsAC0ALcAuyAYIBwgJiA5IEQhIvsB// +//4/+5/7j/tP+y/7D/reBR4E/gR+A14CzfTwVxAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAEGAAABAAAAAAAAAAECAAAAAgAAAAAAAAAAAAAAAAAAAAEAAAMEBQYHCAkKCwwNDg8QERIT +FBUWFxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMT +U5PUFFSU1RVVldYWVpbXF1eX2BhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAA +AAAAAAYnFmAAAAAABlAAAAAAAAAAAAAAAAAAAAAAAAAAAAY2htAAAAAAAAAABrbGlqAAAAAHAAbm9 +ycwBnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmACYAJgAmAD4AUgCCAMoBCgFO +AVwBcgGIAaYBvAHKAdYB6AH2AgwCIAJKAogCpgLWAw4DIgNkA5wDugPUA+gD/AQQBEYEogS8BPoFJ +gVSBWoFgAWwBcoF1gX6BhQGJAZMBmgGiga0BuIHGgdUB2YHkAeiB8AH3AfyCAoIHAgqCDoITghcCG +oIogjSCPoJKglYCXwJwgnqCgIKKApACl4Klgq8CtwLDAs8C1YLjAuyC9oL7gwMDCYMSAxgDKAMrAz +qDQoNTA1mDYQNoA2uDcAN2g3oDfYODA4iDkoOXA5sDnoOnA7EDvwAAAAFAAAAAAH0ArwAAwAGAAkA +DAAPAAAxESERAxMhExcRASELARETAfT6qv6syKr+jgFUqsiqArz9RAGLAP/+1P8B/v3VAP8BLP4CA +P8AAgA5//IAuQKyAAMACwAANyMDMwIyFhQGIiY0oE4MZk84JCQ4JLQB/v3AJDgkJDgAAgBWAeUBPA +LfAAMABwAAEyMnMxcjJzOmRgpagkYKWgHl+vr6AAAAAAIARgAAAf4CsgAbAB8AAAEHMxUjByM3Iwc +jNyM1MzcjNTM3MwczNzMHMxUrAQczAZgdZXEvOi9bLzovWmYdZXEvOi9bLzovWp9bHlsBn4w429vb +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 +EQQ/BCQvEjQCFQZWFSEWQv40AcxCDiUblhP9uSEAAAAAAAAWAQ4AAQAAAAAAAAATACgAAQAAAAAAA +QAHAEwAAQAAAAAAAgAHAGQAAQAAAAAAAwAaAKIAAQAAAAAABAAHAM0AAQAAAAAABQA8AU8AAQAAAA +AABgAPAawAAQAAAAAACAALAdQAAQAAAAAACQALAfgAAQAAAAAACwAXAjQAAQAAAAAADAAXAnwAAwA +BBAkAAAAmAAAAAwABBAkAAQAOADwAAwABBAkAAgAOAFQAAwABBAkAAwA0AGwAAwABBAkABAAOAL0A +AwABBAkABQB4ANUAAwABBAkABgAeAYwAAwABBAkACAAWAbwAAwABBAkACQAWAeAAAwABBAkACwAuA +gQAAwABBAkADAAuAkwATgBvACAAUgBpAGcAaAB0AHMAIABSAGUAcwBlAHIAdgBlAGQALgAATm8gUm +lnaHRzIFJlc2VydmVkLgAAQQBpAGwAZQByAG8AbgAAQWlsZXJvbgAAUgBlAGcAdQBsAGEAcgAAUmV +ndWxhcgAAMQAuADEAMAAyADsAVQBLAFcATgA7AEEAaQBsAGUAcgBvAG4ALQBSAGUAZwB1AGwAYQBy +AAAxLjEwMjtVS1dOO0FpbGVyb24tUmVndWxhcgAAQQBpAGwAZQByAG8AbgAAQWlsZXJvbgAAVgBlA +HIAcwBpAG8AbgAgADEALgAxADAAMgA7AFAAUwAgADAAMAAxAC4AMQAwADIAOwBoAG8AdABjAG8Abg +B2ACAAMQAuADAALgA3ADAAOwBtAGEAawBlAG8AdABmAC4AbABpAGIAMgAuADUALgA1ADgAMwAyADk +AAFZlcnNpb24gMS4xMDI7UFMgMDAxLjEwMjtob3Rjb252IDEuMC43MDttYWtlb3RmLmxpYjIuNS41 +ODMyOQAAQQBpAGwAZQByAG8AbgAtAFIAZQBnAHUAbABhAHIAAEFpbGVyb24tUmVndWxhcgAAUwBvA +HIAYQAgAFMAYQBnAGEAbgBvAABTb3JhIFNhZ2FubwAAUwBvAHIAYQAgAFMAYQBnAGEAbgBvAABTb3 +JhIFNhZ2FubwAAaAB0AHQAcAA6AC8ALwB3AHcAdwAuAGQAbwB0AGMAbwBsAG8AbgAuAG4AZQB0AAB +odHRwOi8vd3d3LmRvdGNvbG9uLm5ldAAAaAB0AHQAcAA6AC8ALwB3AHcAdwAuAGQAbwB0AGMAbwBs +AG8AbgAuAG4AZQB0AABodHRwOi8vd3d3LmRvdGNvbG9uLm5ldAAAAAACAAAAAAAA/4MAMgAAAAAAA +AAAAAAAAAAAAAAAAAAAAHQAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATAB +QAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAA +xADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0A +TgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYABhAIsAqQCDAJMAjQDDAKoAtgC3A +LQAtQCrAL4AvwC8AIwAwADBAAAAAAAB//8AAgABAAAADAAAABwAAAACAAIAAwBxAAEAcgBzAAIABA +AAAAIAAAABAAAACgBMAGYAAkRGTFQADmxhdG4AGgAEAAAAAP//AAEAAAAWAANDQVQgAB5NT0wgABZ +ST00gABYAAP//AAEAAAAA//8AAgAAAAEAAmxpZ2EADmxvY2wAFAAAAAEAAQAAAAEAAAACAAYAEAAG +AAAAAgASADQABAAAAAEATAADAAAAAgAQABYAAQAcAAAAAQABAE8AAQABAGcAAQABAE8AAwAAAAIAE +AAWAAEAHAAAAAEAAQAvAAEAAQBnAAEAAQAvAAEAGgABAAgAAgAGAAwAcwACAE8AcgACAEwAAQABAE +kAAAABAAAACgBGAGAAAkRGTFQADmxhdG4AHAAEAAAAAP//AAIAAAABABYAA0NBVCAAFk1PTCAAFlJ +PTSAAFgAA//8AAgAAAAEAAmNwc3AADmtlcm4AFAAAAAEAAAAAAAEAAQACAAYADgABAAAAAQASAAIA +AAACAB4ANgABAAoABQAFAAoAAgABACQAPQAAAAEAEgAEAAAAAQAMAAEAOP/nAAEAAQAkAAIGigAEA +AAFJAXKABoAGQAA//gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAD/sv+4/+z/7v/MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAD/xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/9T/6AAAAAD/8QAA +ABD/vQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/7gAAAAAAAAAAAAAAAAAA//MAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAAP/5AAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/gAAD/4AAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//L/9AAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAA/+gAAAAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/zAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/mAAAAAAAAAAAAAAAAAAD +/4gAA//AAAAAA//YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/+AAAAAAAAP/OAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/zv/qAAAAAP/0AAAACAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/ZAAD/egAA/1kAAAAA/5D/rgAAAAAAAAAAAA +AAAAAAAAAAAAAAAAD/9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAD/8AAA/7b/8P+wAAD/8P/E/98AAAAA/8P/+P/0//oAAAAAAAAAAAAA//gA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+AAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/w//C/9MAAP/SAAD/9wAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAD/yAAA/+kAAAAA//QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/9wAAAAD//QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAP/2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAP/cAAAAAAAAAAAAAAAA/7YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAP/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/6AAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAkAFAAEAAAAAQACwAAABcA +BgAAAAAAAAAIAA4AAAAAAAsAEgAAAAAAAAATABkAAwANAAAAAQAJAAAAAAAAAAAAAAAAAAAAGAAAA +AAABwAAAAAAAAAAAAAAFQAFAAAAAAAYABgAAAAUAAAACgAAAAwAAgAPABEAFgAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAEAEQBdAAYAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAcAAAAAAAAABwAAAAAACAAAAAAAAAAAAAcAAAAHAAAAEwAJ +ABUADgAPAAAACwAQAAAAAAAAAAAAAAAAAAUAGAACAAIAAgAAAAIAGAAXAAAAGAAAABYAFgACABYAA +gAWAAAAEQADAAoAFAAMAA0ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAEgAGAAEAHgAkAC +YAJwApACoALQAuAC8AMgAzADcAOAA5ADoAPAA9AEUASABOAE8AUgBTAFUAVwBZAFoAWwBcAF0AcwA +AAAAAAQAAAADa3tfFAAAAANAan9kAAAAA4QodoQ== +""")), + 10 if size is None else size, + layout_engine=Layout.BASIC, + ) + return load_default_imagefont() diff --git a/Python/venv/lib/python3.12/site-packages/PIL/ImageGrab.py b/Python/venv/lib/python3.12/site-packages/PIL/ImageGrab.py new file mode 100644 index 0000000..66ee6dd --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/ImageGrab.py @@ -0,0 +1,231 @@ +# +# The Python Imaging Library +# $Id$ +# +# screen grabber +# +# History: +# 2001-04-26 fl created +# 2001-09-17 fl use builtin driver, if present +# 2002-11-19 fl added grabclipboard support +# +# Copyright (c) 2001-2002 by Secret Labs AB +# Copyright (c) 2001-2002 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import io +import os +import shutil +import subprocess +import sys +import tempfile + +from . import Image + +TYPE_CHECKING = False +if TYPE_CHECKING: + from . import ImageWin + + +def grab( + bbox: tuple[int, int, int, int] | None = None, + include_layered_windows: bool = False, + all_screens: bool = False, + xdisplay: str | None = None, + window: int | ImageWin.HWND | None = None, +) -> Image.Image: + im: Image.Image + if xdisplay is None: + if sys.platform == "darwin": + fh, filepath = tempfile.mkstemp(".png") + os.close(fh) + args = ["screencapture"] + if window is not None: + args += ["-l", str(window)] + elif bbox: + left, top, right, bottom = bbox + args += ["-R", f"{left},{top},{right-left},{bottom-top}"] + args += ["-x", filepath] + retcode = subprocess.call(args) + if retcode: + raise subprocess.CalledProcessError(retcode, args) + im = Image.open(filepath) + im.load() + os.unlink(filepath) + if bbox: + if window is not None: + # Determine if the window was in Retina mode or not + # by capturing it without the shadow, + # and checking how different the width is + fh, filepath = tempfile.mkstemp(".png") + os.close(fh) + args = ["screencapture", "-l", str(window), "-o", "-x", filepath] + retcode = subprocess.call(args) + if retcode: + raise subprocess.CalledProcessError(retcode, args) + with Image.open(filepath) as im_no_shadow: + retina = im.width - im_no_shadow.width > 100 + os.unlink(filepath) + + # Since screencapture's -R does not work with -l, + # crop the image manually + if retina: + left, top, right, bottom = bbox + im_cropped = im.resize( + (right - left, bottom - top), + box=tuple(coord * 2 for coord in bbox), + ) + else: + im_cropped = im.crop(bbox) + im.close() + return im_cropped + else: + im_resized = im.resize((right - left, bottom - top)) + im.close() + return im_resized + return im + elif sys.platform == "win32": + if window is not None: + all_screens = -1 + offset, size, data = Image.core.grabscreen_win32( + include_layered_windows, + all_screens, + int(window) if window is not None else 0, + ) + im = Image.frombytes( + "RGB", + size, + data, + # RGB, 32-bit line padding, origin lower left corner + "raw", + "BGR", + (size[0] * 3 + 3) & -4, + -1, + ) + if bbox: + x0, y0 = offset + left, top, right, bottom = bbox + im = im.crop((left - x0, top - y0, right - x0, bottom - y0)) + return im + # Cast to Optional[str] needed for Windows and macOS. + display_name: str | None = xdisplay + try: + if not Image.core.HAVE_XCB: + msg = "Pillow was built without XCB support" + raise OSError(msg) + size, data = Image.core.grabscreen_x11(display_name) + except OSError: + if display_name is None and sys.platform not in ("darwin", "win32"): + if shutil.which("gnome-screenshot"): + args = ["gnome-screenshot", "-f"] + elif shutil.which("grim"): + args = ["grim"] + elif shutil.which("spectacle"): + args = ["spectacle", "-n", "-b", "-f", "-o"] + else: + raise + fh, filepath = tempfile.mkstemp(".png") + os.close(fh) + args.append(filepath) + retcode = subprocess.call(args) + if retcode: + raise subprocess.CalledProcessError(retcode, args) + im = Image.open(filepath) + im.load() + os.unlink(filepath) + if bbox: + im_cropped = im.crop(bbox) + im.close() + return im_cropped + return im + else: + raise + else: + im = Image.frombytes("RGB", size, data, "raw", "BGRX", size[0] * 4, 1) + if bbox: + im = im.crop(bbox) + return im + + +def grabclipboard() -> Image.Image | list[str] | None: + if sys.platform == "darwin": + p = subprocess.run( + ["osascript", "-e", "get the clipboard as «class PNGf»"], + capture_output=True, + ) + if p.returncode != 0: + return None + + import binascii + + data = io.BytesIO(binascii.unhexlify(p.stdout[11:-3])) + return Image.open(data) + elif sys.platform == "win32": + fmt, data = Image.core.grabclipboard_win32() + if fmt == "file": # CF_HDROP + import struct + + o = struct.unpack_from("I", data)[0] + if data[16] == 0: + files = data[o:].decode("mbcs").split("\0") + else: + files = data[o:].decode("utf-16le").split("\0") + return files[: files.index("")] + if isinstance(data, bytes): + data = io.BytesIO(data) + if fmt == "png": + from . import PngImagePlugin + + return PngImagePlugin.PngImageFile(data) + elif fmt == "DIB": + from . import BmpImagePlugin + + return BmpImagePlugin.DibImageFile(data) + return None + else: + if os.getenv("WAYLAND_DISPLAY"): + session_type = "wayland" + elif os.getenv("DISPLAY"): + session_type = "x11" + else: # Session type check failed + session_type = None + + if shutil.which("wl-paste") and session_type in ("wayland", None): + args = ["wl-paste", "-t", "image"] + elif shutil.which("xclip") and session_type in ("x11", None): + args = ["xclip", "-selection", "clipboard", "-t", "image/png", "-o"] + else: + msg = "wl-paste or xclip is required for ImageGrab.grabclipboard() on Linux" + raise NotImplementedError(msg) + + p = subprocess.run(args, capture_output=True) + if p.returncode != 0: + err = p.stderr + for silent_error in [ + # wl-paste, when the clipboard is empty + b"Nothing is copied", + # Ubuntu/Debian wl-paste, when the clipboard is empty + b"No selection", + # Ubuntu/Debian wl-paste, when an image isn't available + b"No suitable type of content copied", + # wl-paste or Ubuntu/Debian xclip, when an image isn't available + b" not available", + # xclip, when an image isn't available + b"cannot convert ", + # xclip, when the clipboard isn't initialized + b"xclip: Error: There is no owner for the ", + ]: + if silent_error in err: + return None + msg = f"{args[0]} error" + if err: + msg += f": {err.strip().decode()}" + raise ChildProcessError(msg) + + data = io.BytesIO(p.stdout) + im = Image.open(data) + im.load() + return im diff --git a/Python/venv/lib/python3.12/site-packages/PIL/ImageMath.py b/Python/venv/lib/python3.12/site-packages/PIL/ImageMath.py new file mode 100644 index 0000000..dfdc50c --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/ImageMath.py @@ -0,0 +1,314 @@ +# +# The Python Imaging Library +# $Id$ +# +# a simple math add-on for the Python Imaging Library +# +# History: +# 1999-02-15 fl Original PIL Plus release +# 2005-05-05 fl Simplified and cleaned up for PIL 1.1.6 +# 2005-09-12 fl Fixed int() and float() for Python 2.4.1 +# +# Copyright (c) 1999-2005 by Secret Labs AB +# Copyright (c) 2005 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import builtins + +from . import Image, _imagingmath + +TYPE_CHECKING = False +if TYPE_CHECKING: + from collections.abc import Callable + from types import CodeType + from typing import Any + + +class _Operand: + """Wraps an image operand, providing standard operators""" + + def __init__(self, im: Image.Image): + self.im = im + + def __fixup(self, im1: _Operand | float) -> Image.Image: + # convert image to suitable mode + if isinstance(im1, _Operand): + # argument was an image. + if im1.im.mode in ("1", "L"): + return im1.im.convert("I") + elif im1.im.mode in ("I", "F"): + return im1.im + else: + msg = f"unsupported mode: {im1.im.mode}" + raise ValueError(msg) + else: + # argument was a constant + if isinstance(im1, (int, float)) and self.im.mode in ("1", "L", "I"): + return Image.new("I", self.im.size, im1) + else: + return Image.new("F", self.im.size, im1) + + def apply( + self, + op: str, + im1: _Operand | float, + im2: _Operand | float | None = None, + mode: str | None = None, + ) -> _Operand: + im_1 = self.__fixup(im1) + if im2 is None: + # unary operation + out = Image.new(mode or im_1.mode, im_1.size, None) + try: + op = getattr(_imagingmath, f"{op}_{im_1.mode}") + except AttributeError as e: + msg = f"bad operand type for '{op}'" + raise TypeError(msg) from e + _imagingmath.unop(op, out.getim(), im_1.getim()) + else: + # binary operation + im_2 = self.__fixup(im2) + if im_1.mode != im_2.mode: + # convert both arguments to floating point + if im_1.mode != "F": + im_1 = im_1.convert("F") + if im_2.mode != "F": + im_2 = im_2.convert("F") + if im_1.size != im_2.size: + # crop both arguments to a common size + size = ( + min(im_1.size[0], im_2.size[0]), + min(im_1.size[1], im_2.size[1]), + ) + if im_1.size != size: + im_1 = im_1.crop((0, 0) + size) + if im_2.size != size: + im_2 = im_2.crop((0, 0) + size) + out = Image.new(mode or im_1.mode, im_1.size, None) + try: + op = getattr(_imagingmath, f"{op}_{im_1.mode}") + except AttributeError as e: + msg = f"bad operand type for '{op}'" + raise TypeError(msg) from e + _imagingmath.binop(op, out.getim(), im_1.getim(), im_2.getim()) + return _Operand(out) + + # unary operators + def __bool__(self) -> bool: + # an image is "true" if it contains at least one non-zero pixel + return self.im.getbbox() is not None + + def __abs__(self) -> _Operand: + return self.apply("abs", self) + + def __pos__(self) -> _Operand: + return self + + def __neg__(self) -> _Operand: + return self.apply("neg", self) + + # binary operators + def __add__(self, other: _Operand | float) -> _Operand: + return self.apply("add", self, other) + + def __radd__(self, other: _Operand | float) -> _Operand: + return self.apply("add", other, self) + + def __sub__(self, other: _Operand | float) -> _Operand: + return self.apply("sub", self, other) + + def __rsub__(self, other: _Operand | float) -> _Operand: + return self.apply("sub", other, self) + + def __mul__(self, other: _Operand | float) -> _Operand: + return self.apply("mul", self, other) + + def __rmul__(self, other: _Operand | float) -> _Operand: + return self.apply("mul", other, self) + + def __truediv__(self, other: _Operand | float) -> _Operand: + return self.apply("div", self, other) + + def __rtruediv__(self, other: _Operand | float) -> _Operand: + return self.apply("div", other, self) + + def __mod__(self, other: _Operand | float) -> _Operand: + return self.apply("mod", self, other) + + def __rmod__(self, other: _Operand | float) -> _Operand: + return self.apply("mod", other, self) + + def __pow__(self, other: _Operand | float) -> _Operand: + return self.apply("pow", self, other) + + def __rpow__(self, other: _Operand | float) -> _Operand: + return self.apply("pow", other, self) + + # bitwise + def __invert__(self) -> _Operand: + return self.apply("invert", self) + + def __and__(self, other: _Operand | float) -> _Operand: + return self.apply("and", self, other) + + def __rand__(self, other: _Operand | float) -> _Operand: + return self.apply("and", other, self) + + def __or__(self, other: _Operand | float) -> _Operand: + return self.apply("or", self, other) + + def __ror__(self, other: _Operand | float) -> _Operand: + return self.apply("or", other, self) + + def __xor__(self, other: _Operand | float) -> _Operand: + return self.apply("xor", self, other) + + def __rxor__(self, other: _Operand | float) -> _Operand: + return self.apply("xor", other, self) + + def __lshift__(self, other: _Operand | float) -> _Operand: + return self.apply("lshift", self, other) + + def __rshift__(self, other: _Operand | float) -> _Operand: + return self.apply("rshift", self, other) + + # logical + def __eq__(self, other: _Operand | float) -> _Operand: # type: ignore[override] + return self.apply("eq", self, other) + + def __ne__(self, other: _Operand | float) -> _Operand: # type: ignore[override] + return self.apply("ne", self, other) + + def __lt__(self, other: _Operand | float) -> _Operand: + return self.apply("lt", self, other) + + def __le__(self, other: _Operand | float) -> _Operand: + return self.apply("le", self, other) + + def __gt__(self, other: _Operand | float) -> _Operand: + return self.apply("gt", self, other) + + def __ge__(self, other: _Operand | float) -> _Operand: + return self.apply("ge", self, other) + + +# conversions +def imagemath_int(self: _Operand) -> _Operand: + return _Operand(self.im.convert("I")) + + +def imagemath_float(self: _Operand) -> _Operand: + return _Operand(self.im.convert("F")) + + +# logical +def imagemath_equal(self: _Operand, other: _Operand | float | None) -> _Operand: + return self.apply("eq", self, other, mode="I") + + +def imagemath_notequal(self: _Operand, other: _Operand | float | None) -> _Operand: + return self.apply("ne", self, other, mode="I") + + +def imagemath_min(self: _Operand, other: _Operand | float | None) -> _Operand: + return self.apply("min", self, other) + + +def imagemath_max(self: _Operand, other: _Operand | float | None) -> _Operand: + return self.apply("max", self, other) + + +def imagemath_convert(self: _Operand, mode: str) -> _Operand: + return _Operand(self.im.convert(mode)) + + +ops = { + "int": imagemath_int, + "float": imagemath_float, + "equal": imagemath_equal, + "notequal": imagemath_notequal, + "min": imagemath_min, + "max": imagemath_max, + "convert": imagemath_convert, +} + + +def lambda_eval(expression: Callable[[dict[str, Any]], Any], **kw: Any) -> Any: + """ + Returns the result of an image function. + + :py:mod:`~PIL.ImageMath` only supports single-layer images. To process multi-band + images, use the :py:meth:`~PIL.Image.Image.split` method or + :py:func:`~PIL.Image.merge` function. + + :param expression: A function that receives a dictionary. + :param **kw: Values to add to the function's dictionary. + :return: The expression result. This is usually an image object, but can + also be an integer, a floating point value, or a pixel tuple, + depending on the expression. + """ + + args: dict[str, Any] = ops.copy() + args.update(kw) + for k, v in args.items(): + if isinstance(v, Image.Image): + args[k] = _Operand(v) + + out = expression(args) + try: + return out.im + except AttributeError: + return out + + +def unsafe_eval(expression: str, **kw: Any) -> Any: + """ + Evaluates an image expression. This uses Python's ``eval()`` function to process + the expression string, and carries the security risks of doing so. It is not + recommended to process expressions without considering this. + :py:meth:`~lambda_eval` is a more secure alternative. + + :py:mod:`~PIL.ImageMath` only supports single-layer images. To process multi-band + images, use the :py:meth:`~PIL.Image.Image.split` method or + :py:func:`~PIL.Image.merge` function. + + :param expression: A string containing a Python-style expression. + :param **kw: Values to add to the evaluation context. + :return: The evaluated expression. This is usually an image object, but can + also be an integer, a floating point value, or a pixel tuple, + depending on the expression. + """ + + # build execution namespace + args: dict[str, Any] = ops.copy() + for k in kw: + if "__" in k or hasattr(builtins, k): + msg = f"'{k}' not allowed" + raise ValueError(msg) + + args.update(kw) + for k, v in args.items(): + if isinstance(v, Image.Image): + args[k] = _Operand(v) + + compiled_code = compile(expression, "", "eval") + + def scan(code: CodeType) -> None: + for const in code.co_consts: + if type(const) is type(compiled_code): + scan(const) + + for name in code.co_names: + if name not in args and name != "abs": + msg = f"'{name}' not allowed" + raise ValueError(msg) + + scan(compiled_code) + out = builtins.eval(expression, {"__builtins": {"abs": abs}}, args) + try: + return out.im + except AttributeError: + return out diff --git a/Python/venv/lib/python3.12/site-packages/PIL/ImageMode.py b/Python/venv/lib/python3.12/site-packages/PIL/ImageMode.py new file mode 100644 index 0000000..b7c6c86 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/ImageMode.py @@ -0,0 +1,85 @@ +# +# The Python Imaging Library. +# $Id$ +# +# standard mode descriptors +# +# History: +# 2006-03-20 fl Added +# +# Copyright (c) 2006 by Secret Labs AB. +# Copyright (c) 2006 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import sys +from functools import lru_cache +from typing import NamedTuple + + +class ModeDescriptor(NamedTuple): + """Wrapper for mode strings.""" + + mode: str + bands: tuple[str, ...] + basemode: str + basetype: str + typestr: str + + def __str__(self) -> str: + return self.mode + + +@lru_cache +def getmode(mode: str) -> ModeDescriptor: + """Gets a mode descriptor for the given mode.""" + endian = "<" if sys.byteorder == "little" else ">" + + modes = { + # core modes + # Bits need to be extended to bytes + "1": ("L", "L", ("1",), "|b1"), + "L": ("L", "L", ("L",), "|u1"), + "I": ("L", "I", ("I",), f"{endian}i4"), + "F": ("L", "F", ("F",), f"{endian}f4"), + "P": ("P", "L", ("P",), "|u1"), + "RGB": ("RGB", "L", ("R", "G", "B"), "|u1"), + "RGBX": ("RGB", "L", ("R", "G", "B", "X"), "|u1"), + "RGBA": ("RGB", "L", ("R", "G", "B", "A"), "|u1"), + "CMYK": ("RGB", "L", ("C", "M", "Y", "K"), "|u1"), + "YCbCr": ("RGB", "L", ("Y", "Cb", "Cr"), "|u1"), + # UNDONE - unsigned |u1i1i1 + "LAB": ("RGB", "L", ("L", "A", "B"), "|u1"), + "HSV": ("RGB", "L", ("H", "S", "V"), "|u1"), + # extra experimental modes + "RGBa": ("RGB", "L", ("R", "G", "B", "a"), "|u1"), + "LA": ("L", "L", ("L", "A"), "|u1"), + "La": ("L", "L", ("L", "a"), "|u1"), + "PA": ("RGB", "L", ("P", "A"), "|u1"), + } + if mode in modes: + base_mode, base_type, bands, type_str = modes[mode] + return ModeDescriptor(mode, bands, base_mode, base_type, type_str) + + mapping_modes = { + # I;16 == I;16L, and I;32 == I;32L + "I;16": "u2", + "I;16BS": ">i2", + "I;16N": f"{endian}u2", + "I;16NS": f"{endian}i2", + "I;32": "u4", + "I;32L": "i4", + "I;32LS": " +from __future__ import annotations + +import re + +from . import Image, _imagingmorph + +LUT_SIZE = 1 << 9 + +# fmt: off +ROTATION_MATRIX = [ + 6, 3, 0, + 7, 4, 1, + 8, 5, 2, +] +MIRROR_MATRIX = [ + 2, 1, 0, + 5, 4, 3, + 8, 7, 6, +] +# fmt: on + + +class LutBuilder: + """A class for building a MorphLut from a descriptive language + + The input patterns is a list of a strings sequences like these:: + + 4:(... + .1. + 111)->1 + + (whitespaces including linebreaks are ignored). The option 4 + describes a series of symmetry operations (in this case a + 4-rotation), the pattern is described by: + + - . or X - Ignore + - 1 - Pixel is on + - 0 - Pixel is off + + The result of the operation is described after "->" string. + + The default is to return the current pixel value, which is + returned if no other match is found. + + Operations: + + - 4 - 4 way rotation + - N - Negate + - 1 - Dummy op for no other operation (an op must always be given) + - M - Mirroring + + Example:: + + lb = LutBuilder(patterns = ["4:(... .1. 111)->1"]) + lut = lb.build_lut() + + """ + + def __init__( + self, patterns: list[str] | None = None, op_name: str | None = None + ) -> None: + """ + :param patterns: A list of input patterns, or None. + :param op_name: The name of a known pattern. One of "corner", "dilation4", + "dilation8", "erosion4", "erosion8" or "edge". + :exception Exception: If the op_name is not recognized. + """ + self.lut: bytearray | None = None + if op_name is not None: + known_patterns = { + "corner": ["1:(... ... ...)->0", "4:(00. 01. ...)->1"], + "dilation4": ["4:(... .0. .1.)->1"], + "dilation8": ["4:(... .0. .1.)->1", "4:(... .0. ..1)->1"], + "erosion4": ["4:(... .1. .0.)->0"], + "erosion8": ["4:(... .1. .0.)->0", "4:(... .1. ..0)->0"], + "edge": [ + "1:(... ... ...)->0", + "4:(.0. .1. ...)->1", + "4:(01. .1. ...)->1", + ], + } + if op_name not in known_patterns: + msg = f"Unknown pattern {op_name}!" + raise Exception(msg) + + self.patterns = known_patterns[op_name] + elif patterns is not None: + self.patterns = patterns + else: + self.patterns = [] + + def add_patterns(self, patterns: list[str]) -> None: + """ + Append to list of patterns. + + :param patterns: Additional patterns. + """ + self.patterns += patterns + + def build_default_lut(self) -> bytearray: + """ + Set the current LUT, and return it. + + This is the default LUT that patterns will be applied against when building. + """ + symbols = [0, 1] + m = 1 << 4 # pos of current pixel + self.lut = bytearray(symbols[(i & m) > 0] for i in range(LUT_SIZE)) + return self.lut + + def get_lut(self) -> bytearray | None: + """ + Returns the current LUT + """ + return self.lut + + def _string_permute(self, pattern: str, permutation: list[int]) -> str: + """Takes a pattern and a permutation and returns the + string permuted according to the permutation list. + """ + assert len(permutation) == 9 + return "".join(pattern[p] for p in permutation) + + def _pattern_permute( + self, basic_pattern: str, options: str, basic_result: int + ) -> list[tuple[str, int]]: + """Takes a basic pattern and its result and clones + the pattern according to the modifications described in the $options + parameter. It returns a list of all cloned patterns.""" + patterns = [(basic_pattern, basic_result)] + + # rotations + if "4" in options: + res = patterns[-1][1] + for i in range(4): + patterns.append( + (self._string_permute(patterns[-1][0], ROTATION_MATRIX), res) + ) + # mirror + if "M" in options: + n = len(patterns) + for pattern, res in patterns[:n]: + patterns.append((self._string_permute(pattern, MIRROR_MATRIX), res)) + + # negate + if "N" in options: + n = len(patterns) + for pattern, res in patterns[:n]: + # Swap 0 and 1 + pattern = pattern.replace("0", "Z").replace("1", "0").replace("Z", "1") + res = 1 - int(res) + patterns.append((pattern, res)) + + return patterns + + def build_lut(self) -> bytearray: + """Compile all patterns into a morphology LUT, and return it. + + This is the data to be passed into MorphOp.""" + self.build_default_lut() + assert self.lut is not None + patterns = [] + + # Parse and create symmetries of the patterns strings + for p in self.patterns: + m = re.search(r"(\w):?\s*\((.+?)\)\s*->\s*(\d)", p.replace("\n", "")) + if not m: + msg = 'Syntax error in pattern "' + p + '"' + raise Exception(msg) + options = m.group(1) + pattern = m.group(2) + result = int(m.group(3)) + + # Get rid of spaces + pattern = pattern.replace(" ", "").replace("\n", "") + + patterns += self._pattern_permute(pattern, options, result) + + # Compile the patterns into regular expressions for speed + compiled_patterns = [] + for pattern in patterns: + p = pattern[0].replace(".", "X").replace("X", "[01]") + compiled_patterns.append((re.compile(p), pattern[1])) + + # Step through table and find patterns that match. + # Note that all the patterns are searched. The last one found takes priority + for i in range(LUT_SIZE): + # Build the bit pattern + bitpattern = bin(i)[2:] + bitpattern = ("0" * (9 - len(bitpattern)) + bitpattern)[::-1] + + for pattern, r in compiled_patterns: + if pattern.match(bitpattern): + self.lut[i] = [0, 1][r] + + return self.lut + + +class MorphOp: + """A class for binary morphological operators""" + + def __init__( + self, + lut: bytearray | None = None, + op_name: str | None = None, + patterns: list[str] | None = None, + ) -> None: + """Create a binary morphological operator. + + If the LUT is not provided, then it is built using LutBuilder from the op_name + or the patterns. + + :param lut: The LUT data. + :param patterns: A list of input patterns, or None. + :param op_name: The name of a known pattern. One of "corner", "dilation4", + "dilation8", "erosion4", "erosion8", "edge". + :exception Exception: If the op_name is not recognized. + """ + if patterns is None and op_name is None: + self.lut = lut + else: + self.lut = LutBuilder(patterns, op_name).build_lut() + + def apply(self, image: Image.Image) -> tuple[int, Image.Image]: + """Run a single morphological operation on an image. + + Returns a tuple of the number of changed pixels and the + morphed image. + + :param image: A 1-mode or L-mode image. + :exception Exception: If the current operator is None. + :exception ValueError: If the image is not 1 or L mode.""" + if self.lut is None: + msg = "No operator loaded" + raise Exception(msg) + + if image.mode not in ("1", "L"): + msg = "Image mode must be 1 or L" + raise ValueError(msg) + outimage = Image.new(image.mode, image.size) + count = _imagingmorph.apply(bytes(self.lut), image.getim(), outimage.getim()) + return count, outimage + + def match(self, image: Image.Image) -> list[tuple[int, int]]: + """Get a list of coordinates matching the morphological operation on + an image. + + Returns a list of tuples of (x,y) coordinates of all matching pixels. See + :ref:`coordinate-system`. + + :param image: A 1-mode or L-mode image. + :exception Exception: If the current operator is None. + :exception ValueError: If the image is not 1 or L mode.""" + if self.lut is None: + msg = "No operator loaded" + raise Exception(msg) + + if image.mode not in ("1", "L"): + msg = "Image mode must be 1 or L" + raise ValueError(msg) + return _imagingmorph.match(bytes(self.lut), image.getim()) + + def get_on_pixels(self, image: Image.Image) -> list[tuple[int, int]]: + """Get a list of all turned on pixels in a 1 or L mode image. + + Returns a list of tuples of (x,y) coordinates of all non-empty pixels. See + :ref:`coordinate-system`. + + :param image: A 1-mode or L-mode image. + :exception ValueError: If the image is not 1 or L mode.""" + + if image.mode not in ("1", "L"): + msg = "Image mode must be 1 or L" + raise ValueError(msg) + return _imagingmorph.get_on_pixels(image.getim()) + + def load_lut(self, filename: str) -> None: + """ + Load an operator from an mrl file + + :param filename: The file to read from. + :exception Exception: If the length of the file data is not 512. + """ + with open(filename, "rb") as f: + self.lut = bytearray(f.read()) + + if len(self.lut) != LUT_SIZE: + self.lut = None + msg = "Wrong size operator file!" + raise Exception(msg) + + def save_lut(self, filename: str) -> None: + """ + Save an operator to an mrl file. + + :param filename: The destination file. + :exception Exception: If the current operator is None. + """ + if self.lut is None: + msg = "No operator loaded" + raise Exception(msg) + with open(filename, "wb") as f: + f.write(self.lut) + + def set_lut(self, lut: bytearray | None) -> None: + """ + Set the LUT from an external source + + :param lut: A new LUT. + """ + self.lut = lut diff --git a/Python/venv/lib/python3.12/site-packages/PIL/ImageOps.py b/Python/venv/lib/python3.12/site-packages/PIL/ImageOps.py new file mode 100644 index 0000000..42b10bd --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/ImageOps.py @@ -0,0 +1,746 @@ +# +# The Python Imaging Library. +# $Id$ +# +# standard image operations +# +# History: +# 2001-10-20 fl Created +# 2001-10-23 fl Added autocontrast operator +# 2001-12-18 fl Added Kevin's fit operator +# 2004-03-14 fl Fixed potential division by zero in equalize +# 2005-05-05 fl Fixed equalize for low number of values +# +# Copyright (c) 2001-2004 by Secret Labs AB +# Copyright (c) 2001-2004 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import functools +import operator +import re +from collections.abc import Sequence +from typing import Literal, Protocol, cast, overload + +from . import ExifTags, Image, ImagePalette + +# +# helpers + + +def _border(border: int | tuple[int, ...]) -> tuple[int, int, int, int]: + if isinstance(border, tuple): + if len(border) == 2: + left, top = right, bottom = border + elif len(border) == 4: + left, top, right, bottom = border + else: + left = top = right = bottom = border + return left, top, right, bottom + + +def _color(color: str | int | tuple[int, ...], mode: str) -> int | tuple[int, ...]: + if isinstance(color, str): + from . import ImageColor + + color = ImageColor.getcolor(color, mode) + return color + + +def _lut(image: Image.Image, lut: list[int]) -> Image.Image: + if image.mode == "P": + # FIXME: apply to lookup table, not image data + msg = "mode P support coming soon" + raise NotImplementedError(msg) + elif image.mode in ("L", "RGB"): + if image.mode == "RGB" and len(lut) == 256: + lut = lut + lut + lut + return image.point(lut) + else: + msg = f"not supported for mode {image.mode}" + raise OSError(msg) + + +# +# actions + + +def autocontrast( + image: Image.Image, + cutoff: float | tuple[float, float] = 0, + ignore: int | Sequence[int] | None = None, + mask: Image.Image | None = None, + preserve_tone: bool = False, +) -> Image.Image: + """ + Maximize (normalize) image contrast. This function calculates a + histogram of the input image (or mask region), removes ``cutoff`` percent of the + lightest and darkest pixels from the histogram, and remaps the image + so that the darkest pixel becomes black (0), and the lightest + becomes white (255). + + :param image: The image to process. + :param cutoff: The percent to cut off from the histogram on the low and + high ends. Either a tuple of (low, high), or a single + number for both. + :param ignore: The background pixel value (use None for no background). + :param mask: Histogram used in contrast operation is computed using pixels + within the mask. If no mask is given the entire image is used + for histogram computation. + :param preserve_tone: Preserve image tone in Photoshop-like style autocontrast. + + .. versionadded:: 8.2.0 + + :return: An image. + """ + if preserve_tone: + histogram = image.convert("L").histogram(mask) + else: + histogram = image.histogram(mask) + + lut = [] + for layer in range(0, len(histogram), 256): + h = histogram[layer : layer + 256] + if ignore is not None: + # get rid of outliers + if isinstance(ignore, int): + h[ignore] = 0 + else: + for ix in ignore: + h[ix] = 0 + if cutoff: + # cut off pixels from both ends of the histogram + if not isinstance(cutoff, tuple): + cutoff = (cutoff, cutoff) + # get number of pixels + n = 0 + for ix in range(256): + n = n + h[ix] + # remove cutoff% pixels from the low end + cut = int(n * cutoff[0] // 100) + for lo in range(256): + if cut > h[lo]: + cut = cut - h[lo] + h[lo] = 0 + else: + h[lo] -= cut + cut = 0 + if cut <= 0: + break + # remove cutoff% samples from the high end + cut = int(n * cutoff[1] // 100) + for hi in range(255, -1, -1): + if cut > h[hi]: + cut = cut - h[hi] + h[hi] = 0 + else: + h[hi] -= cut + cut = 0 + if cut <= 0: + break + # find lowest/highest samples after preprocessing + for lo in range(256): + if h[lo]: + break + for hi in range(255, -1, -1): + if h[hi]: + break + if hi <= lo: + # don't bother + lut.extend(list(range(256))) + else: + scale = 255.0 / (hi - lo) + offset = -lo * scale + for ix in range(256): + ix = int(ix * scale + offset) + if ix < 0: + ix = 0 + elif ix > 255: + ix = 255 + lut.append(ix) + return _lut(image, lut) + + +def colorize( + image: Image.Image, + black: str | tuple[int, ...], + white: str | tuple[int, ...], + mid: str | int | tuple[int, ...] | None = None, + blackpoint: int = 0, + whitepoint: int = 255, + midpoint: int = 127, +) -> Image.Image: + """ + Colorize grayscale image. + This function calculates a color wedge which maps all black pixels in + the source image to the first color and all white pixels to the + second color. If ``mid`` is specified, it uses three-color mapping. + The ``black`` and ``white`` arguments should be RGB tuples or color names; + optionally you can use three-color mapping by also specifying ``mid``. + Mapping positions for any of the colors can be specified + (e.g. ``blackpoint``), where these parameters are the integer + value corresponding to where the corresponding color should be mapped. + These parameters must have logical order, such that + ``blackpoint <= midpoint <= whitepoint`` (if ``mid`` is specified). + + :param image: The image to colorize. + :param black: The color to use for black input pixels. + :param white: The color to use for white input pixels. + :param mid: The color to use for midtone input pixels. + :param blackpoint: an int value [0, 255] for the black mapping. + :param whitepoint: an int value [0, 255] for the white mapping. + :param midpoint: an int value [0, 255] for the midtone mapping. + :return: An image. + """ + + # Initial asserts + assert image.mode == "L" + if mid is None: + assert 0 <= blackpoint <= whitepoint <= 255 + else: + assert 0 <= blackpoint <= midpoint <= whitepoint <= 255 + + # Define colors from arguments + rgb_black = cast(Sequence[int], _color(black, "RGB")) + rgb_white = cast(Sequence[int], _color(white, "RGB")) + rgb_mid = cast(Sequence[int], _color(mid, "RGB")) if mid is not None else None + + # Empty lists for the mapping + red = [] + green = [] + blue = [] + + # Create the low-end values + for i in range(blackpoint): + red.append(rgb_black[0]) + green.append(rgb_black[1]) + blue.append(rgb_black[2]) + + # Create the mapping (2-color) + if rgb_mid is None: + range_map = range(whitepoint - blackpoint) + + for i in range_map: + red.append( + rgb_black[0] + i * (rgb_white[0] - rgb_black[0]) // len(range_map) + ) + green.append( + rgb_black[1] + i * (rgb_white[1] - rgb_black[1]) // len(range_map) + ) + blue.append( + rgb_black[2] + i * (rgb_white[2] - rgb_black[2]) // len(range_map) + ) + + # Create the mapping (3-color) + else: + range_map1 = range(midpoint - blackpoint) + range_map2 = range(whitepoint - midpoint) + + for i in range_map1: + red.append( + rgb_black[0] + i * (rgb_mid[0] - rgb_black[0]) // len(range_map1) + ) + green.append( + rgb_black[1] + i * (rgb_mid[1] - rgb_black[1]) // len(range_map1) + ) + blue.append( + rgb_black[2] + i * (rgb_mid[2] - rgb_black[2]) // len(range_map1) + ) + for i in range_map2: + red.append(rgb_mid[0] + i * (rgb_white[0] - rgb_mid[0]) // len(range_map2)) + green.append( + rgb_mid[1] + i * (rgb_white[1] - rgb_mid[1]) // len(range_map2) + ) + blue.append(rgb_mid[2] + i * (rgb_white[2] - rgb_mid[2]) // len(range_map2)) + + # Create the high-end values + for i in range(256 - whitepoint): + red.append(rgb_white[0]) + green.append(rgb_white[1]) + blue.append(rgb_white[2]) + + # Return converted image + image = image.convert("RGB") + return _lut(image, red + green + blue) + + +def contain( + image: Image.Image, size: tuple[int, int], method: int = Image.Resampling.BICUBIC +) -> Image.Image: + """ + Returns a resized version of the image, set to the maximum width and height + within the requested size, while maintaining the original aspect ratio. + + :param image: The image to resize. + :param size: The requested output size in pixels, given as a + (width, height) tuple. + :param method: Resampling method to use. Default is + :py:attr:`~PIL.Image.Resampling.BICUBIC`. + See :ref:`concept-filters`. + :return: An image. + """ + + im_ratio = image.width / image.height + dest_ratio = size[0] / size[1] + + if im_ratio != dest_ratio: + if im_ratio > dest_ratio: + new_height = round(image.height / image.width * size[0]) + if new_height != size[1]: + size = (size[0], new_height) + else: + new_width = round(image.width / image.height * size[1]) + if new_width != size[0]: + size = (new_width, size[1]) + return image.resize(size, resample=method) + + +def cover( + image: Image.Image, size: tuple[int, int], method: int = Image.Resampling.BICUBIC +) -> Image.Image: + """ + Returns a resized version of the image, so that the requested size is + covered, while maintaining the original aspect ratio. + + :param image: The image to resize. + :param size: The requested output size in pixels, given as a + (width, height) tuple. + :param method: Resampling method to use. Default is + :py:attr:`~PIL.Image.Resampling.BICUBIC`. + See :ref:`concept-filters`. + :return: An image. + """ + + im_ratio = image.width / image.height + dest_ratio = size[0] / size[1] + + if im_ratio != dest_ratio: + if im_ratio < dest_ratio: + new_height = round(image.height / image.width * size[0]) + if new_height != size[1]: + size = (size[0], new_height) + else: + new_width = round(image.width / image.height * size[1]) + if new_width != size[0]: + size = (new_width, size[1]) + return image.resize(size, resample=method) + + +def pad( + image: Image.Image, + size: tuple[int, int], + method: int = Image.Resampling.BICUBIC, + color: str | int | tuple[int, ...] | None = None, + centering: tuple[float, float] = (0.5, 0.5), +) -> Image.Image: + """ + Returns a resized and padded version of the image, expanded to fill the + requested aspect ratio and size. + + :param image: The image to resize and crop. + :param size: The requested output size in pixels, given as a + (width, height) tuple. + :param method: Resampling method to use. Default is + :py:attr:`~PIL.Image.Resampling.BICUBIC`. + See :ref:`concept-filters`. + :param color: The background color of the padded image. + :param centering: Control the position of the original image within the + padded version. + + (0.5, 0.5) will keep the image centered + (0, 0) will keep the image aligned to the top left + (1, 1) will keep the image aligned to the bottom + right + :return: An image. + """ + + resized = contain(image, size, method) + if resized.size == size: + out = resized + else: + out = Image.new(image.mode, size, color) + if resized.palette: + palette = resized.getpalette() + if palette is not None: + out.putpalette(palette) + if resized.width != size[0]: + x = round((size[0] - resized.width) * max(0, min(centering[0], 1))) + out.paste(resized, (x, 0)) + else: + y = round((size[1] - resized.height) * max(0, min(centering[1], 1))) + out.paste(resized, (0, y)) + return out + + +def crop(image: Image.Image, border: int = 0) -> Image.Image: + """ + Remove border from image. The same amount of pixels are removed + from all four sides. This function works on all image modes. + + .. seealso:: :py:meth:`~PIL.Image.Image.crop` + + :param image: The image to crop. + :param border: The number of pixels to remove. + :return: An image. + """ + left, top, right, bottom = _border(border) + return image.crop((left, top, image.size[0] - right, image.size[1] - bottom)) + + +def scale( + image: Image.Image, factor: float, resample: int = Image.Resampling.BICUBIC +) -> Image.Image: + """ + Returns a rescaled image by a specific factor given in parameter. + A factor greater than 1 expands the image, between 0 and 1 contracts the + image. + + :param image: The image to rescale. + :param factor: The expansion factor, as a float. + :param resample: Resampling method to use. Default is + :py:attr:`~PIL.Image.Resampling.BICUBIC`. + See :ref:`concept-filters`. + :returns: An :py:class:`~PIL.Image.Image` object. + """ + if factor == 1: + return image.copy() + elif factor <= 0: + msg = "the factor must be greater than 0" + raise ValueError(msg) + else: + size = (round(factor * image.width), round(factor * image.height)) + return image.resize(size, resample) + + +class SupportsGetMesh(Protocol): + """ + An object that supports the ``getmesh`` method, taking an image as an + argument, and returning a list of tuples. Each tuple contains two tuples, + the source box as a tuple of 4 integers, and a tuple of 8 integers for the + final quadrilateral, in order of top left, bottom left, bottom right, top + right. + """ + + def getmesh( + self, image: Image.Image + ) -> list[ + tuple[tuple[int, int, int, int], tuple[int, int, int, int, int, int, int, int]] + ]: ... + + +def deform( + image: Image.Image, + deformer: SupportsGetMesh, + resample: int = Image.Resampling.BILINEAR, +) -> Image.Image: + """ + Deform the image. + + :param image: The image to deform. + :param deformer: A deformer object. Any object that implements a + ``getmesh`` method can be used. + :param resample: An optional resampling filter. Same values possible as + in the PIL.Image.transform function. + :return: An image. + """ + return image.transform( + image.size, Image.Transform.MESH, deformer.getmesh(image), resample + ) + + +def equalize(image: Image.Image, mask: Image.Image | None = None) -> Image.Image: + """ + Equalize the image histogram. This function applies a non-linear + mapping to the input image, in order to create a uniform + distribution of grayscale values in the output image. + + :param image: The image to equalize. + :param mask: An optional mask. If given, only the pixels selected by + the mask are included in the analysis. + :return: An image. + """ + if image.mode == "P": + image = image.convert("RGB") + h = image.histogram(mask) + lut = [] + for b in range(0, len(h), 256): + histo = [_f for _f in h[b : b + 256] if _f] + if len(histo) <= 1: + lut.extend(list(range(256))) + else: + step = (functools.reduce(operator.add, histo) - histo[-1]) // 255 + if not step: + lut.extend(list(range(256))) + else: + n = step // 2 + for i in range(256): + lut.append(n // step) + n = n + h[i + b] + return _lut(image, lut) + + +def expand( + image: Image.Image, + border: int | tuple[int, ...] = 0, + fill: str | int | tuple[int, ...] = 0, +) -> Image.Image: + """ + Add border to the image + + :param image: The image to expand. + :param border: Border width, in pixels. + :param fill: Pixel fill value (a color value). Default is 0 (black). + :return: An image. + """ + left, top, right, bottom = _border(border) + width = left + image.size[0] + right + height = top + image.size[1] + bottom + color = _color(fill, image.mode) + if image.palette: + mode = image.palette.mode + palette = ImagePalette.ImagePalette(mode, image.getpalette(mode)) + if isinstance(color, tuple) and (len(color) == 3 or len(color) == 4): + color = palette.getcolor(color) + else: + palette = None + out = Image.new(image.mode, (width, height), color) + if palette: + out.putpalette(palette.palette, mode) + out.paste(image, (left, top)) + return out + + +def fit( + image: Image.Image, + size: tuple[int, int], + method: int = Image.Resampling.BICUBIC, + bleed: float = 0.0, + centering: tuple[float, float] = (0.5, 0.5), +) -> Image.Image: + """ + Returns a resized and cropped version of the image, cropped to the + requested aspect ratio and size. + + This function was contributed by Kevin Cazabon. + + :param image: The image to resize and crop. + :param size: The requested output size in pixels, given as a + (width, height) tuple. + :param method: Resampling method to use. Default is + :py:attr:`~PIL.Image.Resampling.BICUBIC`. + See :ref:`concept-filters`. + :param bleed: Remove a border around the outside of the image from all + four edges. The value is a decimal percentage (use 0.01 for + one percent). The default value is 0 (no border). + Cannot be greater than or equal to 0.5. + :param centering: Control the cropping position. Use (0.5, 0.5) for + center cropping (e.g. if cropping the width, take 50% off + of the left side, and therefore 50% off the right side). + (0.0, 0.0) will crop from the top left corner (i.e. if + cropping the width, take all of the crop off of the right + side, and if cropping the height, take all of it off the + bottom). (1.0, 0.0) will crop from the bottom left + corner, etc. (i.e. if cropping the width, take all of the + crop off the left side, and if cropping the height take + none from the top, and therefore all off the bottom). + :return: An image. + """ + + # by Kevin Cazabon, Feb 17/2000 + # kevin@cazabon.com + # https://www.cazabon.com + + centering_x, centering_y = centering + + if not 0.0 <= centering_x <= 1.0: + centering_x = 0.5 + if not 0.0 <= centering_y <= 1.0: + centering_y = 0.5 + + if not 0.0 <= bleed < 0.5: + bleed = 0.0 + + # calculate the area to use for resizing and cropping, subtracting + # the 'bleed' around the edges + + # number of pixels to trim off on Top and Bottom, Left and Right + bleed_pixels = (bleed * image.size[0], bleed * image.size[1]) + + live_size = ( + image.size[0] - bleed_pixels[0] * 2, + image.size[1] - bleed_pixels[1] * 2, + ) + + # calculate the aspect ratio of the live_size + live_size_ratio = live_size[0] / live_size[1] + + # calculate the aspect ratio of the output image + output_ratio = size[0] / size[1] + + # figure out if the sides or top/bottom will be cropped off + if live_size_ratio == output_ratio: + # live_size is already the needed ratio + crop_width = live_size[0] + crop_height = live_size[1] + elif live_size_ratio >= output_ratio: + # live_size is wider than what's needed, crop the sides + crop_width = output_ratio * live_size[1] + crop_height = live_size[1] + else: + # live_size is taller than what's needed, crop the top and bottom + crop_width = live_size[0] + crop_height = live_size[0] / output_ratio + + # make the crop + crop_left = bleed_pixels[0] + (live_size[0] - crop_width) * centering_x + crop_top = bleed_pixels[1] + (live_size[1] - crop_height) * centering_y + + crop = (crop_left, crop_top, crop_left + crop_width, crop_top + crop_height) + + # resize the image and return it + return image.resize(size, method, box=crop) + + +def flip(image: Image.Image) -> Image.Image: + """ + Flip the image vertically (top to bottom). + + :param image: The image to flip. + :return: An image. + """ + return image.transpose(Image.Transpose.FLIP_TOP_BOTTOM) + + +def grayscale(image: Image.Image) -> Image.Image: + """ + Convert the image to grayscale. + + :param image: The image to convert. + :return: An image. + """ + return image.convert("L") + + +def invert(image: Image.Image) -> Image.Image: + """ + Invert (negate) the image. + + :param image: The image to invert. + :return: An image. + """ + lut = list(range(255, -1, -1)) + return image.point(lut) if image.mode == "1" else _lut(image, lut) + + +def mirror(image: Image.Image) -> Image.Image: + """ + Flip image horizontally (left to right). + + :param image: The image to mirror. + :return: An image. + """ + return image.transpose(Image.Transpose.FLIP_LEFT_RIGHT) + + +def posterize(image: Image.Image, bits: int) -> Image.Image: + """ + Reduce the number of bits for each color channel. + + :param image: The image to posterize. + :param bits: The number of bits to keep for each channel (1-8). + :return: An image. + """ + mask = ~(2 ** (8 - bits) - 1) + lut = [i & mask for i in range(256)] + return _lut(image, lut) + + +def solarize(image: Image.Image, threshold: int = 128) -> Image.Image: + """ + Invert all pixel values above a threshold. + + :param image: The image to solarize. + :param threshold: All pixels above this grayscale level are inverted. + :return: An image. + """ + lut = [] + for i in range(256): + if i < threshold: + lut.append(i) + else: + lut.append(255 - i) + return _lut(image, lut) + + +@overload +def exif_transpose(image: Image.Image, *, in_place: Literal[True]) -> None: ... + + +@overload +def exif_transpose( + image: Image.Image, *, in_place: Literal[False] = False +) -> Image.Image: ... + + +def exif_transpose(image: Image.Image, *, in_place: bool = False) -> Image.Image | None: + """ + If an image has an EXIF Orientation tag, other than 1, transpose the image + accordingly, and remove the orientation data. + + :param image: The image to transpose. + :param in_place: Boolean. Keyword-only argument. + If ``True``, the original image is modified in-place, and ``None`` is returned. + If ``False`` (default), a new :py:class:`~PIL.Image.Image` object is returned + with the transposition applied. If there is no transposition, a copy of the + image will be returned. + """ + image.load() + image_exif = image.getexif() + orientation = image_exif.get(ExifTags.Base.Orientation, 1) + method = { + 2: Image.Transpose.FLIP_LEFT_RIGHT, + 3: Image.Transpose.ROTATE_180, + 4: Image.Transpose.FLIP_TOP_BOTTOM, + 5: Image.Transpose.TRANSPOSE, + 6: Image.Transpose.ROTATE_270, + 7: Image.Transpose.TRANSVERSE, + 8: Image.Transpose.ROTATE_90, + }.get(orientation) + if method is not None: + if in_place: + image.im = image.im.transpose(method) + image._size = image.im.size + else: + transposed_image = image.transpose(method) + exif_image = image if in_place else transposed_image + + exif = exif_image.getexif() + if ExifTags.Base.Orientation in exif: + del exif[ExifTags.Base.Orientation] + if "exif" in exif_image.info: + exif_image.info["exif"] = exif.tobytes() + elif "Raw profile type exif" in exif_image.info: + exif_image.info["Raw profile type exif"] = exif.tobytes().hex() + for key in ("XML:com.adobe.xmp", "xmp"): + if key in exif_image.info: + for pattern in ( + r'tiff:Orientation="([0-9])"', + r"([0-9])", + ): + value = exif_image.info[key] + if isinstance(value, str): + value = re.sub(pattern, "", value) + elif isinstance(value, tuple): + value = tuple( + re.sub(pattern.encode(), b"", v) for v in value + ) + else: + value = re.sub(pattern.encode(), b"", value) + exif_image.info[key] = value + if not in_place: + return transposed_image + elif not in_place: + return image.copy() + return None diff --git a/Python/venv/lib/python3.12/site-packages/PIL/ImagePalette.py b/Python/venv/lib/python3.12/site-packages/PIL/ImagePalette.py new file mode 100644 index 0000000..2abbd46 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/ImagePalette.py @@ -0,0 +1,290 @@ +# +# The Python Imaging Library. +# $Id$ +# +# image palette object +# +# History: +# 1996-03-11 fl Rewritten. +# 1997-01-03 fl Up and running. +# 1997-08-23 fl Added load hack +# 2001-04-16 fl Fixed randint shadow bug in random() +# +# Copyright (c) 1997-2001 by Secret Labs AB +# Copyright (c) 1996-1997 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import array +from collections.abc import Sequence +from typing import IO + +from . import GimpGradientFile, GimpPaletteFile, ImageColor, PaletteFile + +TYPE_CHECKING = False +if TYPE_CHECKING: + from . import Image + + +class ImagePalette: + """ + Color palette for palette mapped images + + :param mode: The mode to use for the palette. See: + :ref:`concept-modes`. Defaults to "RGB" + :param palette: An optional palette. If given, it must be a bytearray, + an array or a list of ints between 0-255. The list must consist of + all channels for one color followed by the next color (e.g. RGBRGBRGB). + Defaults to an empty palette. + """ + + def __init__( + self, + mode: str = "RGB", + palette: Sequence[int] | bytes | bytearray | None = None, + ) -> None: + self.mode = mode + self.rawmode: str | None = None # if set, palette contains raw data + self.palette = palette or bytearray() + self.dirty: int | None = None + + @property + def palette(self) -> Sequence[int] | bytes | bytearray: + return self._palette + + @palette.setter + def palette(self, palette: Sequence[int] | bytes | bytearray) -> None: + self._colors: dict[tuple[int, ...], int] | None = None + self._palette = palette + + @property + def colors(self) -> dict[tuple[int, ...], int]: + if self._colors is None: + mode_len = len(self.mode) + self._colors = {} + for i in range(0, len(self.palette), mode_len): + color = tuple(self.palette[i : i + mode_len]) + if color in self._colors: + continue + self._colors[color] = i // mode_len + return self._colors + + @colors.setter + def colors(self, colors: dict[tuple[int, ...], int]) -> None: + self._colors = colors + + def copy(self) -> ImagePalette: + new = ImagePalette() + + new.mode = self.mode + new.rawmode = self.rawmode + if self.palette is not None: + new.palette = self.palette[:] + new.dirty = self.dirty + + return new + + def getdata(self) -> tuple[str, Sequence[int] | bytes | bytearray]: + """ + Get palette contents in format suitable for the low-level + ``im.putpalette`` primitive. + + .. warning:: This method is experimental. + """ + if self.rawmode: + return self.rawmode, self.palette + return self.mode, self.tobytes() + + def tobytes(self) -> bytes: + """Convert palette to bytes. + + .. warning:: This method is experimental. + """ + if self.rawmode: + msg = "palette contains raw palette data" + raise ValueError(msg) + if isinstance(self.palette, bytes): + return self.palette + arr = array.array("B", self.palette) + return arr.tobytes() + + # Declare tostring as an alias for tobytes + tostring = tobytes + + def _new_color_index( + self, image: Image.Image | None = None, e: Exception | None = None + ) -> int: + if not isinstance(self.palette, bytearray): + self._palette = bytearray(self.palette) + index = len(self.palette) // len(self.mode) + special_colors: tuple[int | tuple[int, ...] | None, ...] = () + if image: + special_colors = ( + image.info.get("background"), + image.info.get("transparency"), + ) + while index in special_colors: + index += 1 + if index >= 256: + if image: + # Search for an unused index + for i, count in reversed(list(enumerate(image.histogram()))): + if count == 0 and i not in special_colors: + index = i + break + if index >= 256: + msg = "cannot allocate more than 256 colors" + raise ValueError(msg) from e + return index + + def getcolor( + self, + color: tuple[int, ...], + image: Image.Image | None = None, + ) -> int: + """Given an rgb tuple, allocate palette entry. + + .. warning:: This method is experimental. + """ + if self.rawmode: + msg = "palette contains raw palette data" + raise ValueError(msg) + if isinstance(color, tuple): + if self.mode == "RGB": + if len(color) == 4: + if color[3] != 255: + msg = "cannot add non-opaque RGBA color to RGB palette" + raise ValueError(msg) + color = color[:3] + elif self.mode == "RGBA": + if len(color) == 3: + color += (255,) + try: + return self.colors[color] + except KeyError as e: + # allocate new color slot + index = self._new_color_index(image, e) + assert isinstance(self._palette, bytearray) + self.colors[color] = index + mode_len = len(self.mode) + if index * mode_len < len(self.palette): + self._palette = ( + self._palette[: index * mode_len] + + bytes(color) + + self._palette[index * mode_len + mode_len :] + ) + else: + self._palette += bytes(color) + self.dirty = 1 + return index + else: + msg = f"unknown color specifier: {repr(color)}" # type: ignore[unreachable] + raise ValueError(msg) + + def save(self, fp: str | IO[str]) -> None: + """Save palette to text file. + + .. warning:: This method is experimental. + """ + if self.rawmode: + msg = "palette contains raw palette data" + raise ValueError(msg) + open_fp = False + if isinstance(fp, str): + fp = open(fp, "w") + open_fp = True + try: + fp.write("# Palette\n") + fp.write(f"# Mode: {self.mode}\n") + palette_len = len(self.palette) + for i in range(256): + fp.write(f"{i}") + for j in range(i * len(self.mode), (i + 1) * len(self.mode)): + fp.write(f" {self.palette[j] if j < palette_len else 0}") + fp.write("\n") + finally: + if open_fp: + fp.close() + + +# -------------------------------------------------------------------- +# Internal + + +def raw(rawmode: str, data: Sequence[int] | bytes | bytearray) -> ImagePalette: + palette = ImagePalette() + palette.rawmode = rawmode + palette.palette = data + palette.dirty = 1 + return palette + + +# -------------------------------------------------------------------- +# Factories + + +def make_linear_lut(black: int, white: float) -> list[int]: + if black == 0: + return [int(white * i // 255) for i in range(256)] + + msg = "unavailable when black is non-zero" + raise NotImplementedError(msg) # FIXME + + +def make_gamma_lut(exp: float) -> list[int]: + return [int(((i / 255.0) ** exp) * 255.0 + 0.5) for i in range(256)] + + +def negative(mode: str = "RGB") -> ImagePalette: + palette = list(range(256 * len(mode))) + palette.reverse() + return ImagePalette(mode, [i // len(mode) for i in palette]) + + +def random(mode: str = "RGB") -> ImagePalette: + from random import randint + + palette = [randint(0, 255) for _ in range(256 * len(mode))] + return ImagePalette(mode, palette) + + +def sepia(white: str = "#fff0c0") -> ImagePalette: + bands = [make_linear_lut(0, band) for band in ImageColor.getrgb(white)] + return ImagePalette("RGB", [bands[i % 3][i // 3] for i in range(256 * 3)]) + + +def wedge(mode: str = "RGB") -> ImagePalette: + palette = list(range(256 * len(mode))) + return ImagePalette(mode, [i // len(mode) for i in palette]) + + +def load(filename: str) -> tuple[bytes, str]: + # FIXME: supports GIMP gradients only + + with open(filename, "rb") as fp: + paletteHandlers: list[ + type[ + GimpPaletteFile.GimpPaletteFile + | GimpGradientFile.GimpGradientFile + | PaletteFile.PaletteFile + ] + ] = [ + GimpPaletteFile.GimpPaletteFile, + GimpGradientFile.GimpGradientFile, + PaletteFile.PaletteFile, + ] + for paletteHandler in paletteHandlers: + try: + fp.seek(0) + lut = paletteHandler(fp).getpalette() + if lut: + break + except (SyntaxError, ValueError): + pass + else: + msg = "cannot load palette" + raise OSError(msg) + + return lut # data, rawmode diff --git a/Python/venv/lib/python3.12/site-packages/PIL/ImagePath.py b/Python/venv/lib/python3.12/site-packages/PIL/ImagePath.py new file mode 100644 index 0000000..77e8a60 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/ImagePath.py @@ -0,0 +1,20 @@ +# +# The Python Imaging Library +# $Id$ +# +# path interface +# +# History: +# 1996-11-04 fl Created +# 2002-04-14 fl Added documentation stub class +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1996. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +from . import Image + +Path = Image.core.path diff --git a/Python/venv/lib/python3.12/site-packages/PIL/ImageQt.py b/Python/venv/lib/python3.12/site-packages/PIL/ImageQt.py new file mode 100644 index 0000000..af4d074 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/ImageQt.py @@ -0,0 +1,219 @@ +# +# The Python Imaging Library. +# $Id$ +# +# a simple Qt image interface. +# +# history: +# 2006-06-03 fl: created +# 2006-06-04 fl: inherit from QImage instead of wrapping it +# 2006-06-05 fl: removed toimage helper; move string support to ImageQt +# 2013-11-13 fl: add support for Qt5 (aurelien.ballier@cyclonit.com) +# +# Copyright (c) 2006 by Secret Labs AB +# Copyright (c) 2006 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import sys +from io import BytesIO + +from . import Image +from ._util import is_path + +TYPE_CHECKING = False +if TYPE_CHECKING: + from collections.abc import Callable + from typing import Any + + from . import ImageFile + + QBuffer: type + +qt_version: str | None +qt_versions = [ + ["6", "PyQt6"], + ["side6", "PySide6"], +] + +# If a version has already been imported, attempt it first +qt_versions.sort(key=lambda version: version[1] in sys.modules, reverse=True) +for version, qt_module in qt_versions: + try: + qRgba: Callable[[int, int, int, int], int] + if qt_module == "PyQt6": + from PyQt6.QtCore import QBuffer, QByteArray, QIODevice + from PyQt6.QtGui import QImage, QPixmap, qRgba + elif qt_module == "PySide6": + from PySide6.QtCore import ( # type: ignore[assignment] + QBuffer, + QByteArray, + QIODevice, + ) + from PySide6.QtGui import QImage, QPixmap, qRgba # type: ignore[assignment] + except (ImportError, RuntimeError): + continue + qt_is_installed = True + qt_version = version + break +else: + qt_is_installed = False + qt_version = None + + +def rgb(r: int, g: int, b: int, a: int = 255) -> int: + """(Internal) Turns an RGB color into a Qt compatible color integer.""" + # use qRgb to pack the colors, and then turn the resulting long + # into a negative integer with the same bitpattern. + return qRgba(r, g, b, a) & 0xFFFFFFFF + + +def fromqimage(im: QImage | QPixmap) -> ImageFile.ImageFile: + """ + :param im: QImage or PIL ImageQt object + """ + buffer = QBuffer() + qt_openmode: object + if qt_version == "6": + try: + qt_openmode = getattr(QIODevice, "OpenModeFlag") + except AttributeError: + qt_openmode = getattr(QIODevice, "OpenMode") + else: + qt_openmode = QIODevice + buffer.open(getattr(qt_openmode, "ReadWrite")) + # preserve alpha channel with png + # otherwise ppm is more friendly with Image.open + if im.hasAlphaChannel(): + im.save(buffer, "png") + else: + im.save(buffer, "ppm") + + b = BytesIO() + b.write(buffer.data()) + buffer.close() + b.seek(0) + + return Image.open(b) + + +def fromqpixmap(im: QPixmap) -> ImageFile.ImageFile: + return fromqimage(im) + + +def align8to32(bytes: bytes, width: int, mode: str) -> bytes: + """ + converts each scanline of data from 8 bit to 32 bit aligned + """ + + bits_per_pixel = {"1": 1, "L": 8, "P": 8, "I;16": 16}[mode] + + # calculate bytes per line and the extra padding if needed + bits_per_line = bits_per_pixel * width + full_bytes_per_line, remaining_bits_per_line = divmod(bits_per_line, 8) + bytes_per_line = full_bytes_per_line + (1 if remaining_bits_per_line else 0) + + extra_padding = -bytes_per_line % 4 + + # already 32 bit aligned by luck + if not extra_padding: + return bytes + + new_data = [ + bytes[i * bytes_per_line : (i + 1) * bytes_per_line] + b"\x00" * extra_padding + for i in range(len(bytes) // bytes_per_line) + ] + + return b"".join(new_data) + + +def _toqclass_helper(im: Image.Image | str | QByteArray) -> dict[str, Any]: + data = None + colortable = None + exclusive_fp = False + + # handle filename, if given instead of image name + if hasattr(im, "toUtf8"): + # FIXME - is this really the best way to do this? + im = str(im.toUtf8(), "utf-8") + if is_path(im): + im = Image.open(im) + exclusive_fp = True + assert isinstance(im, Image.Image) + + qt_format = getattr(QImage, "Format") if qt_version == "6" else QImage + if im.mode == "1": + format = getattr(qt_format, "Format_Mono") + elif im.mode == "L": + format = getattr(qt_format, "Format_Indexed8") + colortable = [rgb(i, i, i) for i in range(256)] + elif im.mode == "P": + format = getattr(qt_format, "Format_Indexed8") + palette = im.getpalette() + assert palette is not None + colortable = [rgb(*palette[i : i + 3]) for i in range(0, len(palette), 3)] + elif im.mode == "RGB": + # Populate the 4th channel with 255 + im = im.convert("RGBA") + + data = im.tobytes("raw", "BGRA") + format = getattr(qt_format, "Format_RGB32") + elif im.mode == "RGBA": + data = im.tobytes("raw", "BGRA") + format = getattr(qt_format, "Format_ARGB32") + elif im.mode == "I;16": + im = im.point(lambda i: i * 256) + + format = getattr(qt_format, "Format_Grayscale16") + else: + if exclusive_fp: + im.close() + msg = f"unsupported image mode {repr(im.mode)}" + raise ValueError(msg) + + size = im.size + __data = data or align8to32(im.tobytes(), size[0], im.mode) + if exclusive_fp: + im.close() + return {"data": __data, "size": size, "format": format, "colortable": colortable} + + +if qt_is_installed: + + class ImageQt(QImage): + def __init__(self, im: Image.Image | str | QByteArray) -> None: + """ + An PIL image wrapper for Qt. This is a subclass of PyQt's QImage + class. + + :param im: A PIL Image object, or a file name (given either as + Python string or a PyQt string object). + """ + im_data = _toqclass_helper(im) + # must keep a reference, or Qt will crash! + # All QImage constructors that take data operate on an existing + # buffer, so this buffer has to hang on for the life of the image. + # Fixes https://github.com/python-pillow/Pillow/issues/1370 + self.__data = im_data["data"] + super().__init__( + self.__data, + im_data["size"][0], + im_data["size"][1], + im_data["format"], + ) + if im_data["colortable"]: + self.setColorTable(im_data["colortable"]) + + +def toqimage(im: Image.Image | str | QByteArray) -> ImageQt: + return ImageQt(im) + + +def toqpixmap(im: Image.Image | str | QByteArray) -> QPixmap: + qimage = toqimage(im) + pixmap = getattr(QPixmap, "fromImage")(qimage) + if qt_version == "6": + pixmap.detach() + return pixmap diff --git a/Python/venv/lib/python3.12/site-packages/PIL/ImageSequence.py b/Python/venv/lib/python3.12/site-packages/PIL/ImageSequence.py new file mode 100644 index 0000000..361be48 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/ImageSequence.py @@ -0,0 +1,88 @@ +# +# The Python Imaging Library. +# $Id$ +# +# sequence support classes +# +# history: +# 1997-02-20 fl Created +# +# Copyright (c) 1997 by Secret Labs AB. +# Copyright (c) 1997 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + +## +from __future__ import annotations + +from . import Image + +TYPE_CHECKING = False +if TYPE_CHECKING: + from collections.abc import Callable + + +class Iterator: + """ + This class implements an iterator object that can be used to loop + over an image sequence. + + You can use the ``[]`` operator to access elements by index. This operator + will raise an :py:exc:`IndexError` if you try to access a nonexistent + frame. + + :param im: An image object. + """ + + def __init__(self, im: Image.Image) -> None: + if not hasattr(im, "seek"): + msg = "im must have seek method" + raise AttributeError(msg) + self.im = im + self.position = getattr(self.im, "_min_frame", 0) + + def __getitem__(self, ix: int) -> Image.Image: + try: + self.im.seek(ix) + return self.im + except EOFError as e: + msg = "end of sequence" + raise IndexError(msg) from e + + def __iter__(self) -> Iterator: + return self + + def __next__(self) -> Image.Image: + try: + self.im.seek(self.position) + self.position += 1 + return self.im + except EOFError as e: + msg = "end of sequence" + raise StopIteration(msg) from e + + +def all_frames( + im: Image.Image | list[Image.Image], + func: Callable[[Image.Image], Image.Image] | None = None, +) -> list[Image.Image]: + """ + Applies a given function to all frames in an image or a list of images. + The frames are returned as a list of separate images. + + :param im: An image, or a list of images. + :param func: The function to apply to all of the image frames. + :returns: A list of images. + """ + if not isinstance(im, list): + im = [im] + + ims = [] + for imSequence in im: + current = imSequence.tell() + + ims += [im_frame.copy() for im_frame in Iterator(imSequence)] + + imSequence.seek(current) + return [func(im) for im in ims] if func else ims diff --git a/Python/venv/lib/python3.12/site-packages/PIL/ImageShow.py b/Python/venv/lib/python3.12/site-packages/PIL/ImageShow.py new file mode 100644 index 0000000..7705608 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/ImageShow.py @@ -0,0 +1,362 @@ +# +# The Python Imaging Library. +# $Id$ +# +# im.show() drivers +# +# History: +# 2008-04-06 fl Created +# +# Copyright (c) Secret Labs AB 2008. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import abc +import os +import shutil +import subprocess +import sys +from shlex import quote +from typing import Any + +from . import Image + +_viewers = [] + + +def register(viewer: type[Viewer] | Viewer, order: int = 1) -> None: + """ + The :py:func:`register` function is used to register additional viewers:: + + from PIL import ImageShow + ImageShow.register(MyViewer()) # MyViewer will be used as a last resort + ImageShow.register(MySecondViewer(), 0) # MySecondViewer will be prioritised + ImageShow.register(ImageShow.XVViewer(), 0) # XVViewer will be prioritised + + :param viewer: The viewer to be registered. + :param order: + Zero or a negative integer to prepend this viewer to the list, + a positive integer to append it. + """ + if isinstance(viewer, type) and issubclass(viewer, Viewer): + viewer = viewer() + if order > 0: + _viewers.append(viewer) + else: + _viewers.insert(0, viewer) + + +def show(image: Image.Image, title: str | None = None, **options: Any) -> bool: + r""" + Display a given image. + + :param image: An image object. + :param title: Optional title. Not all viewers can display the title. + :param \**options: Additional viewer options. + :returns: ``True`` if a suitable viewer was found, ``False`` otherwise. + """ + for viewer in _viewers: + if viewer.show(image, title=title, **options): + return True + return False + + +class Viewer: + """Base class for viewers.""" + + # main api + + def show(self, image: Image.Image, **options: Any) -> int: + """ + The main function for displaying an image. + Converts the given image to the target format and displays it. + """ + + if not ( + image.mode in ("1", "RGBA") + or (self.format == "PNG" and image.mode in ("I;16", "LA")) + ): + base = Image.getmodebase(image.mode) + if image.mode != base: + image = image.convert(base) + + return self.show_image(image, **options) + + # hook methods + + format: str | None = None + """The format to convert the image into.""" + options: dict[str, Any] = {} + """Additional options used to convert the image.""" + + def get_format(self, image: Image.Image) -> str | None: + """Return format name, or ``None`` to save as PGM/PPM.""" + return self.format + + def get_command(self, file: str, **options: Any) -> str: + """ + Returns the command used to display the file. + Not implemented in the base class. + """ + msg = "unavailable in base viewer" + raise NotImplementedError(msg) + + def save_image(self, image: Image.Image) -> str: + """Save to temporary file and return filename.""" + return image._dump(format=self.get_format(image), **self.options) + + def show_image(self, image: Image.Image, **options: Any) -> int: + """Display the given image.""" + return self.show_file(self.save_image(image), **options) + + def show_file(self, path: str, **options: Any) -> int: + """ + Display given file. + """ + if not os.path.exists(path): + raise FileNotFoundError + os.system(self.get_command(path, **options)) # nosec + return 1 + + +# -------------------------------------------------------------------- + + +class WindowsViewer(Viewer): + """The default viewer on Windows is the default system application for PNG files.""" + + format = "PNG" + options = {"compress_level": 1, "save_all": True} + + def get_command(self, file: str, **options: Any) -> str: + return ( + f'start "Pillow" /WAIT "{file}" ' + "&& ping -n 4 127.0.0.1 >NUL " + f'&& del /f "{file}"' + ) + + def show_file(self, path: str, **options: Any) -> int: + """ + Display given file. + """ + if not os.path.exists(path): + raise FileNotFoundError + subprocess.Popen( + self.get_command(path, **options), + shell=True, + creationflags=getattr(subprocess, "CREATE_NO_WINDOW"), + ) # nosec + return 1 + + +if sys.platform == "win32": + register(WindowsViewer) + + +class MacViewer(Viewer): + """The default viewer on macOS using ``Preview.app``.""" + + format = "PNG" + options = {"compress_level": 1, "save_all": True} + + def get_command(self, file: str, **options: Any) -> str: + # on darwin open returns immediately resulting in the temp + # file removal while app is opening + command = "open -a Preview.app" + command = f"({command} {quote(file)}; sleep 20; rm -f {quote(file)})&" + return command + + def show_file(self, path: str, **options: Any) -> int: + """ + Display given file. + """ + if not os.path.exists(path): + raise FileNotFoundError + subprocess.call(["open", "-a", "Preview.app", path]) + + pyinstaller = getattr(sys, "frozen", False) and hasattr(sys, "_MEIPASS") + executable = (not pyinstaller and sys.executable) or shutil.which("python3") + if executable: + subprocess.Popen( + [ + executable, + "-c", + "import os, sys, time; time.sleep(20); os.remove(sys.argv[1])", + path, + ] + ) + return 1 + + +if sys.platform == "darwin": + register(MacViewer) + + +class UnixViewer(abc.ABC, Viewer): + format = "PNG" + options = {"compress_level": 1, "save_all": True} + + @abc.abstractmethod + def get_command_ex(self, file: str, **options: Any) -> tuple[str, str]: + pass + + def get_command(self, file: str, **options: Any) -> str: + command = self.get_command_ex(file, **options)[0] + return f"{command} {quote(file)}" + + +class XDGViewer(UnixViewer): + """ + The freedesktop.org ``xdg-open`` command. + """ + + def get_command_ex(self, file: str, **options: Any) -> tuple[str, str]: + command = executable = "xdg-open" + return command, executable + + def show_file(self, path: str, **options: Any) -> int: + """ + Display given file. + """ + if not os.path.exists(path): + raise FileNotFoundError + subprocess.Popen(["xdg-open", path]) + return 1 + + +class DisplayViewer(UnixViewer): + """ + The ImageMagick ``display`` command. + This viewer supports the ``title`` parameter. + """ + + def get_command_ex( + self, file: str, title: str | None = None, **options: Any + ) -> tuple[str, str]: + command = executable = "display" + if title: + command += f" -title {quote(title)}" + return command, executable + + def show_file(self, path: str, **options: Any) -> int: + """ + Display given file. + """ + if not os.path.exists(path): + raise FileNotFoundError + args = ["display"] + title = options.get("title") + if title: + args += ["-title", title] + args.append(path) + + subprocess.Popen(args) + return 1 + + +class GmDisplayViewer(UnixViewer): + """The GraphicsMagick ``gm display`` command.""" + + def get_command_ex(self, file: str, **options: Any) -> tuple[str, str]: + executable = "gm" + command = "gm display" + return command, executable + + def show_file(self, path: str, **options: Any) -> int: + """ + Display given file. + """ + if not os.path.exists(path): + raise FileNotFoundError + subprocess.Popen(["gm", "display", path]) + return 1 + + +class EogViewer(UnixViewer): + """The GNOME Image Viewer ``eog`` command.""" + + def get_command_ex(self, file: str, **options: Any) -> tuple[str, str]: + executable = "eog" + command = "eog -n" + return command, executable + + def show_file(self, path: str, **options: Any) -> int: + """ + Display given file. + """ + if not os.path.exists(path): + raise FileNotFoundError + subprocess.Popen(["eog", "-n", path]) + return 1 + + +class XVViewer(UnixViewer): + """ + The X Viewer ``xv`` command. + This viewer supports the ``title`` parameter. + """ + + def get_command_ex( + self, file: str, title: str | None = None, **options: Any + ) -> tuple[str, str]: + # note: xv is pretty outdated. most modern systems have + # imagemagick's display command instead. + command = executable = "xv" + if title: + command += f" -name {quote(title)}" + return command, executable + + def show_file(self, path: str, **options: Any) -> int: + """ + Display given file. + """ + if not os.path.exists(path): + raise FileNotFoundError + args = ["xv"] + title = options.get("title") + if title: + args += ["-name", title] + args.append(path) + + subprocess.Popen(args) + return 1 + + +if sys.platform not in ("win32", "darwin"): # unixoids + if shutil.which("xdg-open"): + register(XDGViewer) + if shutil.which("display"): + register(DisplayViewer) + if shutil.which("gm"): + register(GmDisplayViewer) + if shutil.which("eog"): + register(EogViewer) + if shutil.which("xv"): + register(XVViewer) + + +class IPythonViewer(Viewer): + """The viewer for IPython frontends.""" + + def show_image(self, image: Image.Image, **options: Any) -> int: + ipython_display(image) + return 1 + + +try: + from IPython.display import display as ipython_display +except ImportError: + pass +else: + register(IPythonViewer) + + +if __name__ == "__main__": + if len(sys.argv) < 2: + print("Syntax: python3 ImageShow.py imagefile [title]") + sys.exit() + + with Image.open(sys.argv[1]) as im: + print(show(im, *sys.argv[2:])) diff --git a/Python/venv/lib/python3.12/site-packages/PIL/ImageStat.py b/Python/venv/lib/python3.12/site-packages/PIL/ImageStat.py new file mode 100644 index 0000000..3a1044b --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/ImageStat.py @@ -0,0 +1,167 @@ +# +# The Python Imaging Library. +# $Id$ +# +# global image statistics +# +# History: +# 1996-04-05 fl Created +# 1997-05-21 fl Added mask; added rms, var, stddev attributes +# 1997-08-05 fl Added median +# 1998-07-05 hk Fixed integer overflow error +# +# Notes: +# This class shows how to implement delayed evaluation of attributes. +# To get a certain value, simply access the corresponding attribute. +# The __getattr__ dispatcher takes care of the rest. +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1996-97. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import math +from functools import cached_property + +from . import Image + + +class Stat: + def __init__( + self, image_or_list: Image.Image | list[int], mask: Image.Image | None = None + ) -> None: + """ + Calculate statistics for the given image. If a mask is included, + only the regions covered by that mask are included in the + statistics. You can also pass in a previously calculated histogram. + + :param image: A PIL image, or a precalculated histogram. + + .. note:: + + For a PIL image, calculations rely on the + :py:meth:`~PIL.Image.Image.histogram` method. The pixel counts are + grouped into 256 bins, even if the image has more than 8 bits per + channel. So ``I`` and ``F`` mode images have a maximum ``mean``, + ``median`` and ``rms`` of 255, and cannot have an ``extrema`` maximum + of more than 255. + + :param mask: An optional mask. + """ + if isinstance(image_or_list, Image.Image): + self.h = image_or_list.histogram(mask) + elif isinstance(image_or_list, list): + self.h = image_or_list + else: + msg = "first argument must be image or list" # type: ignore[unreachable] + raise TypeError(msg) + self.bands = list(range(len(self.h) // 256)) + + @cached_property + def extrema(self) -> list[tuple[int, int]]: + """ + Min/max values for each band in the image. + + .. note:: + This relies on the :py:meth:`~PIL.Image.Image.histogram` method, and + simply returns the low and high bins used. This is correct for + images with 8 bits per channel, but fails for other modes such as + ``I`` or ``F``. Instead, use :py:meth:`~PIL.Image.Image.getextrema` to + return per-band extrema for the image. This is more correct and + efficient because, for non-8-bit modes, the histogram method uses + :py:meth:`~PIL.Image.Image.getextrema` to determine the bins used. + """ + + def minmax(histogram: list[int]) -> tuple[int, int]: + res_min, res_max = 255, 0 + for i in range(256): + if histogram[i]: + res_min = i + break + for i in range(255, -1, -1): + if histogram[i]: + res_max = i + break + return res_min, res_max + + return [minmax(self.h[i:]) for i in range(0, len(self.h), 256)] + + @cached_property + def count(self) -> list[int]: + """Total number of pixels for each band in the image.""" + return [sum(self.h[i : i + 256]) for i in range(0, len(self.h), 256)] + + @cached_property + def sum(self) -> list[float]: + """Sum of all pixels for each band in the image.""" + + v = [] + for i in range(0, len(self.h), 256): + layer_sum = 0.0 + for j in range(256): + layer_sum += j * self.h[i + j] + v.append(layer_sum) + return v + + @cached_property + def sum2(self) -> list[float]: + """Squared sum of all pixels for each band in the image.""" + + v = [] + for i in range(0, len(self.h), 256): + sum2 = 0.0 + for j in range(256): + sum2 += (j**2) * float(self.h[i + j]) + v.append(sum2) + return v + + @cached_property + def mean(self) -> list[float]: + """Average (arithmetic mean) pixel level for each band in the image.""" + return [self.sum[i] / self.count[i] if self.count[i] else 0 for i in self.bands] + + @cached_property + def median(self) -> list[int]: + """Median pixel level for each band in the image.""" + + v = [] + for i in self.bands: + s = 0 + half = self.count[i] // 2 + b = i * 256 + for j in range(256): + s = s + self.h[b + j] + if s > half: + break + v.append(j) + return v + + @cached_property + def rms(self) -> list[float]: + """RMS (root-mean-square) for each band in the image.""" + return [ + math.sqrt(self.sum2[i] / self.count[i]) if self.count[i] else 0 + for i in self.bands + ] + + @cached_property + def var(self) -> list[float]: + """Variance for each band in the image.""" + return [ + ( + (self.sum2[i] - (self.sum[i] ** 2.0) / self.count[i]) / self.count[i] + if self.count[i] + else 0 + ) + for i in self.bands + ] + + @cached_property + def stddev(self) -> list[float]: + """Standard deviation for each band in the image.""" + return [math.sqrt(self.var[i]) for i in self.bands] + + +Global = Stat # compatibility diff --git a/Python/venv/lib/python3.12/site-packages/PIL/ImageText.py b/Python/venv/lib/python3.12/site-packages/PIL/ImageText.py new file mode 100644 index 0000000..008d20d --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/ImageText.py @@ -0,0 +1,508 @@ +from __future__ import annotations + +import math +import re +from typing import AnyStr, Generic, NamedTuple + +from . import ImageFont +from ._typing import _Ink + +Font = ImageFont.ImageFont | ImageFont.FreeTypeFont | ImageFont.TransposedFont + + +class _Line(NamedTuple): + x: float + y: float + anchor: str + text: str | bytes + + +class _Wrap(Generic[AnyStr]): + lines: list[AnyStr] = [] + position = 0 + offset = 0 + + def __init__( + self, + text: Text[AnyStr], + width: int, + height: int | None = None, + font: Font | None = None, + ) -> None: + self.text: Text[AnyStr] = text + self.width = width + self.height = height + self.font = font + + input_text = self.text.text + emptystring = "" if isinstance(input_text, str) else b"" + line = emptystring + + for word in re.findall( + r"\s*\S+" if isinstance(input_text, str) else rb"\s*\S+", input_text + ): + newlines = re.findall( + r"[^\S\n]*\n" if isinstance(input_text, str) else rb"[^\S\n]*\n", word + ) + if newlines: + if not self.add_line(line): + break + for i, line in enumerate(newlines): + if i != 0 and not self.add_line(emptystring): + break + self.position += len(line) + word = word[len(line) :] + line = emptystring + + new_line = line + word + if self.text._get_bbox(new_line, self.font)[2] <= width: + # This word fits on the line + line = new_line + continue + + # This word does not fit on the line + if line and not self.add_line(line): + break + + original_length = len(word) + word = word.lstrip() + self.offset = original_length - len(word) + + if self.text._get_bbox(word, self.font)[2] > width: + if font is None: + msg = "Word does not fit within line" + raise ValueError(msg) + break + line = word + else: + if line: + self.add_line(line) + self.remaining_text: AnyStr = input_text[self.position :] + + def add_line(self, line: AnyStr) -> bool: + lines = self.lines + [line] + if self.height is not None: + last_line_y = self.text._split(lines=lines)[-1].y + last_line_height = self.text._get_bbox(line, self.font)[3] + if last_line_y + last_line_height > self.height: + return False + + self.lines = lines + self.position += len(line) + self.offset + self.offset = 0 + return True + + +class Text(Generic[AnyStr]): + def __init__( + self, + text: AnyStr, + font: Font | None = None, + mode: str = "RGB", + spacing: float = 4, + direction: str | None = None, + features: list[str] | None = None, + language: str | None = None, + ) -> None: + """ + :param text: String to be drawn. + :param font: Either an :py:class:`~PIL.ImageFont.ImageFont` instance, + :py:class:`~PIL.ImageFont.FreeTypeFont` instance, + :py:class:`~PIL.ImageFont.TransposedFont` instance or ``None``. If + ``None``, the default font from :py:meth:`.ImageFont.load_default` + will be used. + :param mode: The image mode this will be used with. + :param spacing: The number of pixels between lines. + :param direction: Direction of the text. It can be ``"rtl"`` (right to left), + ``"ltr"`` (left to right) or ``"ttb"`` (top to bottom). + Requires libraqm. + :param features: A list of OpenType font features to be used during text + layout. This is usually used to turn on optional font features + that are not enabled by default, for example ``"dlig"`` or + ``"ss01"``, but can be also used to turn off default font + features, for example ``"-liga"`` to disable ligatures or + ``"-kern"`` to disable kerning. To get all supported + features, see `OpenType docs`_. + Requires libraqm. + :param language: Language of the text. Different languages may use + different glyph shapes or ligatures. This parameter tells + the font which language the text is in, and to apply the + correct substitutions as appropriate, if available. + It should be a `BCP 47 language code`_. + Requires libraqm. + """ + self.text: AnyStr = text + self.font = font or ImageFont.load_default() + + self.mode = mode + self.spacing = spacing + self.direction = direction + self.features = features + self.language = language + + self.embedded_color = False + + self.stroke_width: float = 0 + self.stroke_fill: _Ink | None = None + + def embed_color(self) -> None: + """ + Use embedded color glyphs (COLR, CBDT, SBIX). + """ + if self.mode not in ("RGB", "RGBA"): + msg = "Embedded color supported only in RGB and RGBA modes" + raise ValueError(msg) + self.embedded_color = True + + def stroke(self, width: float = 0, fill: _Ink | None = None) -> None: + """ + :param width: The width of the text stroke. + :param fill: Color to use for the text stroke when drawing. If not given, will + default to the ``fill`` parameter from + :py:meth:`.ImageDraw.ImageDraw.text`. + """ + self.stroke_width = width + self.stroke_fill = fill + + def _get_fontmode(self) -> str: + if self.mode in ("1", "P", "I", "F"): + return "1" + elif self.embedded_color: + return "RGBA" + else: + return "L" + + def wrap( + self, + width: int, + height: int | None = None, + scaling: str | tuple[str, int] | None = None, + ) -> Text[AnyStr] | None: + """ + Wrap text to fit within a given width. + + :param width: The width to fit within. + :param height: An optional height limit. Any text that does not fit within this + will be returned as a new :py:class:`.Text` object. + :param scaling: An optional directive to scale the text, either "grow" as much + as possible within the given dimensions, or "shrink" until it + fits. It can also be a tuple of (direction, limit), with an + integer limit to stop scaling at. + + :returns: An :py:class:`.Text` object, or None. + """ + if isinstance(self.font, ImageFont.TransposedFont): + msg = "TransposedFont not supported" + raise ValueError(msg) + if self.direction not in (None, "ltr"): + msg = "Only ltr direction supported" + raise ValueError(msg) + + if scaling is None: + wrap = _Wrap(self, width, height) + else: + if not isinstance(self.font, ImageFont.FreeTypeFont): + msg = "'scaling' only supports FreeTypeFont" + raise ValueError(msg) + if height is None: + msg = "'scaling' requires 'height'" + raise ValueError(msg) + + if isinstance(scaling, str): + limit = 1 + else: + scaling, limit = scaling + + font = self.font + wrap = _Wrap(self, width, height, font) + if scaling == "shrink": + if not wrap.remaining_text: + return None + + size = math.ceil(font.size) + while wrap.remaining_text: + if size == max(limit, 1): + msg = "Text could not be scaled" + raise ValueError(msg) + size -= 1 + font = self.font.font_variant(size=size) + wrap = _Wrap(self, width, height, font) + self.font = font + else: + if wrap.remaining_text: + msg = "Text could not be scaled" + raise ValueError(msg) + + size = math.floor(font.size) + while not wrap.remaining_text: + if size == limit: + msg = "Text could not be scaled" + raise ValueError(msg) + size += 1 + font = self.font.font_variant(size=size) + last_wrap = wrap + wrap = _Wrap(self, width, height, font) + size -= 1 + if size != self.font.size: + self.font = self.font.font_variant(size=size) + wrap = last_wrap + + if wrap.remaining_text: + text = Text( + text=wrap.remaining_text, + font=self.font, + mode=self.mode, + spacing=self.spacing, + direction=self.direction, + features=self.features, + language=self.language, + ) + text.embedded_color = self.embedded_color + text.stroke_width = self.stroke_width + text.stroke_fill = self.stroke_fill + else: + text = None + + newline = "\n" if isinstance(self.text, str) else b"\n" + self.text = newline.join(wrap.lines) + return text + + def get_length(self) -> float: + """ + Returns length (in pixels with 1/64 precision) of text. + + This is the amount by which following text should be offset. + Text bounding box may extend past the length in some fonts, + e.g. when using italics or accents. + + The result is returned as a float; it is a whole number if using basic layout. + + Note that the sum of two lengths may not equal the length of a concatenated + string due to kerning. If you need to adjust for kerning, include the following + character and subtract its length. + + For example, instead of:: + + hello = ImageText.Text("Hello", font).get_length() + world = ImageText.Text("World", font).get_length() + helloworld = ImageText.Text("HelloWorld", font).get_length() + assert hello + world == helloworld + + use:: + + hello = ( + ImageText.Text("HelloW", font).get_length() - + ImageText.Text("W", font).get_length() + ) # adjusted for kerning + world = ImageText.Text("World", font).get_length() + helloworld = ImageText.Text("HelloWorld", font).get_length() + assert hello + world == helloworld + + or disable kerning with (requires libraqm):: + + hello = ImageText.Text("Hello", font, features=["-kern"]).get_length() + world = ImageText.Text("World", font, features=["-kern"]).get_length() + helloworld = ImageText.Text( + "HelloWorld", font, features=["-kern"] + ).get_length() + assert hello + world == helloworld + + :return: Either width for horizontal text, or height for vertical text. + """ + if isinstance(self.text, str): + multiline = "\n" in self.text + else: + multiline = b"\n" in self.text + if multiline: + msg = "can't measure length of multiline text" + raise ValueError(msg) + return self.font.getlength( + self.text, + self._get_fontmode(), + self.direction, + self.features, + self.language, + ) + + def _split( + self, + xy: tuple[float, float] = (0, 0), + anchor: str | None = None, + align: str = "left", + lines: list[str] | list[bytes] | None = None, + ) -> list[_Line]: + if anchor is None: + anchor = "lt" if self.direction == "ttb" else "la" + elif len(anchor) != 2: + msg = "anchor must be a 2 character string" + raise ValueError(msg) + + if lines is None: + lines = ( + self.text.split("\n") + if isinstance(self.text, str) + else self.text.split(b"\n") + ) + if len(lines) == 1: + return [_Line(xy[0], xy[1], anchor, lines[0])] + + if anchor[1] in "tb" and self.direction != "ttb": + msg = "anchor not supported for multiline text" + raise ValueError(msg) + + fontmode = self._get_fontmode() + line_spacing = ( + self.font.getbbox( + "A", + fontmode, + None, + self.features, + self.language, + self.stroke_width, + )[3] + + self.stroke_width + + self.spacing + ) + + top = xy[1] + parts = [] + if self.direction == "ttb": + left = xy[0] + for line in lines: + parts.append(_Line(left, top, anchor, line)) + left += line_spacing + else: + widths = [] + max_width: float = 0 + for line in lines: + line_width = self.font.getlength( + line, fontmode, self.direction, self.features, self.language + ) + widths.append(line_width) + max_width = max(max_width, line_width) + + if anchor[1] == "m": + top -= (len(lines) - 1) * line_spacing / 2.0 + elif anchor[1] == "d": + top -= (len(lines) - 1) * line_spacing + + idx = -1 + for line in lines: + left = xy[0] + idx += 1 + width_difference = max_width - widths[idx] + + # align by align parameter + if align in ("left", "justify"): + pass + elif align == "center": + left += width_difference / 2.0 + elif align == "right": + left += width_difference + else: + msg = 'align must be "left", "center", "right" or "justify"' + raise ValueError(msg) + + if ( + align == "justify" + and width_difference != 0 + and idx != len(lines) - 1 + ): + words = ( + line.split(" ") if isinstance(line, str) else line.split(b" ") + ) + if len(words) > 1: + # align left by anchor + if anchor[0] == "m": + left -= max_width / 2.0 + elif anchor[0] == "r": + left -= max_width + + word_widths = [ + self.font.getlength( + word, + fontmode, + self.direction, + self.features, + self.language, + ) + for word in words + ] + word_anchor = "l" + anchor[1] + width_difference = max_width - sum(word_widths) + i = 0 + for word in words: + parts.append(_Line(left, top, word_anchor, word)) + left += word_widths[i] + width_difference / (len(words) - 1) + i += 1 + top += line_spacing + continue + + # align left by anchor + if anchor[0] == "m": + left -= width_difference / 2.0 + elif anchor[0] == "r": + left -= width_difference + parts.append(_Line(left, top, anchor, line)) + top += line_spacing + + return parts + + def _get_bbox( + self, text: str | bytes, font: Font | None = None, anchor: str | None = None + ) -> tuple[float, float, float, float]: + return (font or self.font).getbbox( + text, + self._get_fontmode(), + self.direction, + self.features, + self.language, + self.stroke_width, + anchor, + ) + + def get_bbox( + self, + xy: tuple[float, float] = (0, 0), + anchor: str | None = None, + align: str = "left", + ) -> tuple[float, float, float, float]: + """ + Returns bounding box (in pixels) of text. + + Use :py:meth:`get_length` to get the offset of following text with 1/64 pixel + precision. The bounding box includes extra margins for some fonts, e.g. italics + or accents. + + :param xy: The anchor coordinates of the text. + :param anchor: The text anchor alignment. Determines the relative location of + the anchor to the text. The default alignment is top left, + specifically ``la`` for horizontal text and ``lt`` for + vertical text. See :ref:`text-anchors` for details. + :param align: For multiline text, ``"left"``, ``"center"``, ``"right"`` or + ``"justify"`` determines the relative alignment of lines. Use the + ``anchor`` parameter to specify the alignment to ``xy``. + + :return: ``(left, top, right, bottom)`` bounding box + """ + bbox: tuple[float, float, float, float] | None = None + for x, y, anchor, text in self._split(xy, anchor, align): + bbox_line = self._get_bbox(text, anchor=anchor) + bbox_line = ( + bbox_line[0] + x, + bbox_line[1] + y, + bbox_line[2] + x, + bbox_line[3] + y, + ) + if bbox is None: + bbox = bbox_line + else: + bbox = ( + min(bbox[0], bbox_line[0]), + min(bbox[1], bbox_line[1]), + max(bbox[2], bbox_line[2]), + max(bbox[3], bbox_line[3]), + ) + + assert bbox is not None + return bbox diff --git a/Python/venv/lib/python3.12/site-packages/PIL/ImageTk.py b/Python/venv/lib/python3.12/site-packages/PIL/ImageTk.py new file mode 100644 index 0000000..3a4cb81 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/ImageTk.py @@ -0,0 +1,266 @@ +# +# The Python Imaging Library. +# $Id$ +# +# a Tk display interface +# +# History: +# 96-04-08 fl Created +# 96-09-06 fl Added getimage method +# 96-11-01 fl Rewritten, removed image attribute and crop method +# 97-05-09 fl Use PyImagingPaste method instead of image type +# 97-05-12 fl Minor tweaks to match the IFUNC95 interface +# 97-05-17 fl Support the "pilbitmap" booster patch +# 97-06-05 fl Added file= and data= argument to image constructors +# 98-03-09 fl Added width and height methods to Image classes +# 98-07-02 fl Use default mode for "P" images without palette attribute +# 98-07-02 fl Explicitly destroy Tkinter image objects +# 99-07-24 fl Support multiple Tk interpreters (from Greg Couch) +# 99-07-26 fl Automatically hook into Tkinter (if possible) +# 99-08-15 fl Hook uses _imagingtk instead of _imaging +# +# Copyright (c) 1997-1999 by Secret Labs AB +# Copyright (c) 1996-1997 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import tkinter +from io import BytesIO +from typing import Any + +from . import Image, ImageFile + +TYPE_CHECKING = False +if TYPE_CHECKING: + from ._typing import CapsuleType + +# -------------------------------------------------------------------- +# Check for Tkinter interface hooks + + +def _get_image_from_kw(kw: dict[str, Any]) -> ImageFile.ImageFile | None: + source = None + if "file" in kw: + source = kw.pop("file") + elif "data" in kw: + source = BytesIO(kw.pop("data")) + if not source: + return None + return Image.open(source) + + +def _pyimagingtkcall( + command: str, photo: PhotoImage | tkinter.PhotoImage, ptr: CapsuleType +) -> None: + tk = photo.tk + try: + tk.call(command, photo, repr(ptr)) + except tkinter.TclError: + # activate Tkinter hook + # may raise an error if it cannot attach to Tkinter + from . import _imagingtk + + _imagingtk.tkinit(tk.interpaddr()) + tk.call(command, photo, repr(ptr)) + + +# -------------------------------------------------------------------- +# PhotoImage + + +class PhotoImage: + """ + A Tkinter-compatible photo image. This can be used + everywhere Tkinter expects an image object. If the image is an RGBA + image, pixels having alpha 0 are treated as transparent. + + The constructor takes either a PIL image, or a mode and a size. + Alternatively, you can use the ``file`` or ``data`` options to initialize + the photo image object. + + :param image: Either a PIL image, or a mode string. If a mode string is + used, a size must also be given. + :param size: If the first argument is a mode string, this defines the size + of the image. + :keyword file: A filename to load the image from (using + ``Image.open(file)``). + :keyword data: An 8-bit string containing image data (as loaded from an + image file). + """ + + def __init__( + self, + image: Image.Image | str | None = None, + size: tuple[int, int] | None = None, + **kw: Any, + ) -> None: + # Tk compatibility: file or data + if image is None: + image = _get_image_from_kw(kw) + + if image is None: + msg = "Image is required" + raise ValueError(msg) + elif isinstance(image, str): + mode = image + image = None + + if size is None: + msg = "If first argument is mode, size is required" + raise ValueError(msg) + else: + # got an image instead of a mode + mode = image.mode + if mode == "P": + # palette mapped data + image.apply_transparency() + image.load() + mode = image.palette.mode if image.palette else "RGB" + size = image.size + kw["width"], kw["height"] = size + + if mode not in ["1", "L", "RGB", "RGBA"]: + mode = Image.getmodebase(mode) + + self.__mode = mode + self.__size = size + self.__photo = tkinter.PhotoImage(**kw) + self.tk = self.__photo.tk + if image: + self.paste(image) + + def __del__(self) -> None: + try: + name = self.__photo.name + except AttributeError: + return + self.__photo.name = None + try: + self.__photo.tk.call("image", "delete", name) + except Exception: + pass # ignore internal errors + + def __str__(self) -> str: + """ + Get the Tkinter photo image identifier. This method is automatically + called by Tkinter whenever a PhotoImage object is passed to a Tkinter + method. + + :return: A Tkinter photo image identifier (a string). + """ + return str(self.__photo) + + def width(self) -> int: + """ + Get the width of the image. + + :return: The width, in pixels. + """ + return self.__size[0] + + def height(self) -> int: + """ + Get the height of the image. + + :return: The height, in pixels. + """ + return self.__size[1] + + def paste(self, im: Image.Image) -> None: + """ + Paste a PIL image into the photo image. Note that this can + be very slow if the photo image is displayed. + + :param im: A PIL image. The size must match the target region. If the + mode does not match, the image is converted to the mode of + the bitmap image. + """ + # convert to blittable + ptr = im.getim() + image = im.im + if not image.isblock() or im.mode != self.__mode: + block = Image.core.new_block(self.__mode, im.size) + image.convert2(block, image) # convert directly between buffers + ptr = block.ptr + + _pyimagingtkcall("PyImagingPhoto", self.__photo, ptr) + + +# -------------------------------------------------------------------- +# BitmapImage + + +class BitmapImage: + """ + A Tkinter-compatible bitmap image. This can be used everywhere Tkinter + expects an image object. + + The given image must have mode "1". Pixels having value 0 are treated as + transparent. Options, if any, are passed on to Tkinter. The most commonly + used option is ``foreground``, which is used to specify the color for the + non-transparent parts. See the Tkinter documentation for information on + how to specify colours. + + :param image: A PIL image. + """ + + def __init__(self, image: Image.Image | None = None, **kw: Any) -> None: + # Tk compatibility: file or data + if image is None: + image = _get_image_from_kw(kw) + + if image is None: + msg = "Image is required" + raise ValueError(msg) + self.__mode = image.mode + self.__size = image.size + + self.__photo = tkinter.BitmapImage(data=image.tobitmap(), **kw) + + def __del__(self) -> None: + try: + name = self.__photo.name + except AttributeError: + return + self.__photo.name = None + try: + self.__photo.tk.call("image", "delete", name) + except Exception: + pass # ignore internal errors + + def width(self) -> int: + """ + Get the width of the image. + + :return: The width, in pixels. + """ + return self.__size[0] + + def height(self) -> int: + """ + Get the height of the image. + + :return: The height, in pixels. + """ + return self.__size[1] + + def __str__(self) -> str: + """ + Get the Tkinter bitmap image identifier. This method is automatically + called by Tkinter whenever a BitmapImage object is passed to a Tkinter + method. + + :return: A Tkinter bitmap image identifier (a string). + """ + return str(self.__photo) + + +def getimage(photo: PhotoImage) -> Image.Image: + """Copies the contents of a PhotoImage to a PIL image memory.""" + im = Image.new("RGBA", (photo.width(), photo.height())) + + _pyimagingtkcall("PyImagingPhotoGet", photo, im.getim()) + + return im diff --git a/Python/venv/lib/python3.12/site-packages/PIL/ImageTransform.py b/Python/venv/lib/python3.12/site-packages/PIL/ImageTransform.py new file mode 100644 index 0000000..fb144ff --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/ImageTransform.py @@ -0,0 +1,136 @@ +# +# The Python Imaging Library. +# $Id$ +# +# transform wrappers +# +# History: +# 2002-04-08 fl Created +# +# Copyright (c) 2002 by Secret Labs AB +# Copyright (c) 2002 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +from collections.abc import Sequence +from typing import Any + +from . import Image + + +class Transform(Image.ImageTransformHandler): + """Base class for other transforms defined in :py:mod:`~PIL.ImageTransform`.""" + + method: Image.Transform + + def __init__(self, data: Sequence[Any]) -> None: + self.data = data + + def getdata(self) -> tuple[Image.Transform, Sequence[int]]: + return self.method, self.data + + def transform( + self, + size: tuple[int, int], + image: Image.Image, + **options: Any, + ) -> Image.Image: + """Perform the transform. Called from :py:meth:`.Image.transform`.""" + # can be overridden + method, data = self.getdata() + return image.transform(size, method, data, **options) + + +class AffineTransform(Transform): + """ + Define an affine image transform. + + This function takes a 6-tuple (a, b, c, d, e, f) which contain the first + two rows from the inverse of an affine transform matrix. For each pixel + (x, y) in the output image, the new value is taken from a position (a x + + b y + c, d x + e y + f) in the input image, rounded to nearest pixel. + + This function can be used to scale, translate, rotate, and shear the + original image. + + See :py:meth:`.Image.transform` + + :param matrix: A 6-tuple (a, b, c, d, e, f) containing the first two rows + from the inverse of an affine transform matrix. + """ + + method = Image.Transform.AFFINE + + +class PerspectiveTransform(Transform): + """ + Define a perspective image transform. + + This function takes an 8-tuple (a, b, c, d, e, f, g, h). For each pixel + (x, y) in the output image, the new value is taken from a position + ((a x + b y + c) / (g x + h y + 1), (d x + e y + f) / (g x + h y + 1)) in + the input image, rounded to nearest pixel. + + This function can be used to scale, translate, rotate, and shear the + original image. + + See :py:meth:`.Image.transform` + + :param matrix: An 8-tuple (a, b, c, d, e, f, g, h). + """ + + method = Image.Transform.PERSPECTIVE + + +class ExtentTransform(Transform): + """ + Define a transform to extract a subregion from an image. + + Maps a rectangle (defined by two corners) from the image to a rectangle of + the given size. The resulting image will contain data sampled from between + the corners, such that (x0, y0) in the input image will end up at (0,0) in + the output image, and (x1, y1) at size. + + This method can be used to crop, stretch, shrink, or mirror an arbitrary + rectangle in the current image. It is slightly slower than crop, but about + as fast as a corresponding resize operation. + + See :py:meth:`.Image.transform` + + :param bbox: A 4-tuple (x0, y0, x1, y1) which specifies two points in the + input image's coordinate system. See :ref:`coordinate-system`. + """ + + method = Image.Transform.EXTENT + + +class QuadTransform(Transform): + """ + Define a quad image transform. + + Maps a quadrilateral (a region defined by four corners) from the image to a + rectangle of the given size. + + See :py:meth:`.Image.transform` + + :param xy: An 8-tuple (x0, y0, x1, y1, x2, y2, x3, y3) which contain the + upper left, lower left, lower right, and upper right corner of the + source quadrilateral. + """ + + method = Image.Transform.QUAD + + +class MeshTransform(Transform): + """ + Define a mesh image transform. A mesh transform consists of one or more + individual quad transforms. + + See :py:meth:`.Image.transform` + + :param data: A list of (bbox, quad) tuples. + """ + + method = Image.Transform.MESH diff --git a/Python/venv/lib/python3.12/site-packages/PIL/ImageWin.py b/Python/venv/lib/python3.12/site-packages/PIL/ImageWin.py new file mode 100644 index 0000000..98c28f2 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/ImageWin.py @@ -0,0 +1,247 @@ +# +# The Python Imaging Library. +# $Id$ +# +# a Windows DIB display interface +# +# History: +# 1996-05-20 fl Created +# 1996-09-20 fl Fixed subregion exposure +# 1997-09-21 fl Added draw primitive (for tzPrint) +# 2003-05-21 fl Added experimental Window/ImageWindow classes +# 2003-09-05 fl Added fromstring/tostring methods +# +# Copyright (c) Secret Labs AB 1997-2003. +# Copyright (c) Fredrik Lundh 1996-2003. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +from . import Image + + +class HDC: + """ + Wraps an HDC integer. The resulting object can be passed to the + :py:meth:`~PIL.ImageWin.Dib.draw` and :py:meth:`~PIL.ImageWin.Dib.expose` + methods. + """ + + def __init__(self, dc: int) -> None: + self.dc = dc + + def __int__(self) -> int: + return self.dc + + +class HWND: + """ + Wraps an HWND integer. The resulting object can be passed to the + :py:meth:`~PIL.ImageWin.Dib.draw` and :py:meth:`~PIL.ImageWin.Dib.expose` + methods, instead of a DC. + """ + + def __init__(self, wnd: int) -> None: + self.wnd = wnd + + def __int__(self) -> int: + return self.wnd + + +class Dib: + """ + A Windows bitmap with the given mode and size. The mode can be one of "1", + "L", "P", or "RGB". + + If the display requires a palette, this constructor creates a suitable + palette and associates it with the image. For an "L" image, 128 graylevels + are allocated. For an "RGB" image, a 6x6x6 colour cube is used, together + with 20 graylevels. + + To make sure that palettes work properly under Windows, you must call the + ``palette`` method upon certain events from Windows. + + :param image: Either a PIL image, or a mode string. If a mode string is + used, a size must also be given. The mode can be one of "1", + "L", "P", or "RGB". + :param size: If the first argument is a mode string, this + defines the size of the image. + """ + + def __init__( + self, image: Image.Image | str, size: tuple[int, int] | None = None + ) -> None: + if isinstance(image, str): + mode = image + image = "" + if size is None: + msg = "If first argument is mode, size is required" + raise ValueError(msg) + else: + mode = image.mode + size = image.size + if mode not in ["1", "L", "P", "RGB"]: + mode = Image.getmodebase(mode) + self.image = Image.core.display(mode, size) + self.mode = mode + self.size = size + if image: + assert not isinstance(image, str) + self.paste(image) + + def expose(self, handle: int | HDC | HWND) -> None: + """ + Copy the bitmap contents to a device context. + + :param handle: Device context (HDC), cast to a Python integer, or an + HDC or HWND instance. In PythonWin, you can use + ``CDC.GetHandleAttrib()`` to get a suitable handle. + """ + handle_int = int(handle) + if isinstance(handle, HWND): + dc = self.image.getdc(handle_int) + try: + self.image.expose(dc) + finally: + self.image.releasedc(handle_int, dc) + else: + self.image.expose(handle_int) + + def draw( + self, + handle: int | HDC | HWND, + dst: tuple[int, int, int, int], + src: tuple[int, int, int, int] | None = None, + ) -> None: + """ + Same as expose, but allows you to specify where to draw the image, and + what part of it to draw. + + The destination and source areas are given as 4-tuple rectangles. If + the source is omitted, the entire image is copied. If the source and + the destination have different sizes, the image is resized as + necessary. + """ + if src is None: + src = (0, 0) + self.size + handle_int = int(handle) + if isinstance(handle, HWND): + dc = self.image.getdc(handle_int) + try: + self.image.draw(dc, dst, src) + finally: + self.image.releasedc(handle_int, dc) + else: + self.image.draw(handle_int, dst, src) + + def query_palette(self, handle: int | HDC | HWND) -> int: + """ + Installs the palette associated with the image in the given device + context. + + This method should be called upon **QUERYNEWPALETTE** and + **PALETTECHANGED** events from Windows. If this method returns a + non-zero value, one or more display palette entries were changed, and + the image should be redrawn. + + :param handle: Device context (HDC), cast to a Python integer, or an + HDC or HWND instance. + :return: The number of entries that were changed (if one or more entries, + this indicates that the image should be redrawn). + """ + handle_int = int(handle) + if isinstance(handle, HWND): + handle = self.image.getdc(handle_int) + try: + result = self.image.query_palette(handle) + finally: + self.image.releasedc(handle, handle) + else: + result = self.image.query_palette(handle_int) + return result + + def paste( + self, im: Image.Image, box: tuple[int, int, int, int] | None = None + ) -> None: + """ + Paste a PIL image into the bitmap image. + + :param im: A PIL image. The size must match the target region. + If the mode does not match, the image is converted to the + mode of the bitmap image. + :param box: A 4-tuple defining the left, upper, right, and + lower pixel coordinate. See :ref:`coordinate-system`. If + None is given instead of a tuple, all of the image is + assumed. + """ + im.load() + if self.mode != im.mode: + im = im.convert(self.mode) + if box: + self.image.paste(im.im, box) + else: + self.image.paste(im.im) + + def frombytes(self, buffer: bytes) -> None: + """ + Load display memory contents from byte data. + + :param buffer: A buffer containing display data (usually + data returned from :py:func:`~PIL.ImageWin.Dib.tobytes`) + """ + self.image.frombytes(buffer) + + def tobytes(self) -> bytes: + """ + Copy display memory contents to bytes object. + + :return: A bytes object containing display data. + """ + return self.image.tobytes() + + +class Window: + """Create a Window with the given title size.""" + + def __init__( + self, title: str = "PIL", width: int | None = None, height: int | None = None + ) -> None: + self.hwnd = Image.core.createwindow( + title, self.__dispatcher, width or 0, height or 0 + ) + + def __dispatcher(self, action: str, *args: int) -> None: + getattr(self, f"ui_handle_{action}")(*args) + + def ui_handle_clear(self, dc: int, x0: int, y0: int, x1: int, y1: int) -> None: + pass + + def ui_handle_damage(self, x0: int, y0: int, x1: int, y1: int) -> None: + pass + + def ui_handle_destroy(self) -> None: + pass + + def ui_handle_repair(self, dc: int, x0: int, y0: int, x1: int, y1: int) -> None: + pass + + def ui_handle_resize(self, width: int, height: int) -> None: + pass + + def mainloop(self) -> None: + Image.core.eventloop() + + +class ImageWindow(Window): + """Create an image window which displays the given image.""" + + def __init__(self, image: Image.Image | Dib, title: str = "PIL") -> None: + if not isinstance(image, Dib): + image = Dib(image) + self.image = image + width, height = image.size + super().__init__(title, width=width, height=height) + + def ui_handle_repair(self, dc: int, x0: int, y0: int, x1: int, y1: int) -> None: + self.image.draw(dc, (x0, y0, x1, y1)) diff --git a/Python/venv/lib/python3.12/site-packages/PIL/ImtImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/ImtImagePlugin.py new file mode 100644 index 0000000..c4eccee --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/ImtImagePlugin.py @@ -0,0 +1,103 @@ +# +# The Python Imaging Library. +# $Id$ +# +# IM Tools support for PIL +# +# history: +# 1996-05-27 fl Created (read 8-bit images only) +# 2001-02-17 fl Use 're' instead of 'regex' (Python 2.1) (0.2) +# +# Copyright (c) Secret Labs AB 1997-2001. +# Copyright (c) Fredrik Lundh 1996-2001. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import re + +from . import Image, ImageFile + +# +# -------------------------------------------------------------------- + +field = re.compile(rb"([a-z]*) ([^ \r\n]*)") + + +## +# Image plugin for IM Tools images. + + +class ImtImageFile(ImageFile.ImageFile): + format = "IMT" + format_description = "IM Tools" + + def _open(self) -> None: + # Quick rejection: if there's not a LF among the first + # 100 bytes, this is (probably) not a text header. + + assert self.fp is not None + + buffer = self.fp.read(100) + if b"\n" not in buffer: + msg = "not an IM file" + raise SyntaxError(msg) + + xsize = ysize = 0 + + while True: + if buffer: + s = buffer[:1] + buffer = buffer[1:] + else: + s = self.fp.read(1) + if not s: + break + + if s == b"\x0c": + # image data begins + self.tile = [ + ImageFile._Tile( + "raw", + (0, 0) + self.size, + self.fp.tell() - len(buffer), + self.mode, + ) + ] + + break + + else: + # read key/value pair + if b"\n" not in buffer: + buffer += self.fp.read(100) + lines = buffer.split(b"\n") + s += lines.pop(0) + buffer = b"\n".join(lines) + if len(s) == 1 or len(s) > 100: + break + if s[0] == ord(b"*"): + continue # comment + + m = field.match(s) + if not m: + break + k, v = m.group(1, 2) + if k == b"width": + xsize = int(v) + self._size = xsize, ysize + elif k == b"height": + ysize = int(v) + self._size = xsize, ysize + elif k == b"pixel" and v == b"n8": + self._mode = "L" + + +# +# -------------------------------------------------------------------- + +Image.register_open(ImtImageFile.format, ImtImageFile) + +# +# no extension registered (".im" is simply too common) diff --git a/Python/venv/lib/python3.12/site-packages/PIL/IptcImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/IptcImagePlugin.py new file mode 100644 index 0000000..9c8be8b --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/IptcImagePlugin.py @@ -0,0 +1,226 @@ +# +# The Python Imaging Library. +# $Id$ +# +# IPTC/NAA file handling +# +# history: +# 1995-10-01 fl Created +# 1998-03-09 fl Cleaned up and added to PIL +# 2002-06-18 fl Added getiptcinfo helper +# +# Copyright (c) Secret Labs AB 1997-2002. +# Copyright (c) Fredrik Lundh 1995. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +from io import BytesIO +from typing import cast + +from . import Image, ImageFile +from ._binary import i16be as i16 +from ._binary import i32be as i32 + +COMPRESSION = {1: "raw", 5: "jpeg"} + + +# +# Helpers + + +def _i(c: bytes) -> int: + return i32((b"\0\0\0\0" + c)[-4:]) + + +## +# Image plugin for IPTC/NAA datastreams. To read IPTC/NAA fields +# from TIFF and JPEG files, use the getiptcinfo function. + + +class IptcImageFile(ImageFile.ImageFile): + format = "IPTC" + format_description = "IPTC/NAA" + + def getint(self, key: tuple[int, int]) -> int: + return _i(self.info[key]) + + def field(self) -> tuple[tuple[int, int] | None, int]: + # + # get a IPTC field header + assert self.fp is not None + s = self.fp.read(5) + if not s.strip(b"\x00"): + return None, 0 + + tag = s[1], s[2] + + # syntax + if s[0] != 0x1C or tag[0] not in [1, 2, 3, 4, 5, 6, 7, 8, 9, 240]: + msg = "invalid IPTC/NAA file" + raise SyntaxError(msg) + + # field size + size = s[3] + if size > 132: + msg = "illegal field length in IPTC/NAA file" + raise OSError(msg) + elif size == 128: + size = 0 + elif size > 128: + size = _i(self.fp.read(size - 128)) + else: + size = i16(s, 3) + + return tag, size + + def _open(self) -> None: + # load descriptive fields + assert self.fp is not None + while True: + offset = self.fp.tell() + tag, size = self.field() + if not tag or tag == (8, 10): + break + if size: + tagdata = self.fp.read(size) + else: + tagdata = None + if tag in self.info: + if isinstance(self.info[tag], list): + self.info[tag].append(tagdata) + else: + self.info[tag] = [self.info[tag], tagdata] + else: + self.info[tag] = tagdata + + # mode + layers = self.info[(3, 60)][0] + component = self.info[(3, 60)][1] + if layers == 1 and not component: + self._mode = "L" + band = None + else: + if layers == 3 and component: + self._mode = "RGB" + elif layers == 4 and component: + self._mode = "CMYK" + if (3, 65) in self.info: + band = self.info[(3, 65)][0] - 1 + else: + band = 0 + + # size + self._size = self.getint((3, 20)), self.getint((3, 30)) + + # compression + try: + compression = COMPRESSION[self.getint((3, 120))] + except KeyError as e: + msg = "Unknown IPTC image compression" + raise OSError(msg) from e + + # tile + if tag == (8, 10): + self.tile = [ + ImageFile._Tile("iptc", (0, 0) + self.size, offset, (compression, band)) + ] + + def load(self) -> Image.core.PixelAccess | None: + if self.tile: + args = self.tile[0].args + assert isinstance(args, tuple) + compression, band = args + + assert self.fp is not None + self.fp.seek(self.tile[0].offset) + + # Copy image data to temporary file + o = BytesIO() + if compression == "raw": + # To simplify access to the extracted file, + # prepend a PPM header + o.write(b"P5\n%d %d\n255\n" % self.size) + while True: + type, size = self.field() + if type != (8, 10): + break + while size > 0: + s = self.fp.read(min(size, 8192)) + if not s: + break + o.write(s) + size -= len(s) + + with Image.open(o) as _im: + if band is not None: + bands = [Image.new("L", _im.size)] * Image.getmodebands(self.mode) + bands[band] = _im + im = Image.merge(self.mode, bands) + else: + im = _im + im.load() + self.im = im.im + self.tile = [] + return ImageFile.ImageFile.load(self) + + +Image.register_open(IptcImageFile.format, IptcImageFile) + +Image.register_extension(IptcImageFile.format, ".iim") + + +def getiptcinfo( + im: ImageFile.ImageFile, +) -> dict[tuple[int, int], bytes | list[bytes]] | None: + """ + Get IPTC information from TIFF, JPEG, or IPTC file. + + :param im: An image containing IPTC data. + :returns: A dictionary containing IPTC information, or None if + no IPTC information block was found. + """ + from . import JpegImagePlugin, TiffImagePlugin + + data = None + + if isinstance(im, IptcImageFile): + # return info dictionary right away + return {k: v for k, v in im.info.items() if isinstance(k, tuple)} + + elif isinstance(im, JpegImagePlugin.JpegImageFile): + # extract the IPTC/NAA resource + photoshop = im.info.get("photoshop") + if photoshop: + data = photoshop.get(0x0404) + + elif isinstance(im, TiffImagePlugin.TiffImageFile): + # get raw data from the IPTC/NAA tag (PhotoShop tags the data + # as 4-byte integers, so we cannot use the get method...) + try: + data = im.tag_v2._tagdata[TiffImagePlugin.IPTC_NAA_CHUNK] + except KeyError: + pass + + if data is None: + return None # no properties + + # create an IptcImagePlugin object without initializing it + class FakeImage: + pass + + fake_im = FakeImage() + fake_im.__class__ = IptcImageFile # type: ignore[assignment] + iptc_im = cast(IptcImageFile, fake_im) + + # parse the IPTC information chunk + iptc_im.info = {} + iptc_im.fp = BytesIO(data) + + try: + iptc_im._open() + except (IndexError, KeyError): + pass # expected failure + + return {k: v for k, v in iptc_im.info.items() if isinstance(k, tuple)} diff --git a/Python/venv/lib/python3.12/site-packages/PIL/Jpeg2KImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/Jpeg2KImagePlugin.py new file mode 100644 index 0000000..cb37735 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/Jpeg2KImagePlugin.py @@ -0,0 +1,460 @@ +# +# The Python Imaging Library +# $Id$ +# +# JPEG2000 file handling +# +# History: +# 2014-03-12 ajh Created +# 2021-06-30 rogermb Extract dpi information from the 'resc' header box +# +# Copyright (c) 2014 Coriolis Systems Limited +# Copyright (c) 2014 Alastair Houghton +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import io +import os +import struct +from typing import cast + +from . import Image, ImageFile, ImagePalette, _binary + +TYPE_CHECKING = False +if TYPE_CHECKING: + from collections.abc import Callable + from typing import IO + + +class BoxReader: + """ + A small helper class to read fields stored in JPEG2000 header boxes + and to easily step into and read sub-boxes. + """ + + def __init__(self, fp: IO[bytes], length: int = -1) -> None: + self.fp = fp + self.has_length = length >= 0 + self.length = length + self.remaining_in_box = -1 + + def _can_read(self, num_bytes: int) -> bool: + if self.has_length and self.fp.tell() + num_bytes > self.length: + # Outside box: ensure we don't read past the known file length + return False + if self.remaining_in_box >= 0: + # Inside box contents: ensure read does not go past box boundaries + return num_bytes <= self.remaining_in_box + else: + return True # No length known, just read + + def _read_bytes(self, num_bytes: int) -> bytes: + if not self._can_read(num_bytes): + msg = "Not enough data in header" + raise SyntaxError(msg) + + data = self.fp.read(num_bytes) + if len(data) < num_bytes: + msg = f"Expected to read {num_bytes} bytes but only got {len(data)}." + raise OSError(msg) + + if self.remaining_in_box > 0: + self.remaining_in_box -= num_bytes + return data + + def read_fields(self, field_format: str) -> tuple[int | bytes, ...]: + size = struct.calcsize(field_format) + data = self._read_bytes(size) + return struct.unpack(field_format, data) + + def read_boxes(self) -> BoxReader: + size = self.remaining_in_box + data = self._read_bytes(size) + return BoxReader(io.BytesIO(data), size) + + def has_next_box(self) -> bool: + if self.has_length: + return self.fp.tell() + self.remaining_in_box < self.length + else: + return True + + def next_box_type(self) -> bytes: + # Skip the rest of the box if it has not been read + if self.remaining_in_box > 0: + self.fp.seek(self.remaining_in_box, os.SEEK_CUR) + self.remaining_in_box = -1 + + # Read the length and type of the next box + lbox, tbox = cast(tuple[int, bytes], self.read_fields(">I4s")) + if lbox == 1: + lbox = cast(int, self.read_fields(">Q")[0]) + hlen = 16 + else: + hlen = 8 + + if lbox < hlen or not self._can_read(lbox - hlen): + msg = "Invalid header length" + raise SyntaxError(msg) + + self.remaining_in_box = lbox - hlen + return tbox + + +def _parse_codestream(fp: IO[bytes]) -> tuple[tuple[int, int], str]: + """Parse the JPEG 2000 codestream to extract the size and component + count from the SIZ marker segment, returning a PIL (size, mode) tuple.""" + + hdr = fp.read(2) + lsiz = _binary.i16be(hdr) + siz = hdr + fp.read(lsiz - 2) + lsiz, rsiz, xsiz, ysiz, xosiz, yosiz, _, _, _, _, csiz = struct.unpack_from( + ">HHIIIIIIIIH", siz + ) + + size = (xsiz - xosiz, ysiz - yosiz) + if csiz == 1: + ssiz = struct.unpack_from(">B", siz, 38) + if (ssiz[0] & 0x7F) + 1 > 8: + mode = "I;16" + else: + mode = "L" + elif csiz == 2: + mode = "LA" + elif csiz == 3: + mode = "RGB" + elif csiz == 4: + mode = "RGBA" + else: + msg = "unable to determine J2K image mode" + raise SyntaxError(msg) + + return size, mode + + +def _res_to_dpi(num: int, denom: int, exp: int) -> float | None: + """Convert JPEG2000's (numerator, denominator, exponent-base-10) resolution, + calculated as (num / denom) * 10^exp and stored in dots per meter, + to floating-point dots per inch.""" + if denom == 0: + return None + return (254 * num * (10**exp)) / (10000 * denom) + + +def _parse_jp2_header( + fp: IO[bytes], +) -> tuple[ + tuple[int, int], + str, + str | None, + tuple[float, float] | None, + ImagePalette.ImagePalette | None, +]: + """Parse the JP2 header box to extract size, component count, + color space information, and optionally DPI information, + returning a (size, mode, mimetype, dpi) tuple.""" + + # Find the JP2 header box + reader = BoxReader(fp) + header = None + mimetype = None + while reader.has_next_box(): + tbox = reader.next_box_type() + + if tbox == b"jp2h": + header = reader.read_boxes() + break + elif tbox == b"ftyp": + if reader.read_fields(">4s")[0] == b"jpx ": + mimetype = "image/jpx" + assert header is not None + + size = None + mode = None + bpc = None + nc = None + dpi = None # 2-tuple of DPI info, or None + palette = None + colr = None + + while header.has_next_box(): + tbox = header.next_box_type() + + if tbox == b"ihdr": + height, width, nc, bpc = header.read_fields(">IIHB") + assert isinstance(height, int) + assert isinstance(width, int) + assert isinstance(bpc, int) + size = (width, height) + if nc == 1 and (bpc & 0x7F) > 8: + mode = "I;16" + elif nc == 1: + mode = "L" + elif nc == 2: + mode = "LA" + elif nc == 3: + mode = "RGB" + elif nc == 4: + mode = "RGBA" + elif tbox == b"colr": + meth, _, _, enumcs = header.read_fields(">BBBI") + if meth == 1: + if enumcs in (0, 15): + colr = "1" + elif enumcs == 12: + colr = "CMYK" + if nc == 4: + mode = "CMYK" + elif enumcs == 17: + colr = "L" + elif tbox == b"pclr" and mode in ("L", "LA") and colr not in ("1", "L"): + ne, npc = header.read_fields(">HB") + assert isinstance(ne, int) + assert isinstance(npc, int) + max_bitdepth = 0 + for bitdepth in header.read_fields(">" + ("B" * npc)): + assert isinstance(bitdepth, int) + if bitdepth > max_bitdepth: + max_bitdepth = bitdepth + if max_bitdepth <= 8: + if npc == 4: + palette_mode = "CMYK" if colr == "CMYK" else "RGBA" + else: + palette_mode = "RGB" + palette = ImagePalette.ImagePalette(palette_mode) + for i in range(ne): + color: list[int] = [] + for value in header.read_fields(">" + ("B" * npc)): + assert isinstance(value, int) + color.append(value) + palette.getcolor(tuple(color)) + mode = "P" if mode == "L" else "PA" + elif tbox == b"res ": + res = header.read_boxes() + while res.has_next_box(): + tres = res.next_box_type() + if tres == b"resc": + vrcn, vrcd, hrcn, hrcd, vrce, hrce = res.read_fields(">HHHHBB") + assert isinstance(vrcn, int) + assert isinstance(vrcd, int) + assert isinstance(hrcn, int) + assert isinstance(hrcd, int) + assert isinstance(vrce, int) + assert isinstance(hrce, int) + hres = _res_to_dpi(hrcn, hrcd, hrce) + vres = _res_to_dpi(vrcn, vrcd, vrce) + if hres is not None and vres is not None: + dpi = (hres, vres) + break + + if size is None or mode is None: + msg = "Malformed JP2 header" + raise SyntaxError(msg) + + return size, mode, mimetype, dpi, palette + + +## +# Image plugin for JPEG2000 images. + + +class Jpeg2KImageFile(ImageFile.ImageFile): + format = "JPEG2000" + format_description = "JPEG 2000 (ISO 15444)" + + def _open(self) -> None: + assert self.fp is not None + sig = self.fp.read(4) + if sig == b"\xff\x4f\xff\x51": + self.codec = "j2k" + self._size, self._mode = _parse_codestream(self.fp) + self._parse_comment() + else: + sig = sig + self.fp.read(8) + + if sig == b"\x00\x00\x00\x0cjP \x0d\x0a\x87\x0a": + self.codec = "jp2" + header = _parse_jp2_header(self.fp) + self._size, self._mode, self.custom_mimetype, dpi, self.palette = header + if dpi is not None: + self.info["dpi"] = dpi + if self.fp.read(12).endswith(b"jp2c\xff\x4f\xff\x51"): + hdr = self.fp.read(2) + length = _binary.i16be(hdr) + self.fp.seek(length - 2, os.SEEK_CUR) + self._parse_comment() + else: + msg = "not a JPEG 2000 file" + raise SyntaxError(msg) + + self._reduce = 0 + self.layers = 0 + + fd = -1 + length = -1 + + try: + fd = self.fp.fileno() + length = os.fstat(fd).st_size + except Exception: + fd = -1 + try: + pos = self.fp.tell() + self.fp.seek(0, io.SEEK_END) + length = self.fp.tell() + self.fp.seek(pos) + except Exception: + length = -1 + + self.tile = [ + ImageFile._Tile( + "jpeg2k", + (0, 0) + self.size, + 0, + (self.codec, self._reduce, self.layers, fd, length), + ) + ] + + def _parse_comment(self) -> None: + assert self.fp is not None + while True: + marker = self.fp.read(2) + if not marker: + break + typ = marker[1] + if typ in (0x90, 0xD9): + # Start of tile or end of codestream + break + hdr = self.fp.read(2) + length = _binary.i16be(hdr) + if typ == 0x64: + # Comment + self.info["comment"] = self.fp.read(length - 2)[2:] + break + else: + self.fp.seek(length - 2, os.SEEK_CUR) + + @property # type: ignore[override] + def reduce( + self, + ) -> ( + Callable[[int | tuple[int, int], tuple[int, int, int, int] | None], Image.Image] + | int + ): + # https://github.com/python-pillow/Pillow/issues/4343 found that the + # new Image 'reduce' method was shadowed by this plugin's 'reduce' + # property. This attempts to allow for both scenarios + return self._reduce or super().reduce + + @reduce.setter + def reduce(self, value: int) -> None: + self._reduce = value + + def load(self) -> Image.core.PixelAccess | None: + if self.tile and self._reduce: + power = 1 << self._reduce + adjust = power >> 1 + self._size = ( + int((self.size[0] + adjust) / power), + int((self.size[1] + adjust) / power), + ) + + # Update the reduce and layers settings + t = self.tile[0] + assert isinstance(t[3], tuple) + t3 = (t[3][0], self._reduce, self.layers, t[3][3], t[3][4]) + self.tile = [ImageFile._Tile(t[0], (0, 0) + self.size, t[2], t3)] + + return ImageFile.ImageFile.load(self) + + +def _accept(prefix: bytes) -> bool: + return prefix.startswith( + (b"\xff\x4f\xff\x51", b"\x00\x00\x00\x0cjP \x0d\x0a\x87\x0a") + ) + + +# ------------------------------------------------------------ +# Save support + + +def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + # Get the keyword arguments + info = im.encoderinfo + + if isinstance(filename, str): + filename = filename.encode() + if filename.endswith(b".j2k") or info.get("no_jp2", False): + kind = "j2k" + else: + kind = "jp2" + + offset = info.get("offset", None) + tile_offset = info.get("tile_offset", None) + tile_size = info.get("tile_size", None) + quality_mode = info.get("quality_mode", "rates") + quality_layers = info.get("quality_layers", None) + if quality_layers is not None and not ( + isinstance(quality_layers, (list, tuple)) + and all( + isinstance(quality_layer, (int, float)) for quality_layer in quality_layers + ) + ): + msg = "quality_layers must be a sequence of numbers" + raise ValueError(msg) + + num_resolutions = info.get("num_resolutions", 0) + cblk_size = info.get("codeblock_size", None) + precinct_size = info.get("precinct_size", None) + irreversible = info.get("irreversible", False) + progression = info.get("progression", "LRCP") + cinema_mode = info.get("cinema_mode", "no") + mct = info.get("mct", 0) + signed = info.get("signed", False) + comment = info.get("comment") + if isinstance(comment, str): + comment = comment.encode() + plt = info.get("plt", False) + + fd = -1 + if hasattr(fp, "fileno"): + try: + fd = fp.fileno() + except Exception: + fd = -1 + + im.encoderconfig = ( + offset, + tile_offset, + tile_size, + quality_mode, + quality_layers, + num_resolutions, + cblk_size, + precinct_size, + irreversible, + progression, + cinema_mode, + mct, + signed, + fd, + comment, + plt, + ) + + ImageFile._save(im, fp, [ImageFile._Tile("jpeg2k", (0, 0) + im.size, 0, kind)]) + + +# ------------------------------------------------------------ +# Registry stuff + + +Image.register_open(Jpeg2KImageFile.format, Jpeg2KImageFile, _accept) +Image.register_save(Jpeg2KImageFile.format, _save) + +Image.register_extensions( + Jpeg2KImageFile.format, [".jp2", ".j2k", ".jpc", ".jpf", ".jpx", ".j2c"] +) + +Image.register_mime(Jpeg2KImageFile.format, "image/jp2") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/JpegImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/JpegImagePlugin.py new file mode 100644 index 0000000..46320eb --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/JpegImagePlugin.py @@ -0,0 +1,889 @@ +# +# The Python Imaging Library. +# $Id$ +# +# JPEG (JFIF) file handling +# +# See "Digital Compression and Coding of Continuous-Tone Still Images, +# Part 1, Requirements and Guidelines" (CCITT T.81 / ISO 10918-1) +# +# History: +# 1995-09-09 fl Created +# 1995-09-13 fl Added full parser +# 1996-03-25 fl Added hack to use the IJG command line utilities +# 1996-05-05 fl Workaround Photoshop 2.5 CMYK polarity bug +# 1996-05-28 fl Added draft support, JFIF version (0.1) +# 1996-12-30 fl Added encoder options, added progression property (0.2) +# 1997-08-27 fl Save mode 1 images as BW (0.3) +# 1998-07-12 fl Added YCbCr to draft and save methods (0.4) +# 1998-10-19 fl Don't hang on files using 16-bit DQT's (0.4.1) +# 2001-04-16 fl Extract DPI settings from JFIF files (0.4.2) +# 2002-07-01 fl Skip pad bytes before markers; identify Exif files (0.4.3) +# 2003-04-25 fl Added experimental EXIF decoder (0.5) +# 2003-06-06 fl Added experimental EXIF GPSinfo decoder +# 2003-09-13 fl Extract COM markers +# 2009-09-06 fl Added icc_profile support (from Florian Hoech) +# 2009-03-06 fl Changed CMYK handling; always use Adobe polarity (0.6) +# 2009-03-08 fl Added subsampling support (from Justin Huff). +# +# Copyright (c) 1997-2003 by Secret Labs AB. +# Copyright (c) 1995-1996 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import array +import io +import math +import os +import struct +import subprocess +import sys +import tempfile +import warnings + +from . import Image, ImageFile +from ._binary import i16be as i16 +from ._binary import i32be as i32 +from ._binary import o8 +from ._binary import o16be as o16 +from .JpegPresets import presets + +TYPE_CHECKING = False +if TYPE_CHECKING: + from typing import IO, Any + + from .MpoImagePlugin import MpoImageFile + +# +# Parser + + +def Skip(self: JpegImageFile, marker: int) -> None: + assert self.fp is not None + n = i16(self.fp.read(2)) - 2 + ImageFile._safe_read(self.fp, n) + + +def APP(self: JpegImageFile, marker: int) -> None: + # + # Application marker. Store these in the APP dictionary. + # Also look for well-known application markers. + + assert self.fp is not None + n = i16(self.fp.read(2)) - 2 + s = ImageFile._safe_read(self.fp, n) + + app = f"APP{marker & 15}" + + self.app[app] = s # compatibility + self.applist.append((app, s)) + + if marker == 0xFFE0 and s.startswith(b"JFIF"): + # extract JFIF information + self.info["jfif"] = version = i16(s, 5) # version + self.info["jfif_version"] = divmod(version, 256) + # extract JFIF properties + try: + jfif_unit = s[7] + jfif_density = i16(s, 8), i16(s, 10) + except Exception: + pass + else: + if jfif_unit == 1: + self.info["dpi"] = jfif_density + elif jfif_unit == 2: # cm + # 1 dpcm = 2.54 dpi + self.info["dpi"] = tuple(d * 2.54 for d in jfif_density) + self.info["jfif_unit"] = jfif_unit + self.info["jfif_density"] = jfif_density + elif marker == 0xFFE1 and s.startswith(b"Exif\0\0"): + # extract EXIF information + if "exif" in self.info: + self.info["exif"] += s[6:] + else: + self.info["exif"] = s + self._exif_offset = self.fp.tell() - n + 6 + elif marker == 0xFFE1 and s.startswith(b"http://ns.adobe.com/xap/1.0/\x00"): + self.info["xmp"] = s.split(b"\x00", 1)[1] + elif marker == 0xFFE2 and s.startswith(b"FPXR\0"): + # extract FlashPix information (incomplete) + self.info["flashpix"] = s # FIXME: value will change + elif marker == 0xFFE2 and s.startswith(b"ICC_PROFILE\0"): + # Since an ICC profile can be larger than the maximum size of + # a JPEG marker (64K), we need provisions to split it into + # multiple markers. The format defined by the ICC specifies + # one or more APP2 markers containing the following data: + # Identifying string ASCII "ICC_PROFILE\0" (12 bytes) + # Marker sequence number 1, 2, etc (1 byte) + # Number of markers Total of APP2's used (1 byte) + # Profile data (remainder of APP2 data) + # Decoders should use the marker sequence numbers to + # reassemble the profile, rather than assuming that the APP2 + # markers appear in the correct sequence. + self.icclist.append(s) + elif marker == 0xFFED and s.startswith(b"Photoshop 3.0\x00"): + # parse the image resource block + offset = 14 + photoshop = self.info.setdefault("photoshop", {}) + try: + while s[offset : offset + 4] == b"8BIM": + offset += 4 + # resource code + code = i16(s, offset) + offset += 2 + # resource name (usually empty) + name_len = s[offset] + # name = s[offset+1:offset+1+name_len] + offset += 1 + name_len + offset += offset & 1 # align + # resource data block + size = i32(s, offset) + offset += 4 + data = s[offset : offset + size] + if code == 0x03ED: # ResolutionInfo + photoshop[code] = { + "XResolution": i32(data, 0) / 65536, + "DisplayedUnitsX": i16(data, 4), + "YResolution": i32(data, 8) / 65536, + "DisplayedUnitsY": i16(data, 12), + } + else: + photoshop[code] = data + offset += size + offset += offset & 1 # align + except struct.error: + pass # insufficient data + + elif marker == 0xFFEE and s.startswith(b"Adobe"): + self.info["adobe"] = i16(s, 5) + # extract Adobe custom properties + try: + adobe_transform = s[11] + except IndexError: + pass + else: + self.info["adobe_transform"] = adobe_transform + elif marker == 0xFFE2 and s.startswith(b"MPF\0"): + # extract MPO information + self.info["mp"] = s[4:] + # offset is current location minus buffer size + # plus constant header size + self.info["mpoffset"] = self.fp.tell() - n + 4 + + +def COM(self: JpegImageFile, marker: int) -> None: + # + # Comment marker. Store these in the APP dictionary. + assert self.fp is not None + n = i16(self.fp.read(2)) - 2 + s = ImageFile._safe_read(self.fp, n) + + self.info["comment"] = s + self.app["COM"] = s # compatibility + self.applist.append(("COM", s)) + + +def SOF(self: JpegImageFile, marker: int) -> None: + # + # Start of frame marker. Defines the size and mode of the + # image. JPEG is colour blind, so we use some simple + # heuristics to map the number of layers to an appropriate + # mode. Note that this could be made a bit brighter, by + # looking for JFIF and Adobe APP markers. + + assert self.fp is not None + n = i16(self.fp.read(2)) - 2 + s = ImageFile._safe_read(self.fp, n) + self._size = i16(s, 3), i16(s, 1) + if self._im is not None and self.size != self.im.size: + self._im = None + + self.bits = s[0] + if self.bits != 8: + msg = f"cannot handle {self.bits}-bit layers" + raise SyntaxError(msg) + + self.layers = s[5] + if self.layers == 1: + self._mode = "L" + elif self.layers == 3: + self._mode = "RGB" + elif self.layers == 4: + self._mode = "CMYK" + else: + msg = f"cannot handle {self.layers}-layer images" + raise SyntaxError(msg) + + if marker in [0xFFC2, 0xFFC6, 0xFFCA, 0xFFCE]: + self.info["progressive"] = self.info["progression"] = 1 + + if self.icclist: + # fixup icc profile + self.icclist.sort() # sort by sequence number + if self.icclist[0][13] == len(self.icclist): + profile = [p[14:] for p in self.icclist] + icc_profile = b"".join(profile) + else: + icc_profile = None # wrong number of fragments + self.info["icc_profile"] = icc_profile + self.icclist = [] + + for i in range(6, len(s), 3): + t = s[i : i + 3] + # 4-tuples: id, vsamp, hsamp, qtable + self.layer.append((t[0], t[1] // 16, t[1] & 15, t[2])) + + +def DQT(self: JpegImageFile, marker: int) -> None: + # + # Define quantization table. Note that there might be more + # than one table in each marker. + + # FIXME: The quantization tables can be used to estimate the + # compression quality. + + assert self.fp is not None + n = i16(self.fp.read(2)) - 2 + s = ImageFile._safe_read(self.fp, n) + while len(s): + v = s[0] + precision = 1 if (v // 16 == 0) else 2 # in bytes + qt_length = 1 + precision * 64 + if len(s) < qt_length: + msg = "bad quantization table marker" + raise SyntaxError(msg) + data = array.array("B" if precision == 1 else "H", s[1:qt_length]) + if sys.byteorder == "little" and precision > 1: + data.byteswap() # the values are always big-endian + self.quantization[v & 15] = [data[i] for i in zigzag_index] + s = s[qt_length:] + + +# +# JPEG marker table + +MARKER = { + 0xFFC0: ("SOF0", "Baseline DCT", SOF), + 0xFFC1: ("SOF1", "Extended Sequential DCT", SOF), + 0xFFC2: ("SOF2", "Progressive DCT", SOF), + 0xFFC3: ("SOF3", "Spatial lossless", SOF), + 0xFFC4: ("DHT", "Define Huffman table", Skip), + 0xFFC5: ("SOF5", "Differential sequential DCT", SOF), + 0xFFC6: ("SOF6", "Differential progressive DCT", SOF), + 0xFFC7: ("SOF7", "Differential spatial", SOF), + 0xFFC8: ("JPG", "Extension", None), + 0xFFC9: ("SOF9", "Extended sequential DCT (AC)", SOF), + 0xFFCA: ("SOF10", "Progressive DCT (AC)", SOF), + 0xFFCB: ("SOF11", "Spatial lossless DCT (AC)", SOF), + 0xFFCC: ("DAC", "Define arithmetic coding conditioning", Skip), + 0xFFCD: ("SOF13", "Differential sequential DCT (AC)", SOF), + 0xFFCE: ("SOF14", "Differential progressive DCT (AC)", SOF), + 0xFFCF: ("SOF15", "Differential spatial (AC)", SOF), + 0xFFD0: ("RST0", "Restart 0", None), + 0xFFD1: ("RST1", "Restart 1", None), + 0xFFD2: ("RST2", "Restart 2", None), + 0xFFD3: ("RST3", "Restart 3", None), + 0xFFD4: ("RST4", "Restart 4", None), + 0xFFD5: ("RST5", "Restart 5", None), + 0xFFD6: ("RST6", "Restart 6", None), + 0xFFD7: ("RST7", "Restart 7", None), + 0xFFD8: ("SOI", "Start of image", None), + 0xFFD9: ("EOI", "End of image", None), + 0xFFDA: ("SOS", "Start of scan", Skip), + 0xFFDB: ("DQT", "Define quantization table", DQT), + 0xFFDC: ("DNL", "Define number of lines", Skip), + 0xFFDD: ("DRI", "Define restart interval", Skip), + 0xFFDE: ("DHP", "Define hierarchical progression", SOF), + 0xFFDF: ("EXP", "Expand reference component", Skip), + 0xFFE0: ("APP0", "Application segment 0", APP), + 0xFFE1: ("APP1", "Application segment 1", APP), + 0xFFE2: ("APP2", "Application segment 2", APP), + 0xFFE3: ("APP3", "Application segment 3", APP), + 0xFFE4: ("APP4", "Application segment 4", APP), + 0xFFE5: ("APP5", "Application segment 5", APP), + 0xFFE6: ("APP6", "Application segment 6", APP), + 0xFFE7: ("APP7", "Application segment 7", APP), + 0xFFE8: ("APP8", "Application segment 8", APP), + 0xFFE9: ("APP9", "Application segment 9", APP), + 0xFFEA: ("APP10", "Application segment 10", APP), + 0xFFEB: ("APP11", "Application segment 11", APP), + 0xFFEC: ("APP12", "Application segment 12", APP), + 0xFFED: ("APP13", "Application segment 13", APP), + 0xFFEE: ("APP14", "Application segment 14", APP), + 0xFFEF: ("APP15", "Application segment 15", APP), + 0xFFF0: ("JPG0", "Extension 0", None), + 0xFFF1: ("JPG1", "Extension 1", None), + 0xFFF2: ("JPG2", "Extension 2", None), + 0xFFF3: ("JPG3", "Extension 3", None), + 0xFFF4: ("JPG4", "Extension 4", None), + 0xFFF5: ("JPG5", "Extension 5", None), + 0xFFF6: ("JPG6", "Extension 6", None), + 0xFFF7: ("JPG7", "Extension 7", None), + 0xFFF8: ("JPG8", "Extension 8", None), + 0xFFF9: ("JPG9", "Extension 9", None), + 0xFFFA: ("JPG10", "Extension 10", None), + 0xFFFB: ("JPG11", "Extension 11", None), + 0xFFFC: ("JPG12", "Extension 12", None), + 0xFFFD: ("JPG13", "Extension 13", None), + 0xFFFE: ("COM", "Comment", COM), +} + + +def _accept(prefix: bytes) -> bool: + # Magic number was taken from https://en.wikipedia.org/wiki/JPEG + return prefix.startswith(b"\xff\xd8\xff") + + +## +# Image plugin for JPEG and JFIF images. + + +class JpegImageFile(ImageFile.ImageFile): + format = "JPEG" + format_description = "JPEG (ISO 10918)" + + def _open(self) -> None: + assert self.fp is not None + s = self.fp.read(3) + + if not _accept(s): + msg = "not a JPEG file" + raise SyntaxError(msg) + s = b"\xff" + + # Create attributes + self.bits = self.layers = 0 + self._exif_offset = 0 + + # JPEG specifics (internal) + self.layer: list[tuple[int, int, int, int]] = [] + self._huffman_dc: dict[Any, Any] = {} + self._huffman_ac: dict[Any, Any] = {} + self.quantization: dict[int, list[int]] = {} + self.app: dict[str, bytes] = {} # compatibility + self.applist: list[tuple[str, bytes]] = [] + self.icclist: list[bytes] = [] + + while True: + i = s[0] + if i == 0xFF: + s = s + self.fp.read(1) + i = i16(s) + else: + # Skip non-0xFF junk + s = self.fp.read(1) + continue + + if i in MARKER: + name, description, handler = MARKER[i] + if handler is not None: + handler(self, i) + if i == 0xFFDA: # start of scan + rawmode = self.mode + if self.mode == "CMYK": + rawmode = "CMYK;I" # assume adobe conventions + self.tile = [ + ImageFile._Tile("jpeg", (0, 0) + self.size, 0, (rawmode, "")) + ] + # self.__offset = self.fp.tell() + break + s = self.fp.read(1) + elif i in {0, 0xFFFF}: + # padded marker or junk; move on + s = b"\xff" + elif i == 0xFF00: # Skip extraneous data (escaped 0xFF) + s = self.fp.read(1) + else: + msg = "no marker found" + raise SyntaxError(msg) + + self._read_dpi_from_exif() + + def __getstate__(self) -> list[Any]: + return super().__getstate__() + [self.layers, self.layer] + + def __setstate__(self, state: list[Any]) -> None: + self.layers, self.layer = state[6:] + super().__setstate__(state) + + def load_read(self, read_bytes: int) -> bytes: + """ + internal: read more image data + For premature EOF and LOAD_TRUNCATED_IMAGES adds EOI marker + so libjpeg can finish decoding + """ + assert self.fp is not None + s = self.fp.read(read_bytes) + + if not s and ImageFile.LOAD_TRUNCATED_IMAGES and not hasattr(self, "_ended"): + # Premature EOF. + # Pretend file is finished adding EOI marker + self._ended = True + return b"\xff\xd9" + + return s + + def draft( + self, mode: str | None, size: tuple[int, int] | None + ) -> tuple[str, tuple[int, int, float, float]] | None: + if len(self.tile) != 1: + return None + + # Protect from second call + if self.decoderconfig: + return None + + d, e, o, a = self.tile[0] + scale = 1 + original_size = self.size + + assert isinstance(a, tuple) + if a[0] == "RGB" and mode in ["L", "YCbCr"]: + self._mode = mode + a = mode, "" + + if size: + scale = min(self.size[0] // size[0], self.size[1] // size[1]) + for s in [8, 4, 2, 1]: + if scale >= s: + break + assert e is not None + e = ( + e[0], + e[1], + (e[2] - e[0] + s - 1) // s + e[0], + (e[3] - e[1] + s - 1) // s + e[1], + ) + self._size = ((self.size[0] + s - 1) // s, (self.size[1] + s - 1) // s) + scale = s + + self.tile = [ImageFile._Tile(d, e, o, a)] + self.decoderconfig = (scale, 0) + + box = (0, 0, original_size[0] / scale, original_size[1] / scale) + return self.mode, box + + def load_djpeg(self) -> None: + # ALTERNATIVE: handle JPEGs via the IJG command line utilities + + f, path = tempfile.mkstemp() + os.close(f) + if os.path.exists(self.filename): + subprocess.check_call(["djpeg", "-outfile", path, self.filename]) + else: + try: + os.unlink(path) + except OSError: + pass + + msg = "Invalid Filename" + raise ValueError(msg) + + try: + with Image.open(path) as _im: + _im.load() + self.im = _im.im + finally: + try: + os.unlink(path) + except OSError: + pass + + self._mode = self.im.mode + self._size = self.im.size + + self.tile = [] + + def _getexif(self) -> dict[int, Any] | None: + return _getexif(self) + + def _read_dpi_from_exif(self) -> None: + # If DPI isn't in JPEG header, fetch from EXIF + if "dpi" in self.info or "exif" not in self.info: + return + try: + exif = self.getexif() + resolution_unit = exif[0x0128] + x_resolution = exif[0x011A] + try: + dpi = float(x_resolution[0]) / x_resolution[1] + except TypeError: + dpi = x_resolution + if math.isnan(dpi): + msg = "DPI is not a number" + raise ValueError(msg) + if resolution_unit == 3: # cm + # 1 dpcm = 2.54 dpi + dpi *= 2.54 + self.info["dpi"] = dpi, dpi + except ( + struct.error, # truncated EXIF + KeyError, # dpi not included + SyntaxError, # invalid/unreadable EXIF + TypeError, # dpi is an invalid float + ValueError, # dpi is an invalid float + ZeroDivisionError, # invalid dpi rational value + ): + self.info["dpi"] = 72, 72 + + def _getmp(self) -> dict[int, Any] | None: + return _getmp(self) + + +def _getexif(self: JpegImageFile) -> dict[int, Any] | None: + if "exif" not in self.info: + return None + return self.getexif()._get_merged_dict() + + +def _getmp(self: JpegImageFile) -> dict[int, Any] | None: + # Extract MP information. This method was inspired by the "highly + # experimental" _getexif version that's been in use for years now, + # itself based on the ImageFileDirectory class in the TIFF plugin. + + # The MP record essentially consists of a TIFF file embedded in a JPEG + # application marker. + try: + data = self.info["mp"] + except KeyError: + return None + file_contents = io.BytesIO(data) + head = file_contents.read(8) + endianness = ">" if head.startswith(b"\x4d\x4d\x00\x2a") else "<" + # process dictionary + from . import TiffImagePlugin + + try: + info = TiffImagePlugin.ImageFileDirectory_v2(head) + file_contents.seek(info.next) + info.load(file_contents) + mp = dict(info) + except Exception as e: + msg = "malformed MP Index (unreadable directory)" + raise SyntaxError(msg) from e + # it's an error not to have a number of images + try: + quant = mp[0xB001] + except KeyError as e: + msg = "malformed MP Index (no number of images)" + raise SyntaxError(msg) from e + # get MP entries + mpentries = [] + try: + rawmpentries = mp[0xB002] + for entrynum in range(quant): + unpackedentry = struct.unpack_from( + f"{endianness}LLLHH", rawmpentries, entrynum * 16 + ) + labels = ("Attribute", "Size", "DataOffset", "EntryNo1", "EntryNo2") + mpentry = dict(zip(labels, unpackedentry)) + mpentryattr = { + "DependentParentImageFlag": bool(mpentry["Attribute"] & (1 << 31)), + "DependentChildImageFlag": bool(mpentry["Attribute"] & (1 << 30)), + "RepresentativeImageFlag": bool(mpentry["Attribute"] & (1 << 29)), + "Reserved": (mpentry["Attribute"] & (3 << 27)) >> 27, + "ImageDataFormat": (mpentry["Attribute"] & (7 << 24)) >> 24, + "MPType": mpentry["Attribute"] & 0x00FFFFFF, + } + if mpentryattr["ImageDataFormat"] == 0: + mpentryattr["ImageDataFormat"] = "JPEG" + else: + msg = "unsupported picture format in MPO" + raise SyntaxError(msg) + mptypemap = { + 0x000000: "Undefined", + 0x010001: "Large Thumbnail (VGA Equivalent)", + 0x010002: "Large Thumbnail (Full HD Equivalent)", + 0x020001: "Multi-Frame Image (Panorama)", + 0x020002: "Multi-Frame Image: (Disparity)", + 0x020003: "Multi-Frame Image: (Multi-Angle)", + 0x030000: "Baseline MP Primary Image", + } + mpentryattr["MPType"] = mptypemap.get(mpentryattr["MPType"], "Unknown") + mpentry["Attribute"] = mpentryattr + mpentries.append(mpentry) + mp[0xB002] = mpentries + except KeyError as e: + msg = "malformed MP Index (bad MP Entry)" + raise SyntaxError(msg) from e + # Next we should try and parse the individual image unique ID list; + # we don't because I've never seen this actually used in a real MPO + # file and so can't test it. + return mp + + +# -------------------------------------------------------------------- +# stuff to save JPEG files + +RAWMODE = { + "1": "L", + "L": "L", + "RGB": "RGB", + "RGBX": "RGB", + "CMYK": "CMYK;I", # assume adobe conventions + "YCbCr": "YCbCr", +} + +# fmt: off +zigzag_index = ( + 0, 1, 5, 6, 14, 15, 27, 28, + 2, 4, 7, 13, 16, 26, 29, 42, + 3, 8, 12, 17, 25, 30, 41, 43, + 9, 11, 18, 24, 31, 40, 44, 53, + 10, 19, 23, 32, 39, 45, 52, 54, + 20, 22, 33, 38, 46, 51, 55, 60, + 21, 34, 37, 47, 50, 56, 59, 61, + 35, 36, 48, 49, 57, 58, 62, 63, +) + +samplings = { + (1, 1, 1, 1, 1, 1): 0, + (2, 1, 1, 1, 1, 1): 1, + (2, 2, 1, 1, 1, 1): 2, +} +# fmt: on + + +def get_sampling(im: Image.Image) -> int: + # There's no subsampling when images have only 1 layer + # (grayscale images) or when they are CMYK (4 layers), + # so set subsampling to the default value. + # + # NOTE: currently Pillow can't encode JPEG to YCCK format. + # If YCCK support is added in the future, subsampling code will have + # to be updated (here and in JpegEncode.c) to deal with 4 layers. + if not isinstance(im, JpegImageFile) or im.layers in (1, 4): + return -1 + sampling = im.layer[0][1:3] + im.layer[1][1:3] + im.layer[2][1:3] + return samplings.get(sampling, -1) + + +def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + try: + rawmode = RAWMODE[im.mode] + except KeyError as e: + msg = f"cannot write mode {im.mode} as JPEG" + raise OSError(msg) from e + + info = im.encoderinfo + + dpi = [round(x) for x in info.get("dpi", (0, 0))] + + quality = info.get("quality", -1) + subsampling = info.get("subsampling", -1) + qtables = info.get("qtables") + + if quality == "keep": + quality = -1 + subsampling = "keep" + qtables = "keep" + elif quality in presets: + preset = presets[quality] + quality = -1 + subsampling = preset.get("subsampling", -1) + qtables = preset.get("quantization") + elif not isinstance(quality, int): + msg = "Invalid quality setting" + raise ValueError(msg) + else: + if subsampling in presets: + subsampling = presets[subsampling].get("subsampling", -1) + if isinstance(qtables, str) and qtables in presets: + qtables = presets[qtables].get("quantization") + + if subsampling == "4:4:4": + subsampling = 0 + elif subsampling == "4:2:2": + subsampling = 1 + elif subsampling == "4:2:0": + subsampling = 2 + elif subsampling == "4:1:1": + # For compatibility. Before Pillow 4.3, 4:1:1 actually meant 4:2:0. + # Set 4:2:0 if someone is still using that value. + subsampling = 2 + elif subsampling == "keep": + if im.format != "JPEG": + msg = "Cannot use 'keep' when original image is not a JPEG" + raise ValueError(msg) + subsampling = get_sampling(im) + + def validate_qtables( + qtables: ( + str | tuple[list[int], ...] | list[list[int]] | dict[int, list[int]] | None + ), + ) -> list[list[int]] | None: + if qtables is None: + return qtables + if isinstance(qtables, str): + try: + lines = [ + int(num) + for line in qtables.splitlines() + for num in line.split("#", 1)[0].split() + ] + except ValueError as e: + msg = "Invalid quantization table" + raise ValueError(msg) from e + else: + qtables = [lines[s : s + 64] for s in range(0, len(lines), 64)] + if isinstance(qtables, (tuple, list, dict)): + if isinstance(qtables, dict): + qtables = [ + qtables[key] for key in range(len(qtables)) if key in qtables + ] + elif isinstance(qtables, tuple): + qtables = list(qtables) + if not (0 < len(qtables) < 5): + msg = "None or too many quantization tables" + raise ValueError(msg) + try: + for idx, table in enumerate(qtables): + if len(table) != 64: + msg = "Invalid quantization table" + raise TypeError(msg) + qtables[idx] = list(array.array("H", table)) + except TypeError as e: + msg = "Invalid quantization table" + raise ValueError(msg) from e + return qtables + + if qtables == "keep": + if im.format != "JPEG": + msg = "Cannot use 'keep' when original image is not a JPEG" + raise ValueError(msg) + qtables = getattr(im, "quantization", None) + qtables = validate_qtables(qtables) + + extra = info.get("extra", b"") + + MAX_BYTES_IN_MARKER = 65533 + if xmp := info.get("xmp"): + overhead_len = 29 # b"http://ns.adobe.com/xap/1.0/\x00" + max_data_bytes_in_marker = MAX_BYTES_IN_MARKER - overhead_len + if len(xmp) > max_data_bytes_in_marker: + msg = "XMP data is too long" + raise ValueError(msg) + size = o16(2 + overhead_len + len(xmp)) + extra += b"\xff\xe1" + size + b"http://ns.adobe.com/xap/1.0/\x00" + xmp + + if icc_profile := info.get("icc_profile"): + overhead_len = 14 # b"ICC_PROFILE\0" + o8(i) + o8(len(markers)) + max_data_bytes_in_marker = MAX_BYTES_IN_MARKER - overhead_len + markers = [] + while icc_profile: + markers.append(icc_profile[:max_data_bytes_in_marker]) + icc_profile = icc_profile[max_data_bytes_in_marker:] + i = 1 + for marker in markers: + size = o16(2 + overhead_len + len(marker)) + extra += ( + b"\xff\xe2" + + size + + b"ICC_PROFILE\0" + + o8(i) + + o8(len(markers)) + + marker + ) + i += 1 + + comment = info.get("comment", im.info.get("comment")) + + # "progressive" is the official name, but older documentation + # says "progression" + # FIXME: issue a warning if the wrong form is used (post-1.1.7) + progressive = info.get("progressive", False) or info.get("progression", False) + + optimize = info.get("optimize", False) + + exif = info.get("exif", b"") + if isinstance(exif, Image.Exif): + exif = exif.tobytes() + if len(exif) > MAX_BYTES_IN_MARKER: + msg = "EXIF data is too long" + raise ValueError(msg) + + # get keyword arguments + im.encoderconfig = ( + quality, + progressive, + info.get("smooth", 0), + optimize, + info.get("keep_rgb", False), + info.get("streamtype", 0), + dpi, + subsampling, + info.get("restart_marker_blocks", 0), + info.get("restart_marker_rows", 0), + qtables, + comment, + extra, + exif, + ) + + # if we optimize, libjpeg needs a buffer big enough to hold the whole image + # in a shot. Guessing on the size, at im.size bytes. (raw pixel size is + # channels*size, this is a value that's been used in a django patch. + # https://github.com/matthewwithanm/django-imagekit/issues/50 + if optimize or progressive: + # CMYK can be bigger + if im.mode == "CMYK": + bufsize = 4 * im.size[0] * im.size[1] + # keep sets quality to -1, but the actual value may be high. + elif quality >= 95 or quality == -1: + bufsize = 2 * im.size[0] * im.size[1] + else: + bufsize = im.size[0] * im.size[1] + if exif: + bufsize += len(exif) + 5 + if extra: + bufsize += len(extra) + 1 + else: + # The EXIF info needs to be written as one block, + APP1, + one spare byte. + # Ensure that our buffer is big enough. Same with the icc_profile block. + bufsize = max(len(exif) + 5, len(extra) + 1) + + ImageFile._save( + im, fp, [ImageFile._Tile("jpeg", (0, 0) + im.size, 0, rawmode)], bufsize + ) + + +## +# Factory for making JPEG and MPO instances +def jpeg_factory( + fp: IO[bytes], filename: str | bytes | None = None +) -> JpegImageFile | MpoImageFile: + im = JpegImageFile(fp, filename) + try: + mpheader = im._getmp() + if mpheader is not None and mpheader[45057] > 1: + for segment, content in im.applist: + if segment == "APP1" and b' hdrgm:Version="' in content: + # Ultra HDR images are not yet supported + return im + # It's actually an MPO + from .MpoImagePlugin import MpoImageFile + + # Don't reload everything, just convert it. + im = MpoImageFile.adopt(im, mpheader) + except (TypeError, IndexError): + # It is really a JPEG + pass + except SyntaxError: + warnings.warn( + "Image appears to be a malformed MPO file, it will be " + "interpreted as a base JPEG file" + ) + return im + + +# --------------------------------------------------------------------- +# Registry stuff + +Image.register_open(JpegImageFile.format, jpeg_factory, _accept) +Image.register_save(JpegImageFile.format, _save) + +Image.register_extensions(JpegImageFile.format, [".jfif", ".jpe", ".jpg", ".jpeg"]) + +Image.register_mime(JpegImageFile.format, "image/jpeg") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/JpegPresets.py b/Python/venv/lib/python3.12/site-packages/PIL/JpegPresets.py new file mode 100644 index 0000000..d0e64a3 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/JpegPresets.py @@ -0,0 +1,242 @@ +""" +JPEG quality settings equivalent to the Photoshop settings. +Can be used when saving JPEG files. + +The following presets are available by default: +``web_low``, ``web_medium``, ``web_high``, ``web_very_high``, ``web_maximum``, +``low``, ``medium``, ``high``, ``maximum``. +More presets can be added to the :py:data:`presets` dict if needed. + +To apply the preset, specify:: + + quality="preset_name" + +To apply only the quantization table:: + + qtables="preset_name" + +To apply only the subsampling setting:: + + subsampling="preset_name" + +Example:: + + im.save("image_name.jpg", quality="web_high") + +Subsampling +----------- + +Subsampling is the practice of encoding images by implementing less resolution +for chroma information than for luma information. +(ref.: https://en.wikipedia.org/wiki/Chroma_subsampling) + +Possible subsampling values are 0, 1 and 2 that correspond to 4:4:4, 4:2:2 and +4:2:0. + +You can get the subsampling of a JPEG with the +:func:`.JpegImagePlugin.get_sampling` function. + +In JPEG compressed data a JPEG marker is used instead of an EXIF tag. +(ref.: https://exiv2.org/tags.html) + + +Quantization tables +------------------- + +They are values use by the DCT (Discrete cosine transform) to remove +*unnecessary* information from the image (the lossy part of the compression). +(ref.: https://en.wikipedia.org/wiki/Quantization_matrix#Quantization_matrices, +https://en.wikipedia.org/wiki/JPEG#Quantization) + +You can get the quantization tables of a JPEG with:: + + im.quantization + +This will return a dict with a number of lists. You can pass this dict +directly as the qtables argument when saving a JPEG. + +The quantization table format in presets is a list with sublists. These formats +are interchangeable. + +Libjpeg ref.: +https://web.archive.org/web/20120328125543/http://www.jpegcameras.com/libjpeg/libjpeg-3.html + +""" + +from __future__ import annotations + +# fmt: off +presets = { + 'web_low': {'subsampling': 2, # "4:2:0" + 'quantization': [ + [20, 16, 25, 39, 50, 46, 62, 68, + 16, 18, 23, 38, 38, 53, 65, 68, + 25, 23, 31, 38, 53, 65, 68, 68, + 39, 38, 38, 53, 65, 68, 68, 68, + 50, 38, 53, 65, 68, 68, 68, 68, + 46, 53, 65, 68, 68, 68, 68, 68, + 62, 65, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68], + [21, 25, 32, 38, 54, 68, 68, 68, + 25, 28, 24, 38, 54, 68, 68, 68, + 32, 24, 32, 43, 66, 68, 68, 68, + 38, 38, 43, 53, 68, 68, 68, 68, + 54, 54, 66, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 68] + ]}, + 'web_medium': {'subsampling': 2, # "4:2:0" + 'quantization': [ + [16, 11, 11, 16, 23, 27, 31, 30, + 11, 12, 12, 15, 20, 23, 23, 30, + 11, 12, 13, 16, 23, 26, 35, 47, + 16, 15, 16, 23, 26, 37, 47, 64, + 23, 20, 23, 26, 39, 51, 64, 64, + 27, 23, 26, 37, 51, 64, 64, 64, + 31, 23, 35, 47, 64, 64, 64, 64, + 30, 30, 47, 64, 64, 64, 64, 64], + [17, 15, 17, 21, 20, 26, 38, 48, + 15, 19, 18, 17, 20, 26, 35, 43, + 17, 18, 20, 22, 26, 30, 46, 53, + 21, 17, 22, 28, 30, 39, 53, 64, + 20, 20, 26, 30, 39, 48, 64, 64, + 26, 26, 30, 39, 48, 63, 64, 64, + 38, 35, 46, 53, 64, 64, 64, 64, + 48, 43, 53, 64, 64, 64, 64, 64] + ]}, + 'web_high': {'subsampling': 0, # "4:4:4" + 'quantization': [ + [6, 4, 4, 6, 9, 11, 12, 16, + 4, 5, 5, 6, 8, 10, 12, 12, + 4, 5, 5, 6, 10, 12, 14, 19, + 6, 6, 6, 11, 12, 15, 19, 28, + 9, 8, 10, 12, 16, 20, 27, 31, + 11, 10, 12, 15, 20, 27, 31, 31, + 12, 12, 14, 19, 27, 31, 31, 31, + 16, 12, 19, 28, 31, 31, 31, 31], + [7, 7, 13, 24, 26, 31, 31, 31, + 7, 12, 16, 21, 31, 31, 31, 31, + 13, 16, 17, 31, 31, 31, 31, 31, + 24, 21, 31, 31, 31, 31, 31, 31, + 26, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31, + 31, 31, 31, 31, 31, 31, 31, 31] + ]}, + 'web_very_high': {'subsampling': 0, # "4:4:4" + 'quantization': [ + [2, 2, 2, 2, 3, 4, 5, 6, + 2, 2, 2, 2, 3, 4, 5, 6, + 2, 2, 2, 2, 4, 5, 7, 9, + 2, 2, 2, 4, 5, 7, 9, 12, + 3, 3, 4, 5, 8, 10, 12, 12, + 4, 4, 5, 7, 10, 12, 12, 12, + 5, 5, 7, 9, 12, 12, 12, 12, + 6, 6, 9, 12, 12, 12, 12, 12], + [3, 3, 5, 9, 13, 15, 15, 15, + 3, 4, 6, 11, 14, 12, 12, 12, + 5, 6, 9, 14, 12, 12, 12, 12, + 9, 11, 14, 12, 12, 12, 12, 12, + 13, 14, 12, 12, 12, 12, 12, 12, + 15, 12, 12, 12, 12, 12, 12, 12, + 15, 12, 12, 12, 12, 12, 12, 12, + 15, 12, 12, 12, 12, 12, 12, 12] + ]}, + 'web_maximum': {'subsampling': 0, # "4:4:4" + 'quantization': [ + [1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 2, + 1, 1, 1, 1, 1, 1, 2, 2, + 1, 1, 1, 1, 1, 2, 2, 3, + 1, 1, 1, 1, 2, 2, 3, 3, + 1, 1, 1, 2, 2, 3, 3, 3, + 1, 1, 2, 2, 3, 3, 3, 3], + [1, 1, 1, 2, 2, 3, 3, 3, + 1, 1, 1, 2, 3, 3, 3, 3, + 1, 1, 1, 3, 3, 3, 3, 3, + 2, 2, 3, 3, 3, 3, 3, 3, + 2, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 3, 3] + ]}, + 'low': {'subsampling': 2, # "4:2:0" + 'quantization': [ + [18, 14, 14, 21, 30, 35, 34, 17, + 14, 16, 16, 19, 26, 23, 12, 12, + 14, 16, 17, 21, 23, 12, 12, 12, + 21, 19, 21, 23, 12, 12, 12, 12, + 30, 26, 23, 12, 12, 12, 12, 12, + 35, 23, 12, 12, 12, 12, 12, 12, + 34, 12, 12, 12, 12, 12, 12, 12, + 17, 12, 12, 12, 12, 12, 12, 12], + [20, 19, 22, 27, 20, 20, 17, 17, + 19, 25, 23, 14, 14, 12, 12, 12, + 22, 23, 14, 14, 12, 12, 12, 12, + 27, 14, 14, 12, 12, 12, 12, 12, + 20, 14, 12, 12, 12, 12, 12, 12, + 20, 12, 12, 12, 12, 12, 12, 12, + 17, 12, 12, 12, 12, 12, 12, 12, + 17, 12, 12, 12, 12, 12, 12, 12] + ]}, + 'medium': {'subsampling': 2, # "4:2:0" + 'quantization': [ + [12, 8, 8, 12, 17, 21, 24, 17, + 8, 9, 9, 11, 15, 19, 12, 12, + 8, 9, 10, 12, 19, 12, 12, 12, + 12, 11, 12, 21, 12, 12, 12, 12, + 17, 15, 19, 12, 12, 12, 12, 12, + 21, 19, 12, 12, 12, 12, 12, 12, + 24, 12, 12, 12, 12, 12, 12, 12, + 17, 12, 12, 12, 12, 12, 12, 12], + [13, 11, 13, 16, 20, 20, 17, 17, + 11, 14, 14, 14, 14, 12, 12, 12, + 13, 14, 14, 14, 12, 12, 12, 12, + 16, 14, 14, 12, 12, 12, 12, 12, + 20, 14, 12, 12, 12, 12, 12, 12, + 20, 12, 12, 12, 12, 12, 12, 12, + 17, 12, 12, 12, 12, 12, 12, 12, + 17, 12, 12, 12, 12, 12, 12, 12] + ]}, + 'high': {'subsampling': 0, # "4:4:4" + 'quantization': [ + [6, 4, 4, 6, 9, 11, 12, 16, + 4, 5, 5, 6, 8, 10, 12, 12, + 4, 5, 5, 6, 10, 12, 12, 12, + 6, 6, 6, 11, 12, 12, 12, 12, + 9, 8, 10, 12, 12, 12, 12, 12, + 11, 10, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, + 16, 12, 12, 12, 12, 12, 12, 12], + [7, 7, 13, 24, 20, 20, 17, 17, + 7, 12, 16, 14, 14, 12, 12, 12, + 13, 16, 14, 14, 12, 12, 12, 12, + 24, 14, 14, 12, 12, 12, 12, 12, + 20, 14, 12, 12, 12, 12, 12, 12, + 20, 12, 12, 12, 12, 12, 12, 12, + 17, 12, 12, 12, 12, 12, 12, 12, + 17, 12, 12, 12, 12, 12, 12, 12] + ]}, + 'maximum': {'subsampling': 0, # "4:4:4" + 'quantization': [ + [2, 2, 2, 2, 3, 4, 5, 6, + 2, 2, 2, 2, 3, 4, 5, 6, + 2, 2, 2, 2, 4, 5, 7, 9, + 2, 2, 2, 4, 5, 7, 9, 12, + 3, 3, 4, 5, 8, 10, 12, 12, + 4, 4, 5, 7, 10, 12, 12, 12, + 5, 5, 7, 9, 12, 12, 12, 12, + 6, 6, 9, 12, 12, 12, 12, 12], + [3, 3, 5, 9, 13, 15, 15, 15, + 3, 4, 6, 10, 14, 12, 12, 12, + 5, 6, 9, 14, 12, 12, 12, 12, + 9, 10, 14, 12, 12, 12, 12, 12, + 13, 14, 12, 12, 12, 12, 12, 12, + 15, 12, 12, 12, 12, 12, 12, 12, + 15, 12, 12, 12, 12, 12, 12, 12, + 15, 12, 12, 12, 12, 12, 12, 12] + ]}, +} +# fmt: on diff --git a/Python/venv/lib/python3.12/site-packages/PIL/McIdasImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/McIdasImagePlugin.py new file mode 100644 index 0000000..9a47933 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/McIdasImagePlugin.py @@ -0,0 +1,78 @@ +# +# The Python Imaging Library. +# $Id$ +# +# Basic McIdas support for PIL +# +# History: +# 1997-05-05 fl Created (8-bit images only) +# 2009-03-08 fl Added 16/32-bit support. +# +# Thanks to Richard Jones and Craig Swank for specs and samples. +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1997. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import struct + +from . import Image, ImageFile + + +def _accept(prefix: bytes) -> bool: + return prefix.startswith(b"\x00\x00\x00\x00\x00\x00\x00\x04") + + +## +# Image plugin for McIdas area images. + + +class McIdasImageFile(ImageFile.ImageFile): + format = "MCIDAS" + format_description = "McIdas area file" + + def _open(self) -> None: + # parse area file directory + assert self.fp is not None + + s = self.fp.read(256) + if not _accept(s) or len(s) != 256: + msg = "not an McIdas area file" + raise SyntaxError(msg) + + self.area_descriptor_raw = s + self.area_descriptor = w = [0, *struct.unpack("!64i", s)] + + # get mode + if w[11] == 1: + mode = rawmode = "L" + elif w[11] == 2: + mode = rawmode = "I;16B" + elif w[11] == 4: + # FIXME: add memory map support + mode = "I" + rawmode = "I;32B" + else: + msg = "unsupported McIdas format" + raise SyntaxError(msg) + + self._mode = mode + self._size = w[10], w[9] + + offset = w[34] + w[15] + stride = w[15] + w[10] * w[11] * w[14] + + self.tile = [ + ImageFile._Tile("raw", (0, 0) + self.size, offset, (rawmode, stride, 1)) + ] + + +# -------------------------------------------------------------------- +# registry + +Image.register_open(McIdasImageFile.format, McIdasImageFile, _accept) + +# no default extension diff --git a/Python/venv/lib/python3.12/site-packages/PIL/MicImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/MicImagePlugin.py new file mode 100644 index 0000000..99a07ba --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/MicImagePlugin.py @@ -0,0 +1,103 @@ +# +# The Python Imaging Library. +# $Id$ +# +# Microsoft Image Composer support for PIL +# +# Notes: +# uses TiffImagePlugin.py to read the actual image streams +# +# History: +# 97-01-20 fl Created +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1997. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import olefile + +from . import Image, TiffImagePlugin + +# +# -------------------------------------------------------------------- + + +def _accept(prefix: bytes) -> bool: + return prefix.startswith(olefile.MAGIC) + + +## +# Image plugin for Microsoft's Image Composer file format. + + +class MicImageFile(TiffImagePlugin.TiffImageFile): + format = "MIC" + format_description = "Microsoft Image Composer" + _close_exclusive_fp_after_loading = False + + def _open(self) -> None: + # read the OLE directory and see if this is a likely + # to be a Microsoft Image Composer file + + try: + self.ole = olefile.OleFileIO(self.fp) + except OSError as e: + msg = "not an MIC file; invalid OLE file" + raise SyntaxError(msg) from e + + # find ACI subfiles with Image members (maybe not the + # best way to identify MIC files, but what the... ;-) + + self.images = [ + path + for path in self.ole.listdir() + if path[1:] and path[0].endswith(".ACI") and path[1] == "Image" + ] + + # if we didn't find any images, this is probably not + # an MIC file. + if not self.images: + msg = "not an MIC file; no image entries" + raise SyntaxError(msg) + + self.frame = -1 + self._n_frames = len(self.images) + self.is_animated = self._n_frames > 1 + + assert self.fp is not None + self.__fp = self.fp + self.seek(0) + + def seek(self, frame: int) -> None: + if not self._seek_check(frame): + return + filename = self.images[frame] + self.fp = self.ole.openstream(filename) + + TiffImagePlugin.TiffImageFile._open(self) + + self.frame = frame + + def tell(self) -> int: + return self.frame + + def close(self) -> None: + self.__fp.close() + self.ole.close() + super().close() + + def __exit__(self, *args: object) -> None: + self.__fp.close() + self.ole.close() + super().__exit__() + + +# +# -------------------------------------------------------------------- + +Image.register_open(MicImageFile.format, MicImageFile, _accept) + +Image.register_extension(MicImageFile.format, ".mic") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/MpegImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/MpegImagePlugin.py new file mode 100644 index 0000000..47ebe9d --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/MpegImagePlugin.py @@ -0,0 +1,84 @@ +# +# The Python Imaging Library. +# $Id$ +# +# MPEG file handling +# +# History: +# 95-09-09 fl Created +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1995. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +from . import Image, ImageFile +from ._binary import i8 +from ._typing import SupportsRead + +# +# Bitstream parser + + +class BitStream: + def __init__(self, fp: SupportsRead[bytes]) -> None: + self.fp = fp + self.bits = 0 + self.bitbuffer = 0 + + def next(self) -> int: + return i8(self.fp.read(1)) + + def peek(self, bits: int) -> int: + while self.bits < bits: + self.bitbuffer = (self.bitbuffer << 8) + self.next() + self.bits += 8 + return self.bitbuffer >> (self.bits - bits) & (1 << bits) - 1 + + def skip(self, bits: int) -> None: + while self.bits < bits: + self.bitbuffer = (self.bitbuffer << 8) + i8(self.fp.read(1)) + self.bits += 8 + self.bits = self.bits - bits + + def read(self, bits: int) -> int: + v = self.peek(bits) + self.bits = self.bits - bits + return v + + +def _accept(prefix: bytes) -> bool: + return prefix.startswith(b"\x00\x00\x01\xb3") + + +## +# Image plugin for MPEG streams. This plugin can identify a stream, +# but it cannot read it. + + +class MpegImageFile(ImageFile.ImageFile): + format = "MPEG" + format_description = "MPEG" + + def _open(self) -> None: + assert self.fp is not None + + s = BitStream(self.fp) + if s.read(32) != 0x1B3: + msg = "not an MPEG file" + raise SyntaxError(msg) + + self._mode = "RGB" + self._size = s.read(12), s.read(12) + + +# -------------------------------------------------------------------- +# Registry stuff + +Image.register_open(MpegImageFile.format, MpegImageFile, _accept) + +Image.register_extensions(MpegImageFile.format, [".mpg", ".mpeg"]) + +Image.register_mime(MpegImageFile.format, "video/mpeg") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/MpoImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/MpoImagePlugin.py new file mode 100644 index 0000000..bee0a56 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/MpoImagePlugin.py @@ -0,0 +1,203 @@ +# +# The Python Imaging Library. +# $Id$ +# +# MPO file handling +# +# See "Multi-Picture Format" (CIPA DC-007-Translation 2009, Standard of the +# Camera & Imaging Products Association) +# +# The multi-picture object combines multiple JPEG images (with a modified EXIF +# data format) into a single file. While it can theoretically be used much like +# a GIF animation, it is commonly used to represent 3D photographs and is (as +# of this writing) the most commonly used format by 3D cameras. +# +# History: +# 2014-03-13 Feneric Created +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import os +import struct +from typing import IO, Any, cast + +from . import ( + Image, + ImageFile, + ImageSequence, + JpegImagePlugin, + TiffImagePlugin, +) +from ._binary import o32le +from ._util import DeferredError + + +def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + JpegImagePlugin._save(im, fp, filename) + + +def _save_all(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + append_images = im.encoderinfo.get("append_images", []) + if not append_images and not getattr(im, "is_animated", False): + _save(im, fp, filename) + return + + mpf_offset = 28 + offsets: list[int] = [] + im_sequences = [im, *append_images] + total = sum(getattr(seq, "n_frames", 1) for seq in im_sequences) + for im_sequence in im_sequences: + for im_frame in ImageSequence.Iterator(im_sequence): + if not offsets: + # APP2 marker + ifd_length = 66 + 16 * total + im_frame.encoderinfo["extra"] = ( + b"\xff\xe2" + + struct.pack(">H", 6 + ifd_length) + + b"MPF\0" + + b" " * ifd_length + ) + if exif := im_frame.encoderinfo.get("exif"): + if isinstance(exif, Image.Exif): + exif = exif.tobytes() + im_frame.encoderinfo["exif"] = exif + mpf_offset += 4 + len(exif) + + JpegImagePlugin._save(im_frame, fp, filename) + offsets.append(fp.tell()) + else: + encoderinfo = im_frame._attach_default_encoderinfo(im) + im_frame.save(fp, "JPEG") + im_frame.encoderinfo = encoderinfo + offsets.append(fp.tell() - offsets[-1]) + + ifd = TiffImagePlugin.ImageFileDirectory_v2() + ifd[0xB000] = b"0100" + ifd[0xB001] = len(offsets) + + mpentries = b"" + data_offset = 0 + for i, size in enumerate(offsets): + if i == 0: + mptype = 0x030000 # Baseline MP Primary Image + else: + mptype = 0x000000 # Undefined + mpentries += struct.pack(" None: + assert self.fp is not None + self.fp.seek(0) # prep the fp in order to pass the JPEG test + JpegImagePlugin.JpegImageFile._open(self) + self._after_jpeg_open() + + def _after_jpeg_open(self, mpheader: dict[int, Any] | None = None) -> None: + self.mpinfo = mpheader if mpheader is not None else self._getmp() + if self.mpinfo is None: + msg = "Image appears to be a malformed MPO file" + raise ValueError(msg) + self.n_frames = self.mpinfo[0xB001] + self.__mpoffsets = [ + mpent["DataOffset"] + self.info["mpoffset"] for mpent in self.mpinfo[0xB002] + ] + self.__mpoffsets[0] = 0 + # Note that the following assertion will only be invalid if something + # gets broken within JpegImagePlugin. + assert self.n_frames == len(self.__mpoffsets) + del self.info["mpoffset"] # no longer needed + self.is_animated = self.n_frames > 1 + assert self.fp is not None + self._fp = self.fp # FIXME: hack + self._fp.seek(self.__mpoffsets[0]) # get ready to read first frame + self.__frame = 0 + self.offset = 0 + # for now we can only handle reading and individual frame extraction + self.readonly = 1 + + def load_seek(self, pos: int) -> None: + if isinstance(self._fp, DeferredError): + raise self._fp.ex + self._fp.seek(pos) + + def seek(self, frame: int) -> None: + if not self._seek_check(frame): + return + if isinstance(self._fp, DeferredError): + raise self._fp.ex + self.fp = self._fp + self.offset = self.__mpoffsets[frame] + + original_exif = self.info.get("exif") + if "exif" in self.info: + del self.info["exif"] + + self.fp.seek(self.offset + 2) # skip SOI marker + if not self.fp.read(2): + msg = "No data found for frame" + raise ValueError(msg) + self.fp.seek(self.offset) + JpegImagePlugin.JpegImageFile._open(self) + if self.info.get("exif") != original_exif: + self._reload_exif() + + self.tile = [ + ImageFile._Tile("jpeg", (0, 0) + self.size, self.offset, self.tile[0][-1]) + ] + self.__frame = frame + + def tell(self) -> int: + return self.__frame + + @staticmethod + def adopt( + jpeg_instance: JpegImagePlugin.JpegImageFile, + mpheader: dict[int, Any] | None = None, + ) -> MpoImageFile: + """ + Transform the instance of JpegImageFile into + an instance of MpoImageFile. + After the call, the JpegImageFile is extended + to be an MpoImageFile. + + This is essentially useful when opening a JPEG + file that reveals itself as an MPO, to avoid + double call to _open. + """ + jpeg_instance.__class__ = MpoImageFile + mpo_instance = cast(MpoImageFile, jpeg_instance) + mpo_instance._after_jpeg_open(mpheader) + return mpo_instance + + +# --------------------------------------------------------------------- +# Registry stuff + +# Note that since MPO shares a factory with JPEG, we do not need to do a +# separate registration for it here. +# Image.register_open(MpoImageFile.format, +# JpegImagePlugin.jpeg_factory, _accept) +Image.register_save(MpoImageFile.format, _save) +Image.register_save_all(MpoImageFile.format, _save_all) + +Image.register_extension(MpoImageFile.format, ".mpo") + +Image.register_mime(MpoImageFile.format, "image/mpo") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/MspImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/MspImagePlugin.py new file mode 100644 index 0000000..fa0f52f --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/MspImagePlugin.py @@ -0,0 +1,200 @@ +# +# The Python Imaging Library. +# +# MSP file handling +# +# This is the format used by the Paint program in Windows 1 and 2. +# +# History: +# 95-09-05 fl Created +# 97-01-03 fl Read/write MSP images +# 17-02-21 es Fixed RLE interpretation +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1995-97. +# Copyright (c) Eric Soroos 2017. +# +# See the README file for information on usage and redistribution. +# +# More info on this format: https://archive.org/details/gg243631 +# Page 313: +# Figure 205. Windows Paint Version 1: "DanM" Format +# Figure 206. Windows Paint Version 2: "LinS" Format. Used in Windows V2.03 +# +# See also: https://www.fileformat.info/format/mspaint/egff.htm +from __future__ import annotations + +import io +import struct +from typing import IO + +from . import Image, ImageFile +from ._binary import i16le as i16 +from ._binary import o16le as o16 + +# +# read MSP files + + +def _accept(prefix: bytes) -> bool: + return prefix.startswith((b"DanM", b"LinS")) + + +## +# Image plugin for Windows MSP images. This plugin supports both +# uncompressed (Windows 1.0). + + +class MspImageFile(ImageFile.ImageFile): + format = "MSP" + format_description = "Windows Paint" + + def _open(self) -> None: + # Header + assert self.fp is not None + + s = self.fp.read(32) + if not _accept(s): + msg = "not an MSP file" + raise SyntaxError(msg) + + # Header checksum + checksum = 0 + for i in range(0, 32, 2): + checksum = checksum ^ i16(s, i) + if checksum != 0: + msg = "bad MSP checksum" + raise SyntaxError(msg) + + self._mode = "1" + self._size = i16(s, 4), i16(s, 6) + + if s.startswith(b"DanM"): + self.tile = [ImageFile._Tile("raw", (0, 0) + self.size, 32, "1")] + else: + self.tile = [ImageFile._Tile("MSP", (0, 0) + self.size, 32)] + + +class MspDecoder(ImageFile.PyDecoder): + # The algo for the MSP decoder is from + # https://www.fileformat.info/format/mspaint/egff.htm + # cc-by-attribution -- That page references is taken from the + # Encyclopedia of Graphics File Formats and is licensed by + # O'Reilly under the Creative Common/Attribution license + # + # For RLE encoded files, the 32byte header is followed by a scan + # line map, encoded as one 16bit word of encoded byte length per + # line. + # + # NOTE: the encoded length of the line can be 0. This was not + # handled in the previous version of this encoder, and there's no + # mention of how to handle it in the documentation. From the few + # examples I've seen, I've assumed that it is a fill of the + # background color, in this case, white. + # + # + # Pseudocode of the decoder: + # Read a BYTE value as the RunType + # If the RunType value is zero + # Read next byte as the RunCount + # Read the next byte as the RunValue + # Write the RunValue byte RunCount times + # If the RunType value is non-zero + # Use this value as the RunCount + # Read and write the next RunCount bytes literally + # + # e.g.: + # 0x00 03 ff 05 00 01 02 03 04 + # would yield the bytes: + # 0xff ff ff 00 01 02 03 04 + # + # which are then interpreted as a bit packed mode '1' image + + _pulls_fd = True + + def decode(self, buffer: bytes | Image.SupportsArrayInterface) -> tuple[int, int]: + assert self.fd is not None + + img = io.BytesIO() + blank_line = bytearray((0xFF,) * ((self.state.xsize + 7) // 8)) + try: + self.fd.seek(32) + rowmap = struct.unpack_from( + f"<{self.state.ysize}H", self.fd.read(self.state.ysize * 2) + ) + except struct.error as e: + msg = "Truncated MSP file in row map" + raise OSError(msg) from e + + for x, rowlen in enumerate(rowmap): + try: + if rowlen == 0: + img.write(blank_line) + continue + row = self.fd.read(rowlen) + if len(row) != rowlen: + msg = f"Truncated MSP file, expected {rowlen} bytes on row {x}" + raise OSError(msg) + idx = 0 + while idx < rowlen: + runtype = row[idx] + idx += 1 + if runtype == 0: + runcount, runval = struct.unpack_from("Bc", row, idx) + img.write(runval * runcount) + idx += 2 + else: + runcount = runtype + img.write(row[idx : idx + runcount]) + idx += runcount + + except struct.error as e: + msg = f"Corrupted MSP file in row {x}" + raise OSError(msg) from e + + self.set_as_raw(img.getvalue(), "1") + + return -1, 0 + + +Image.register_decoder("MSP", MspDecoder) + + +# +# write MSP files (uncompressed only) + + +def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + if im.mode != "1": + msg = f"cannot write mode {im.mode} as MSP" + raise OSError(msg) + + # create MSP header + header = [0] * 16 + + header[0], header[1] = i16(b"Da"), i16(b"nM") # version 1 + header[2], header[3] = im.size + header[4], header[5] = 1, 1 + header[6], header[7] = 1, 1 + header[8], header[9] = im.size + + checksum = 0 + for h in header: + checksum = checksum ^ h + header[12] = checksum # FIXME: is this the right field? + + # header + for h in header: + fp.write(o16(h)) + + # image body + ImageFile._save(im, fp, [ImageFile._Tile("raw", (0, 0) + im.size, 32, "1")]) + + +# +# registry + +Image.register_open(MspImageFile.format, MspImageFile, _accept) +Image.register_save(MspImageFile.format, _save) + +Image.register_extension(MspImageFile.format, ".msp") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/PSDraw.py b/Python/venv/lib/python3.12/site-packages/PIL/PSDraw.py new file mode 100644 index 0000000..e6b74a9 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/PSDraw.py @@ -0,0 +1,238 @@ +# +# The Python Imaging Library +# $Id$ +# +# Simple PostScript graphics interface +# +# History: +# 1996-04-20 fl Created +# 1999-01-10 fl Added gsave/grestore to image method +# 2005-05-04 fl Fixed floating point issue in image (from Eric Etheridge) +# +# Copyright (c) 1997-2005 by Secret Labs AB. All rights reserved. +# Copyright (c) 1996 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import sys +from typing import IO + +from . import EpsImagePlugin + +TYPE_CHECKING = False + + +## +# Simple PostScript graphics interface. + + +class PSDraw: + """ + Sets up printing to the given file. If ``fp`` is omitted, + ``sys.stdout.buffer`` is assumed. + """ + + def __init__(self, fp: IO[bytes] | None = None) -> None: + if not fp: + fp = sys.stdout.buffer + self.fp = fp + + def begin_document(self, id: str | None = None) -> None: + """Set up printing of a document. (Write PostScript DSC header.)""" + # FIXME: incomplete + self.fp.write( + b"%!PS-Adobe-3.0\n" + b"save\n" + b"/showpage { } def\n" + b"%%EndComments\n" + b"%%BeginDocument\n" + ) + # self.fp.write(ERROR_PS) # debugging! + self.fp.write(EDROFF_PS) + self.fp.write(VDI_PS) + self.fp.write(b"%%EndProlog\n") + self.isofont: dict[bytes, int] = {} + + def end_document(self) -> None: + """Ends printing. (Write PostScript DSC footer.)""" + self.fp.write(b"%%EndDocument\nrestore showpage\n%%End\n") + if hasattr(self.fp, "flush"): + self.fp.flush() + + def setfont(self, font: str, size: int) -> None: + """ + Selects which font to use. + + :param font: A PostScript font name + :param size: Size in points. + """ + font_bytes = bytes(font, "UTF-8") + if font_bytes not in self.isofont: + # reencode font + self.fp.write( + b"/PSDraw-%s ISOLatin1Encoding /%s E\n" % (font_bytes, font_bytes) + ) + self.isofont[font_bytes] = 1 + # rough + self.fp.write(b"/F0 %d /PSDraw-%s F\n" % (size, font_bytes)) + + def line(self, xy0: tuple[int, int], xy1: tuple[int, int]) -> None: + """ + Draws a line between the two points. Coordinates are given in + PostScript point coordinates (72 points per inch, (0, 0) is the lower + left corner of the page). + """ + self.fp.write(b"%d %d %d %d Vl\n" % (*xy0, *xy1)) + + def rectangle(self, box: tuple[int, int, int, int]) -> None: + """ + Draws a rectangle. + + :param box: A tuple of four integers, specifying left, bottom, width and + height. + """ + self.fp.write(b"%d %d M 0 %d %d Vr\n" % box) + + def text(self, xy: tuple[int, int], text: str) -> None: + """ + Draws text at the given position. You must use + :py:meth:`~PIL.PSDraw.PSDraw.setfont` before calling this method. + """ + # The font is loaded as ISOLatin1Encoding, so use latin-1 here. + text_bytes = bytes(text, "latin-1") + text_bytes = b"\\(".join(text_bytes.split(b"(")) + text_bytes = b"\\)".join(text_bytes.split(b")")) + self.fp.write(b"%d %d M (%s) S\n" % (xy + (text_bytes,))) + + if TYPE_CHECKING: + from . import Image + + def image( + self, box: tuple[int, int, int, int], im: Image.Image, dpi: int | None = None + ) -> None: + """Draw a PIL image, centered in the given box.""" + # default resolution depends on mode + if not dpi: + if im.mode == "1": + dpi = 200 # fax + else: + dpi = 100 # grayscale + # image size (on paper) + x = im.size[0] * 72 / dpi + y = im.size[1] * 72 / dpi + # max allowed size + xmax = float(box[2] - box[0]) + ymax = float(box[3] - box[1]) + if x > xmax: + y = y * xmax / x + x = xmax + if y > ymax: + x = x * ymax / y + y = ymax + dx = (xmax - x) / 2 + box[0] + dy = (ymax - y) / 2 + box[1] + self.fp.write(b"gsave\n%f %f translate\n" % (dx, dy)) + if (x, y) != im.size: + # EpsImagePlugin._save prints the image at (0,0,xsize,ysize) + sx = x / im.size[0] + sy = y / im.size[1] + self.fp.write(b"%f %f scale\n" % (sx, sy)) + EpsImagePlugin._save(im, self.fp, "", 0) + self.fp.write(b"\ngrestore\n") + + +# -------------------------------------------------------------------- +# PostScript driver + +# +# EDROFF.PS -- PostScript driver for Edroff 2 +# +# History: +# 94-01-25 fl: created (edroff 2.04) +# +# Copyright (c) Fredrik Lundh 1994. +# + + +EDROFF_PS = b"""\ +/S { show } bind def +/P { moveto show } bind def +/M { moveto } bind def +/X { 0 rmoveto } bind def +/Y { 0 exch rmoveto } bind def +/E { findfont + dup maxlength dict begin + { + 1 index /FID ne { def } { pop pop } ifelse + } forall + /Encoding exch def + dup /FontName exch def + currentdict end definefont pop +} bind def +/F { findfont exch scalefont dup setfont + [ exch /setfont cvx ] cvx bind def +} bind def +""" + +# +# VDI.PS -- PostScript driver for VDI meta commands +# +# History: +# 94-01-25 fl: created (edroff 2.04) +# +# Copyright (c) Fredrik Lundh 1994. +# + +VDI_PS = b"""\ +/Vm { moveto } bind def +/Va { newpath arcn stroke } bind def +/Vl { moveto lineto stroke } bind def +/Vc { newpath 0 360 arc closepath } bind def +/Vr { exch dup 0 rlineto + exch dup 0 exch rlineto + exch neg 0 rlineto + 0 exch neg rlineto + setgray fill } bind def +/Tm matrix def +/Ve { Tm currentmatrix pop + translate scale newpath 0 0 .5 0 360 arc closepath + Tm setmatrix +} bind def +/Vf { currentgray exch setgray fill setgray } bind def +""" + +# +# ERROR.PS -- Error handler +# +# History: +# 89-11-21 fl: created (pslist 1.10) +# + +ERROR_PS = b"""\ +/landscape false def +/errorBUF 200 string def +/errorNL { currentpoint 10 sub exch pop 72 exch moveto } def +errordict begin /handleerror { + initmatrix /Courier findfont 10 scalefont setfont + newpath 72 720 moveto $error begin /newerror false def + (PostScript Error) show errorNL errorNL + (Error: ) show + /errorname load errorBUF cvs show errorNL errorNL + (Command: ) show + /command load dup type /stringtype ne { errorBUF cvs } if show + errorNL errorNL + (VMstatus: ) show + vmstatus errorBUF cvs show ( bytes available, ) show + errorBUF cvs show ( bytes used at level ) show + errorBUF cvs show errorNL errorNL + (Operand stargck: ) show errorNL /ostargck load { + dup type /stringtype ne { errorBUF cvs } if 72 0 rmoveto show errorNL + } forall errorNL + (Execution stargck: ) show errorNL /estargck load { + dup type /stringtype ne { errorBUF cvs } if 72 0 rmoveto show errorNL + } forall + end showpage +} def end +""" diff --git a/Python/venv/lib/python3.12/site-packages/PIL/PaletteFile.py b/Python/venv/lib/python3.12/site-packages/PIL/PaletteFile.py new file mode 100644 index 0000000..2a26e5d --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/PaletteFile.py @@ -0,0 +1,54 @@ +# +# Python Imaging Library +# $Id$ +# +# stuff to read simple, teragon-style palette files +# +# History: +# 97-08-23 fl Created +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1997. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +from typing import IO + +from ._binary import o8 + + +class PaletteFile: + """File handler for Teragon-style palette files.""" + + rawmode = "RGB" + + def __init__(self, fp: IO[bytes]) -> None: + palette = [o8(i) * 3 for i in range(256)] + + while True: + s = fp.readline() + + if not s: + break + if s.startswith(b"#"): + continue + if len(s) > 100: + msg = "bad palette file" + raise SyntaxError(msg) + + v = [int(x) for x in s.split()] + try: + [i, r, g, b] = v + except ValueError: + [i, r] = v + g = b = r + + if 0 <= i <= 255: + palette[i] = o8(r) + o8(g) + o8(b) + + self.palette = b"".join(palette) + + def getpalette(self) -> tuple[bytes, str]: + return self.palette, self.rawmode diff --git a/Python/venv/lib/python3.12/site-packages/PIL/PalmImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/PalmImagePlugin.py new file mode 100644 index 0000000..232adf3 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/PalmImagePlugin.py @@ -0,0 +1,217 @@ +# +# The Python Imaging Library. +# $Id$ +# + +## +# Image plugin for Palm pixmap images (output only). +## +from __future__ import annotations + +from typing import IO + +from . import Image, ImageFile +from ._binary import o8 +from ._binary import o16be as o16b + +# fmt: off +_Palm8BitColormapValues = ( + (255, 255, 255), (255, 204, 255), (255, 153, 255), (255, 102, 255), + (255, 51, 255), (255, 0, 255), (255, 255, 204), (255, 204, 204), + (255, 153, 204), (255, 102, 204), (255, 51, 204), (255, 0, 204), + (255, 255, 153), (255, 204, 153), (255, 153, 153), (255, 102, 153), + (255, 51, 153), (255, 0, 153), (204, 255, 255), (204, 204, 255), + (204, 153, 255), (204, 102, 255), (204, 51, 255), (204, 0, 255), + (204, 255, 204), (204, 204, 204), (204, 153, 204), (204, 102, 204), + (204, 51, 204), (204, 0, 204), (204, 255, 153), (204, 204, 153), + (204, 153, 153), (204, 102, 153), (204, 51, 153), (204, 0, 153), + (153, 255, 255), (153, 204, 255), (153, 153, 255), (153, 102, 255), + (153, 51, 255), (153, 0, 255), (153, 255, 204), (153, 204, 204), + (153, 153, 204), (153, 102, 204), (153, 51, 204), (153, 0, 204), + (153, 255, 153), (153, 204, 153), (153, 153, 153), (153, 102, 153), + (153, 51, 153), (153, 0, 153), (102, 255, 255), (102, 204, 255), + (102, 153, 255), (102, 102, 255), (102, 51, 255), (102, 0, 255), + (102, 255, 204), (102, 204, 204), (102, 153, 204), (102, 102, 204), + (102, 51, 204), (102, 0, 204), (102, 255, 153), (102, 204, 153), + (102, 153, 153), (102, 102, 153), (102, 51, 153), (102, 0, 153), + (51, 255, 255), (51, 204, 255), (51, 153, 255), (51, 102, 255), + (51, 51, 255), (51, 0, 255), (51, 255, 204), (51, 204, 204), + (51, 153, 204), (51, 102, 204), (51, 51, 204), (51, 0, 204), + (51, 255, 153), (51, 204, 153), (51, 153, 153), (51, 102, 153), + (51, 51, 153), (51, 0, 153), (0, 255, 255), (0, 204, 255), + (0, 153, 255), (0, 102, 255), (0, 51, 255), (0, 0, 255), + (0, 255, 204), (0, 204, 204), (0, 153, 204), (0, 102, 204), + (0, 51, 204), (0, 0, 204), (0, 255, 153), (0, 204, 153), + (0, 153, 153), (0, 102, 153), (0, 51, 153), (0, 0, 153), + (255, 255, 102), (255, 204, 102), (255, 153, 102), (255, 102, 102), + (255, 51, 102), (255, 0, 102), (255, 255, 51), (255, 204, 51), + (255, 153, 51), (255, 102, 51), (255, 51, 51), (255, 0, 51), + (255, 255, 0), (255, 204, 0), (255, 153, 0), (255, 102, 0), + (255, 51, 0), (255, 0, 0), (204, 255, 102), (204, 204, 102), + (204, 153, 102), (204, 102, 102), (204, 51, 102), (204, 0, 102), + (204, 255, 51), (204, 204, 51), (204, 153, 51), (204, 102, 51), + (204, 51, 51), (204, 0, 51), (204, 255, 0), (204, 204, 0), + (204, 153, 0), (204, 102, 0), (204, 51, 0), (204, 0, 0), + (153, 255, 102), (153, 204, 102), (153, 153, 102), (153, 102, 102), + (153, 51, 102), (153, 0, 102), (153, 255, 51), (153, 204, 51), + (153, 153, 51), (153, 102, 51), (153, 51, 51), (153, 0, 51), + (153, 255, 0), (153, 204, 0), (153, 153, 0), (153, 102, 0), + (153, 51, 0), (153, 0, 0), (102, 255, 102), (102, 204, 102), + (102, 153, 102), (102, 102, 102), (102, 51, 102), (102, 0, 102), + (102, 255, 51), (102, 204, 51), (102, 153, 51), (102, 102, 51), + (102, 51, 51), (102, 0, 51), (102, 255, 0), (102, 204, 0), + (102, 153, 0), (102, 102, 0), (102, 51, 0), (102, 0, 0), + (51, 255, 102), (51, 204, 102), (51, 153, 102), (51, 102, 102), + (51, 51, 102), (51, 0, 102), (51, 255, 51), (51, 204, 51), + (51, 153, 51), (51, 102, 51), (51, 51, 51), (51, 0, 51), + (51, 255, 0), (51, 204, 0), (51, 153, 0), (51, 102, 0), + (51, 51, 0), (51, 0, 0), (0, 255, 102), (0, 204, 102), + (0, 153, 102), (0, 102, 102), (0, 51, 102), (0, 0, 102), + (0, 255, 51), (0, 204, 51), (0, 153, 51), (0, 102, 51), + (0, 51, 51), (0, 0, 51), (0, 255, 0), (0, 204, 0), + (0, 153, 0), (0, 102, 0), (0, 51, 0), (17, 17, 17), + (34, 34, 34), (68, 68, 68), (85, 85, 85), (119, 119, 119), + (136, 136, 136), (170, 170, 170), (187, 187, 187), (221, 221, 221), + (238, 238, 238), (192, 192, 192), (128, 0, 0), (128, 0, 128), + (0, 128, 0), (0, 128, 128), (0, 0, 0), (0, 0, 0), + (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), + (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), + (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), + (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), + (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), + (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)) +# fmt: on + + +# so build a prototype image to be used for palette resampling +def build_prototype_image() -> Image.Image: + image = Image.new("L", (1, len(_Palm8BitColormapValues))) + image.putdata(list(range(len(_Palm8BitColormapValues)))) + palettedata: tuple[int, ...] = () + for colormapValue in _Palm8BitColormapValues: + palettedata += colormapValue + palettedata += (0, 0, 0) * (256 - len(_Palm8BitColormapValues)) + image.putpalette(palettedata) + return image + + +Palm8BitColormapImage = build_prototype_image() + +# OK, we now have in Palm8BitColormapImage, +# a "P"-mode image with the right palette +# +# -------------------------------------------------------------------- + +_FLAGS = {"custom-colormap": 0x4000, "is-compressed": 0x8000, "has-transparent": 0x2000} + +_COMPRESSION_TYPES = {"none": 0xFF, "rle": 0x01, "scanline": 0x00} + + +# +# -------------------------------------------------------------------- + +## +# (Internal) Image save plugin for the Palm format. + + +def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + if im.mode == "P": + rawmode = "P" + bpp = 8 + version = 1 + + elif im.mode == "L": + if im.encoderinfo.get("bpp") in (1, 2, 4): + # this is 8-bit grayscale, so we shift it to get the high-order bits, + # and invert it because + # Palm does grayscale from white (0) to black (1) + bpp = im.encoderinfo["bpp"] + maxval = (1 << bpp) - 1 + shift = 8 - bpp + im = im.point(lambda x: maxval - (x >> shift)) + elif im.info.get("bpp") in (1, 2, 4): + # here we assume that even though the inherent mode is 8-bit grayscale, + # only the lower bpp bits are significant. + # We invert them to match the Palm. + bpp = im.info["bpp"] + maxval = (1 << bpp) - 1 + im = im.point(lambda x: maxval - (x & maxval)) + else: + msg = f"cannot write mode {im.mode} as Palm" + raise OSError(msg) + + # we ignore the palette here + im._mode = "P" + rawmode = f"P;{bpp}" + version = 1 + + elif im.mode == "1": + # monochrome -- write it inverted, as is the Palm standard + rawmode = "1;I" + bpp = 1 + version = 0 + + else: + msg = f"cannot write mode {im.mode} as Palm" + raise OSError(msg) + + # + # make sure image data is available + im.load() + + # write header + + cols = im.size[0] + rows = im.size[1] + + rowbytes = int((cols + (16 // bpp - 1)) / (16 // bpp)) * 2 + transparent_index = 0 + compression_type = _COMPRESSION_TYPES["none"] + + flags = 0 + if im.mode == "P": + flags |= _FLAGS["custom-colormap"] + colormap = im.im.getpalette() + colors = len(colormap) // 3 + colormapsize = 4 * colors + 2 + else: + colormapsize = 0 + + if "offset" in im.info: + offset = (rowbytes * rows + 16 + 3 + colormapsize) // 4 + else: + offset = 0 + + fp.write(o16b(cols) + o16b(rows) + o16b(rowbytes) + o16b(flags)) + fp.write(o8(bpp)) + fp.write(o8(version)) + fp.write(o16b(offset)) + fp.write(o8(transparent_index)) + fp.write(o8(compression_type)) + fp.write(o16b(0)) # reserved by Palm + + # now write colormap if necessary + + if colormapsize: + fp.write(o16b(colors)) + for i in range(colors): + fp.write(o8(i)) + fp.write(colormap[3 * i : 3 * i + 3]) + + # now convert data to raw form + ImageFile._save( + im, fp, [ImageFile._Tile("raw", (0, 0) + im.size, 0, (rawmode, rowbytes, 1))] + ) + + if hasattr(fp, "flush"): + fp.flush() + + +# +# -------------------------------------------------------------------- + +Image.register_save("PALM", _save) + +Image.register_extension("PALM", ".palm") + +Image.register_mime("PALM", "image/palm") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/PcdImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/PcdImagePlugin.py new file mode 100644 index 0000000..296f377 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/PcdImagePlugin.py @@ -0,0 +1,68 @@ +# +# The Python Imaging Library. +# $Id$ +# +# PCD file handling +# +# History: +# 96-05-10 fl Created +# 96-05-27 fl Added draft mode (128x192, 256x384) +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1996. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +from . import Image, ImageFile + +## +# Image plugin for PhotoCD images. This plugin only reads the 768x512 +# image from the file; higher resolutions are encoded in a proprietary +# encoding. + + +class PcdImageFile(ImageFile.ImageFile): + format = "PCD" + format_description = "Kodak PhotoCD" + + def _open(self) -> None: + # rough + assert self.fp is not None + + self.fp.seek(2048) + s = self.fp.read(1539) + + if not s.startswith(b"PCD_"): + msg = "not a PCD file" + raise SyntaxError(msg) + + orientation = s[1538] & 3 + self.tile_post_rotate = None + if orientation == 1: + self.tile_post_rotate = 90 + elif orientation == 3: + self.tile_post_rotate = 270 + + self._mode = "RGB" + self._size = (512, 768) if orientation in (1, 3) else (768, 512) + self.tile = [ImageFile._Tile("pcd", (0, 0, 768, 512), 96 * 2048)] + + def load_prepare(self) -> None: + if self._im is None and self.tile_post_rotate: + self.im = Image.core.new(self.mode, (768, 512)) + ImageFile.ImageFile.load_prepare(self) + + def load_end(self) -> None: + if self.tile_post_rotate: + # Handle rotated PCDs + self.im = self.rotate(self.tile_post_rotate, expand=True).im + + +# +# registry + +Image.register_open(PcdImageFile.format, PcdImageFile) + +Image.register_extension(PcdImageFile.format, ".pcd") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/PcfFontFile.py b/Python/venv/lib/python3.12/site-packages/PIL/PcfFontFile.py new file mode 100644 index 0000000..b923293 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/PcfFontFile.py @@ -0,0 +1,258 @@ +# +# THIS IS WORK IN PROGRESS +# +# The Python Imaging Library +# $Id$ +# +# portable compiled font file parser +# +# history: +# 1997-08-19 fl created +# 2003-09-13 fl fixed loading of unicode fonts +# +# Copyright (c) 1997-2003 by Secret Labs AB. +# Copyright (c) 1997-2003 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import io + +from . import FontFile, Image +from ._binary import i8 +from ._binary import i16be as b16 +from ._binary import i16le as l16 +from ._binary import i32be as b32 +from ._binary import i32le as l32 + +TYPE_CHECKING = False +if TYPE_CHECKING: + from collections.abc import Callable + from typing import BinaryIO + +# -------------------------------------------------------------------- +# declarations + +PCF_MAGIC = 0x70636601 # "\x01fcp" + +PCF_PROPERTIES = 1 << 0 +PCF_ACCELERATORS = 1 << 1 +PCF_METRICS = 1 << 2 +PCF_BITMAPS = 1 << 3 +PCF_INK_METRICS = 1 << 4 +PCF_BDF_ENCODINGS = 1 << 5 +PCF_SWIDTHS = 1 << 6 +PCF_GLYPH_NAMES = 1 << 7 +PCF_BDF_ACCELERATORS = 1 << 8 + +BYTES_PER_ROW: list[Callable[[int], int]] = [ + lambda bits: ((bits + 7) >> 3), + lambda bits: ((bits + 15) >> 3) & ~1, + lambda bits: ((bits + 31) >> 3) & ~3, + lambda bits: ((bits + 63) >> 3) & ~7, +] + + +def sz(s: bytes, o: int) -> bytes: + return s[o : s.index(b"\0", o)] + + +class PcfFontFile(FontFile.FontFile): + """Font file plugin for the X11 PCF format.""" + + name = "name" + + def __init__(self, fp: BinaryIO, charset_encoding: str = "iso8859-1"): + self.charset_encoding = charset_encoding + + magic = l32(fp.read(4)) + if magic != PCF_MAGIC: + msg = "not a PCF file" + raise SyntaxError(msg) + + super().__init__() + + count = l32(fp.read(4)) + self.toc = {} + for i in range(count): + type = l32(fp.read(4)) + self.toc[type] = l32(fp.read(4)), l32(fp.read(4)), l32(fp.read(4)) + + self.fp = fp + + self.info = self._load_properties() + + metrics = self._load_metrics() + bitmaps = self._load_bitmaps(metrics) + encoding = self._load_encoding() + + # + # create glyph structure + + for ch, ix in enumerate(encoding): + if ix is not None: + ( + xsize, + ysize, + left, + right, + width, + ascent, + descent, + attributes, + ) = metrics[ix] + self.glyph[ch] = ( + (width, 0), + (left, descent - ysize, xsize + left, descent), + (0, 0, xsize, ysize), + bitmaps[ix], + ) + + def _getformat( + self, tag: int + ) -> tuple[BinaryIO, int, Callable[[bytes], int], Callable[[bytes], int]]: + format, size, offset = self.toc[tag] + + fp = self.fp + fp.seek(offset) + + format = l32(fp.read(4)) + + if format & 4: + i16, i32 = b16, b32 + else: + i16, i32 = l16, l32 + + return fp, format, i16, i32 + + def _load_properties(self) -> dict[bytes, bytes | int]: + # + # font properties + + properties = {} + + fp, format, i16, i32 = self._getformat(PCF_PROPERTIES) + + nprops = i32(fp.read(4)) + + # read property description + p = [(i32(fp.read(4)), i8(fp.read(1)), i32(fp.read(4))) for _ in range(nprops)] + + if nprops & 3: + fp.seek(4 - (nprops & 3), io.SEEK_CUR) # pad + + data = fp.read(i32(fp.read(4))) + + for k, s, v in p: + property_value: bytes | int = sz(data, v) if s else v + properties[sz(data, k)] = property_value + + return properties + + def _load_metrics(self) -> list[tuple[int, int, int, int, int, int, int, int]]: + # + # font metrics + + metrics: list[tuple[int, int, int, int, int, int, int, int]] = [] + + fp, format, i16, i32 = self._getformat(PCF_METRICS) + + append = metrics.append + + if (format & 0xFF00) == 0x100: + # "compressed" metrics + for i in range(i16(fp.read(2))): + left = i8(fp.read(1)) - 128 + right = i8(fp.read(1)) - 128 + width = i8(fp.read(1)) - 128 + ascent = i8(fp.read(1)) - 128 + descent = i8(fp.read(1)) - 128 + xsize = right - left + ysize = ascent + descent + append((xsize, ysize, left, right, width, ascent, descent, 0)) + + else: + # "jumbo" metrics + for i in range(i32(fp.read(4))): + left = i16(fp.read(2)) + right = i16(fp.read(2)) + width = i16(fp.read(2)) + ascent = i16(fp.read(2)) + descent = i16(fp.read(2)) + attributes = i16(fp.read(2)) + xsize = right - left + ysize = ascent + descent + append((xsize, ysize, left, right, width, ascent, descent, attributes)) + + return metrics + + def _load_bitmaps( + self, metrics: list[tuple[int, int, int, int, int, int, int, int]] + ) -> list[Image.Image]: + # + # bitmap data + + fp, format, i16, i32 = self._getformat(PCF_BITMAPS) + + nbitmaps = i32(fp.read(4)) + + if nbitmaps != len(metrics): + msg = "Wrong number of bitmaps" + raise OSError(msg) + + offsets = [i32(fp.read(4)) for _ in range(nbitmaps)] + + bitmap_sizes = [i32(fp.read(4)) for _ in range(4)] + + # byteorder = format & 4 # non-zero => MSB + bitorder = format & 8 # non-zero => MSB + padindex = format & 3 + + bitmapsize = bitmap_sizes[padindex] + offsets.append(bitmapsize) + + data = fp.read(bitmapsize) + + pad = BYTES_PER_ROW[padindex] + mode = "1;R" + if bitorder: + mode = "1" + + bitmaps = [] + for i in range(nbitmaps): + xsize, ysize = metrics[i][:2] + b, e = offsets[i : i + 2] + bitmaps.append( + Image.frombytes("1", (xsize, ysize), data[b:e], "raw", mode, pad(xsize)) + ) + + return bitmaps + + def _load_encoding(self) -> list[int | None]: + fp, format, i16, i32 = self._getformat(PCF_BDF_ENCODINGS) + + first_col, last_col = i16(fp.read(2)), i16(fp.read(2)) + first_row, last_row = i16(fp.read(2)), i16(fp.read(2)) + + i16(fp.read(2)) # default + + nencoding = (last_col - first_col + 1) * (last_row - first_row + 1) + + # map character code to bitmap index + encoding: list[int | None] = [None] * min(256, nencoding) + + encoding_offsets = [i16(fp.read(2)) for _ in range(nencoding)] + + for i in range(first_col, len(encoding)): + try: + encoding_offset = encoding_offsets[ + ord(bytearray([i]).decode(self.charset_encoding)) + ] + if encoding_offset != 0xFFFF: + encoding[i] = encoding_offset + except UnicodeDecodeError: # noqa: PERF203 + # character is not supported in selected encoding + pass + + return encoding diff --git a/Python/venv/lib/python3.12/site-packages/PIL/PcxImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/PcxImagePlugin.py new file mode 100644 index 0000000..3e34e3c --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/PcxImagePlugin.py @@ -0,0 +1,232 @@ +# +# The Python Imaging Library. +# $Id$ +# +# PCX file handling +# +# This format was originally used by ZSoft's popular PaintBrush +# program for the IBM PC. It is also supported by many MS-DOS and +# Windows applications, including the Windows PaintBrush program in +# Windows 3. +# +# history: +# 1995-09-01 fl Created +# 1996-05-20 fl Fixed RGB support +# 1997-01-03 fl Fixed 2-bit and 4-bit support +# 1999-02-03 fl Fixed 8-bit support (broken in 1.0b1) +# 1999-02-07 fl Added write support +# 2002-06-09 fl Made 2-bit and 4-bit support a bit more robust +# 2002-07-30 fl Seek from to current position, not beginning of file +# 2003-06-03 fl Extract DPI settings (info["dpi"]) +# +# Copyright (c) 1997-2003 by Secret Labs AB. +# Copyright (c) 1995-2003 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import io +import logging +from typing import IO + +from . import Image, ImageFile, ImagePalette +from ._binary import i16le as i16 +from ._binary import o8 +from ._binary import o16le as o16 + +logger = logging.getLogger(__name__) + + +def _accept(prefix: bytes) -> bool: + return len(prefix) >= 2 and prefix[0] == 10 and prefix[1] in [0, 2, 3, 5] + + +## +# Image plugin for Paintbrush images. + + +class PcxImageFile(ImageFile.ImageFile): + format = "PCX" + format_description = "Paintbrush" + + def _open(self) -> None: + # header + assert self.fp is not None + + s = self.fp.read(68) + if not _accept(s): + msg = "not a PCX file" + raise SyntaxError(msg) + + # image + bbox = i16(s, 4), i16(s, 6), i16(s, 8) + 1, i16(s, 10) + 1 + if bbox[2] <= bbox[0] or bbox[3] <= bbox[1]: + msg = "bad PCX image size" + raise SyntaxError(msg) + logger.debug("BBox: %s %s %s %s", *bbox) + + offset = self.fp.tell() + 60 + + # format + version = s[1] + bits = s[3] + planes = s[65] + provided_stride = i16(s, 66) + logger.debug( + "PCX version %s, bits %s, planes %s, stride %s", + version, + bits, + planes, + provided_stride, + ) + + self.info["dpi"] = i16(s, 12), i16(s, 14) + + if bits == 1 and planes == 1: + mode = rawmode = "1" + + elif bits == 1 and planes in (2, 4): + mode = "P" + rawmode = f"P;{planes}L" + self.palette = ImagePalette.raw("RGB", s[16:64]) + + elif version == 5 and bits == 8 and planes == 1: + mode = rawmode = "L" + # FIXME: hey, this doesn't work with the incremental loader !!! + self.fp.seek(-769, io.SEEK_END) + s = self.fp.read(769) + if len(s) == 769 and s[0] == 12: + # check if the palette is linear grayscale + for i in range(256): + if s[i * 3 + 1 : i * 3 + 4] != o8(i) * 3: + mode = rawmode = "P" + break + if mode == "P": + self.palette = ImagePalette.raw("RGB", s[1:]) + + elif version == 5 and bits == 8 and planes == 3: + mode = "RGB" + rawmode = "RGB;L" + + else: + msg = "unknown PCX mode" + raise OSError(msg) + + self._mode = mode + self._size = bbox[2] - bbox[0], bbox[3] - bbox[1] + + # Don't trust the passed in stride. + # Calculate the approximate position for ourselves. + # CVE-2020-35653 + stride = (self._size[0] * bits + 7) // 8 + + # While the specification states that this must be even, + # not all images follow this + if provided_stride != stride: + stride += stride % 2 + + bbox = (0, 0) + self.size + logger.debug("size: %sx%s", *self.size) + + self.tile = [ImageFile._Tile("pcx", bbox, offset, (rawmode, planes * stride))] + + +# -------------------------------------------------------------------- +# save PCX files + + +SAVE = { + # mode: (version, bits, planes, raw mode) + "1": (2, 1, 1, "1"), + "L": (5, 8, 1, "L"), + "P": (5, 8, 1, "P"), + "RGB": (5, 8, 3, "RGB;L"), +} + + +def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + if im.width == 0 or im.height == 0: + msg = "Cannot write empty image as PCX" + raise ValueError(msg) + + try: + version, bits, planes, rawmode = SAVE[im.mode] + except KeyError as e: + msg = f"Cannot save {im.mode} images as PCX" + raise ValueError(msg) from e + + # bytes per plane + stride = (im.size[0] * bits + 7) // 8 + # stride should be even + stride += stride % 2 + # Stride needs to be kept in sync with the PcxEncode.c version. + # Ideally it should be passed in in the state, but the bytes value + # gets overwritten. + + logger.debug( + "PcxImagePlugin._save: xwidth: %d, bits: %d, stride: %d", + im.size[0], + bits, + stride, + ) + + # under windows, we could determine the current screen size with + # "Image.core.display_mode()[1]", but I think that's overkill... + + screen = im.size + + dpi = 100, 100 + + # PCX header + fp.write( + o8(10) + + o8(version) + + o8(1) + + o8(bits) + + o16(0) + + o16(0) + + o16(im.size[0] - 1) + + o16(im.size[1] - 1) + + o16(dpi[0]) + + o16(dpi[1]) + + b"\0" * 24 + + b"\xff" * 24 + + b"\0" + + o8(planes) + + o16(stride) + + o16(1) + + o16(screen[0]) + + o16(screen[1]) + + b"\0" * 54 + ) + + assert fp.tell() == 128 + + ImageFile._save( + im, fp, [ImageFile._Tile("pcx", (0, 0) + im.size, 0, (rawmode, bits * planes))] + ) + + if im.mode == "P": + # colour palette + fp.write(o8(12)) + palette = im.im.getpalette("RGB", "RGB") + palette += b"\x00" * (768 - len(palette)) + fp.write(palette) # 768 bytes + elif im.mode == "L": + # grayscale palette + fp.write(o8(12)) + for i in range(256): + fp.write(o8(i) * 3) + + +# -------------------------------------------------------------------- +# registry + + +Image.register_open(PcxImageFile.format, PcxImageFile, _accept) +Image.register_save(PcxImageFile.format, _save) + +Image.register_extension(PcxImageFile.format, ".pcx") + +Image.register_mime(PcxImageFile.format, "image/x-pcx") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/PdfImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/PdfImagePlugin.py new file mode 100644 index 0000000..5594c7e --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/PdfImagePlugin.py @@ -0,0 +1,311 @@ +# +# The Python Imaging Library. +# $Id$ +# +# PDF (Acrobat) file handling +# +# History: +# 1996-07-16 fl Created +# 1997-01-18 fl Fixed header +# 2004-02-21 fl Fixes for 1/L/CMYK images, etc. +# 2004-02-24 fl Fixes for 1 and P images. +# +# Copyright (c) 1997-2004 by Secret Labs AB. All rights reserved. +# Copyright (c) 1996-1997 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + +## +# Image plugin for PDF images (output only). +## +from __future__ import annotations + +import io +import math +import os +import time +from typing import IO, Any + +from . import Image, ImageFile, ImageSequence, PdfParser, features + +# +# -------------------------------------------------------------------- + +# object ids: +# 1. catalogue +# 2. pages +# 3. image +# 4. page +# 5. page contents + + +def _save_all(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + _save(im, fp, filename, save_all=True) + + +## +# (Internal) Image save plugin for the PDF format. + + +def _write_image( + im: Image.Image, + filename: str | bytes, + existing_pdf: PdfParser.PdfParser, + image_refs: list[PdfParser.IndirectReference], +) -> tuple[PdfParser.IndirectReference, str]: + # FIXME: Should replace ASCIIHexDecode with RunLengthDecode + # (packbits) or LZWDecode (tiff/lzw compression). Note that + # PDF 1.2 also supports Flatedecode (zip compression). + + params = None + decode = None + + # + # Get image characteristics + + width, height = im.size + + dict_obj: dict[str, Any] = {"BitsPerComponent": 8} + if im.mode == "1": + if features.check("libtiff"): + decode_filter = "CCITTFaxDecode" + dict_obj["BitsPerComponent"] = 1 + params = PdfParser.PdfArray( + [ + PdfParser.PdfDict( + { + "K": -1, + "BlackIs1": True, + "Columns": width, + "Rows": height, + } + ) + ] + ) + else: + decode_filter = "DCTDecode" + dict_obj["ColorSpace"] = PdfParser.PdfName("DeviceGray") + procset = "ImageB" # grayscale + elif im.mode == "L": + decode_filter = "DCTDecode" + # params = f"<< /Predictor 15 /Columns {width-2} >>" + dict_obj["ColorSpace"] = PdfParser.PdfName("DeviceGray") + procset = "ImageB" # grayscale + elif im.mode == "LA": + decode_filter = "JPXDecode" + # params = f"<< /Predictor 15 /Columns {width-2} >>" + procset = "ImageB" # grayscale + dict_obj["SMaskInData"] = 1 + elif im.mode == "P": + decode_filter = "ASCIIHexDecode" + palette = im.getpalette() + assert palette is not None + dict_obj["ColorSpace"] = [ + PdfParser.PdfName("Indexed"), + PdfParser.PdfName("DeviceRGB"), + len(palette) // 3 - 1, + PdfParser.PdfBinary(palette), + ] + procset = "ImageI" # indexed color + + if "transparency" in im.info: + smask = im.convert("LA").getchannel("A") + smask.encoderinfo = {} + + image_ref = _write_image(smask, filename, existing_pdf, image_refs)[0] + dict_obj["SMask"] = image_ref + elif im.mode == "RGB": + decode_filter = "DCTDecode" + dict_obj["ColorSpace"] = PdfParser.PdfName("DeviceRGB") + procset = "ImageC" # color images + elif im.mode == "RGBA": + decode_filter = "JPXDecode" + procset = "ImageC" # color images + dict_obj["SMaskInData"] = 1 + elif im.mode == "CMYK": + decode_filter = "DCTDecode" + dict_obj["ColorSpace"] = PdfParser.PdfName("DeviceCMYK") + procset = "ImageC" # color images + decode = [1, 0, 1, 0, 1, 0, 1, 0] + else: + msg = f"cannot save mode {im.mode}" + raise ValueError(msg) + + # + # image + + op = io.BytesIO() + + if decode_filter == "ASCIIHexDecode": + ImageFile._save(im, op, [ImageFile._Tile("hex", (0, 0) + im.size, 0, im.mode)]) + elif decode_filter == "CCITTFaxDecode": + im.save( + op, + "TIFF", + compression="group4", + # use a single strip + strip_size=math.ceil(width / 8) * height, + ) + elif decode_filter == "DCTDecode": + Image.SAVE["JPEG"](im, op, filename) + elif decode_filter == "JPXDecode": + del dict_obj["BitsPerComponent"] + Image.SAVE["JPEG2000"](im, op, filename) + else: + msg = f"unsupported PDF filter ({decode_filter})" + raise ValueError(msg) + + stream = op.getvalue() + filter: PdfParser.PdfArray | PdfParser.PdfName + if decode_filter == "CCITTFaxDecode": + stream = stream[8:] + filter = PdfParser.PdfArray([PdfParser.PdfName(decode_filter)]) + else: + filter = PdfParser.PdfName(decode_filter) + + image_ref = image_refs.pop(0) + existing_pdf.write_obj( + image_ref, + stream=stream, + Type=PdfParser.PdfName("XObject"), + Subtype=PdfParser.PdfName("Image"), + Width=width, # * 72.0 / x_resolution, + Height=height, # * 72.0 / y_resolution, + Filter=filter, + Decode=decode, + DecodeParms=params, + **dict_obj, + ) + + return image_ref, procset + + +def _save( + im: Image.Image, fp: IO[bytes], filename: str | bytes, save_all: bool = False +) -> None: + is_appending = im.encoderinfo.get("append", False) + filename_str = filename.decode() if isinstance(filename, bytes) else filename + if is_appending: + existing_pdf = PdfParser.PdfParser(f=fp, filename=filename_str, mode="r+b") + else: + existing_pdf = PdfParser.PdfParser(f=fp, filename=filename_str, mode="w+b") + + dpi = im.encoderinfo.get("dpi") + if dpi: + x_resolution = dpi[0] + y_resolution = dpi[1] + else: + x_resolution = y_resolution = im.encoderinfo.get("resolution", 72.0) + + info = { + "title": ( + None if is_appending else os.path.splitext(os.path.basename(filename))[0] + ), + "author": None, + "subject": None, + "keywords": None, + "creator": None, + "producer": None, + "creationDate": None if is_appending else time.gmtime(), + "modDate": None if is_appending else time.gmtime(), + } + for k, default in info.items(): + v = im.encoderinfo.get(k) if k in im.encoderinfo else default + if v: + existing_pdf.info[k[0].upper() + k[1:]] = v + + # + # make sure image data is available + im.load() + + existing_pdf.start_writing() + existing_pdf.write_header() + existing_pdf.write_comment("created by Pillow PDF driver") + + # + # pages + ims = [im] + if save_all: + append_images = im.encoderinfo.get("append_images", []) + for append_im in append_images: + append_im.encoderinfo = im.encoderinfo.copy() + ims.append(append_im) + number_of_pages = 0 + image_refs = [] + page_refs = [] + contents_refs = [] + for im in ims: + im_number_of_pages = 1 + if save_all: + im_number_of_pages = getattr(im, "n_frames", 1) + number_of_pages += im_number_of_pages + for i in range(im_number_of_pages): + image_refs.append(existing_pdf.next_object_id(0)) + if im.mode == "P" and "transparency" in im.info: + image_refs.append(existing_pdf.next_object_id(0)) + + page_refs.append(existing_pdf.next_object_id(0)) + contents_refs.append(existing_pdf.next_object_id(0)) + existing_pdf.pages.append(page_refs[-1]) + + # + # catalog and list of pages + existing_pdf.write_catalog() + + page_number = 0 + for im_sequence in ims: + im_pages: ImageSequence.Iterator | list[Image.Image] = ( + ImageSequence.Iterator(im_sequence) if save_all else [im_sequence] + ) + for im in im_pages: + image_ref, procset = _write_image(im, filename, existing_pdf, image_refs) + + # + # page + + existing_pdf.write_page( + page_refs[page_number], + Resources=PdfParser.PdfDict( + ProcSet=[PdfParser.PdfName("PDF"), PdfParser.PdfName(procset)], + XObject=PdfParser.PdfDict(image=image_ref), + ), + MediaBox=[ + 0, + 0, + im.width * 72.0 / x_resolution, + im.height * 72.0 / y_resolution, + ], + Contents=contents_refs[page_number], + ) + + # + # page contents + + page_contents = b"q %f 0 0 %f 0 0 cm /image Do Q\n" % ( + im.width * 72.0 / x_resolution, + im.height * 72.0 / y_resolution, + ) + + existing_pdf.write_obj(contents_refs[page_number], stream=page_contents) + + page_number += 1 + + # + # trailer + existing_pdf.write_xref_and_trailer() + if hasattr(fp, "flush"): + fp.flush() + existing_pdf.close() + + +# +# -------------------------------------------------------------------- + + +Image.register_save("PDF", _save) +Image.register_save_all("PDF", _save_all) + +Image.register_extension("PDF", ".pdf") + +Image.register_mime("PDF", "application/pdf") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/PdfParser.py b/Python/venv/lib/python3.12/site-packages/PIL/PdfParser.py new file mode 100644 index 0000000..f7f3a46 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/PdfParser.py @@ -0,0 +1,1081 @@ +from __future__ import annotations + +import calendar +import codecs +import collections +import mmap +import os +import re +import time +import zlib +from typing import Any, NamedTuple + +TYPE_CHECKING = False +if TYPE_CHECKING: + from typing import IO + + _DictBase = collections.UserDict[str | bytes, Any] +else: + _DictBase = collections.UserDict + + +# see 7.9.2.2 Text String Type on page 86 and D.3 PDFDocEncoding Character Set +# on page 656 +def encode_text(s: str) -> bytes: + return codecs.BOM_UTF16_BE + s.encode("utf_16_be") + + +PDFDocEncoding = { + 0x16: "\u0017", + 0x18: "\u02d8", + 0x19: "\u02c7", + 0x1A: "\u02c6", + 0x1B: "\u02d9", + 0x1C: "\u02dd", + 0x1D: "\u02db", + 0x1E: "\u02da", + 0x1F: "\u02dc", + 0x80: "\u2022", + 0x81: "\u2020", + 0x82: "\u2021", + 0x83: "\u2026", + 0x84: "\u2014", + 0x85: "\u2013", + 0x86: "\u0192", + 0x87: "\u2044", + 0x88: "\u2039", + 0x89: "\u203a", + 0x8A: "\u2212", + 0x8B: "\u2030", + 0x8C: "\u201e", + 0x8D: "\u201c", + 0x8E: "\u201d", + 0x8F: "\u2018", + 0x90: "\u2019", + 0x91: "\u201a", + 0x92: "\u2122", + 0x93: "\ufb01", + 0x94: "\ufb02", + 0x95: "\u0141", + 0x96: "\u0152", + 0x97: "\u0160", + 0x98: "\u0178", + 0x99: "\u017d", + 0x9A: "\u0131", + 0x9B: "\u0142", + 0x9C: "\u0153", + 0x9D: "\u0161", + 0x9E: "\u017e", + 0xA0: "\u20ac", +} + + +def decode_text(b: bytes) -> str: + if b[: len(codecs.BOM_UTF16_BE)] == codecs.BOM_UTF16_BE: + return b[len(codecs.BOM_UTF16_BE) :].decode("utf_16_be") + else: + return "".join(PDFDocEncoding.get(byte, chr(byte)) for byte in b) + + +class PdfFormatError(RuntimeError): + """An error that probably indicates a syntactic or semantic error in the + PDF file structure""" + + pass + + +def check_format_condition(condition: bool, error_message: str) -> None: + if not condition: + raise PdfFormatError(error_message) + + +class IndirectReferenceTuple(NamedTuple): + object_id: int + generation: int + + +class IndirectReference(IndirectReferenceTuple): + def __str__(self) -> str: + return f"{self.object_id} {self.generation} R" + + def __bytes__(self) -> bytes: + return self.__str__().encode("us-ascii") + + def __eq__(self, other: object) -> bool: + if self.__class__ is not other.__class__: + return False + assert isinstance(other, IndirectReference) + return other.object_id == self.object_id and other.generation == self.generation + + def __ne__(self, other: object) -> bool: + return not (self == other) + + def __hash__(self) -> int: + return hash((self.object_id, self.generation)) + + +class IndirectObjectDef(IndirectReference): + def __str__(self) -> str: + return f"{self.object_id} {self.generation} obj" + + +class XrefTable: + def __init__(self) -> None: + self.existing_entries: dict[int, tuple[int, int]] = ( + {} + ) # object ID => (offset, generation) + self.new_entries: dict[int, tuple[int, int]] = ( + {} + ) # object ID => (offset, generation) + self.deleted_entries = {0: 65536} # object ID => generation + self.reading_finished = False + + def __setitem__(self, key: int, value: tuple[int, int]) -> None: + if self.reading_finished: + self.new_entries[key] = value + else: + self.existing_entries[key] = value + if key in self.deleted_entries: + del self.deleted_entries[key] + + def __getitem__(self, key: int) -> tuple[int, int]: + try: + return self.new_entries[key] + except KeyError: + return self.existing_entries[key] + + def __delitem__(self, key: int) -> None: + if key in self.new_entries: + generation = self.new_entries[key][1] + 1 + del self.new_entries[key] + self.deleted_entries[key] = generation + elif key in self.existing_entries: + generation = self.existing_entries[key][1] + 1 + self.deleted_entries[key] = generation + elif key in self.deleted_entries: + generation = self.deleted_entries[key] + else: + msg = f"object ID {key} cannot be deleted because it doesn't exist" + raise IndexError(msg) + + def __contains__(self, key: int) -> bool: + return key in self.existing_entries or key in self.new_entries + + def __len__(self) -> int: + return len( + set(self.existing_entries.keys()) + | set(self.new_entries.keys()) + | set(self.deleted_entries.keys()) + ) + + def keys(self) -> set[int]: + return ( + set(self.existing_entries.keys()) - set(self.deleted_entries.keys()) + ) | set(self.new_entries.keys()) + + def write(self, f: IO[bytes]) -> int: + keys = sorted(set(self.new_entries.keys()) | set(self.deleted_entries.keys())) + deleted_keys = sorted(set(self.deleted_entries.keys())) + startxref = f.tell() + f.write(b"xref\n") + while keys: + # find a contiguous sequence of object IDs + prev: int | None = None + for index, key in enumerate(keys): + if prev is None or prev + 1 == key: + prev = key + else: + contiguous_keys = keys[:index] + keys = keys[index:] + break + else: + contiguous_keys = keys + keys = [] + f.write(b"%d %d\n" % (contiguous_keys[0], len(contiguous_keys))) + for object_id in contiguous_keys: + if object_id in self.new_entries: + f.write(b"%010d %05d n \n" % self.new_entries[object_id]) + else: + this_deleted_object_id = deleted_keys.pop(0) + check_format_condition( + object_id == this_deleted_object_id, + f"expected the next deleted object ID to be {object_id}, " + f"instead found {this_deleted_object_id}", + ) + try: + next_in_linked_list = deleted_keys[0] + except IndexError: + next_in_linked_list = 0 + f.write( + b"%010d %05d f \n" + % (next_in_linked_list, self.deleted_entries[object_id]) + ) + return startxref + + +class PdfName: + name: bytes + + def __init__(self, name: PdfName | bytes | str) -> None: + if isinstance(name, PdfName): + self.name = name.name + elif isinstance(name, bytes): + self.name = name + else: + self.name = name.encode("us-ascii") + + def name_as_str(self) -> str: + return self.name.decode("us-ascii") + + def __eq__(self, other: object) -> bool: + return ( + isinstance(other, PdfName) and other.name == self.name + ) or other == self.name + + def __hash__(self) -> int: + return hash(self.name) + + def __repr__(self) -> str: + return f"{self.__class__.__name__}({repr(self.name)})" + + @classmethod + def from_pdf_stream(cls, data: bytes) -> PdfName: + return cls(PdfParser.interpret_name(data)) + + allowed_chars = set(range(33, 127)) - {ord(c) for c in "#%/()<>[]{}"} + + def __bytes__(self) -> bytes: + result = bytearray(b"/") + for b in self.name: + if b in self.allowed_chars: + result.append(b) + else: + result.extend(b"#%02X" % b) + return bytes(result) + + +class PdfArray(list[Any]): + def __bytes__(self) -> bytes: + return b"[ " + b" ".join(pdf_repr(x) for x in self) + b" ]" + + +class PdfDict(_DictBase): + def __setattr__(self, key: str, value: Any) -> None: + if key == "data": + collections.UserDict.__setattr__(self, key, value) + else: + self[key.encode("us-ascii")] = value + + def __getattr__(self, key: str) -> str | time.struct_time: + try: + value = self[key.encode("us-ascii")] + except KeyError as e: + raise AttributeError(key) from e + if isinstance(value, bytes): + value = decode_text(value) + if key.endswith("Date"): + if value.startswith("D:"): + value = value[2:] + + relationship = "Z" + if len(value) > 17: + relationship = value[14] + offset = int(value[15:17]) * 60 + if len(value) > 20: + offset += int(value[18:20]) + + format = "%Y%m%d%H%M%S"[: len(value) - 2] + value = time.strptime(value[: len(format) + 2], format) + if relationship in ["+", "-"]: + offset *= 60 + if relationship == "+": + offset *= -1 + value = time.gmtime(calendar.timegm(value) + offset) + return value + + def __bytes__(self) -> bytes: + out = bytearray(b"<<") + for key, value in self.items(): + if value is None: + continue + value = pdf_repr(value) + out.extend(b"\n") + out.extend(bytes(PdfName(key))) + out.extend(b" ") + out.extend(value) + out.extend(b"\n>>") + return bytes(out) + + +class PdfBinary: + def __init__(self, data: list[int] | bytes) -> None: + self.data = data + + def __bytes__(self) -> bytes: + return b"<%s>" % b"".join(b"%02X" % b for b in self.data) + + +class PdfStream: + def __init__(self, dictionary: PdfDict, buf: bytes) -> None: + self.dictionary = dictionary + self.buf = buf + + def decode(self) -> bytes: + try: + filter = self.dictionary[b"Filter"] + except KeyError: + return self.buf + if filter == b"FlateDecode": + try: + expected_length = self.dictionary[b"DL"] + except KeyError: + expected_length = self.dictionary[b"Length"] + return zlib.decompress(self.buf, bufsize=int(expected_length)) + else: + msg = f"stream filter {repr(filter)} unknown/unsupported" + raise NotImplementedError(msg) + + +def pdf_repr(x: Any) -> bytes: + if x is True: + return b"true" + elif x is False: + return b"false" + elif x is None: + return b"null" + elif isinstance(x, (PdfName, PdfDict, PdfArray, PdfBinary)): + return bytes(x) + elif isinstance(x, (int, float)): + return str(x).encode("us-ascii") + elif isinstance(x, time.struct_time): + return b"(D:" + time.strftime("%Y%m%d%H%M%SZ", x).encode("us-ascii") + b")" + elif isinstance(x, dict): + return bytes(PdfDict(x)) + elif isinstance(x, list): + return bytes(PdfArray(x)) + elif isinstance(x, str): + return pdf_repr(encode_text(x)) + elif isinstance(x, bytes): + # XXX escape more chars? handle binary garbage + x = x.replace(b"\\", b"\\\\") + x = x.replace(b"(", b"\\(") + x = x.replace(b")", b"\\)") + return b"(" + x + b")" + else: + return bytes(x) + + +class PdfParser: + """Based on + https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/PDF32000_2008.pdf + Supports PDF up to 1.4 + """ + + def __init__( + self, + filename: str | None = None, + f: IO[bytes] | None = None, + buf: bytes | bytearray | None = None, + start_offset: int = 0, + mode: str = "rb", + ) -> None: + if buf and f: + msg = "specify buf or f or filename, but not both buf and f" + raise RuntimeError(msg) + self.filename = filename + self.buf: bytes | bytearray | mmap.mmap | None = buf + self.f = f + self.start_offset = start_offset + self.should_close_buf = False + self.should_close_file = False + if filename is not None and f is None: + self.f = f = open(filename, mode) + self.should_close_file = True + if f is not None: + self.buf = self.get_buf_from_file(f) + self.should_close_buf = True + if not filename and hasattr(f, "name"): + self.filename = f.name + self.cached_objects: dict[IndirectReference, Any] = {} + self.root_ref: IndirectReference | None + self.info_ref: IndirectReference | None + self.pages_ref: IndirectReference | None + self.last_xref_section_offset: int | None + if self.buf: + self.read_pdf_info() + else: + self.file_size_total = self.file_size_this = 0 + self.root = PdfDict() + self.root_ref = None + self.info = PdfDict() + self.info_ref = None + self.page_tree_root = PdfDict() + self.pages: list[IndirectReference] = [] + self.orig_pages: list[IndirectReference] = [] + self.pages_ref = None + self.last_xref_section_offset = None + self.trailer_dict: dict[bytes, Any] = {} + self.xref_table = XrefTable() + self.xref_table.reading_finished = True + if f: + self.seek_end() + + def __enter__(self) -> PdfParser: + return self + + def __exit__(self, *args: object) -> None: + self.close() + + def start_writing(self) -> None: + self.close_buf() + self.seek_end() + + def close_buf(self) -> None: + if isinstance(self.buf, mmap.mmap): + self.buf.close() + self.buf = None + + def close(self) -> None: + if self.should_close_buf: + self.close_buf() + if self.f is not None and self.should_close_file: + self.f.close() + self.f = None + + def seek_end(self) -> None: + assert self.f is not None + self.f.seek(0, os.SEEK_END) + + def write_header(self) -> None: + assert self.f is not None + self.f.write(b"%PDF-1.4\n") + + def write_comment(self, s: str) -> None: + assert self.f is not None + self.f.write(f"% {s}\n".encode()) + + def write_catalog(self) -> IndirectReference: + assert self.f is not None + self.del_root() + self.root_ref = self.next_object_id(self.f.tell()) + self.pages_ref = self.next_object_id(0) + self.rewrite_pages() + self.write_obj(self.root_ref, Type=PdfName(b"Catalog"), Pages=self.pages_ref) + self.write_obj( + self.pages_ref, + Type=PdfName(b"Pages"), + Count=len(self.pages), + Kids=self.pages, + ) + return self.root_ref + + def rewrite_pages(self) -> None: + pages_tree_nodes_to_delete = [] + for i, page_ref in enumerate(self.orig_pages): + page_info = self.cached_objects[page_ref] + del self.xref_table[page_ref.object_id] + pages_tree_nodes_to_delete.append(page_info[PdfName(b"Parent")]) + if page_ref not in self.pages: + # the page has been deleted + continue + # make dict keys into strings for passing to write_page + stringified_page_info = {} + for key, value in page_info.items(): + # key should be a PdfName + stringified_page_info[key.name_as_str()] = value + stringified_page_info["Parent"] = self.pages_ref + new_page_ref = self.write_page(None, **stringified_page_info) + for j, cur_page_ref in enumerate(self.pages): + if cur_page_ref == page_ref: + # replace the page reference with the new one + self.pages[j] = new_page_ref + # delete redundant Pages tree nodes from xref table + for pages_tree_node_ref in pages_tree_nodes_to_delete: + while pages_tree_node_ref: + pages_tree_node = self.cached_objects[pages_tree_node_ref] + if pages_tree_node_ref.object_id in self.xref_table: + del self.xref_table[pages_tree_node_ref.object_id] + pages_tree_node_ref = pages_tree_node.get(b"Parent", None) + self.orig_pages = [] + + def write_xref_and_trailer( + self, new_root_ref: IndirectReference | None = None + ) -> None: + assert self.f is not None + if new_root_ref: + self.del_root() + self.root_ref = new_root_ref + if self.info: + self.info_ref = self.write_obj(None, self.info) + start_xref = self.xref_table.write(self.f) + num_entries = len(self.xref_table) + trailer_dict: dict[str | bytes, Any] = { + b"Root": self.root_ref, + b"Size": num_entries, + } + if self.last_xref_section_offset is not None: + trailer_dict[b"Prev"] = self.last_xref_section_offset + if self.info: + trailer_dict[b"Info"] = self.info_ref + self.last_xref_section_offset = start_xref + self.f.write( + b"trailer\n" + + bytes(PdfDict(trailer_dict)) + + b"\nstartxref\n%d\n%%%%EOF" % start_xref + ) + + def write_page( + self, ref: int | IndirectReference | None, *objs: Any, **dict_obj: Any + ) -> IndirectReference: + obj_ref = self.pages[ref] if isinstance(ref, int) else ref + if "Type" not in dict_obj: + dict_obj["Type"] = PdfName(b"Page") + if "Parent" not in dict_obj: + dict_obj["Parent"] = self.pages_ref + return self.write_obj(obj_ref, *objs, **dict_obj) + + def write_obj( + self, ref: IndirectReference | None, *objs: Any, **dict_obj: Any + ) -> IndirectReference: + assert self.f is not None + f = self.f + if ref is None: + ref = self.next_object_id(f.tell()) + else: + self.xref_table[ref.object_id] = (f.tell(), ref.generation) + f.write(bytes(IndirectObjectDef(*ref))) + stream = dict_obj.pop("stream", None) + if stream is not None: + dict_obj["Length"] = len(stream) + if dict_obj: + f.write(pdf_repr(dict_obj)) + for obj in objs: + f.write(pdf_repr(obj)) + if stream is not None: + f.write(b"stream\n") + f.write(stream) + f.write(b"\nendstream\n") + f.write(b"endobj\n") + return ref + + def del_root(self) -> None: + if self.root_ref is None: + return + del self.xref_table[self.root_ref.object_id] + del self.xref_table[self.root[b"Pages"].object_id] + + @staticmethod + def get_buf_from_file(f: IO[bytes]) -> bytes | mmap.mmap: + if hasattr(f, "getbuffer"): + return f.getbuffer() + elif hasattr(f, "getvalue"): + return f.getvalue() + else: + try: + return mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) + except ValueError: # cannot mmap an empty file + return b"" + + def read_pdf_info(self) -> None: + assert self.buf is not None + self.file_size_total = len(self.buf) + self.file_size_this = self.file_size_total - self.start_offset + self.read_trailer() + check_format_condition( + self.trailer_dict.get(b"Root") is not None, "Root is missing" + ) + self.root_ref = self.trailer_dict[b"Root"] + assert self.root_ref is not None + self.info_ref = self.trailer_dict.get(b"Info", None) + self.root = PdfDict(self.read_indirect(self.root_ref)) + if self.info_ref is None: + self.info = PdfDict() + else: + self.info = PdfDict(self.read_indirect(self.info_ref)) + check_format_condition(b"Type" in self.root, "/Type missing in Root") + check_format_condition( + self.root[b"Type"] == b"Catalog", "/Type in Root is not /Catalog" + ) + check_format_condition( + self.root.get(b"Pages") is not None, "/Pages missing in Root" + ) + check_format_condition( + isinstance(self.root[b"Pages"], IndirectReference), + "/Pages in Root is not an indirect reference", + ) + self.pages_ref = self.root[b"Pages"] + assert self.pages_ref is not None + self.page_tree_root = self.read_indirect(self.pages_ref) + self.pages = self.linearize_page_tree(self.page_tree_root) + # save the original list of page references + # in case the user modifies, adds or deletes some pages + # and we need to rewrite the pages and their list + self.orig_pages = self.pages[:] + + def next_object_id(self, offset: int | None = None) -> IndirectReference: + try: + # TODO: support reuse of deleted objects + reference = IndirectReference(max(self.xref_table.keys()) + 1, 0) + except ValueError: + reference = IndirectReference(1, 0) + if offset is not None: + self.xref_table[reference.object_id] = (offset, 0) + return reference + + delimiter = rb"[][()<>{}/%]" + delimiter_or_ws = rb"[][()<>{}/%\000\011\012\014\015\040]" + whitespace = rb"[\000\011\012\014\015\040]" + whitespace_or_hex = rb"[\000\011\012\014\015\0400-9a-fA-F]" + whitespace_optional = whitespace + b"*" + whitespace_mandatory = whitespace + b"+" + # No "\012" aka "\n" or "\015" aka "\r": + whitespace_optional_no_nl = rb"[\000\011\014\040]*" + newline_only = rb"[\r\n]+" + newline = whitespace_optional_no_nl + newline_only + whitespace_optional_no_nl + re_trailer_end = re.compile( + whitespace_mandatory + + rb"trailer" + + whitespace_optional + + rb"<<(.*>>)" + + newline + + rb"startxref" + + newline + + rb"([0-9]+)" + + newline + + rb"%%EOF" + + whitespace_optional + + rb"$", + re.DOTALL, + ) + re_trailer_prev = re.compile( + whitespace_optional + + rb"trailer" + + whitespace_optional + + rb"<<(.*?>>)" + + newline + + rb"startxref" + + newline + + rb"([0-9]+)" + + newline + + rb"%%EOF" + + whitespace_optional, + re.DOTALL, + ) + + def read_trailer(self) -> None: + assert self.buf is not None + search_start_offset = len(self.buf) - 16384 + if search_start_offset < self.start_offset: + search_start_offset = self.start_offset + m = self.re_trailer_end.search(self.buf, search_start_offset) + check_format_condition(m is not None, "trailer end not found") + # make sure we found the LAST trailer + last_match = m + while m: + last_match = m + m = self.re_trailer_end.search(self.buf, m.start() + 16) + if not m: + m = last_match + assert m is not None + trailer_data = m.group(1) + self.last_xref_section_offset = int(m.group(2)) + self.trailer_dict = self.interpret_trailer(trailer_data) + self.xref_table = XrefTable() + self.read_xref_table(xref_section_offset=self.last_xref_section_offset) + if b"Prev" in self.trailer_dict: + self.read_prev_trailer(self.trailer_dict[b"Prev"]) + + def read_prev_trailer( + self, xref_section_offset: int, processed_offsets: list[int] = [] + ) -> None: + assert self.buf is not None + trailer_offset = self.read_xref_table(xref_section_offset=xref_section_offset) + m = self.re_trailer_prev.search( + self.buf[trailer_offset : trailer_offset + 16384] + ) + check_format_condition(m is not None, "previous trailer not found") + assert m is not None + trailer_data = m.group(1) + check_format_condition( + int(m.group(2)) == xref_section_offset, + "xref section offset in previous trailer doesn't match what was expected", + ) + trailer_dict = self.interpret_trailer(trailer_data) + if b"Prev" in trailer_dict: + processed_offsets.append(xref_section_offset) + check_format_condition( + trailer_dict[b"Prev"] not in processed_offsets, "trailer loop found" + ) + self.read_prev_trailer(trailer_dict[b"Prev"], processed_offsets) + + re_whitespace_optional = re.compile(whitespace_optional) + re_name = re.compile( + whitespace_optional + + rb"/([!-$&'*-.0-;=?-Z\\^-z|~]+)(?=" + + delimiter_or_ws + + rb")" + ) + re_dict_start = re.compile(whitespace_optional + rb"<<") + re_dict_end = re.compile(whitespace_optional + rb">>" + whitespace_optional) + + @classmethod + def interpret_trailer(cls, trailer_data: bytes) -> dict[bytes, Any]: + trailer = {} + offset = 0 + while True: + m = cls.re_name.match(trailer_data, offset) + if not m: + m = cls.re_dict_end.match(trailer_data, offset) + check_format_condition( + m is not None and m.end() == len(trailer_data), + "name not found in trailer, remaining data: " + + repr(trailer_data[offset:]), + ) + break + key = cls.interpret_name(m.group(1)) + assert isinstance(key, bytes) + value, value_offset = cls.get_value(trailer_data, m.end()) + trailer[key] = value + if value_offset is None: + break + offset = value_offset + check_format_condition( + b"Size" in trailer and isinstance(trailer[b"Size"], int), + "/Size not in trailer or not an integer", + ) + check_format_condition( + b"Root" in trailer and isinstance(trailer[b"Root"], IndirectReference), + "/Root not in trailer or not an indirect reference", + ) + return trailer + + re_hashes_in_name = re.compile(rb"([^#]*)(#([0-9a-fA-F]{2}))?") + + @classmethod + def interpret_name(cls, raw: bytes, as_text: bool = False) -> str | bytes: + name = b"" + for m in cls.re_hashes_in_name.finditer(raw): + if m.group(3): + name += m.group(1) + bytearray.fromhex(m.group(3).decode("us-ascii")) + else: + name += m.group(1) + if as_text: + return name.decode("utf-8") + else: + return bytes(name) + + re_null = re.compile(whitespace_optional + rb"null(?=" + delimiter_or_ws + rb")") + re_true = re.compile(whitespace_optional + rb"true(?=" + delimiter_or_ws + rb")") + re_false = re.compile(whitespace_optional + rb"false(?=" + delimiter_or_ws + rb")") + re_int = re.compile( + whitespace_optional + rb"([-+]?[0-9]+)(?=" + delimiter_or_ws + rb")" + ) + re_real = re.compile( + whitespace_optional + + rb"([-+]?([0-9]+\.[0-9]*|[0-9]*\.[0-9]+))(?=" + + delimiter_or_ws + + rb")" + ) + re_array_start = re.compile(whitespace_optional + rb"\[") + re_array_end = re.compile(whitespace_optional + rb"]") + re_string_hex = re.compile( + whitespace_optional + rb"<(" + whitespace_or_hex + rb"*)>" + ) + re_string_lit = re.compile(whitespace_optional + rb"\(") + re_indirect_reference = re.compile( + whitespace_optional + + rb"([-+]?[0-9]+)" + + whitespace_mandatory + + rb"([-+]?[0-9]+)" + + whitespace_mandatory + + rb"R(?=" + + delimiter_or_ws + + rb")" + ) + re_indirect_def_start = re.compile( + whitespace_optional + + rb"([-+]?[0-9]+)" + + whitespace_mandatory + + rb"([-+]?[0-9]+)" + + whitespace_mandatory + + rb"obj(?=" + + delimiter_or_ws + + rb")" + ) + re_indirect_def_end = re.compile( + whitespace_optional + rb"endobj(?=" + delimiter_or_ws + rb")" + ) + re_comment = re.compile( + rb"(" + whitespace_optional + rb"%[^\r\n]*" + newline + rb")*" + ) + re_stream_start = re.compile(whitespace_optional + rb"stream\r?\n") + re_stream_end = re.compile( + whitespace_optional + rb"endstream(?=" + delimiter_or_ws + rb")" + ) + + @classmethod + def get_value( + cls, + data: bytes | bytearray | mmap.mmap, + offset: int, + expect_indirect: IndirectReference | None = None, + max_nesting: int = -1, + ) -> tuple[Any, int | None]: + if max_nesting == 0: + return None, None + m = cls.re_comment.match(data, offset) + if m: + offset = m.end() + m = cls.re_indirect_def_start.match(data, offset) + if m: + check_format_condition( + int(m.group(1)) > 0, + "indirect object definition: object ID must be greater than 0", + ) + check_format_condition( + int(m.group(2)) >= 0, + "indirect object definition: generation must be non-negative", + ) + check_format_condition( + expect_indirect is None + or expect_indirect + == IndirectReference(int(m.group(1)), int(m.group(2))), + "indirect object definition different than expected", + ) + object, object_offset = cls.get_value( + data, m.end(), max_nesting=max_nesting - 1 + ) + if object_offset is None: + return object, None + m = cls.re_indirect_def_end.match(data, object_offset) + check_format_condition( + m is not None, "indirect object definition end not found" + ) + assert m is not None + return object, m.end() + check_format_condition( + not expect_indirect, "indirect object definition not found" + ) + m = cls.re_indirect_reference.match(data, offset) + if m: + check_format_condition( + int(m.group(1)) > 0, + "indirect object reference: object ID must be greater than 0", + ) + check_format_condition( + int(m.group(2)) >= 0, + "indirect object reference: generation must be non-negative", + ) + return IndirectReference(int(m.group(1)), int(m.group(2))), m.end() + m = cls.re_dict_start.match(data, offset) + if m: + offset = m.end() + result: dict[Any, Any] = {} + m = cls.re_dict_end.match(data, offset) + current_offset: int | None = offset + while not m: + assert current_offset is not None + key, current_offset = cls.get_value( + data, current_offset, max_nesting=max_nesting - 1 + ) + if current_offset is None: + return result, None + value, current_offset = cls.get_value( + data, current_offset, max_nesting=max_nesting - 1 + ) + result[key] = value + if current_offset is None: + return result, None + m = cls.re_dict_end.match(data, current_offset) + current_offset = m.end() + m = cls.re_stream_start.match(data, current_offset) + if m: + stream_len = result.get(b"Length") + if stream_len is None or not isinstance(stream_len, int): + msg = f"bad or missing Length in stream dict ({stream_len})" + raise PdfFormatError(msg) + stream_data = data[m.end() : m.end() + stream_len] + m = cls.re_stream_end.match(data, m.end() + stream_len) + check_format_condition(m is not None, "stream end not found") + assert m is not None + current_offset = m.end() + return PdfStream(PdfDict(result), stream_data), current_offset + return PdfDict(result), current_offset + m = cls.re_array_start.match(data, offset) + if m: + offset = m.end() + results = [] + m = cls.re_array_end.match(data, offset) + current_offset = offset + while not m: + assert current_offset is not None + value, current_offset = cls.get_value( + data, current_offset, max_nesting=max_nesting - 1 + ) + results.append(value) + if current_offset is None: + return results, None + m = cls.re_array_end.match(data, current_offset) + return results, m.end() + m = cls.re_null.match(data, offset) + if m: + return None, m.end() + m = cls.re_true.match(data, offset) + if m: + return True, m.end() + m = cls.re_false.match(data, offset) + if m: + return False, m.end() + m = cls.re_name.match(data, offset) + if m: + return PdfName(cls.interpret_name(m.group(1))), m.end() + m = cls.re_int.match(data, offset) + if m: + return int(m.group(1)), m.end() + m = cls.re_real.match(data, offset) + if m: + # XXX Decimal instead of float??? + return float(m.group(1)), m.end() + m = cls.re_string_hex.match(data, offset) + if m: + # filter out whitespace + hex_string = bytearray( + b for b in m.group(1) if b in b"0123456789abcdefABCDEF" + ) + if len(hex_string) % 2 == 1: + # append a 0 if the length is not even - yes, at the end + hex_string.append(ord(b"0")) + return bytearray.fromhex(hex_string.decode("us-ascii")), m.end() + m = cls.re_string_lit.match(data, offset) + if m: + return cls.get_literal_string(data, m.end()) + # return None, offset # fallback (only for debugging) + msg = f"unrecognized object: {repr(data[offset : offset + 32])}" + raise PdfFormatError(msg) + + re_lit_str_token = re.compile( + rb"(\\[nrtbf()\\])|(\\[0-9]{1,3})|(\\(\r\n|\r|\n))|(\r\n|\r|\n)|(\()|(\))" + ) + escaped_chars = { + b"n": b"\n", + b"r": b"\r", + b"t": b"\t", + b"b": b"\b", + b"f": b"\f", + b"(": b"(", + b")": b")", + b"\\": b"\\", + ord(b"n"): b"\n", + ord(b"r"): b"\r", + ord(b"t"): b"\t", + ord(b"b"): b"\b", + ord(b"f"): b"\f", + ord(b"("): b"(", + ord(b")"): b")", + ord(b"\\"): b"\\", + } + + @classmethod + def get_literal_string( + cls, data: bytes | bytearray | mmap.mmap, offset: int + ) -> tuple[bytes, int]: + nesting_depth = 0 + result = bytearray() + for m in cls.re_lit_str_token.finditer(data, offset): + result.extend(data[offset : m.start()]) + if m.group(1): + result.extend(cls.escaped_chars[m.group(1)[1]]) + elif m.group(2): + result.append(int(m.group(2)[1:], 8)) + elif m.group(3): + pass + elif m.group(5): + result.extend(b"\n") + elif m.group(6): + result.extend(b"(") + nesting_depth += 1 + elif m.group(7): + if nesting_depth == 0: + return bytes(result), m.end() + result.extend(b")") + nesting_depth -= 1 + offset = m.end() + msg = "unfinished literal string" + raise PdfFormatError(msg) + + re_xref_section_start = re.compile(whitespace_optional + rb"xref" + newline) + re_xref_subsection_start = re.compile( + whitespace_optional + + rb"([0-9]+)" + + whitespace_mandatory + + rb"([0-9]+)" + + whitespace_optional + + newline_only + ) + re_xref_entry = re.compile(rb"([0-9]{10}) ([0-9]{5}) ([fn])( \r| \n|\r\n)") + + def read_xref_table(self, xref_section_offset: int) -> int: + assert self.buf is not None + subsection_found = False + m = self.re_xref_section_start.match( + self.buf, xref_section_offset + self.start_offset + ) + check_format_condition(m is not None, "xref section start not found") + assert m is not None + offset = m.end() + while True: + m = self.re_xref_subsection_start.match(self.buf, offset) + if not m: + check_format_condition( + subsection_found, "xref subsection start not found" + ) + break + subsection_found = True + offset = m.end() + first_object = int(m.group(1)) + num_objects = int(m.group(2)) + for i in range(first_object, first_object + num_objects): + m = self.re_xref_entry.match(self.buf, offset) + check_format_condition(m is not None, "xref entry not found") + assert m is not None + offset = m.end() + is_free = m.group(3) == b"f" + if not is_free: + generation = int(m.group(2)) + new_entry = (int(m.group(1)), generation) + if i not in self.xref_table: + self.xref_table[i] = new_entry + return offset + + def read_indirect(self, ref: IndirectReference, max_nesting: int = -1) -> Any: + offset, generation = self.xref_table[ref[0]] + check_format_condition( + generation == ref[1], + f"expected to find generation {ref[1]} for object ID {ref[0]} in xref " + f"table, instead found generation {generation} at offset {offset}", + ) + assert self.buf is not None + value = self.get_value( + self.buf, + offset + self.start_offset, + expect_indirect=IndirectReference(*ref), + max_nesting=max_nesting, + )[0] + self.cached_objects[ref] = value + return value + + def linearize_page_tree( + self, node: PdfDict | None = None + ) -> list[IndirectReference]: + page_node = node if node is not None else self.page_tree_root + check_format_condition( + page_node[b"Type"] == b"Pages", "/Type of page tree node is not /Pages" + ) + pages = [] + for kid in page_node[b"Kids"]: + kid_object = self.read_indirect(kid) + if kid_object[b"Type"] == b"Page": + pages.append(kid) + else: + pages.extend(self.linearize_page_tree(node=kid_object)) + return pages diff --git a/Python/venv/lib/python3.12/site-packages/PIL/PixarImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/PixarImagePlugin.py new file mode 100644 index 0000000..d2b6d0a --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/PixarImagePlugin.py @@ -0,0 +1,72 @@ +# +# The Python Imaging Library. +# $Id$ +# +# PIXAR raster support for PIL +# +# history: +# 97-01-29 fl Created +# +# notes: +# This is incomplete; it is based on a few samples created with +# Photoshop 2.5 and 3.0, and a summary description provided by +# Greg Coats . Hopefully, "L" and +# "RGBA" support will be added in future versions. +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1997. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +from . import Image, ImageFile +from ._binary import i16le as i16 + +# +# helpers + + +def _accept(prefix: bytes) -> bool: + return prefix.startswith(b"\200\350\000\000") + + +## +# Image plugin for PIXAR raster images. + + +class PixarImageFile(ImageFile.ImageFile): + format = "PIXAR" + format_description = "PIXAR raster image" + + def _open(self) -> None: + # assuming a 4-byte magic label + assert self.fp is not None + + s = self.fp.read(4) + if not _accept(s): + msg = "not a PIXAR file" + raise SyntaxError(msg) + + # read rest of header + s = s + self.fp.read(508) + + self._size = i16(s, 418), i16(s, 416) + + # get channel/depth descriptions + mode = i16(s, 424), i16(s, 426) + + if mode == (14, 2): + self._mode = "RGB" + # FIXME: to be continued... + + # create tile descriptor (assuming "dumped") + self.tile = [ImageFile._Tile("raw", (0, 0) + self.size, 1024, self.mode)] + + +# +# -------------------------------------------------------------------- + +Image.register_open(PixarImageFile.format, PixarImageFile, _accept) + +Image.register_extension(PixarImageFile.format, ".pxr") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/PngImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/PngImagePlugin.py new file mode 100644 index 0000000..76a15bd --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/PngImagePlugin.py @@ -0,0 +1,1563 @@ +# +# The Python Imaging Library. +# $Id$ +# +# PNG support code +# +# See "PNG (Portable Network Graphics) Specification, version 1.0; +# W3C Recommendation", 1996-10-01, Thomas Boutell (ed.). +# +# history: +# 1996-05-06 fl Created (couldn't resist it) +# 1996-12-14 fl Upgraded, added read and verify support (0.2) +# 1996-12-15 fl Separate PNG stream parser +# 1996-12-29 fl Added write support, added getchunks +# 1996-12-30 fl Eliminated circular references in decoder (0.3) +# 1998-07-12 fl Read/write 16-bit images as mode I (0.4) +# 2001-02-08 fl Added transparency support (from Zircon) (0.5) +# 2001-04-16 fl Don't close data source in "open" method (0.6) +# 2004-02-24 fl Don't even pretend to support interlaced files (0.7) +# 2004-08-31 fl Do basic sanity check on chunk identifiers (0.8) +# 2004-09-20 fl Added PngInfo chunk container +# 2004-12-18 fl Added DPI read support (based on code by Niki Spahiev) +# 2008-08-13 fl Added tRNS support for RGB images +# 2009-03-06 fl Support for preserving ICC profiles (by Florian Hoech) +# 2009-03-08 fl Added zTXT support (from Lowell Alleman) +# 2009-03-29 fl Read interlaced PNG files (from Conrado Porto Lopes Gouvua) +# +# Copyright (c) 1997-2009 by Secret Labs AB +# Copyright (c) 1996 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import itertools +import logging +import re +import struct +import warnings +import zlib +from enum import IntEnum +from fractions import Fraction +from typing import IO, NamedTuple, cast + +from . import Image, ImageChops, ImageFile, ImagePalette, ImageSequence +from ._binary import i16be as i16 +from ._binary import i32be as i32 +from ._binary import o8 +from ._binary import o16be as o16 +from ._binary import o32be as o32 +from ._deprecate import deprecate +from ._util import DeferredError + +TYPE_CHECKING = False +if TYPE_CHECKING: + from collections.abc import Callable + from typing import Any, NoReturn + + from . import _imaging + +logger = logging.getLogger(__name__) + +is_cid = re.compile(rb"\w\w\w\w").match + + +_MAGIC = b"\211PNG\r\n\032\n" + + +_MODES = { + # supported bits/color combinations, and corresponding modes/rawmodes + # Grayscale + (1, 0): ("1", "1"), + (2, 0): ("L", "L;2"), + (4, 0): ("L", "L;4"), + (8, 0): ("L", "L"), + (16, 0): ("I;16", "I;16B"), + # Truecolour + (8, 2): ("RGB", "RGB"), + (16, 2): ("RGB", "RGB;16B"), + # Indexed-colour + (1, 3): ("P", "P;1"), + (2, 3): ("P", "P;2"), + (4, 3): ("P", "P;4"), + (8, 3): ("P", "P"), + # Grayscale with alpha + (8, 4): ("LA", "LA"), + (16, 4): ("RGBA", "LA;16B"), # LA;16B->LA not yet available + # Truecolour with alpha + (8, 6): ("RGBA", "RGBA"), + (16, 6): ("RGBA", "RGBA;16B"), +} + + +_simple_palette = re.compile(b"^\xff*\x00\xff*$") + +MAX_TEXT_CHUNK = ImageFile.SAFEBLOCK +""" +Maximum decompressed size for a iTXt or zTXt chunk. +Eliminates decompression bombs where compressed chunks can expand 1000x. +See :ref:`Text in PNG File Format`. +""" +MAX_TEXT_MEMORY = 64 * MAX_TEXT_CHUNK +""" +Set the maximum total text chunk size. +See :ref:`Text in PNG File Format`. +""" + + +# APNG frame disposal modes +class Disposal(IntEnum): + OP_NONE = 0 + """ + No disposal is done on this frame before rendering the next frame. + See :ref:`Saving APNG sequences`. + """ + OP_BACKGROUND = 1 + """ + This frame’s modified region is cleared to fully transparent black before rendering + the next frame. + See :ref:`Saving APNG sequences`. + """ + OP_PREVIOUS = 2 + """ + This frame’s modified region is reverted to the previous frame’s contents before + rendering the next frame. + See :ref:`Saving APNG sequences`. + """ + + +# APNG frame blend modes +class Blend(IntEnum): + OP_SOURCE = 0 + """ + All color components of this frame, including alpha, overwrite the previous output + image contents. + See :ref:`Saving APNG sequences`. + """ + OP_OVER = 1 + """ + This frame should be alpha composited with the previous output image contents. + See :ref:`Saving APNG sequences`. + """ + + +def _safe_zlib_decompress(s: bytes) -> bytes: + dobj = zlib.decompressobj() + plaintext = dobj.decompress(s, MAX_TEXT_CHUNK) + if dobj.unconsumed_tail: + msg = "Decompressed data too large for PngImagePlugin.MAX_TEXT_CHUNK" + raise ValueError(msg) + return plaintext + + +def _crc32(data: bytes, seed: int = 0) -> int: + return zlib.crc32(data, seed) & 0xFFFFFFFF + + +# -------------------------------------------------------------------- +# Support classes. Suitable for PNG and related formats like MNG etc. + + +class ChunkStream: + def __init__(self, fp: IO[bytes]) -> None: + self.fp: IO[bytes] | None = fp + self.queue: list[tuple[bytes, int, int]] | None = [] + + def read(self) -> tuple[bytes, int, int]: + """Fetch a new chunk. Returns header information.""" + cid = None + + assert self.fp is not None + if self.queue: + cid, pos, length = self.queue.pop() + self.fp.seek(pos) + else: + s = self.fp.read(8) + cid = s[4:] + pos = self.fp.tell() + length = i32(s) + + if not is_cid(cid): + if not ImageFile.LOAD_TRUNCATED_IMAGES: + msg = f"broken PNG file (chunk {repr(cid)})" + raise SyntaxError(msg) + + return cid, pos, length + + def __enter__(self) -> ChunkStream: + return self + + def __exit__(self, *args: object) -> None: + self.close() + + def close(self) -> None: + self.queue = self.fp = None + + def push(self, cid: bytes, pos: int, length: int) -> None: + assert self.queue is not None + self.queue.append((cid, pos, length)) + + def call(self, cid: bytes, pos: int, length: int) -> bytes: + """Call the appropriate chunk handler""" + + logger.debug("STREAM %r %s %s", cid, pos, length) + return getattr(self, f"chunk_{cid.decode('ascii')}")(pos, length) + + def crc(self, cid: bytes, data: bytes) -> None: + """Read and verify checksum""" + + # Skip CRC checks for ancillary chunks if allowed to load truncated + # images + # 5th byte of first char is 1 [specs, section 5.4] + if ImageFile.LOAD_TRUNCATED_IMAGES and (cid[0] >> 5 & 1): + self.crc_skip(cid, data) + return + + assert self.fp is not None + try: + crc1 = _crc32(data, _crc32(cid)) + crc2 = i32(self.fp.read(4)) + if crc1 != crc2: + msg = f"broken PNG file (bad header checksum in {repr(cid)})" + raise SyntaxError(msg) + except struct.error as e: + msg = f"broken PNG file (incomplete checksum in {repr(cid)})" + raise SyntaxError(msg) from e + + def crc_skip(self, cid: bytes, data: bytes) -> None: + """Read checksum""" + + assert self.fp is not None + self.fp.read(4) + + def verify(self, endchunk: bytes = b"IEND") -> list[bytes]: + # Simple approach; just calculate checksum for all remaining + # blocks. Must be called directly after open. + + cids = [] + + assert self.fp is not None + while True: + try: + cid, pos, length = self.read() + except struct.error as e: + msg = "truncated PNG file" + raise OSError(msg) from e + + if cid == endchunk: + break + self.crc(cid, ImageFile._safe_read(self.fp, length)) + cids.append(cid) + + return cids + + +class iTXt(str): + """ + Subclass of string to allow iTXt chunks to look like strings while + keeping their extra information + + """ + + lang: str | bytes | None + tkey: str | bytes | None + + @staticmethod + def __new__( + cls, text: str, lang: str | None = None, tkey: str | None = None + ) -> iTXt: + """ + :param cls: the class to use when creating the instance + :param text: value for this key + :param lang: language code + :param tkey: UTF-8 version of the key name + """ + + self = str.__new__(cls, text) + self.lang = lang + self.tkey = tkey + return self + + +class PngInfo: + """ + PNG chunk container (for use with save(pnginfo=)) + + """ + + def __init__(self) -> None: + self.chunks: list[tuple[bytes, bytes, bool]] = [] + + def add(self, cid: bytes, data: bytes, after_idat: bool = False) -> None: + """Appends an arbitrary chunk. Use with caution. + + :param cid: a byte string, 4 bytes long. + :param data: a byte string of the encoded data + :param after_idat: for use with private chunks. Whether the chunk + should be written after IDAT + + """ + + self.chunks.append((cid, data, after_idat)) + + def add_itxt( + self, + key: str | bytes, + value: str | bytes, + lang: str | bytes = "", + tkey: str | bytes = "", + zip: bool = False, + ) -> None: + """Appends an iTXt chunk. + + :param key: latin-1 encodable text key name + :param value: value for this key + :param lang: language code + :param tkey: UTF-8 version of the key name + :param zip: compression flag + + """ + + if not isinstance(key, bytes): + key = key.encode("latin-1", "strict") + if not isinstance(value, bytes): + value = value.encode("utf-8", "strict") + if not isinstance(lang, bytes): + lang = lang.encode("utf-8", "strict") + if not isinstance(tkey, bytes): + tkey = tkey.encode("utf-8", "strict") + + if zip: + self.add( + b"iTXt", + key + b"\0\x01\0" + lang + b"\0" + tkey + b"\0" + zlib.compress(value), + ) + else: + self.add(b"iTXt", key + b"\0\0\0" + lang + b"\0" + tkey + b"\0" + value) + + def add_text( + self, key: str | bytes, value: str | bytes | iTXt, zip: bool = False + ) -> None: + """Appends a text chunk. + + :param key: latin-1 encodable text key name + :param value: value for this key, text or an + :py:class:`PIL.PngImagePlugin.iTXt` instance + :param zip: compression flag + + """ + if isinstance(value, iTXt): + return self.add_itxt( + key, + value, + value.lang if value.lang is not None else b"", + value.tkey if value.tkey is not None else b"", + zip=zip, + ) + + # The tEXt chunk stores latin-1 text + if not isinstance(value, bytes): + try: + value = value.encode("latin-1", "strict") + except UnicodeError: + return self.add_itxt(key, value, zip=zip) + + if not isinstance(key, bytes): + key = key.encode("latin-1", "strict") + + if zip: + self.add(b"zTXt", key + b"\0\0" + zlib.compress(value)) + else: + self.add(b"tEXt", key + b"\0" + value) + + +# -------------------------------------------------------------------- +# PNG image stream (IHDR/IEND) + + +class _RewindState(NamedTuple): + info: dict[str | tuple[int, int], Any] + tile: list[ImageFile._Tile] + seq_num: int | None + + +class PngStream(ChunkStream): + def __init__(self, fp: IO[bytes]) -> None: + super().__init__(fp) + + # local copies of Image attributes + self.im_info: dict[str | tuple[int, int], Any] = {} + self.im_text: dict[str, str | iTXt] = {} + self.im_size = (0, 0) + self.im_mode = "" + self.im_tile: list[ImageFile._Tile] = [] + self.im_palette: tuple[str, bytes] | None = None + self.im_custom_mimetype: str | None = None + self.im_n_frames: int | None = None + self._seq_num: int | None = None + self.rewind_state = _RewindState({}, [], None) + + self.text_memory = 0 + + def check_text_memory(self, chunklen: int) -> None: + self.text_memory += chunklen + if self.text_memory > MAX_TEXT_MEMORY: + msg = ( + "Too much memory used in text chunks: " + f"{self.text_memory}>MAX_TEXT_MEMORY" + ) + raise ValueError(msg) + + def save_rewind(self) -> None: + self.rewind_state = _RewindState( + self.im_info.copy(), + self.im_tile, + self._seq_num, + ) + + def rewind(self) -> None: + self.im_info = self.rewind_state.info.copy() + self.im_tile = self.rewind_state.tile + self._seq_num = self.rewind_state.seq_num + + def chunk_iCCP(self, pos: int, length: int) -> bytes: + # ICC profile + assert self.fp is not None + s = ImageFile._safe_read(self.fp, length) + # according to PNG spec, the iCCP chunk contains: + # Profile name 1-79 bytes (character string) + # Null separator 1 byte (null character) + # Compression method 1 byte (0) + # Compressed profile n bytes (zlib with deflate compression) + i = s.find(b"\0") + logger.debug("iCCP profile name %r", s[:i]) + comp_method = s[i + 1] + logger.debug("Compression method %s", comp_method) + if comp_method != 0: + msg = f"Unknown compression method {comp_method} in iCCP chunk" + raise SyntaxError(msg) + try: + icc_profile = _safe_zlib_decompress(s[i + 2 :]) + except ValueError: + if ImageFile.LOAD_TRUNCATED_IMAGES: + icc_profile = None + else: + raise + except zlib.error: + icc_profile = None # FIXME + self.im_info["icc_profile"] = icc_profile + return s + + def chunk_IHDR(self, pos: int, length: int) -> bytes: + # image header + assert self.fp is not None + s = ImageFile._safe_read(self.fp, length) + if length < 13: + if ImageFile.LOAD_TRUNCATED_IMAGES: + return s + msg = "Truncated IHDR chunk" + raise ValueError(msg) + self.im_size = i32(s, 0), i32(s, 4) + try: + self.im_mode, self.im_rawmode = _MODES[(s[8], s[9])] + except Exception: + pass + if s[12]: + self.im_info["interlace"] = 1 + if s[11]: + msg = "unknown filter category" + raise SyntaxError(msg) + return s + + def chunk_IDAT(self, pos: int, length: int) -> NoReturn: + # image data + if "bbox" in self.im_info: + tile = [ImageFile._Tile("zip", self.im_info["bbox"], pos, self.im_rawmode)] + else: + if self.im_n_frames is not None: + self.im_info["default_image"] = True + tile = [ImageFile._Tile("zip", (0, 0) + self.im_size, pos, self.im_rawmode)] + self.im_tile = tile + self.im_idat = length + msg = "image data found" + raise EOFError(msg) + + def chunk_IEND(self, pos: int, length: int) -> NoReturn: + msg = "end of PNG image" + raise EOFError(msg) + + def chunk_PLTE(self, pos: int, length: int) -> bytes: + # palette + assert self.fp is not None + s = ImageFile._safe_read(self.fp, length) + if self.im_mode == "P": + self.im_palette = "RGB", s + return s + + def chunk_tRNS(self, pos: int, length: int) -> bytes: + # transparency + assert self.fp is not None + s = ImageFile._safe_read(self.fp, length) + if self.im_mode == "P": + if _simple_palette.match(s): + # tRNS contains only one full-transparent entry, + # other entries are full opaque + i = s.find(b"\0") + if i >= 0: + self.im_info["transparency"] = i + else: + # otherwise, we have a byte string with one alpha value + # for each palette entry + self.im_info["transparency"] = s + elif self.im_mode == "1": + self.im_info["transparency"] = 255 if i16(s) else 0 + elif self.im_mode in ("L", "I;16"): + self.im_info["transparency"] = i16(s) + elif self.im_mode == "RGB": + self.im_info["transparency"] = i16(s), i16(s, 2), i16(s, 4) + return s + + def chunk_gAMA(self, pos: int, length: int) -> bytes: + # gamma setting + assert self.fp is not None + s = ImageFile._safe_read(self.fp, length) + self.im_info["gamma"] = i32(s) / 100000.0 + return s + + def chunk_cHRM(self, pos: int, length: int) -> bytes: + # chromaticity, 8 unsigned ints, actual value is scaled by 100,000 + # WP x,y, Red x,y, Green x,y Blue x,y + + assert self.fp is not None + s = ImageFile._safe_read(self.fp, length) + raw_vals = struct.unpack(f">{len(s) // 4}I", s) + self.im_info["chromaticity"] = tuple(elt / 100000.0 for elt in raw_vals) + return s + + def chunk_sRGB(self, pos: int, length: int) -> bytes: + # srgb rendering intent, 1 byte + # 0 perceptual + # 1 relative colorimetric + # 2 saturation + # 3 absolute colorimetric + + assert self.fp is not None + s = ImageFile._safe_read(self.fp, length) + if length < 1: + if ImageFile.LOAD_TRUNCATED_IMAGES: + return s + msg = "Truncated sRGB chunk" + raise ValueError(msg) + self.im_info["srgb"] = s[0] + return s + + def chunk_pHYs(self, pos: int, length: int) -> bytes: + # pixels per unit + assert self.fp is not None + s = ImageFile._safe_read(self.fp, length) + if length < 9: + if ImageFile.LOAD_TRUNCATED_IMAGES: + return s + msg = "Truncated pHYs chunk" + raise ValueError(msg) + px, py = i32(s, 0), i32(s, 4) + unit = s[8] + if unit == 1: # meter + dpi = px * 0.0254, py * 0.0254 + self.im_info["dpi"] = dpi + elif unit == 0: + self.im_info["aspect"] = px, py + return s + + def chunk_tEXt(self, pos: int, length: int) -> bytes: + # text + assert self.fp is not None + s = ImageFile._safe_read(self.fp, length) + try: + k, v = s.split(b"\0", 1) + except ValueError: + # fallback for broken tEXt tags + k = s + v = b"" + if k: + k_str = k.decode("latin-1", "strict") + v_str = v.decode("latin-1", "replace") + + self.im_info[k_str] = v if k == b"exif" else v_str + self.im_text[k_str] = v_str + self.check_text_memory(len(v_str)) + + return s + + def chunk_zTXt(self, pos: int, length: int) -> bytes: + # compressed text + assert self.fp is not None + s = ImageFile._safe_read(self.fp, length) + try: + k, v = s.split(b"\0", 1) + except ValueError: + k = s + v = b"" + if v: + comp_method = v[0] + else: + comp_method = 0 + if comp_method != 0: + msg = f"Unknown compression method {comp_method} in zTXt chunk" + raise SyntaxError(msg) + try: + v = _safe_zlib_decompress(v[1:]) + except ValueError: + if ImageFile.LOAD_TRUNCATED_IMAGES: + v = b"" + else: + raise + except zlib.error: + v = b"" + + if k: + k_str = k.decode("latin-1", "strict") + v_str = v.decode("latin-1", "replace") + + self.im_info[k_str] = self.im_text[k_str] = v_str + self.check_text_memory(len(v_str)) + + return s + + def chunk_iTXt(self, pos: int, length: int) -> bytes: + # international text + assert self.fp is not None + r = s = ImageFile._safe_read(self.fp, length) + try: + k, r = r.split(b"\0", 1) + except ValueError: + return s + if len(r) < 2: + return s + cf, cm, r = r[0], r[1], r[2:] + try: + lang, tk, v = r.split(b"\0", 2) + except ValueError: + return s + if cf != 0: + if cm == 0: + try: + v = _safe_zlib_decompress(v) + except ValueError: + if ImageFile.LOAD_TRUNCATED_IMAGES: + return s + else: + raise + except zlib.error: + return s + else: + return s + if k == b"XML:com.adobe.xmp": + self.im_info["xmp"] = v + try: + k_str = k.decode("latin-1", "strict") + lang_str = lang.decode("utf-8", "strict") + tk_str = tk.decode("utf-8", "strict") + v_str = v.decode("utf-8", "strict") + except UnicodeError: + return s + + self.im_info[k_str] = self.im_text[k_str] = iTXt(v_str, lang_str, tk_str) + self.check_text_memory(len(v_str)) + + return s + + def chunk_eXIf(self, pos: int, length: int) -> bytes: + assert self.fp is not None + s = ImageFile._safe_read(self.fp, length) + self.im_info["exif"] = b"Exif\x00\x00" + s + return s + + # APNG chunks + def chunk_acTL(self, pos: int, length: int) -> bytes: + assert self.fp is not None + s = ImageFile._safe_read(self.fp, length) + if length < 8: + if ImageFile.LOAD_TRUNCATED_IMAGES: + return s + msg = "APNG contains truncated acTL chunk" + raise ValueError(msg) + if self.im_n_frames is not None: + self.im_n_frames = None + warnings.warn("Invalid APNG, will use default PNG image if possible") + return s + n_frames = i32(s) + if n_frames == 0 or n_frames > 0x80000000: + warnings.warn("Invalid APNG, will use default PNG image if possible") + return s + self.im_n_frames = n_frames + self.im_info["loop"] = i32(s, 4) + self.im_custom_mimetype = "image/apng" + return s + + def chunk_fcTL(self, pos: int, length: int) -> bytes: + assert self.fp is not None + s = ImageFile._safe_read(self.fp, length) + if length < 26: + if ImageFile.LOAD_TRUNCATED_IMAGES: + return s + msg = "APNG contains truncated fcTL chunk" + raise ValueError(msg) + seq = i32(s) + if (self._seq_num is None and seq != 0) or ( + self._seq_num is not None and self._seq_num != seq - 1 + ): + msg = "APNG contains frame sequence errors" + raise SyntaxError(msg) + self._seq_num = seq + width, height = i32(s, 4), i32(s, 8) + px, py = i32(s, 12), i32(s, 16) + im_w, im_h = self.im_size + if px + width > im_w or py + height > im_h: + msg = "APNG contains invalid frames" + raise SyntaxError(msg) + self.im_info["bbox"] = (px, py, px + width, py + height) + delay_num, delay_den = i16(s, 20), i16(s, 22) + if delay_den == 0: + delay_den = 100 + self.im_info["duration"] = float(delay_num) / float(delay_den) * 1000 + self.im_info["disposal"] = s[24] + self.im_info["blend"] = s[25] + return s + + def chunk_fdAT(self, pos: int, length: int) -> bytes: + assert self.fp is not None + if length < 4: + if ImageFile.LOAD_TRUNCATED_IMAGES: + s = ImageFile._safe_read(self.fp, length) + return s + msg = "APNG contains truncated fDAT chunk" + raise ValueError(msg) + s = ImageFile._safe_read(self.fp, 4) + seq = i32(s) + if self._seq_num != seq - 1: + msg = "APNG contains frame sequence errors" + raise SyntaxError(msg) + self._seq_num = seq + return self.chunk_IDAT(pos + 4, length - 4) + + +# -------------------------------------------------------------------- +# PNG reader + + +def _accept(prefix: bytes) -> bool: + return prefix.startswith(_MAGIC) + + +## +# Image plugin for PNG images. + + +class PngImageFile(ImageFile.ImageFile): + format = "PNG" + format_description = "Portable network graphics" + + def _open(self) -> None: + assert self.fp is not None + if not _accept(self.fp.read(8)): + msg = "not a PNG file" + raise SyntaxError(msg) + self._fp = self.fp + self.__frame = 0 + + # + # Parse headers up to the first IDAT or fDAT chunk + + self.private_chunks: list[tuple[bytes, bytes] | tuple[bytes, bytes, bool]] = [] + self.png: PngStream | None = PngStream(self.fp) + + while True: + # + # get next chunk + + cid, pos, length = self.png.read() + + try: + s = self.png.call(cid, pos, length) + except EOFError: + break + except AttributeError: + logger.debug("%r %s %s (unknown)", cid, pos, length) + s = ImageFile._safe_read(self.fp, length) + if cid[1:2].islower(): + self.private_chunks.append((cid, s)) + + self.png.crc(cid, s) + + # + # Copy relevant attributes from the PngStream. An alternative + # would be to let the PngStream class modify these attributes + # directly, but that introduces circular references which are + # difficult to break if things go wrong in the decoder... + # (believe me, I've tried ;-) + + self._mode = self.png.im_mode + self._size = self.png.im_size + self.info = self.png.im_info + self._text: dict[str, str | iTXt] | None = None + self.tile = self.png.im_tile + self.custom_mimetype = self.png.im_custom_mimetype + self.n_frames = self.png.im_n_frames or 1 + self.default_image = self.info.get("default_image", False) + + if self.png.im_palette: + rawmode, data = self.png.im_palette + self.palette = ImagePalette.raw(rawmode, data) + + if cid == b"fdAT": + self.__prepare_idat = length - 4 + else: + self.__prepare_idat = length # used by load_prepare() + + if self.png.im_n_frames is not None: + self._close_exclusive_fp_after_loading = False + self.png.save_rewind() + self.__rewind_idat = self.__prepare_idat + self.__rewind = self._fp.tell() + if self.default_image: + # IDAT chunk contains default image and not first animation frame + self.n_frames += 1 + self._seek(0) + self.is_animated = self.n_frames > 1 + + @property + def text(self) -> dict[str, str | iTXt]: + # experimental + if self._text is None: + # iTxt, tEXt and zTXt chunks may appear at the end of the file + # So load the file to ensure that they are read + if self.is_animated: + frame = self.__frame + # for APNG, seek to the final frame before loading + self.seek(self.n_frames - 1) + self.load() + if self.is_animated: + self.seek(frame) + assert self._text is not None + return self._text + + def verify(self) -> None: + """Verify PNG file""" + + if self.fp is None: + msg = "verify must be called directly after open" + raise RuntimeError(msg) + + # back up to beginning of IDAT block + self.fp.seek(self.tile[0][2] - 8) + + assert self.png is not None + self.png.verify() + self.png.close() + + super().verify() + + def seek(self, frame: int) -> None: + if not self._seek_check(frame): + return + if frame < self.__frame: + self._seek(0, True) + + last_frame = self.__frame + try: + for f in range(self.__frame + 1, frame + 1): + self._seek(f) + except EOFError as e: + self.seek(last_frame) + msg = "no more images in APNG file" + raise EOFError(msg) from e + + def _seek(self, frame: int, rewind: bool = False) -> None: + assert self.png is not None + if isinstance(self._fp, DeferredError): + raise self._fp.ex + + self.dispose: _imaging.ImagingCore | None + dispose_extent = None + if frame == 0: + if rewind: + self._fp.seek(self.__rewind) + self.png.rewind() + self.__prepare_idat = self.__rewind_idat + self._im = None + self.info = self.png.im_info + self.tile = self.png.im_tile + self.fp = self._fp + self._prev_im = None + self.dispose = None + self.default_image = self.info.get("default_image", False) + self.dispose_op = self.info.get("disposal") + self.blend_op = self.info.get("blend") + dispose_extent = self.info.get("bbox") + self.__frame = 0 + else: + if frame != self.__frame + 1: + msg = f"cannot seek to frame {frame}" + raise ValueError(msg) + + # ensure previous frame was loaded + self.load() + + if self.dispose: + self.im.paste(self.dispose, self.dispose_extent) + self._prev_im = self.im.copy() + + self.fp = self._fp + + # advance to the next frame + if self.__prepare_idat: + ImageFile._safe_read(self.fp, self.__prepare_idat) + self.__prepare_idat = 0 + frame_start = False + while True: + self.fp.read(4) # CRC + + try: + cid, pos, length = self.png.read() + except (struct.error, SyntaxError): + break + + if cid == b"IEND": + msg = "No more images in APNG file" + raise EOFError(msg) + if cid == b"fcTL": + if frame_start: + # there must be at least one fdAT chunk between fcTL chunks + msg = "APNG missing frame data" + raise SyntaxError(msg) + frame_start = True + + try: + self.png.call(cid, pos, length) + except UnicodeDecodeError: + break + except EOFError: + if cid == b"fdAT": + length -= 4 + if frame_start: + self.__prepare_idat = length + break + ImageFile._safe_read(self.fp, length) + except AttributeError: + logger.debug("%r %s %s (unknown)", cid, pos, length) + ImageFile._safe_read(self.fp, length) + + self.__frame = frame + self.tile = self.png.im_tile + self.dispose_op = self.info.get("disposal") + self.blend_op = self.info.get("blend") + dispose_extent = self.info.get("bbox") + + if not self.tile: + msg = "image not found in APNG frame" + raise EOFError(msg) + if dispose_extent: + self.dispose_extent: tuple[float, float, float, float] = dispose_extent + + # setup frame disposal (actual disposal done when needed in the next _seek()) + if self._prev_im is None and self.dispose_op == Disposal.OP_PREVIOUS: + self.dispose_op = Disposal.OP_BACKGROUND + + self.dispose = None + if self.dispose_op == Disposal.OP_PREVIOUS: + if self._prev_im: + self.dispose = self._prev_im.copy() + self.dispose = self._crop(self.dispose, self.dispose_extent) + elif self.dispose_op == Disposal.OP_BACKGROUND: + self.dispose = Image.core.fill(self.mode, self.size) + self.dispose = self._crop(self.dispose, self.dispose_extent) + + def tell(self) -> int: + return self.__frame + + def load_prepare(self) -> None: + """internal: prepare to read PNG file""" + + if self.info.get("interlace"): + self.decoderconfig = self.decoderconfig + (1,) + + self.__idat = self.__prepare_idat # used by load_read() + ImageFile.ImageFile.load_prepare(self) + + def load_read(self, read_bytes: int) -> bytes: + """internal: read more image data""" + + assert self.png is not None + assert self.fp is not None + while self.__idat == 0: + # end of chunk, skip forward to next one + + self.fp.read(4) # CRC + + cid, pos, length = self.png.read() + + if cid not in [b"IDAT", b"DDAT", b"fdAT"]: + self.png.push(cid, pos, length) + return b"" + + if cid == b"fdAT": + try: + self.png.call(cid, pos, length) + except EOFError: + pass + self.__idat = length - 4 # sequence_num has already been read + else: + self.__idat = length # empty chunks are allowed + + # read more data from this chunk + if read_bytes <= 0: + read_bytes = self.__idat + else: + read_bytes = min(read_bytes, self.__idat) + + self.__idat = self.__idat - read_bytes + + return self.fp.read(read_bytes) + + def load_end(self) -> None: + """internal: finished reading image data""" + assert self.png is not None + assert self.fp is not None + if self.__idat != 0: + self.fp.read(self.__idat) + while True: + self.fp.read(4) # CRC + + try: + cid, pos, length = self.png.read() + except (struct.error, SyntaxError): + break + + if cid == b"IEND": + break + elif cid == b"fcTL" and self.is_animated: + # start of the next frame, stop reading + self.__prepare_idat = 0 + self.png.push(cid, pos, length) + break + + try: + self.png.call(cid, pos, length) + except UnicodeDecodeError: + break + except EOFError: + if cid == b"fdAT": + length -= 4 + try: + ImageFile._safe_read(self.fp, length) + except OSError as e: + if ImageFile.LOAD_TRUNCATED_IMAGES: + break + else: + raise e + except AttributeError: + logger.debug("%r %s %s (unknown)", cid, pos, length) + s = ImageFile._safe_read(self.fp, length) + if cid[1:2].islower(): + self.private_chunks.append((cid, s, True)) + self._text = self.png.im_text + if not self.is_animated: + self.png.close() + self.png = None + else: + if self._prev_im and self.blend_op == Blend.OP_OVER: + updated = self._crop(self.im, self.dispose_extent) + if self.im.mode == "RGB" and "transparency" in self.info: + mask = updated.convert_transparent( + "RGBA", self.info["transparency"] + ) + else: + if self.im.mode == "P" and "transparency" in self.info: + t = self.info["transparency"] + if isinstance(t, bytes): + updated.putpalettealphas(t) + elif isinstance(t, int): + updated.putpalettealpha(t) + mask = updated.convert("RGBA") + self._prev_im.paste(updated, self.dispose_extent, mask) + self.im = self._prev_im + + def _getexif(self) -> dict[int, Any] | None: + if "exif" not in self.info: + self.load() + if "exif" not in self.info and "Raw profile type exif" not in self.info: + return None + return self.getexif()._get_merged_dict() + + def getexif(self) -> Image.Exif: + if "exif" not in self.info: + self.load() + + return super().getexif() + + +# -------------------------------------------------------------------- +# PNG writer + +_OUTMODES = { + # supported PIL modes, and corresponding rawmode, bit depth and color type + "1": ("1", b"\x01", b"\x00"), + "L;1": ("L;1", b"\x01", b"\x00"), + "L;2": ("L;2", b"\x02", b"\x00"), + "L;4": ("L;4", b"\x04", b"\x00"), + "L": ("L", b"\x08", b"\x00"), + "LA": ("LA", b"\x08", b"\x04"), + "I": ("I;16B", b"\x10", b"\x00"), + "I;16": ("I;16B", b"\x10", b"\x00"), + "I;16B": ("I;16B", b"\x10", b"\x00"), + "P;1": ("P;1", b"\x01", b"\x03"), + "P;2": ("P;2", b"\x02", b"\x03"), + "P;4": ("P;4", b"\x04", b"\x03"), + "P": ("P", b"\x08", b"\x03"), + "RGB": ("RGB", b"\x08", b"\x02"), + "RGBA": ("RGBA", b"\x08", b"\x06"), +} + + +def putchunk(fp: IO[bytes], cid: bytes, *data: bytes) -> None: + """Write a PNG chunk (including CRC field)""" + + byte_data = b"".join(data) + + fp.write(o32(len(byte_data)) + cid) + fp.write(byte_data) + crc = _crc32(byte_data, _crc32(cid)) + fp.write(o32(crc)) + + +class _idat: + # wrap output from the encoder in IDAT chunks + + def __init__(self, fp: IO[bytes], chunk: Callable[..., None]) -> None: + self.fp = fp + self.chunk = chunk + + def write(self, data: bytes) -> None: + self.chunk(self.fp, b"IDAT", data) + + +class _fdat: + # wrap encoder output in fdAT chunks + + def __init__(self, fp: IO[bytes], chunk: Callable[..., None], seq_num: int) -> None: + self.fp = fp + self.chunk = chunk + self.seq_num = seq_num + + def write(self, data: bytes) -> None: + self.chunk(self.fp, b"fdAT", o32(self.seq_num), data) + self.seq_num += 1 + + +def _apply_encoderinfo(im: Image.Image, encoderinfo: dict[str, Any]) -> None: + im.encoderconfig = ( + encoderinfo.get("optimize", False), + encoderinfo.get("compress_level", -1), + encoderinfo.get("compress_type", -1), + encoderinfo.get("dictionary", b""), + ) + + +class _Frame(NamedTuple): + im: Image.Image + bbox: tuple[int, int, int, int] | None + encoderinfo: dict[str, Any] + + +def _write_multiple_frames( + im: Image.Image, + fp: IO[bytes], + chunk: Callable[..., None], + mode: str, + rawmode: str, + default_image: Image.Image | None, + append_images: list[Image.Image], +) -> Image.Image | None: + duration = im.encoderinfo.get("duration") + loop = im.encoderinfo.get("loop", im.info.get("loop", 0)) + disposal = im.encoderinfo.get("disposal", im.info.get("disposal", Disposal.OP_NONE)) + blend = im.encoderinfo.get("blend", im.info.get("blend", Blend.OP_SOURCE)) + + if default_image: + chain = itertools.chain(append_images) + else: + chain = itertools.chain([im], append_images) + + im_frames: list[_Frame] = [] + frame_count = 0 + for im_seq in chain: + for im_frame in ImageSequence.Iterator(im_seq): + if im_frame.mode == mode: + im_frame = im_frame.copy() + else: + im_frame = im_frame.convert(mode) + encoderinfo = im.encoderinfo.copy() + if isinstance(duration, (list, tuple)): + encoderinfo["duration"] = duration[frame_count] + elif duration is None and "duration" in im_frame.info: + encoderinfo["duration"] = im_frame.info["duration"] + if isinstance(disposal, (list, tuple)): + encoderinfo["disposal"] = disposal[frame_count] + if isinstance(blend, (list, tuple)): + encoderinfo["blend"] = blend[frame_count] + frame_count += 1 + + if im_frames: + previous = im_frames[-1] + prev_disposal = previous.encoderinfo.get("disposal") + prev_blend = previous.encoderinfo.get("blend") + if prev_disposal == Disposal.OP_PREVIOUS and len(im_frames) < 2: + prev_disposal = Disposal.OP_BACKGROUND + + if prev_disposal == Disposal.OP_BACKGROUND: + base_im = previous.im.copy() + dispose = Image.core.fill("RGBA", im.size, (0, 0, 0, 0)) + bbox = previous.bbox + if bbox: + dispose = dispose.crop(bbox) + else: + bbox = (0, 0) + im.size + base_im.paste(dispose, bbox) + elif prev_disposal == Disposal.OP_PREVIOUS: + base_im = im_frames[-2].im + else: + base_im = previous.im + delta = ImageChops.subtract_modulo( + im_frame.convert("RGBA"), base_im.convert("RGBA") + ) + bbox = delta.getbbox(alpha_only=False) + if ( + not bbox + and prev_disposal == encoderinfo.get("disposal") + and prev_blend == encoderinfo.get("blend") + and "duration" in encoderinfo + ): + previous.encoderinfo["duration"] += encoderinfo["duration"] + continue + else: + bbox = None + im_frames.append(_Frame(im_frame, bbox, encoderinfo)) + + if len(im_frames) == 1 and not default_image: + return im_frames[0].im + + # animation control + chunk( + fp, + b"acTL", + o32(len(im_frames)), # 0: num_frames + o32(loop), # 4: num_plays + ) + + # default image IDAT (if it exists) + if default_image: + default_im = im if im.mode == mode else im.convert(mode) + _apply_encoderinfo(default_im, im.encoderinfo) + ImageFile._save( + default_im, + cast(IO[bytes], _idat(fp, chunk)), + [ImageFile._Tile("zip", (0, 0) + im.size, 0, rawmode)], + ) + + seq_num = 0 + for frame, frame_data in enumerate(im_frames): + im_frame = frame_data.im + if not frame_data.bbox: + bbox = (0, 0) + im_frame.size + else: + bbox = frame_data.bbox + im_frame = im_frame.crop(bbox) + size = im_frame.size + encoderinfo = frame_data.encoderinfo + frame_duration = encoderinfo.get("duration", 0) + delay = Fraction(frame_duration / 1000).limit_denominator(65535) + if delay.numerator > 65535: + msg = "cannot write duration" + raise ValueError(msg) + frame_disposal = encoderinfo.get("disposal", disposal) + frame_blend = encoderinfo.get("blend", blend) + # frame control + chunk( + fp, + b"fcTL", + o32(seq_num), # sequence_number + o32(size[0]), # width + o32(size[1]), # height + o32(bbox[0]), # x_offset + o32(bbox[1]), # y_offset + o16(delay.numerator), # delay_numerator + o16(delay.denominator), # delay_denominator + o8(frame_disposal), # dispose_op + o8(frame_blend), # blend_op + ) + seq_num += 1 + # frame data + _apply_encoderinfo(im_frame, im.encoderinfo) + if frame == 0 and not default_image: + # first frame must be in IDAT chunks for backwards compatibility + ImageFile._save( + im_frame, + cast(IO[bytes], _idat(fp, chunk)), + [ImageFile._Tile("zip", (0, 0) + im_frame.size, 0, rawmode)], + ) + else: + fdat_chunks = _fdat(fp, chunk, seq_num) + ImageFile._save( + im_frame, + cast(IO[bytes], fdat_chunks), + [ImageFile._Tile("zip", (0, 0) + im_frame.size, 0, rawmode)], + ) + seq_num = fdat_chunks.seq_num + return None + + +def _save_all(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + _save(im, fp, filename, save_all=True) + + +def _save( + im: Image.Image, + fp: IO[bytes], + filename: str | bytes, + chunk: Callable[..., None] = putchunk, + save_all: bool = False, +) -> None: + # save an image to disk (called by the save method) + + if save_all: + default_image = im.encoderinfo.get( + "default_image", im.info.get("default_image") + ) + modes = set() + sizes = set() + append_images = im.encoderinfo.get("append_images", []) + for im_seq in itertools.chain([im], append_images): + for im_frame in ImageSequence.Iterator(im_seq): + modes.add(im_frame.mode) + sizes.add(im_frame.size) + for mode in ("RGBA", "RGB", "P"): + if mode in modes: + break + else: + mode = modes.pop() + size = tuple(max(frame_size[i] for frame_size in sizes) for i in range(2)) + else: + size = im.size + mode = im.mode + + outmode = mode + palette = [] + if im.palette: + palette = im.getpalette() or [] + if mode == "P": + # + # attempt to minimize storage requirements for palette images + if "bits" in im.encoderinfo: + # number of bits specified by user + colors = min(1 << im.encoderinfo["bits"], 256) + else: + # check palette contents + if im.palette: + colors = max(min(len(palette) // 3, 256), 1) + else: + colors = 256 + + if colors <= 16: + if colors <= 2: + bits = 1 + elif colors <= 4: + bits = 2 + else: + bits = 4 + outmode += f";{bits}" + + # get the corresponding PNG mode + try: + rawmode, bit_depth, color_type = _OUTMODES[outmode] + except KeyError as e: + msg = f"cannot write mode {mode} as PNG" + raise OSError(msg) from e + if outmode == "I": + deprecate("Saving I mode images as PNG", 13, stacklevel=4) + + # + # write minimal PNG file + + fp.write(_MAGIC) + + chunk( + fp, + b"IHDR", + o32(size[0]), # 0: size + o32(size[1]), + bit_depth, + color_type, + b"\0", # 10: compression + b"\0", # 11: filter category + b"\0", # 12: interlace flag + ) + + chunks = [b"cHRM", b"cICP", b"gAMA", b"sBIT", b"sRGB", b"tIME"] + + if icc := im.encoderinfo.get("icc_profile", im.info.get("icc_profile")): + # ICC profile + # according to PNG spec, the iCCP chunk contains: + # Profile name 1-79 bytes (character string) + # Null separator 1 byte (null character) + # Compression method 1 byte (0) + # Compressed profile n bytes (zlib with deflate compression) + name = b"ICC Profile" + data = name + b"\0\0" + zlib.compress(icc) + chunk(fp, b"iCCP", data) + + # You must either have sRGB or iCCP. + # Disallow sRGB chunks when an iCCP-chunk has been emitted. + chunks.remove(b"sRGB") + + if info := im.encoderinfo.get("pnginfo"): + chunks_multiple_allowed = [b"sPLT", b"iTXt", b"tEXt", b"zTXt"] + for info_chunk in info.chunks: + cid, data = info_chunk[:2] + if cid in chunks: + chunks.remove(cid) + chunk(fp, cid, data) + elif cid in chunks_multiple_allowed: + chunk(fp, cid, data) + elif cid[1:2].islower(): + # Private chunk + after_idat = len(info_chunk) == 3 and info_chunk[2] + if not after_idat: + chunk(fp, cid, data) + + if im.mode == "P": + palette_byte_number = colors * 3 + palette_bytes = bytes(palette[:palette_byte_number]) + while len(palette_bytes) < palette_byte_number: + palette_bytes += b"\0" + chunk(fp, b"PLTE", palette_bytes) + + transparency = im.encoderinfo.get("transparency", im.info.get("transparency", None)) + + if transparency or transparency == 0: + if im.mode == "P": + # limit to actual palette size + alpha_bytes = colors + if isinstance(transparency, bytes): + chunk(fp, b"tRNS", transparency[:alpha_bytes]) + else: + transparency = max(0, min(255, transparency)) + alpha = b"\xff" * transparency + b"\0" + chunk(fp, b"tRNS", alpha[:alpha_bytes]) + elif im.mode in ("1", "L", "I", "I;16"): + transparency = max(0, min(65535, transparency)) + chunk(fp, b"tRNS", o16(transparency)) + elif im.mode == "RGB": + red, green, blue = transparency + chunk(fp, b"tRNS", o16(red) + o16(green) + o16(blue)) + else: + if "transparency" in im.encoderinfo: + # don't bother with transparency if it's an RGBA + # and it's in the info dict. It's probably just stale. + msg = "cannot use transparency for this mode" + raise OSError(msg) + else: + if im.mode == "P" and im.im.getpalettemode() == "RGBA": + alpha = im.im.getpalette("RGBA", "A") + alpha_bytes = colors + chunk(fp, b"tRNS", alpha[:alpha_bytes]) + + if dpi := im.encoderinfo.get("dpi"): + chunk( + fp, + b"pHYs", + o32(int(dpi[0] / 0.0254 + 0.5)), + o32(int(dpi[1] / 0.0254 + 0.5)), + b"\x01", + ) + + if info: + chunks = [b"bKGD", b"hIST"] + for info_chunk in info.chunks: + cid, data = info_chunk[:2] + if cid in chunks: + chunks.remove(cid) + chunk(fp, cid, data) + + if exif := im.encoderinfo.get("exif"): + if isinstance(exif, Image.Exif): + exif = exif.tobytes(8) + if exif.startswith(b"Exif\x00\x00"): + exif = exif[6:] + chunk(fp, b"eXIf", exif) + + single_im: Image.Image | None = im + if save_all: + single_im = _write_multiple_frames( + im, fp, chunk, mode, rawmode, default_image, append_images + ) + if single_im: + _apply_encoderinfo(single_im, im.encoderinfo) + ImageFile._save( + single_im, + cast(IO[bytes], _idat(fp, chunk)), + [ImageFile._Tile("zip", (0, 0) + single_im.size, 0, rawmode)], + ) + + if info: + for info_chunk in info.chunks: + cid, data = info_chunk[:2] + if cid[1:2].islower(): + # Private chunk + after_idat = len(info_chunk) == 3 and info_chunk[2] + if after_idat: + chunk(fp, cid, data) + + chunk(fp, b"IEND", b"") + + if hasattr(fp, "flush"): + fp.flush() + + +# -------------------------------------------------------------------- +# PNG chunk converter + + +def getchunks(im: Image.Image, **params: Any) -> list[tuple[bytes, bytes, bytes]]: + """Return a list of PNG chunks representing this image.""" + from io import BytesIO + + chunks = [] + + def append(fp: IO[bytes], cid: bytes, *data: bytes) -> None: + byte_data = b"".join(data) + crc = o32(_crc32(byte_data, _crc32(cid))) + chunks.append((cid, byte_data, crc)) + + fp = BytesIO() + + try: + im.encoderinfo = params + _save(im, fp, "", append) + finally: + del im.encoderinfo + + return chunks + + +# -------------------------------------------------------------------- +# Registry + +Image.register_open(PngImageFile.format, PngImageFile, _accept) +Image.register_save(PngImageFile.format, _save) +Image.register_save_all(PngImageFile.format, _save_all) + +Image.register_extensions(PngImageFile.format, [".png", ".apng"]) + +Image.register_mime(PngImageFile.format, "image/png") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/PpmImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/PpmImagePlugin.py new file mode 100644 index 0000000..307bc97 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/PpmImagePlugin.py @@ -0,0 +1,375 @@ +# +# The Python Imaging Library. +# $Id$ +# +# PPM support for PIL +# +# History: +# 96-03-24 fl Created +# 98-03-06 fl Write RGBA images (as RGB, that is) +# +# Copyright (c) Secret Labs AB 1997-98. +# Copyright (c) Fredrik Lundh 1996. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import math +from typing import IO + +from . import Image, ImageFile +from ._binary import i16be as i16 +from ._binary import o8 +from ._binary import o32le as o32 + +# +# -------------------------------------------------------------------- + +b_whitespace = b"\x20\x09\x0a\x0b\x0c\x0d" + +MODES = { + # standard + b"P1": "1", + b"P2": "L", + b"P3": "RGB", + b"P4": "1", + b"P5": "L", + b"P6": "RGB", + # extensions + b"P0CMYK": "CMYK", + b"Pf": "F", + # PIL extensions (for test purposes only) + b"PyP": "P", + b"PyRGBA": "RGBA", + b"PyCMYK": "CMYK", +} + + +def _accept(prefix: bytes) -> bool: + return len(prefix) >= 2 and prefix.startswith(b"P") and prefix[1] in b"0123456fy" + + +## +# Image plugin for PBM, PGM, and PPM images. + + +class PpmImageFile(ImageFile.ImageFile): + format = "PPM" + format_description = "Pbmplus image" + + def _read_magic(self) -> bytes: + assert self.fp is not None + + magic = b"" + # read until whitespace or longest available magic number + for _ in range(6): + c = self.fp.read(1) + if not c or c in b_whitespace: + break + magic += c + return magic + + def _read_token(self) -> bytes: + assert self.fp is not None + + token = b"" + while len(token) <= 10: # read until next whitespace or limit of 10 characters + c = self.fp.read(1) + if not c: + break + elif c in b_whitespace: # token ended + if not token: + # skip whitespace at start + continue + break + elif c == b"#": + # ignores rest of the line; stops at CR, LF or EOF + while self.fp.read(1) not in b"\r\n": + pass + continue + token += c + if not token: + # Token was not even 1 byte + msg = "Reached EOF while reading header" + raise ValueError(msg) + elif len(token) > 10: + msg_too_long = b"Token too long in file header: %s" % token + raise ValueError(msg_too_long) + return token + + def _open(self) -> None: + assert self.fp is not None + + magic_number = self._read_magic() + try: + mode = MODES[magic_number] + except KeyError: + msg = "not a PPM file" + raise SyntaxError(msg) + self._mode = mode + + if magic_number in (b"P1", b"P4"): + self.custom_mimetype = "image/x-portable-bitmap" + elif magic_number in (b"P2", b"P5"): + self.custom_mimetype = "image/x-portable-graymap" + elif magic_number in (b"P3", b"P6"): + self.custom_mimetype = "image/x-portable-pixmap" + + self._size = int(self._read_token()), int(self._read_token()) + + decoder_name = "raw" + if magic_number in (b"P1", b"P2", b"P3"): + decoder_name = "ppm_plain" + + args: str | tuple[str | int, ...] + if mode == "1": + args = "1;I" + elif mode == "F": + scale = float(self._read_token()) + if scale == 0.0 or not math.isfinite(scale): + msg = "scale must be finite and non-zero" + raise ValueError(msg) + self.info["scale"] = abs(scale) + + rawmode = "F;32F" if scale < 0 else "F;32BF" + args = (rawmode, 0, -1) + else: + maxval = int(self._read_token()) + if not 0 < maxval < 65536: + msg = "maxval must be greater than 0 and less than 65536" + raise ValueError(msg) + if maxval > 255 and mode == "L": + self._mode = "I" + + rawmode = mode + if decoder_name != "ppm_plain": + # If maxval matches a bit depth, use the raw decoder directly + if maxval == 65535 and mode == "L": + rawmode = "I;16B" + elif maxval != 255: + decoder_name = "ppm" + + args = rawmode if decoder_name == "raw" else (rawmode, maxval) + self.tile = [ + ImageFile._Tile(decoder_name, (0, 0) + self.size, self.fp.tell(), args) + ] + + +# +# -------------------------------------------------------------------- + + +class PpmPlainDecoder(ImageFile.PyDecoder): + _pulls_fd = True + _comment_spans: bool + + def _read_block(self) -> bytes: + assert self.fd is not None + + return self.fd.read(ImageFile.SAFEBLOCK) + + def _find_comment_end(self, block: bytes, start: int = 0) -> int: + a = block.find(b"\n", start) + b = block.find(b"\r", start) + return min(a, b) if a * b > 0 else max(a, b) # lowest nonnegative index (or -1) + + def _ignore_comments(self, block: bytes) -> bytes: + if self._comment_spans: + # Finish current comment + while block: + comment_end = self._find_comment_end(block) + if comment_end != -1: + # Comment ends in this block + # Delete tail of comment + block = block[comment_end + 1 :] + break + else: + # Comment spans whole block + # So read the next block, looking for the end + block = self._read_block() + + # Search for any further comments + self._comment_spans = False + while True: + comment_start = block.find(b"#") + if comment_start == -1: + # No comment found + break + comment_end = self._find_comment_end(block, comment_start) + if comment_end != -1: + # Comment ends in this block + # Delete comment + block = block[:comment_start] + block[comment_end + 1 :] + else: + # Comment continues to next block(s) + block = block[:comment_start] + self._comment_spans = True + break + return block + + def _decode_bitonal(self) -> bytearray: + """ + This is a separate method because in the plain PBM format, all data tokens are + exactly one byte, so the inter-token whitespace is optional. + """ + data = bytearray() + total_bytes = self.state.xsize * self.state.ysize + + while len(data) != total_bytes: + block = self._read_block() # read next block + if not block: + # eof + break + + block = self._ignore_comments(block) + + tokens = b"".join(block.split()) + for token in tokens: + if token not in (48, 49): + msg = b"Invalid token for this mode: %s" % bytes([token]) + raise ValueError(msg) + data = (data + tokens)[:total_bytes] + invert = bytes.maketrans(b"01", b"\xff\x00") + return data.translate(invert) + + def _decode_blocks(self, maxval: int) -> bytearray: + data = bytearray() + max_len = 10 + out_byte_count = 4 if self.mode == "I" else 1 + out_max = 65535 if self.mode == "I" else 255 + bands = Image.getmodebands(self.mode) + total_bytes = self.state.xsize * self.state.ysize * bands * out_byte_count + + half_token = b"" + while len(data) != total_bytes: + block = self._read_block() # read next block + if not block: + if half_token: + block = bytearray(b" ") # flush half_token + else: + # eof + break + + block = self._ignore_comments(block) + + if half_token: + block = half_token + block # stitch half_token to new block + half_token = b"" + + tokens = block.split() + + if block and not block[-1:].isspace(): # block might split token + half_token = tokens.pop() # save half token for later + if len(half_token) > max_len: # prevent buildup of half_token + msg = ( + b"Token too long found in data: %s" % half_token[: max_len + 1] + ) + raise ValueError(msg) + + for token in tokens: + if len(token) > max_len: + msg = b"Token too long found in data: %s" % token[: max_len + 1] + raise ValueError(msg) + value = int(token) + if value < 0: + msg_str = f"Channel value is negative: {value}" + raise ValueError(msg_str) + if value > maxval: + msg_str = f"Channel value too large for this mode: {value}" + raise ValueError(msg_str) + value = round(value / maxval * out_max) + data += o32(value) if self.mode == "I" else o8(value) + if len(data) == total_bytes: # finished! + break + return data + + def decode(self, buffer: bytes | Image.SupportsArrayInterface) -> tuple[int, int]: + self._comment_spans = False + if self.mode == "1": + data = self._decode_bitonal() + rawmode = "1;8" + else: + maxval = self.args[-1] + data = self._decode_blocks(maxval) + rawmode = "I;32" if self.mode == "I" else self.mode + self.set_as_raw(bytes(data), rawmode) + return -1, 0 + + +class PpmDecoder(ImageFile.PyDecoder): + _pulls_fd = True + + def decode(self, buffer: bytes | Image.SupportsArrayInterface) -> tuple[int, int]: + assert self.fd is not None + + data = bytearray() + maxval = self.args[-1] + in_byte_count = 1 if maxval < 256 else 2 + out_byte_count = 4 if self.mode == "I" else 1 + out_max = 65535 if self.mode == "I" else 255 + bands = Image.getmodebands(self.mode) + dest_length = self.state.xsize * self.state.ysize * bands * out_byte_count + while len(data) < dest_length: + pixels = self.fd.read(in_byte_count * bands) + if len(pixels) < in_byte_count * bands: + # eof + break + for b in range(bands): + value = ( + pixels[b] if in_byte_count == 1 else i16(pixels, b * in_byte_count) + ) + value = min(out_max, round(value / maxval * out_max)) + data += o32(value) if self.mode == "I" else o8(value) + rawmode = "I;32" if self.mode == "I" else self.mode + self.set_as_raw(bytes(data), rawmode) + return -1, 0 + + +# +# -------------------------------------------------------------------- + + +def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + if im.mode == "1": + rawmode, head = "1;I", b"P4" + elif im.mode == "L": + rawmode, head = "L", b"P5" + elif im.mode in ("I", "I;16"): + rawmode, head = "I;16B", b"P5" + elif im.mode in ("RGB", "RGBA"): + rawmode, head = "RGB", b"P6" + elif im.mode == "F": + rawmode, head = "F;32F", b"Pf" + else: + msg = f"cannot write mode {im.mode} as PPM" + raise OSError(msg) + fp.write(head + b"\n%d %d\n" % im.size) + if head == b"P6": + fp.write(b"255\n") + elif head == b"P5": + if rawmode == "L": + fp.write(b"255\n") + else: + fp.write(b"65535\n") + elif head == b"Pf": + fp.write(b"-1.0\n") + row_order = -1 if im.mode == "F" else 1 + ImageFile._save( + im, fp, [ImageFile._Tile("raw", (0, 0) + im.size, 0, (rawmode, 0, row_order))] + ) + + +# +# -------------------------------------------------------------------- + + +Image.register_open(PpmImageFile.format, PpmImageFile, _accept) +Image.register_save(PpmImageFile.format, _save) + +Image.register_decoder("ppm", PpmDecoder) +Image.register_decoder("ppm_plain", PpmPlainDecoder) + +Image.register_extensions(PpmImageFile.format, [".pbm", ".pgm", ".ppm", ".pnm", ".pfm"]) + +Image.register_mime(PpmImageFile.format, "image/x-portable-anymap") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/PsdImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/PsdImagePlugin.py new file mode 100644 index 0000000..dd3d5ab --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/PsdImagePlugin.py @@ -0,0 +1,337 @@ +# +# The Python Imaging Library +# $Id$ +# +# Adobe PSD 2.5/3.0 file handling +# +# History: +# 1995-09-01 fl Created +# 1997-01-03 fl Read most PSD images +# 1997-01-18 fl Fixed P and CMYK support +# 2001-10-21 fl Added seek/tell support (for layers) +# +# Copyright (c) 1997-2001 by Secret Labs AB. +# Copyright (c) 1995-2001 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import io +from functools import cached_property +from typing import IO + +from . import Image, ImageFile, ImagePalette +from ._binary import i8 +from ._binary import i16be as i16 +from ._binary import i32be as i32 +from ._binary import si16be as si16 +from ._binary import si32be as si32 +from ._util import DeferredError + +MODES = { + # (photoshop mode, bits) -> (pil mode, required channels) + (0, 1): ("1", 1), + (0, 8): ("L", 1), + (1, 8): ("L", 1), + (2, 8): ("P", 1), + (3, 8): ("RGB", 3), + (4, 8): ("CMYK", 4), + (7, 8): ("L", 1), # FIXME: multilayer + (8, 8): ("L", 1), # duotone + (9, 8): ("LAB", 3), +} + + +# --------------------------------------------------------------------. +# read PSD images + + +def _accept(prefix: bytes) -> bool: + return prefix.startswith(b"8BPS") + + +## +# Image plugin for Photoshop images. + + +class PsdImageFile(ImageFile.ImageFile): + format = "PSD" + format_description = "Adobe Photoshop" + _close_exclusive_fp_after_loading = False + + def _open(self) -> None: + assert self.fp is not None + read = self.fp.read + + # + # header + + s = read(26) + if not _accept(s) or i16(s, 4) != 1: + msg = "not a PSD file" + raise SyntaxError(msg) + + psd_bits = i16(s, 22) + psd_channels = i16(s, 12) + psd_mode = i16(s, 24) + + mode, channels = MODES[(psd_mode, psd_bits)] + + if channels > psd_channels: + msg = "not enough channels" + raise OSError(msg) + if mode == "RGB" and psd_channels == 4: + mode = "RGBA" + channels = 4 + + self._mode = mode + self._size = i32(s, 18), i32(s, 14) + + # + # color mode data + + size = i32(read(4)) + if size: + data = read(size) + if mode == "P" and size == 768: + self.palette = ImagePalette.raw("RGB;L", data) + + # + # image resources + + self.resources = [] + + size = i32(read(4)) + if size: + # load resources + end = self.fp.tell() + size + while self.fp.tell() < end: + read(4) # signature + id = i16(read(2)) + name = read(i8(read(1))) + if not (len(name) & 1): + read(1) # padding + data = read(i32(read(4))) + if len(data) & 1: + read(1) # padding + self.resources.append((id, name, data)) + if id == 1039: # ICC profile + self.info["icc_profile"] = data + + # + # layer and mask information + + self._layers_position = None + + size = i32(read(4)) + if size: + end = self.fp.tell() + size + size = i32(read(4)) + if size: + self._layers_position = self.fp.tell() + self._layers_size = size + self.fp.seek(end) + self._n_frames: int | None = None + + # + # image descriptor + + self.tile = _maketile(self.fp, mode, (0, 0) + self.size, channels) + + # keep the file open + self._fp = self.fp + self.frame = 1 + self._min_frame = 1 + + @cached_property + def layers( + self, + ) -> list[tuple[str, str, tuple[int, int, int, int], list[ImageFile._Tile]]]: + layers = [] + if self._layers_position is not None: + if isinstance(self._fp, DeferredError): + raise self._fp.ex + self._fp.seek(self._layers_position) + _layer_data = io.BytesIO(ImageFile._safe_read(self._fp, self._layers_size)) + layers = _layerinfo(_layer_data, self._layers_size) + self._n_frames = len(layers) + return layers + + @property + def n_frames(self) -> int: + if self._n_frames is None: + self._n_frames = len(self.layers) + return self._n_frames + + @property + def is_animated(self) -> bool: + return len(self.layers) > 1 + + def seek(self, layer: int) -> None: + if not self._seek_check(layer): + return + if isinstance(self._fp, DeferredError): + raise self._fp.ex + + # seek to given layer (1..max) + if layer > len(self.layers): + msg = "no more images in PSD file" + raise EOFError(msg) + _, mode, _, tile = self.layers[layer - 1] + self._mode = mode + self.tile = tile + self.frame = layer + self.fp = self._fp + + def tell(self) -> int: + # return layer number (0=image, 1..max=layers) + return self.frame + + +def _layerinfo( + fp: IO[bytes], ct_bytes: int +) -> list[tuple[str, str, tuple[int, int, int, int], list[ImageFile._Tile]]]: + # read layerinfo block + layers = [] + + def read(size: int) -> bytes: + return ImageFile._safe_read(fp, size) + + ct = si16(read(2)) + + # sanity check + if ct_bytes < (abs(ct) * 20): + msg = "Layer block too short for number of layers requested" + raise SyntaxError(msg) + + for _ in range(abs(ct)): + # bounding box + y0 = si32(read(4)) + x0 = si32(read(4)) + y1 = si32(read(4)) + x1 = si32(read(4)) + + # image info + bands = [] + ct_types = i16(read(2)) + if ct_types > 4: + fp.seek(ct_types * 6 + 12, io.SEEK_CUR) + size = i32(read(4)) + fp.seek(size, io.SEEK_CUR) + continue + + for _ in range(ct_types): + type = i16(read(2)) + + if type == 65535: + b = "A" + else: + b = "RGBA"[type] + + bands.append(b) + read(4) # size + + # figure out the image mode + bands.sort() + if bands == ["R"]: + mode = "L" + elif bands == ["B", "G", "R"]: + mode = "RGB" + elif bands == ["A", "B", "G", "R"]: + mode = "RGBA" + else: + mode = "" # unknown + + # skip over blend flags and extra information + read(12) # filler + name = "" + size = i32(read(4)) # length of the extra data field + if size: + data_end = fp.tell() + size + + length = i32(read(4)) + if length: + fp.seek(length - 16, io.SEEK_CUR) + + length = i32(read(4)) + if length: + fp.seek(length, io.SEEK_CUR) + + length = i8(read(1)) + if length: + # Don't know the proper encoding, + # Latin-1 should be a good guess + name = read(length).decode("latin-1", "replace") + + fp.seek(data_end) + layers.append((name, mode, (x0, y0, x1, y1))) + + # get tiles + layerinfo = [] + for i, (name, mode, bbox) in enumerate(layers): + tile = [] + for m in mode: + t = _maketile(fp, m, bbox, 1) + if t: + tile.extend(t) + layerinfo.append((name, mode, bbox, tile)) + + return layerinfo + + +def _maketile( + file: IO[bytes], mode: str, bbox: tuple[int, int, int, int], channels: int +) -> list[ImageFile._Tile]: + tiles = [] + read = file.read + + compression = i16(read(2)) + + xsize = bbox[2] - bbox[0] + ysize = bbox[3] - bbox[1] + + offset = file.tell() + + if compression == 0: + # + # raw compression + for channel in range(channels): + layer = mode[channel] + if mode == "CMYK": + layer += ";I" + tiles.append(ImageFile._Tile("raw", bbox, offset, layer)) + offset = offset + xsize * ysize + + elif compression == 1: + # + # packbits compression + i = 0 + bytecount = read(channels * ysize * 2) + offset = file.tell() + for channel in range(channels): + layer = mode[channel] + if mode == "CMYK": + layer += ";I" + tiles.append(ImageFile._Tile("packbits", bbox, offset, layer)) + for y in range(ysize): + offset = offset + i16(bytecount, i) + i += 2 + + file.seek(offset) + + if offset & 1: + read(1) # padding + + return tiles + + +# -------------------------------------------------------------------- +# registry + + +Image.register_open(PsdImageFile.format, PsdImageFile, _accept) + +Image.register_extension(PsdImageFile.format, ".psd") + +Image.register_mime(PsdImageFile.format, "image/vnd.adobe.photoshop") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/QoiImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/QoiImagePlugin.py new file mode 100644 index 0000000..d0709b1 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/QoiImagePlugin.py @@ -0,0 +1,235 @@ +# +# The Python Imaging Library. +# +# QOI support for PIL +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import os +from typing import IO + +from . import Image, ImageFile +from ._binary import i32be as i32 +from ._binary import o8 +from ._binary import o32be as o32 + + +def _accept(prefix: bytes) -> bool: + return prefix.startswith(b"qoif") + + +class QoiImageFile(ImageFile.ImageFile): + format = "QOI" + format_description = "Quite OK Image" + + def _open(self) -> None: + assert self.fp is not None + if not _accept(self.fp.read(4)): + msg = "not a QOI file" + raise SyntaxError(msg) + + self._size = i32(self.fp.read(4)), i32(self.fp.read(4)) + + channels = self.fp.read(1)[0] + self._mode = "RGB" if channels == 3 else "RGBA" + + self.fp.seek(1, os.SEEK_CUR) # colorspace + self.tile = [ImageFile._Tile("qoi", (0, 0) + self._size, self.fp.tell())] + + +class QoiDecoder(ImageFile.PyDecoder): + _pulls_fd = True + _previous_pixel: bytes | bytearray | None = None + _previously_seen_pixels: dict[int, bytes | bytearray] = {} + + def _add_to_previous_pixels(self, value: bytes | bytearray) -> None: + self._previous_pixel = value + + r, g, b, a = value + hash_value = (r * 3 + g * 5 + b * 7 + a * 11) % 64 + self._previously_seen_pixels[hash_value] = value + + def decode(self, buffer: bytes | Image.SupportsArrayInterface) -> tuple[int, int]: + assert self.fd is not None + + self._previously_seen_pixels = {} + self._previous_pixel = bytearray((0, 0, 0, 255)) + + data = bytearray() + bands = Image.getmodebands(self.mode) + dest_length = self.state.xsize * self.state.ysize * bands + while len(data) < dest_length: + byte = self.fd.read(1)[0] + value: bytes | bytearray + if byte == 0b11111110 and self._previous_pixel: # QOI_OP_RGB + value = bytearray(self.fd.read(3)) + self._previous_pixel[3:] + elif byte == 0b11111111: # QOI_OP_RGBA + value = self.fd.read(4) + else: + op = byte >> 6 + if op == 0: # QOI_OP_INDEX + op_index = byte & 0b00111111 + value = self._previously_seen_pixels.get( + op_index, bytearray((0, 0, 0, 0)) + ) + elif op == 1 and self._previous_pixel: # QOI_OP_DIFF + value = bytearray( + ( + (self._previous_pixel[0] + ((byte & 0b00110000) >> 4) - 2) + % 256, + (self._previous_pixel[1] + ((byte & 0b00001100) >> 2) - 2) + % 256, + (self._previous_pixel[2] + (byte & 0b00000011) - 2) % 256, + self._previous_pixel[3], + ) + ) + elif op == 2 and self._previous_pixel: # QOI_OP_LUMA + second_byte = self.fd.read(1)[0] + diff_green = (byte & 0b00111111) - 32 + diff_red = ((second_byte & 0b11110000) >> 4) - 8 + diff_blue = (second_byte & 0b00001111) - 8 + + value = bytearray( + tuple( + (self._previous_pixel[i] + diff_green + diff) % 256 + for i, diff in enumerate((diff_red, 0, diff_blue)) + ) + ) + value += self._previous_pixel[3:] + elif op == 3 and self._previous_pixel: # QOI_OP_RUN + run_length = (byte & 0b00111111) + 1 + value = self._previous_pixel + if bands == 3: + value = value[:3] + data += value * run_length + continue + self._add_to_previous_pixels(value) + + if bands == 3: + value = value[:3] + data += value + self.set_as_raw(data) + return -1, 0 + + +def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + if im.mode == "RGB": + channels = 3 + elif im.mode == "RGBA": + channels = 4 + else: + msg = "Unsupported QOI image mode" + raise ValueError(msg) + + colorspace = 0 if im.encoderinfo.get("colorspace") == "sRGB" else 1 + + fp.write(b"qoif") + fp.write(o32(im.size[0])) + fp.write(o32(im.size[1])) + fp.write(o8(channels)) + fp.write(o8(colorspace)) + + ImageFile._save(im, fp, [ImageFile._Tile("qoi", (0, 0) + im.size)]) + + +class QoiEncoder(ImageFile.PyEncoder): + _pushes_fd = True + _previous_pixel: tuple[int, int, int, int] | None = None + _previously_seen_pixels: dict[int, tuple[int, int, int, int]] = {} + _run = 0 + + def _write_run(self) -> bytes: + data = o8(0b11000000 | (self._run - 1)) # QOI_OP_RUN + self._run = 0 + return data + + def _delta(self, left: int, right: int) -> int: + result = (left - right) & 255 + if result >= 128: + result -= 256 + return result + + def encode(self, bufsize: int) -> tuple[int, int, bytes]: + assert self.im is not None + + self._previously_seen_pixels = {0: (0, 0, 0, 0)} + self._previous_pixel = (0, 0, 0, 255) + + data = bytearray() + w, h = self.im.size + bands = Image.getmodebands(self.mode) + + for y in range(h): + for x in range(w): + pixel = self.im.getpixel((x, y)) + if bands == 3: + pixel = (*pixel, 255) + + if pixel == self._previous_pixel: + self._run += 1 + if self._run == 62: + data += self._write_run() + else: + if self._run: + data += self._write_run() + + r, g, b, a = pixel + hash_value = (r * 3 + g * 5 + b * 7 + a * 11) % 64 + if self._previously_seen_pixels.get(hash_value) == pixel: + data += o8(hash_value) # QOI_OP_INDEX + elif self._previous_pixel: + self._previously_seen_pixels[hash_value] = pixel + + prev_r, prev_g, prev_b, prev_a = self._previous_pixel + if prev_a == a: + delta_r = self._delta(r, prev_r) + delta_g = self._delta(g, prev_g) + delta_b = self._delta(b, prev_b) + + if ( + -2 <= delta_r < 2 + and -2 <= delta_g < 2 + and -2 <= delta_b < 2 + ): + data += o8( + 0b01000000 + | (delta_r + 2) << 4 + | (delta_g + 2) << 2 + | (delta_b + 2) + ) # QOI_OP_DIFF + else: + delta_gr = self._delta(delta_r, delta_g) + delta_gb = self._delta(delta_b, delta_g) + if ( + -8 <= delta_gr < 8 + and -32 <= delta_g < 32 + and -8 <= delta_gb < 8 + ): + data += o8( + 0b10000000 | (delta_g + 32) + ) # QOI_OP_LUMA + data += o8((delta_gr + 8) << 4 | (delta_gb + 8)) + else: + data += o8(0b11111110) # QOI_OP_RGB + data += bytes(pixel[:3]) + else: + data += o8(0b11111111) # QOI_OP_RGBA + data += bytes(pixel) + + self._previous_pixel = pixel + + if self._run: + data += self._write_run() + data += bytes((0, 0, 0, 0, 0, 0, 0, 1)) # padding + + return len(data), 0, data + + +Image.register_open(QoiImageFile.format, QoiImageFile, _accept) +Image.register_decoder("qoi", QoiDecoder) +Image.register_extension(QoiImageFile.format, ".qoi") + +Image.register_save(QoiImageFile.format, _save) +Image.register_encoder("qoi", QoiEncoder) diff --git a/Python/venv/lib/python3.12/site-packages/PIL/SgiImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/SgiImagePlugin.py new file mode 100644 index 0000000..8530221 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/SgiImagePlugin.py @@ -0,0 +1,231 @@ +# +# The Python Imaging Library. +# $Id$ +# +# SGI image file handling +# +# See "The SGI Image File Format (Draft version 0.97)", Paul Haeberli. +# +# +# +# History: +# 2017-22-07 mb Add RLE decompression +# 2016-16-10 mb Add save method without compression +# 1995-09-10 fl Created +# +# Copyright (c) 2016 by Mickael Bonfill. +# Copyright (c) 2008 by Karsten Hiddemann. +# Copyright (c) 1997 by Secret Labs AB. +# Copyright (c) 1995 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import os +import struct +from typing import IO + +from . import Image, ImageFile +from ._binary import i16be as i16 +from ._binary import o8 + + +def _accept(prefix: bytes) -> bool: + return len(prefix) >= 2 and i16(prefix) == 474 + + +MODES = { + (1, 1, 1): "L", + (1, 2, 1): "L", + (2, 1, 1): "L;16B", + (2, 2, 1): "L;16B", + (1, 3, 3): "RGB", + (2, 3, 3): "RGB;16B", + (1, 3, 4): "RGBA", + (2, 3, 4): "RGBA;16B", +} + + +## +# Image plugin for SGI images. +class SgiImageFile(ImageFile.ImageFile): + format = "SGI" + format_description = "SGI Image File Format" + + def _open(self) -> None: + # HEAD + assert self.fp is not None + + headlen = 512 + s = self.fp.read(headlen) + + if not _accept(s): + msg = "Not an SGI image file" + raise ValueError(msg) + + # compression : verbatim or RLE + compression = s[2] + + # bpc : 1 or 2 bytes (8bits or 16bits) + bpc = s[3] + + # dimension : 1, 2 or 3 (depending on xsize, ysize and zsize) + dimension = i16(s, 4) + + # xsize : width + xsize = i16(s, 6) + + # ysize : height + ysize = i16(s, 8) + + # zsize : channels count + zsize = i16(s, 10) + + # determine mode from bits/zsize + try: + rawmode = MODES[(bpc, dimension, zsize)] + except KeyError: + msg = "Unsupported SGI image mode" + raise ValueError(msg) + + self._size = xsize, ysize + self._mode = rawmode.split(";")[0] + if self.mode == "RGB": + self.custom_mimetype = "image/rgb" + + # orientation -1 : scanlines begins at the bottom-left corner + orientation = -1 + + # decoder info + if compression == 0: + pagesize = xsize * ysize * bpc + if bpc == 2: + self.tile = [ + ImageFile._Tile( + "SGI16", + (0, 0) + self.size, + headlen, + (self.mode, 0, orientation), + ) + ] + else: + self.tile = [] + offset = headlen + for layer in self.mode: + self.tile.append( + ImageFile._Tile( + "raw", (0, 0) + self.size, offset, (layer, 0, orientation) + ) + ) + offset += pagesize + elif compression == 1: + self.tile = [ + ImageFile._Tile( + "sgi_rle", (0, 0) + self.size, headlen, (rawmode, orientation, bpc) + ) + ] + + +def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + if im.mode not in {"RGB", "RGBA", "L"}: + msg = "Unsupported SGI image mode" + raise ValueError(msg) + + # Get the keyword arguments + info = im.encoderinfo + + # Byte-per-pixel precision, 1 = 8bits per pixel + bpc = info.get("bpc", 1) + + if bpc not in (1, 2): + msg = "Unsupported number of bytes per pixel" + raise ValueError(msg) + + # Flip the image, since the origin of SGI file is the bottom-left corner + orientation = -1 + # Define the file as SGI File Format + magic_number = 474 + # Run-Length Encoding Compression - Unsupported at this time + rle = 0 + + # X Dimension = width / Y Dimension = height + x, y = im.size + # Z Dimension: Number of channels + z = len(im.mode) + # Number of dimensions (x,y,z) + if im.mode == "L": + dimension = 1 if y == 1 else 2 + else: + dimension = 3 + + # Minimum Byte value + pinmin = 0 + # Maximum Byte value (255 = 8bits per pixel) + pinmax = 255 + # Image name (79 characters max, truncated below in write) + img_name = os.path.splitext(os.path.basename(filename))[0] + if isinstance(img_name, str): + img_name = img_name.encode("ascii", "ignore") + # Standard representation of pixel in the file + colormap = 0 + fp.write(struct.pack(">h", magic_number)) + fp.write(o8(rle)) + fp.write(o8(bpc)) + fp.write(struct.pack(">H", dimension)) + fp.write(struct.pack(">H", x)) + fp.write(struct.pack(">H", y)) + fp.write(struct.pack(">H", z)) + fp.write(struct.pack(">l", pinmin)) + fp.write(struct.pack(">l", pinmax)) + fp.write(struct.pack("4s", b"")) # dummy + fp.write(struct.pack("79s", img_name)) # truncates to 79 chars + fp.write(struct.pack("s", b"")) # force null byte after img_name + fp.write(struct.pack(">l", colormap)) + fp.write(struct.pack("404s", b"")) # dummy + + rawmode = "L" + if bpc == 2: + rawmode = "L;16B" + + for channel in im.split(): + fp.write(channel.tobytes("raw", rawmode, 0, orientation)) + + if hasattr(fp, "flush"): + fp.flush() + + +class SGI16Decoder(ImageFile.PyDecoder): + _pulls_fd = True + + def decode(self, buffer: bytes | Image.SupportsArrayInterface) -> tuple[int, int]: + assert self.fd is not None + assert self.im is not None + + rawmode, stride, orientation = self.args + pagesize = self.state.xsize * self.state.ysize + zsize = len(self.mode) + self.fd.seek(512) + + for band in range(zsize): + channel = Image.new("L", (self.state.xsize, self.state.ysize)) + channel.frombytes( + self.fd.read(2 * pagesize), "raw", "L;16B", stride, orientation + ) + self.im.putband(channel.im, band) + + return -1, 0 + + +# +# registry + + +Image.register_decoder("SGI16", SGI16Decoder) +Image.register_open(SgiImageFile.format, SgiImageFile, _accept) +Image.register_save(SgiImageFile.format, _save) +Image.register_mime(SgiImageFile.format, "image/sgi") + +Image.register_extensions(SgiImageFile.format, [".bw", ".rgb", ".rgba", ".sgi"]) + +# End of file diff --git a/Python/venv/lib/python3.12/site-packages/PIL/SpiderImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/SpiderImagePlugin.py new file mode 100644 index 0000000..11d9069 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/SpiderImagePlugin.py @@ -0,0 +1,332 @@ +# +# The Python Imaging Library. +# +# SPIDER image file handling +# +# History: +# 2004-08-02 Created BB +# 2006-03-02 added save method +# 2006-03-13 added support for stack images +# +# Copyright (c) 2004 by Health Research Inc. (HRI) RENSSELAER, NY 12144. +# Copyright (c) 2004 by William Baxter. +# Copyright (c) 2004 by Secret Labs AB. +# Copyright (c) 2004 by Fredrik Lundh. +# + +## +# Image plugin for the Spider image format. This format is used +# by the SPIDER software, in processing image data from electron +# microscopy and tomography. +## + +# +# SpiderImagePlugin.py +# +# The Spider image format is used by SPIDER software, in processing +# image data from electron microscopy and tomography. +# +# Spider home page: +# https://spider.wadsworth.org/spider_doc/spider/docs/spider.html +# +# Details about the Spider image format: +# https://spider.wadsworth.org/spider_doc/spider/docs/image_doc.html +# +from __future__ import annotations + +import os +import struct +import sys +from typing import IO, Any, cast + +from . import Image, ImageFile +from ._util import DeferredError + +TYPE_CHECKING = False + + +def isInt(f: Any) -> int: + try: + i = int(f) + if f - i == 0: + return 1 + else: + return 0 + except (ValueError, OverflowError): + return 0 + + +iforms = [1, 3, -11, -12, -21, -22] + + +# There is no magic number to identify Spider files, so just check a +# series of header locations to see if they have reasonable values. +# Returns no. of bytes in the header, if it is a valid Spider header, +# otherwise returns 0 + + +def isSpiderHeader(t: tuple[float, ...]) -> int: + h = (99,) + t # add 1 value so can use spider header index start=1 + # header values 1,2,5,12,13,22,23 should be integers + for i in [1, 2, 5, 12, 13, 22, 23]: + if not isInt(h[i]): + return 0 + # check iform + iform = int(h[5]) + if iform not in iforms: + return 0 + # check other header values + labrec = int(h[13]) # no. records in file header + labbyt = int(h[22]) # total no. of bytes in header + lenbyt = int(h[23]) # record length in bytes + if labbyt != (labrec * lenbyt): + return 0 + # looks like a valid header + return labbyt + + +def isSpiderImage(filename: str) -> int: + with open(filename, "rb") as fp: + f = fp.read(92) # read 23 * 4 bytes + t = struct.unpack(">23f", f) # try big-endian first + hdrlen = isSpiderHeader(t) + if hdrlen == 0: + t = struct.unpack("<23f", f) # little-endian + hdrlen = isSpiderHeader(t) + return hdrlen + + +class SpiderImageFile(ImageFile.ImageFile): + format = "SPIDER" + format_description = "Spider 2D image" + _close_exclusive_fp_after_loading = False + + def _open(self) -> None: + # check header + n = 27 * 4 # read 27 float values + assert self.fp is not None + f = self.fp.read(n) + + try: + self.bigendian = 1 + t = struct.unpack(">27f", f) # try big-endian first + hdrlen = isSpiderHeader(t) + if hdrlen == 0: + self.bigendian = 0 + t = struct.unpack("<27f", f) # little-endian + hdrlen = isSpiderHeader(t) + if hdrlen == 0: + msg = "not a valid Spider file" + raise SyntaxError(msg) + except struct.error as e: + msg = "not a valid Spider file" + raise SyntaxError(msg) from e + + h = (99,) + t # add 1 value : spider header index starts at 1 + iform = int(h[5]) + if iform != 1: + msg = "not a Spider 2D image" + raise SyntaxError(msg) + + self._size = int(h[12]), int(h[2]) # size in pixels (width, height) + self.istack = int(h[24]) + self.imgnumber = int(h[27]) + + if self.istack == 0 and self.imgnumber == 0: + # stk=0, img=0: a regular 2D image + offset = hdrlen + self._nimages = 1 + elif self.istack > 0 and self.imgnumber == 0: + # stk>0, img=0: Opening the stack for the first time + self.imgbytes = int(h[12]) * int(h[2]) * 4 + self.hdrlen = hdrlen + self._nimages = int(h[26]) + # Point to the first image in the stack + offset = hdrlen * 2 + self.imgnumber = 1 + elif self.istack == 0 and self.imgnumber > 0: + # stk=0, img>0: an image within the stack + offset = hdrlen + self.stkoffset + self.istack = 2 # So Image knows it's still a stack + else: + msg = "inconsistent stack header values" + raise SyntaxError(msg) + + if self.bigendian: + self.rawmode = "F;32BF" + else: + self.rawmode = "F;32F" + self._mode = "F" + + self.tile = [ImageFile._Tile("raw", (0, 0) + self.size, offset, self.rawmode)] + self._fp = self.fp # FIXME: hack + + @property + def n_frames(self) -> int: + return self._nimages + + @property + def is_animated(self) -> bool: + return self._nimages > 1 + + # 1st image index is zero (although SPIDER imgnumber starts at 1) + def tell(self) -> int: + if self.imgnumber < 1: + return 0 + else: + return self.imgnumber - 1 + + def seek(self, frame: int) -> None: + if self.istack == 0: + msg = "attempt to seek in a non-stack file" + raise EOFError(msg) + if not self._seek_check(frame): + return + if isinstance(self._fp, DeferredError): + raise self._fp.ex + self.stkoffset = self.hdrlen + frame * (self.hdrlen + self.imgbytes) + self.fp = self._fp + self.fp.seek(self.stkoffset) + self._open() + + # returns a byte image after rescaling to 0..255 + def convert2byte(self, depth: int = 255) -> Image.Image: + extrema = self.getextrema() + assert isinstance(extrema[0], float) + minimum, maximum = cast(tuple[float, float], extrema) + m: float = 1 + if maximum != minimum: + m = depth / (maximum - minimum) + b = -m * minimum + return self.point(lambda i: i * m + b).convert("L") + + if TYPE_CHECKING: + from . import ImageTk + + # returns a ImageTk.PhotoImage object, after rescaling to 0..255 + def tkPhotoImage(self) -> ImageTk.PhotoImage: + from . import ImageTk + + return ImageTk.PhotoImage(self.convert2byte(), palette=256) + + +# -------------------------------------------------------------------- +# Image series + + +# given a list of filenames, return a list of images +def loadImageSeries(filelist: list[str] | None = None) -> list[Image.Image] | None: + """create a list of :py:class:`~PIL.Image.Image` objects for use in a montage""" + if filelist is None or len(filelist) < 1: + return None + + byte_imgs = [] + for img in filelist: + if not os.path.exists(img): + print(f"unable to find {img}") + continue + try: + with Image.open(img) as im: + assert isinstance(im, SpiderImageFile) + byte_im = im.convert2byte() + except Exception: + if not isSpiderImage(img): + print(f"{img} is not a Spider image file") + continue + byte_im.info["filename"] = img + byte_imgs.append(byte_im) + return byte_imgs + + +# -------------------------------------------------------------------- +# For saving images in Spider format + + +def makeSpiderHeader(im: Image.Image) -> list[bytes]: + nsam, nrow = im.size + lenbyt = max(1, nsam) * 4 # There are labrec records in the header + labrec = int(1024 / lenbyt) + if 1024 % lenbyt != 0: + labrec += 1 + labbyt = labrec * lenbyt + nvalues = int(labbyt / 4) + if nvalues < 23: + return [] + + hdr = [0.0] * nvalues + + # NB these are Fortran indices + hdr[1] = 1.0 # nslice (=1 for an image) + hdr[2] = float(nrow) # number of rows per slice + hdr[3] = float(nrow) # number of records in the image + hdr[5] = 1.0 # iform for 2D image + hdr[12] = float(nsam) # number of pixels per line + hdr[13] = float(labrec) # number of records in file header + hdr[22] = float(labbyt) # total number of bytes in header + hdr[23] = float(lenbyt) # record length in bytes + + # adjust for Fortran indexing + hdr = hdr[1:] + hdr.append(0.0) + # pack binary data into a string + return [struct.pack("f", v) for v in hdr] + + +def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + if im.mode != "F": + im = im.convert("F") + + hdr = makeSpiderHeader(im) + if len(hdr) < 256: + msg = "Error creating Spider header" + raise OSError(msg) + + # write the SPIDER header + fp.writelines(hdr) + + rawmode = "F;32NF" # 32-bit native floating point + ImageFile._save(im, fp, [ImageFile._Tile("raw", (0, 0) + im.size, 0, rawmode)]) + + +def _save_spider(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + # get the filename extension and register it with Image + if filename_ext := os.path.splitext(filename)[1]: + ext = filename_ext.decode() if isinstance(filename_ext, bytes) else filename_ext + Image.register_extension(SpiderImageFile.format, ext) + _save(im, fp, filename) + + +# -------------------------------------------------------------------- + + +Image.register_open(SpiderImageFile.format, SpiderImageFile) +Image.register_save(SpiderImageFile.format, _save_spider) + +if __name__ == "__main__": + if len(sys.argv) < 2: + print("Syntax: python3 SpiderImagePlugin.py [infile] [outfile]") + sys.exit() + + filename = sys.argv[1] + if not isSpiderImage(filename): + print("input image must be in Spider format") + sys.exit() + + with Image.open(filename) as im: + print(f"image: {im}") + print(f"format: {im.format}") + print(f"size: {im.size}") + print(f"mode: {im.mode}") + print("max, min: ", end=" ") + print(im.getextrema()) + + if len(sys.argv) > 2: + outfile = sys.argv[2] + + # perform some image operation + transposed_im = im.transpose(Image.Transpose.FLIP_LEFT_RIGHT) + print( + f"saving a flipped version of {os.path.basename(filename)} " + f"as {outfile} " + ) + transposed_im.save(outfile, SpiderImageFile.format) diff --git a/Python/venv/lib/python3.12/site-packages/PIL/SunImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/SunImagePlugin.py new file mode 100644 index 0000000..8912379 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/SunImagePlugin.py @@ -0,0 +1,145 @@ +# +# The Python Imaging Library. +# $Id$ +# +# Sun image file handling +# +# History: +# 1995-09-10 fl Created +# 1996-05-28 fl Fixed 32-bit alignment +# 1998-12-29 fl Import ImagePalette module +# 2001-12-18 fl Fixed palette loading (from Jean-Claude Rimbault) +# +# Copyright (c) 1997-2001 by Secret Labs AB +# Copyright (c) 1995-1996 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +from . import Image, ImageFile, ImagePalette +from ._binary import i32be as i32 + + +def _accept(prefix: bytes) -> bool: + return len(prefix) >= 4 and i32(prefix) == 0x59A66A95 + + +## +# Image plugin for Sun raster files. + + +class SunImageFile(ImageFile.ImageFile): + format = "SUN" + format_description = "Sun Raster File" + + def _open(self) -> None: + # The Sun Raster file header is 32 bytes in length + # and has the following format: + + # typedef struct _SunRaster + # { + # DWORD MagicNumber; /* Magic (identification) number */ + # DWORD Width; /* Width of image in pixels */ + # DWORD Height; /* Height of image in pixels */ + # DWORD Depth; /* Number of bits per pixel */ + # DWORD Length; /* Size of image data in bytes */ + # DWORD Type; /* Type of raster file */ + # DWORD ColorMapType; /* Type of color map */ + # DWORD ColorMapLength; /* Size of the color map in bytes */ + # } SUNRASTER; + + assert self.fp is not None + + # HEAD + s = self.fp.read(32) + if not _accept(s): + msg = "not an SUN raster file" + raise SyntaxError(msg) + + offset = 32 + + self._size = i32(s, 4), i32(s, 8) + + depth = i32(s, 12) + # data_length = i32(s, 16) # unreliable, ignore. + file_type = i32(s, 20) + palette_type = i32(s, 24) # 0: None, 1: RGB, 2: Raw/arbitrary + palette_length = i32(s, 28) + + if depth == 1: + self._mode, rawmode = "1", "1;I" + elif depth == 4: + self._mode, rawmode = "L", "L;4" + elif depth == 8: + self._mode = rawmode = "L" + elif depth == 24: + if file_type == 3: + self._mode, rawmode = "RGB", "RGB" + else: + self._mode, rawmode = "RGB", "BGR" + elif depth == 32: + if file_type == 3: + self._mode, rawmode = "RGB", "RGBX" + else: + self._mode, rawmode = "RGB", "BGRX" + else: + msg = "Unsupported Mode/Bit Depth" + raise SyntaxError(msg) + + if palette_length: + if palette_length > 1024: + msg = "Unsupported Color Palette Length" + raise SyntaxError(msg) + + if palette_type != 1: + msg = "Unsupported Palette Type" + raise SyntaxError(msg) + + offset = offset + palette_length + self.palette = ImagePalette.raw("RGB;L", self.fp.read(palette_length)) + if self.mode == "L": + self._mode = "P" + rawmode = rawmode.replace("L", "P") + + # 16 bit boundaries on stride + stride = ((self.size[0] * depth + 15) // 16) * 2 + + # file type: Type is the version (or flavor) of the bitmap + # file. The following values are typically found in the Type + # field: + # 0000h Old + # 0001h Standard + # 0002h Byte-encoded + # 0003h RGB format + # 0004h TIFF format + # 0005h IFF format + # FFFFh Experimental + + # Old and standard are the same, except for the length tag. + # byte-encoded is run-length-encoded + # RGB looks similar to standard, but RGB byte order + # TIFF and IFF mean that they were converted from T/IFF + # Experimental means that it's something else. + # (https://www.fileformat.info/format/sunraster/egff.htm) + + if file_type in (0, 1, 3, 4, 5): + self.tile = [ + ImageFile._Tile("raw", (0, 0) + self.size, offset, (rawmode, stride)) + ] + elif file_type == 2: + self.tile = [ + ImageFile._Tile("sun_rle", (0, 0) + self.size, offset, rawmode) + ] + else: + msg = "Unsupported Sun Raster file type" + raise SyntaxError(msg) + + +# +# registry + + +Image.register_open(SunImageFile.format, SunImageFile, _accept) + +Image.register_extension(SunImageFile.format, ".ras") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/TarIO.py b/Python/venv/lib/python3.12/site-packages/PIL/TarIO.py new file mode 100644 index 0000000..86490a4 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/TarIO.py @@ -0,0 +1,61 @@ +# +# The Python Imaging Library. +# $Id$ +# +# read files from within a tar file +# +# History: +# 95-06-18 fl Created +# 96-05-28 fl Open files in binary mode +# +# Copyright (c) Secret Labs AB 1997. +# Copyright (c) Fredrik Lundh 1995-96. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import io + +from . import ContainerIO + + +class TarIO(ContainerIO.ContainerIO[bytes]): + """A file object that provides read access to a given member of a TAR file.""" + + def __init__(self, tarfile: str, file: str) -> None: + """ + Create file object. + + :param tarfile: Name of TAR file. + :param file: Name of member file. + """ + self.fh = open(tarfile, "rb") + + while True: + s = self.fh.read(512) + if len(s) != 512: + self.fh.close() + + msg = "unexpected end of tar file" + raise OSError(msg) + + name = s[:100].decode("utf-8") + i = name.find("\0") + if i == 0: + self.fh.close() + + msg = "cannot find subfile" + raise OSError(msg) + if i > 0: + name = name[:i] + + size = int(s[124:135], 8) + + if file == name: + break + + self.fh.seek((size + 511) & (~511), io.SEEK_CUR) + + # Open region + super().__init__(self.fh, self.fh.tell(), size) diff --git a/Python/venv/lib/python3.12/site-packages/PIL/TgaImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/TgaImagePlugin.py new file mode 100644 index 0000000..b2989a4 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/TgaImagePlugin.py @@ -0,0 +1,280 @@ +# +# The Python Imaging Library. +# $Id$ +# +# TGA file handling +# +# History: +# 95-09-01 fl created (reads 24-bit files only) +# 97-01-04 fl support more TGA versions, including compressed images +# 98-07-04 fl fixed orientation and alpha layer bugs +# 98-09-11 fl fixed orientation for runlength decoder +# +# Copyright (c) Secret Labs AB 1997-98. +# Copyright (c) Fredrik Lundh 1995-97. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import os +import warnings +from typing import IO + +from . import Image, ImageFile, ImagePalette +from ._binary import i16le as i16 +from ._binary import i32le as i32 +from ._binary import o8 +from ._binary import o16le as o16 + +# +# -------------------------------------------------------------------- +# Read RGA file + + +MODES = { + # map imagetype/depth to rawmode + (1, 8): "P", + (3, 1): "1", + (3, 8): "L", + (3, 16): "LA", + (2, 16): "BGRA;15Z", + (2, 24): "BGR", + (2, 32): "BGRA", +} + + +## +# Image plugin for Targa files. + + +class TgaImageFile(ImageFile.ImageFile): + format = "TGA" + format_description = "Targa" + + def _open(self) -> None: + # process header + assert self.fp is not None + + s = self.fp.read(18) + + id_len = s[0] + + colormaptype = s[1] + imagetype = s[2] + + depth = s[16] + + flags = s[17] + + self._size = i16(s, 12), i16(s, 14) + + # validate header fields + if ( + colormaptype not in (0, 1) + or self.size[0] <= 0 + or self.size[1] <= 0 + or depth not in (1, 8, 16, 24, 32) + ): + msg = "not a TGA file" + raise SyntaxError(msg) + + # image mode + if imagetype in (3, 11): + self._mode = "L" + if depth == 1: + self._mode = "1" # ??? + elif depth == 16: + self._mode = "LA" + elif imagetype in (1, 9): + self._mode = "P" if colormaptype else "L" + elif imagetype in (2, 10): + self._mode = "RGB" if depth == 24 else "RGBA" + else: + msg = "unknown TGA mode" + raise SyntaxError(msg) + + # orientation + orientation = flags & 0x30 + self._flip_horizontally = orientation in [0x10, 0x30] + if orientation in [0x20, 0x30]: + orientation = 1 + elif orientation in [0, 0x10]: + orientation = -1 + else: + msg = "unknown TGA orientation" + raise SyntaxError(msg) + + self.info["orientation"] = orientation + + if imagetype & 8: + self.info["compression"] = "tga_rle" + + if id_len: + self.info["id_section"] = self.fp.read(id_len) + + if colormaptype: + # read palette + start, size, mapdepth = i16(s, 3), i16(s, 5), s[7] + if mapdepth == 16: + self.palette = ImagePalette.raw( + "BGRA;15Z", bytes(2 * start) + self.fp.read(2 * size) + ) + self.palette.mode = "RGBA" + elif mapdepth == 24: + self.palette = ImagePalette.raw( + "BGR", bytes(3 * start) + self.fp.read(3 * size) + ) + elif mapdepth == 32: + self.palette = ImagePalette.raw( + "BGRA", bytes(4 * start) + self.fp.read(4 * size) + ) + else: + msg = "unknown TGA map depth" + raise SyntaxError(msg) + + # setup tile descriptor + try: + rawmode = MODES[(imagetype & 7, depth)] + if imagetype & 8: + # compressed + self.tile = [ + ImageFile._Tile( + "tga_rle", + (0, 0) + self.size, + self.fp.tell(), + (rawmode, orientation, depth), + ) + ] + else: + self.tile = [ + ImageFile._Tile( + "raw", + (0, 0) + self.size, + self.fp.tell(), + (rawmode, 0, orientation), + ) + ] + except KeyError: + pass # cannot decode + + def load_end(self) -> None: + if self.mode == "RGBA": + assert self.fp is not None + self.fp.seek(-26, os.SEEK_END) + footer = self.fp.read(26) + if footer.endswith(b"TRUEVISION-XFILE.\x00"): + # version 2 + extension_offset = i32(footer) + if extension_offset: + self.fp.seek(extension_offset + 494) + attributes_type = self.fp.read(1) + if attributes_type == b"\x00": + # No alpha + self.im.fillband(3, 255) + + if self._flip_horizontally: + self.im = self.im.transpose(Image.Transpose.FLIP_LEFT_RIGHT) + + +# +# -------------------------------------------------------------------- +# Write TGA file + + +SAVE = { + "1": ("1", 1, 0, 3), + "L": ("L", 8, 0, 3), + "LA": ("LA", 16, 0, 3), + "P": ("P", 8, 1, 1), + "RGB": ("BGR", 24, 0, 2), + "RGBA": ("BGRA", 32, 0, 2), +} + + +def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + try: + rawmode, bits, colormaptype, imagetype = SAVE[im.mode] + except KeyError as e: + msg = f"cannot write mode {im.mode} as TGA" + raise OSError(msg) from e + + if "rle" in im.encoderinfo: + rle = im.encoderinfo["rle"] + else: + compression = im.encoderinfo.get("compression", im.info.get("compression")) + rle = compression == "tga_rle" + if rle: + imagetype += 8 + + id_section = im.encoderinfo.get("id_section", im.info.get("id_section", "")) + id_len = len(id_section) + if id_len > 255: + id_len = 255 + id_section = id_section[:255] + warnings.warn("id_section has been trimmed to 255 characters") + + if colormaptype: + palette = im.im.getpalette("RGB", "BGR") + colormaplength, colormapentry = len(palette) // 3, 24 + else: + colormaplength, colormapentry = 0, 0 + + if im.mode in ("LA", "RGBA"): + flags = 8 + else: + flags = 0 + + orientation = im.encoderinfo.get("orientation", im.info.get("orientation", -1)) + if orientation > 0: + flags = flags | 0x20 + + fp.write( + o8(id_len) + + o8(colormaptype) + + o8(imagetype) + + o16(0) # colormapfirst + + o16(colormaplength) + + o8(colormapentry) + + o16(0) + + o16(0) + + o16(im.size[0]) + + o16(im.size[1]) + + o8(bits) + + o8(flags) + ) + + if id_section: + fp.write(id_section) + + if colormaptype: + fp.write(palette) + + if rle: + ImageFile._save( + im, + fp, + [ImageFile._Tile("tga_rle", (0, 0) + im.size, 0, (rawmode, orientation))], + ) + else: + ImageFile._save( + im, + fp, + [ImageFile._Tile("raw", (0, 0) + im.size, 0, (rawmode, 0, orientation))], + ) + + # write targa version 2 footer + fp.write(b"\000" * 8 + b"TRUEVISION-XFILE." + b"\000") + + +# +# -------------------------------------------------------------------- +# Registry + + +Image.register_open(TgaImageFile.format, TgaImageFile) +Image.register_save(TgaImageFile.format, _save) + +Image.register_extensions(TgaImageFile.format, [".tga", ".icb", ".vda", ".vst"]) + +Image.register_mime(TgaImageFile.format, "image/x-tga") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/TiffImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/TiffImagePlugin.py new file mode 100644 index 0000000..5094faa --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/TiffImagePlugin.py @@ -0,0 +1,2353 @@ +# +# The Python Imaging Library. +# $Id$ +# +# TIFF file handling +# +# TIFF is a flexible, if somewhat aged, image file format originally +# defined by Aldus. Although TIFF supports a wide variety of pixel +# layouts and compression methods, the name doesn't really stand for +# "thousands of incompatible file formats," it just feels that way. +# +# To read TIFF data from a stream, the stream must be seekable. For +# progressive decoding, make sure to use TIFF files where the tag +# directory is placed first in the file. +# +# History: +# 1995-09-01 fl Created +# 1996-05-04 fl Handle JPEGTABLES tag +# 1996-05-18 fl Fixed COLORMAP support +# 1997-01-05 fl Fixed PREDICTOR support +# 1997-08-27 fl Added support for rational tags (from Perry Stoll) +# 1998-01-10 fl Fixed seek/tell (from Jan Blom) +# 1998-07-15 fl Use private names for internal variables +# 1999-06-13 fl Rewritten for PIL 1.0 (1.0) +# 2000-10-11 fl Additional fixes for Python 2.0 (1.1) +# 2001-04-17 fl Fixed rewind support (seek to frame 0) (1.2) +# 2001-05-12 fl Added write support for more tags (from Greg Couch) (1.3) +# 2001-12-18 fl Added workaround for broken Matrox library +# 2002-01-18 fl Don't mess up if photometric tag is missing (D. Alan Stewart) +# 2003-05-19 fl Check FILLORDER tag +# 2003-09-26 fl Added RGBa support +# 2004-02-24 fl Added DPI support; fixed rational write support +# 2005-02-07 fl Added workaround for broken Corel Draw 10 files +# 2006-01-09 fl Added support for float/double tags (from Russell Nelson) +# +# Copyright (c) 1997-2006 by Secret Labs AB. All rights reserved. +# Copyright (c) 1995-1997 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import io +import itertools +import logging +import math +import os +import struct +import warnings +from collections.abc import Callable, MutableMapping +from fractions import Fraction +from numbers import Number, Rational +from typing import IO, Any, cast + +from . import ExifTags, Image, ImageFile, ImageOps, ImagePalette, TiffTags +from ._binary import i16be as i16 +from ._binary import i32be as i32 +from ._binary import o8 +from ._util import DeferredError, is_path +from .TiffTags import TYPES + +TYPE_CHECKING = False +if TYPE_CHECKING: + from collections.abc import Iterator + from typing import NoReturn + + from ._typing import Buffer, IntegralLike, StrOrBytesPath + +logger = logging.getLogger(__name__) + +# Set these to true to force use of libtiff for reading or writing. +READ_LIBTIFF = False +WRITE_LIBTIFF = False +STRIP_SIZE = 65536 + +II = b"II" # little-endian (Intel style) +MM = b"MM" # big-endian (Motorola style) + +# +# -------------------------------------------------------------------- +# Read TIFF files + +# a few tag names, just to make the code below a bit more readable +OSUBFILETYPE = 255 +IMAGEWIDTH = 256 +IMAGELENGTH = 257 +BITSPERSAMPLE = 258 +COMPRESSION = 259 +PHOTOMETRIC_INTERPRETATION = 262 +FILLORDER = 266 +IMAGEDESCRIPTION = 270 +STRIPOFFSETS = 273 +SAMPLESPERPIXEL = 277 +ROWSPERSTRIP = 278 +STRIPBYTECOUNTS = 279 +X_RESOLUTION = 282 +Y_RESOLUTION = 283 +PLANAR_CONFIGURATION = 284 +RESOLUTION_UNIT = 296 +TRANSFERFUNCTION = 301 +SOFTWARE = 305 +DATE_TIME = 306 +ARTIST = 315 +PREDICTOR = 317 +COLORMAP = 320 +TILEWIDTH = 322 +TILELENGTH = 323 +TILEOFFSETS = 324 +TILEBYTECOUNTS = 325 +SUBIFD = 330 +EXTRASAMPLES = 338 +SAMPLEFORMAT = 339 +JPEGTABLES = 347 +YCBCRSUBSAMPLING = 530 +REFERENCEBLACKWHITE = 532 +COPYRIGHT = 33432 +IPTC_NAA_CHUNK = 33723 # newsphoto properties +PHOTOSHOP_CHUNK = 34377 # photoshop properties +ICCPROFILE = 34675 +EXIFIFD = 34665 +XMP = 700 +JPEGQUALITY = 65537 # pseudo-tag by libtiff + +# https://github.com/imagej/ImageJA/blob/master/src/main/java/ij/io/TiffDecoder.java +IMAGEJ_META_DATA_BYTE_COUNTS = 50838 +IMAGEJ_META_DATA = 50839 + +COMPRESSION_INFO = { + # Compression => pil compression name + 1: "raw", + 2: "tiff_ccitt", + 3: "group3", + 4: "group4", + 5: "tiff_lzw", + 6: "tiff_jpeg", # obsolete + 7: "jpeg", + 8: "tiff_adobe_deflate", + 32771: "tiff_raw_16", # 16-bit padding + 32773: "packbits", + 32809: "tiff_thunderscan", + 32946: "tiff_deflate", + 34676: "tiff_sgilog", + 34677: "tiff_sgilog24", + 34925: "lzma", + 50000: "zstd", + 50001: "webp", +} + +COMPRESSION_INFO_REV = {v: k for k, v in COMPRESSION_INFO.items()} + +OPEN_INFO = { + # (ByteOrder, PhotoInterpretation, SampleFormat, FillOrder, BitsPerSample, + # ExtraSamples) => mode, rawmode + (II, 0, (1,), 1, (1,), ()): ("1", "1;I"), + (MM, 0, (1,), 1, (1,), ()): ("1", "1;I"), + (II, 0, (1,), 2, (1,), ()): ("1", "1;IR"), + (MM, 0, (1,), 2, (1,), ()): ("1", "1;IR"), + (II, 1, (1,), 1, (1,), ()): ("1", "1"), + (MM, 1, (1,), 1, (1,), ()): ("1", "1"), + (II, 1, (1,), 2, (1,), ()): ("1", "1;R"), + (MM, 1, (1,), 2, (1,), ()): ("1", "1;R"), + (II, 0, (1,), 1, (2,), ()): ("L", "L;2I"), + (MM, 0, (1,), 1, (2,), ()): ("L", "L;2I"), + (II, 0, (1,), 2, (2,), ()): ("L", "L;2IR"), + (MM, 0, (1,), 2, (2,), ()): ("L", "L;2IR"), + (II, 1, (1,), 1, (2,), ()): ("L", "L;2"), + (MM, 1, (1,), 1, (2,), ()): ("L", "L;2"), + (II, 1, (1,), 2, (2,), ()): ("L", "L;2R"), + (MM, 1, (1,), 2, (2,), ()): ("L", "L;2R"), + (II, 0, (1,), 1, (4,), ()): ("L", "L;4I"), + (MM, 0, (1,), 1, (4,), ()): ("L", "L;4I"), + (II, 0, (1,), 2, (4,), ()): ("L", "L;4IR"), + (MM, 0, (1,), 2, (4,), ()): ("L", "L;4IR"), + (II, 1, (1,), 1, (4,), ()): ("L", "L;4"), + (MM, 1, (1,), 1, (4,), ()): ("L", "L;4"), + (II, 1, (1,), 2, (4,), ()): ("L", "L;4R"), + (MM, 1, (1,), 2, (4,), ()): ("L", "L;4R"), + (II, 0, (1,), 1, (8,), ()): ("L", "L;I"), + (MM, 0, (1,), 1, (8,), ()): ("L", "L;I"), + (II, 0, (1,), 2, (8,), ()): ("L", "L;IR"), + (MM, 0, (1,), 2, (8,), ()): ("L", "L;IR"), + (II, 1, (1,), 1, (8,), ()): ("L", "L"), + (MM, 1, (1,), 1, (8,), ()): ("L", "L"), + (II, 1, (2,), 1, (8,), ()): ("L", "L"), + (MM, 1, (2,), 1, (8,), ()): ("L", "L"), + (II, 1, (1,), 2, (8,), ()): ("L", "L;R"), + (MM, 1, (1,), 2, (8,), ()): ("L", "L;R"), + (II, 1, (1,), 1, (12,), ()): ("I;16", "I;12"), + (II, 0, (1,), 1, (16,), ()): ("I;16", "I;16"), + (II, 1, (1,), 1, (16,), ()): ("I;16", "I;16"), + (MM, 1, (1,), 1, (16,), ()): ("I;16B", "I;16B"), + (II, 1, (1,), 2, (16,), ()): ("I;16", "I;16R"), + (II, 1, (2,), 1, (16,), ()): ("I", "I;16S"), + (MM, 1, (2,), 1, (16,), ()): ("I", "I;16BS"), + (II, 0, (3,), 1, (32,), ()): ("F", "F;32F"), + (MM, 0, (3,), 1, (32,), ()): ("F", "F;32BF"), + (II, 1, (1,), 1, (32,), ()): ("I", "I;32N"), + (II, 1, (2,), 1, (32,), ()): ("I", "I;32S"), + (MM, 1, (2,), 1, (32,), ()): ("I", "I;32BS"), + (II, 1, (3,), 1, (32,), ()): ("F", "F;32F"), + (MM, 1, (3,), 1, (32,), ()): ("F", "F;32BF"), + (II, 1, (1,), 1, (8, 8), (2,)): ("LA", "LA"), + (MM, 1, (1,), 1, (8, 8), (2,)): ("LA", "LA"), + (II, 2, (1,), 1, (8, 8, 8), ()): ("RGB", "RGB"), + (MM, 2, (1,), 1, (8, 8, 8), ()): ("RGB", "RGB"), + (II, 2, (1,), 2, (8, 8, 8), ()): ("RGB", "RGB;R"), + (MM, 2, (1,), 2, (8, 8, 8), ()): ("RGB", "RGB;R"), + (II, 2, (1,), 1, (8, 8, 8, 8), ()): ("RGBA", "RGBA"), # missing ExtraSamples + (MM, 2, (1,), 1, (8, 8, 8, 8), ()): ("RGBA", "RGBA"), # missing ExtraSamples + (II, 2, (1,), 1, (8, 8, 8, 8), (0,)): ("RGB", "RGBX"), + (MM, 2, (1,), 1, (8, 8, 8, 8), (0,)): ("RGB", "RGBX"), + (II, 2, (1,), 1, (8, 8, 8, 8, 8), (0, 0)): ("RGB", "RGBXX"), + (MM, 2, (1,), 1, (8, 8, 8, 8, 8), (0, 0)): ("RGB", "RGBXX"), + (II, 2, (1,), 1, (8, 8, 8, 8, 8, 8), (0, 0, 0)): ("RGB", "RGBXXX"), + (MM, 2, (1,), 1, (8, 8, 8, 8, 8, 8), (0, 0, 0)): ("RGB", "RGBXXX"), + (II, 2, (1,), 1, (8, 8, 8, 8), (1,)): ("RGBA", "RGBa"), + (MM, 2, (1,), 1, (8, 8, 8, 8), (1,)): ("RGBA", "RGBa"), + (II, 2, (1,), 1, (8, 8, 8, 8, 8), (1, 0)): ("RGBA", "RGBaX"), + (MM, 2, (1,), 1, (8, 8, 8, 8, 8), (1, 0)): ("RGBA", "RGBaX"), + (II, 2, (1,), 1, (8, 8, 8, 8, 8, 8), (1, 0, 0)): ("RGBA", "RGBaXX"), + (MM, 2, (1,), 1, (8, 8, 8, 8, 8, 8), (1, 0, 0)): ("RGBA", "RGBaXX"), + (II, 2, (1,), 1, (8, 8, 8, 8), (2,)): ("RGBA", "RGBA"), + (MM, 2, (1,), 1, (8, 8, 8, 8), (2,)): ("RGBA", "RGBA"), + (II, 2, (1,), 1, (8, 8, 8, 8, 8), (2, 0)): ("RGBA", "RGBAX"), + (MM, 2, (1,), 1, (8, 8, 8, 8, 8), (2, 0)): ("RGBA", "RGBAX"), + (II, 2, (1,), 1, (8, 8, 8, 8, 8, 8), (2, 0, 0)): ("RGBA", "RGBAXX"), + (MM, 2, (1,), 1, (8, 8, 8, 8, 8, 8), (2, 0, 0)): ("RGBA", "RGBAXX"), + (II, 2, (1,), 1, (8, 8, 8, 8), (999,)): ("RGBA", "RGBA"), # Corel Draw 10 + (MM, 2, (1,), 1, (8, 8, 8, 8), (999,)): ("RGBA", "RGBA"), # Corel Draw 10 + (II, 2, (1,), 1, (16, 16, 16), ()): ("RGB", "RGB;16L"), + (MM, 2, (1,), 1, (16, 16, 16), ()): ("RGB", "RGB;16B"), + (II, 2, (1,), 1, (16, 16, 16, 16), ()): ("RGBA", "RGBA;16L"), + (MM, 2, (1,), 1, (16, 16, 16, 16), ()): ("RGBA", "RGBA;16B"), + (II, 2, (1,), 1, (16, 16, 16, 16), (0,)): ("RGB", "RGBX;16L"), + (MM, 2, (1,), 1, (16, 16, 16, 16), (0,)): ("RGB", "RGBX;16B"), + (II, 2, (1,), 1, (16, 16, 16, 16), (1,)): ("RGBA", "RGBa;16L"), + (MM, 2, (1,), 1, (16, 16, 16, 16), (1,)): ("RGBA", "RGBa;16B"), + (II, 2, (1,), 1, (16, 16, 16, 16), (2,)): ("RGBA", "RGBA;16L"), + (MM, 2, (1,), 1, (16, 16, 16, 16), (2,)): ("RGBA", "RGBA;16B"), + (II, 3, (1,), 1, (1,), ()): ("P", "P;1"), + (MM, 3, (1,), 1, (1,), ()): ("P", "P;1"), + (II, 3, (1,), 2, (1,), ()): ("P", "P;1R"), + (MM, 3, (1,), 2, (1,), ()): ("P", "P;1R"), + (II, 3, (1,), 1, (2,), ()): ("P", "P;2"), + (MM, 3, (1,), 1, (2,), ()): ("P", "P;2"), + (II, 3, (1,), 2, (2,), ()): ("P", "P;2R"), + (MM, 3, (1,), 2, (2,), ()): ("P", "P;2R"), + (II, 3, (1,), 1, (4,), ()): ("P", "P;4"), + (MM, 3, (1,), 1, (4,), ()): ("P", "P;4"), + (II, 3, (1,), 2, (4,), ()): ("P", "P;4R"), + (MM, 3, (1,), 2, (4,), ()): ("P", "P;4R"), + (II, 3, (1,), 1, (8,), ()): ("P", "P"), + (MM, 3, (1,), 1, (8,), ()): ("P", "P"), + (II, 3, (1,), 1, (8, 8), (0,)): ("P", "PX"), + (MM, 3, (1,), 1, (8, 8), (0,)): ("P", "PX"), + (II, 3, (1,), 1, (8, 8), (2,)): ("PA", "PA"), + (MM, 3, (1,), 1, (8, 8), (2,)): ("PA", "PA"), + (II, 3, (1,), 2, (8,), ()): ("P", "P;R"), + (MM, 3, (1,), 2, (8,), ()): ("P", "P;R"), + (II, 5, (1,), 1, (8, 8, 8, 8), ()): ("CMYK", "CMYK"), + (MM, 5, (1,), 1, (8, 8, 8, 8), ()): ("CMYK", "CMYK"), + (II, 5, (1,), 1, (8, 8, 8, 8, 8), (0,)): ("CMYK", "CMYKX"), + (MM, 5, (1,), 1, (8, 8, 8, 8, 8), (0,)): ("CMYK", "CMYKX"), + (II, 5, (1,), 1, (8, 8, 8, 8, 8, 8), (0, 0)): ("CMYK", "CMYKXX"), + (MM, 5, (1,), 1, (8, 8, 8, 8, 8, 8), (0, 0)): ("CMYK", "CMYKXX"), + (II, 5, (1,), 1, (16, 16, 16, 16), ()): ("CMYK", "CMYK;16L"), + (MM, 5, (1,), 1, (16, 16, 16, 16), ()): ("CMYK", "CMYK;16B"), + (II, 6, (1,), 1, (8,), ()): ("L", "L"), + (MM, 6, (1,), 1, (8,), ()): ("L", "L"), + # JPEG compressed images handled by LibTiff and auto-converted to RGBX + # Minimal Baseline TIFF requires YCbCr images to have 3 SamplesPerPixel + (II, 6, (1,), 1, (8, 8, 8), ()): ("RGB", "RGBX"), + (MM, 6, (1,), 1, (8, 8, 8), ()): ("RGB", "RGBX"), + (II, 8, (1,), 1, (8, 8, 8), ()): ("LAB", "LAB"), + (MM, 8, (1,), 1, (8, 8, 8), ()): ("LAB", "LAB"), +} + +MAX_SAMPLESPERPIXEL = max(len(key_tp[4]) for key_tp in OPEN_INFO) + +PREFIXES = [ + b"MM\x00\x2a", # Valid TIFF header with big-endian byte order + b"II\x2a\x00", # Valid TIFF header with little-endian byte order + b"MM\x2a\x00", # Invalid TIFF header, assume big-endian + b"II\x00\x2a", # Invalid TIFF header, assume little-endian + b"MM\x00\x2b", # BigTIFF with big-endian byte order + b"II\x2b\x00", # BigTIFF with little-endian byte order +] + + +def _accept(prefix: bytes) -> bool: + return prefix.startswith(tuple(PREFIXES)) + + +def _limit_rational( + val: float | Fraction | IFDRational, max_val: int +) -> tuple[IntegralLike, IntegralLike]: + inv = abs(val) > 1 + n_d = IFDRational(1 / val if inv else val).limit_rational(max_val) + return n_d[::-1] if inv else n_d + + +def _limit_signed_rational( + val: IFDRational, max_val: int, min_val: int +) -> tuple[IntegralLike, IntegralLike]: + frac = Fraction(val) + n_d: tuple[IntegralLike, IntegralLike] = frac.numerator, frac.denominator + + if min(float(i) for i in n_d) < min_val: + n_d = _limit_rational(val, abs(min_val)) + + n_d_float = tuple(float(i) for i in n_d) + if max(n_d_float) > max_val: + n_d = _limit_rational(n_d_float[0] / n_d_float[1], max_val) + + return n_d + + +## +# Wrapper for TIFF IFDs. + +_load_dispatch = {} +_write_dispatch = {} + + +def _delegate(op: str) -> Any: + def delegate( + self: IFDRational, *args: tuple[float, ...] + ) -> bool | float | Fraction: + return getattr(self._val, op)(*args) + + return delegate + + +class IFDRational(Rational): + """Implements a rational class where 0/0 is a legal value to match + the in the wild use of exif rationals. + + e.g., DigitalZoomRatio - 0.00/0.00 indicates that no digital zoom was used + """ + + """ If the denominator is 0, store this as a float('nan'), otherwise store + as a fractions.Fraction(). Delegate as appropriate + + """ + + __slots__ = ("_numerator", "_denominator", "_val") + + def __init__( + self, value: float | Fraction | IFDRational, denominator: int = 1 + ) -> None: + """ + :param value: either an integer numerator, a + float/rational/other number, or an IFDRational + :param denominator: Optional integer denominator + """ + self._val: Fraction | float + if isinstance(value, IFDRational): + self._numerator = value.numerator + self._denominator = value.denominator + self._val = value._val + return + + if isinstance(value, Fraction): + self._numerator = value.numerator + self._denominator = value.denominator + else: + if TYPE_CHECKING: + self._numerator = cast(IntegralLike, value) + else: + self._numerator = value + self._denominator = denominator + + if denominator == 0: + self._val = float("nan") + elif denominator == 1: + self._val = Fraction(value) + elif int(value) == value: + self._val = Fraction(int(value), denominator) + else: + self._val = Fraction(value / denominator) + + @property + def numerator(self) -> IntegralLike: + return self._numerator + + @property + def denominator(self) -> int: + return self._denominator + + def limit_rational(self, max_denominator: int) -> tuple[IntegralLike, int]: + """ + + :param max_denominator: Integer, the maximum denominator value + :returns: Tuple of (numerator, denominator) + """ + + if self.denominator == 0: + return self.numerator, self.denominator + + assert isinstance(self._val, Fraction) + f = self._val.limit_denominator(max_denominator) + return f.numerator, f.denominator + + def __repr__(self) -> str: + return str(float(self._val)) + + def __hash__(self) -> int: # type: ignore[override] + return self._val.__hash__() + + def __eq__(self, other: object) -> bool: + val = self._val + if isinstance(other, IFDRational): + other = other._val + if isinstance(other, float): + val = float(val) + return val == other + + def __getstate__(self) -> list[float | Fraction | IntegralLike]: + return [self._val, self._numerator, self._denominator] + + def __setstate__(self, state: list[float | Fraction | IntegralLike]) -> None: + IFDRational.__init__(self, 0) + _val, _numerator, _denominator = state + assert isinstance(_val, (float, Fraction)) + self._val = _val + if TYPE_CHECKING: + self._numerator = cast(IntegralLike, _numerator) + else: + self._numerator = _numerator + assert isinstance(_denominator, int) + self._denominator = _denominator + + """ a = ['add','radd', 'sub', 'rsub', 'mul', 'rmul', + 'truediv', 'rtruediv', 'floordiv', 'rfloordiv', + 'mod','rmod', 'pow','rpow', 'pos', 'neg', + 'abs', 'trunc', 'lt', 'gt', 'le', 'ge', 'bool', + 'ceil', 'floor', 'round'] + print("\n".join("__%s__ = _delegate('__%s__')" % (s,s) for s in a)) + """ + + __add__ = _delegate("__add__") + __radd__ = _delegate("__radd__") + __sub__ = _delegate("__sub__") + __rsub__ = _delegate("__rsub__") + __mul__ = _delegate("__mul__") + __rmul__ = _delegate("__rmul__") + __truediv__ = _delegate("__truediv__") + __rtruediv__ = _delegate("__rtruediv__") + __floordiv__ = _delegate("__floordiv__") + __rfloordiv__ = _delegate("__rfloordiv__") + __mod__ = _delegate("__mod__") + __rmod__ = _delegate("__rmod__") + __pow__ = _delegate("__pow__") + __rpow__ = _delegate("__rpow__") + __pos__ = _delegate("__pos__") + __neg__ = _delegate("__neg__") + __abs__ = _delegate("__abs__") + __trunc__ = _delegate("__trunc__") + __lt__ = _delegate("__lt__") + __gt__ = _delegate("__gt__") + __le__ = _delegate("__le__") + __ge__ = _delegate("__ge__") + __bool__ = _delegate("__bool__") + __ceil__ = _delegate("__ceil__") + __floor__ = _delegate("__floor__") + __round__ = _delegate("__round__") + # Python >= 3.11 + if hasattr(Fraction, "__int__"): + __int__ = _delegate("__int__") + + +_LoaderFunc = Callable[["ImageFileDirectory_v2", bytes, bool], Any] + + +def _register_loader(idx: int, size: int) -> Callable[[_LoaderFunc], _LoaderFunc]: + def decorator(func: _LoaderFunc) -> _LoaderFunc: + from .TiffTags import TYPES + + if func.__name__.startswith("load_"): + TYPES[idx] = func.__name__[5:].replace("_", " ") + _load_dispatch[idx] = size, func # noqa: F821 + return func + + return decorator + + +def _register_writer(idx: int) -> Callable[[Callable[..., Any]], Callable[..., Any]]: + def decorator(func: Callable[..., Any]) -> Callable[..., Any]: + _write_dispatch[idx] = func # noqa: F821 + return func + + return decorator + + +def _register_basic(idx_fmt_name: tuple[int, str, str]) -> None: + from .TiffTags import TYPES + + idx, fmt, name = idx_fmt_name + TYPES[idx] = name + size = struct.calcsize(f"={fmt}") + + def basic_handler( + self: ImageFileDirectory_v2, data: bytes, legacy_api: bool = True + ) -> tuple[Any, ...]: + return self._unpack(f"{len(data) // size}{fmt}", data) + + _load_dispatch[idx] = size, basic_handler # noqa: F821 + _write_dispatch[idx] = lambda self, *values: ( # noqa: F821 + b"".join(self._pack(fmt, value) for value in values) + ) + + +if TYPE_CHECKING: + _IFDv2Base = MutableMapping[int, Any] +else: + _IFDv2Base = MutableMapping + + +class ImageFileDirectory_v2(_IFDv2Base): + """This class represents a TIFF tag directory. To speed things up, we + don't decode tags unless they're asked for. + + Exposes a dictionary interface of the tags in the directory:: + + ifd = ImageFileDirectory_v2() + ifd[key] = 'Some Data' + ifd.tagtype[key] = TiffTags.ASCII + print(ifd[key]) + 'Some Data' + + Individual values are returned as the strings or numbers, sequences are + returned as tuples of the values. + + The tiff metadata type of each item is stored in a dictionary of + tag types in + :attr:`~PIL.TiffImagePlugin.ImageFileDirectory_v2.tagtype`. The types + are read from a tiff file, guessed from the type added, or added + manually. + + Data Structures: + + * ``self.tagtype = {}`` + + * Key: numerical TIFF tag number + * Value: integer corresponding to the data type from + :py:data:`.TiffTags.TYPES` + + .. versionadded:: 3.0.0 + + 'Internal' data structures: + + * ``self._tags_v2 = {}`` + + * Key: numerical TIFF tag number + * Value: decoded data, as tuple for multiple values + + * ``self._tagdata = {}`` + + * Key: numerical TIFF tag number + * Value: undecoded byte string from file + + * ``self._tags_v1 = {}`` + + * Key: numerical TIFF tag number + * Value: decoded data in the v1 format + + Tags will be found in the private attributes ``self._tagdata``, and in + ``self._tags_v2`` once decoded. + + ``self.legacy_api`` is a value for internal use, and shouldn't be changed + from outside code. In cooperation with + :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`, if ``legacy_api`` + is true, then decoded tags will be populated into both ``_tags_v1`` and + ``_tags_v2``. ``_tags_v2`` will be used if this IFD is used in the TIFF + save routine. Tags should be read from ``_tags_v1`` if + ``legacy_api == true``. + + """ + + _load_dispatch: dict[int, tuple[int, _LoaderFunc]] = {} + _write_dispatch: dict[int, Callable[..., Any]] = {} + + def __init__( + self, + ifh: bytes = b"II\x2a\x00\x00\x00\x00\x00", + prefix: bytes | None = None, + group: int | None = None, + ) -> None: + """Initialize an ImageFileDirectory. + + To construct an ImageFileDirectory from a real file, pass the 8-byte + magic header to the constructor. To only set the endianness, pass it + as the 'prefix' keyword argument. + + :param ifh: One of the accepted magic headers (cf. PREFIXES); also sets + endianness. + :param prefix: Override the endianness of the file. + """ + if not _accept(ifh): + msg = f"not a TIFF file (header {repr(ifh)} not valid)" + raise SyntaxError(msg) + self._prefix = prefix if prefix is not None else ifh[:2] + if self._prefix == MM: + self._endian = ">" + elif self._prefix == II: + self._endian = "<" + else: + msg = "not a TIFF IFD" + raise SyntaxError(msg) + self._bigtiff = ifh[2] == 43 + self.group = group + self.tagtype: dict[int, int] = {} + """ Dictionary of tag types """ + self.reset() + self.next = ( + self._unpack("Q", ifh[8:])[0] + if self._bigtiff + else self._unpack("L", ifh[4:])[0] + ) + self._legacy_api = False + + prefix = property(lambda self: self._prefix) + offset = property(lambda self: self._offset) + + @property + def legacy_api(self) -> bool: + return self._legacy_api + + @legacy_api.setter + def legacy_api(self, value: bool) -> NoReturn: + msg = "Not allowing setting of legacy api" + raise Exception(msg) + + def reset(self) -> None: + self._tags_v1: dict[int, Any] = {} # will remain empty if legacy_api is false + self._tags_v2: dict[int, Any] = {} # main tag storage + self._tagdata: dict[int, bytes] = {} + self.tagtype = {} # added 2008-06-05 by Florian Hoech + self._next = None + self._offset: int | None = None + + def __str__(self) -> str: + return str(dict(self)) + + def named(self) -> dict[str, Any]: + """ + :returns: dict of name|key: value + + Returns the complete tag dictionary, with named tags where possible. + """ + return { + TiffTags.lookup(code, self.group).name: value + for code, value in self.items() + } + + def __len__(self) -> int: + return len(set(self._tagdata) | set(self._tags_v2)) + + def __getitem__(self, tag: int) -> Any: + if tag not in self._tags_v2: # unpack on the fly + data = self._tagdata[tag] + typ = self.tagtype[tag] + size, handler = self._load_dispatch[typ] + self[tag] = handler(self, data, self.legacy_api) # check type + val = self._tags_v2[tag] + if self.legacy_api and not isinstance(val, (tuple, bytes)): + val = (val,) + return val + + def __contains__(self, tag: object) -> bool: + return tag in self._tags_v2 or tag in self._tagdata + + def __setitem__(self, tag: int, value: Any) -> None: + self._setitem(tag, value, self.legacy_api) + + def _setitem(self, tag: int, value: Any, legacy_api: bool) -> None: + basetypes = (Number, bytes, str) + + info = TiffTags.lookup(tag, self.group) + values = [value] if isinstance(value, basetypes) else value + + if tag not in self.tagtype: + if info.type: + self.tagtype[tag] = info.type + else: + self.tagtype[tag] = TiffTags.UNDEFINED + if all(isinstance(v, IFDRational) for v in values): + for v in values: + assert isinstance(v, IFDRational) + if v < 0: + self.tagtype[tag] = TiffTags.SIGNED_RATIONAL + break + else: + self.tagtype[tag] = TiffTags.RATIONAL + elif all(isinstance(v, int) for v in values): + short = True + signed_short = True + long = True + for v in values: + assert isinstance(v, int) + if short and not (0 <= v < 2**16): + short = False + if signed_short and not (-(2**15) < v < 2**15): + signed_short = False + if long and v < 0: + long = False + if short: + self.tagtype[tag] = TiffTags.SHORT + elif signed_short: + self.tagtype[tag] = TiffTags.SIGNED_SHORT + elif long: + self.tagtype[tag] = TiffTags.LONG + else: + self.tagtype[tag] = TiffTags.SIGNED_LONG + elif all(isinstance(v, float) for v in values): + self.tagtype[tag] = TiffTags.DOUBLE + elif all(isinstance(v, str) for v in values): + self.tagtype[tag] = TiffTags.ASCII + elif all(isinstance(v, bytes) for v in values): + self.tagtype[tag] = TiffTags.BYTE + + if self.tagtype[tag] == TiffTags.UNDEFINED: + values = [ + v.encode("ascii", "replace") if isinstance(v, str) else v + for v in values + ] + elif self.tagtype[tag] == TiffTags.RATIONAL: + values = [float(v) if isinstance(v, int) else v for v in values] + + is_ifd = self.tagtype[tag] == TiffTags.LONG and isinstance(values, dict) + if not is_ifd: + values = tuple( + info.cvt_enum(value) if isinstance(value, str) else value + for value in values + ) + + dest = self._tags_v1 if legacy_api else self._tags_v2 + + # Three branches: + # Spec'd length == 1, Actual length 1, store as element + # Spec'd length == 1, Actual > 1, Warn and truncate. Formerly barfed. + # No Spec, Actual length 1, Formerly (<4.2) returned a 1 element tuple. + # Don't mess with the legacy api, since it's frozen. + if not is_ifd and ( + (info.length == 1) + or self.tagtype[tag] == TiffTags.BYTE + or (info.length is None and len(values) == 1 and not legacy_api) + ): + # Don't mess with the legacy api, since it's frozen. + if legacy_api and self.tagtype[tag] in [ + TiffTags.RATIONAL, + TiffTags.SIGNED_RATIONAL, + ]: # rationals + values = (values,) + try: + (dest[tag],) = values + except ValueError: + # We've got a builtin tag with 1 expected entry + warnings.warn( + f"Metadata Warning, tag {tag} had too many entries: " + f"{len(values)}, expected 1" + ) + dest[tag] = values[0] + + else: + # Spec'd length > 1 or undefined + # Unspec'd, and length > 1 + dest[tag] = values + + def __delitem__(self, tag: int) -> None: + self._tags_v2.pop(tag, None) + self._tags_v1.pop(tag, None) + self._tagdata.pop(tag, None) + + def __iter__(self) -> Iterator[int]: + return iter(set(self._tagdata) | set(self._tags_v2)) + + def _unpack(self, fmt: str, data: bytes) -> tuple[Any, ...]: + return struct.unpack(self._endian + fmt, data) + + def _pack(self, fmt: str, *values: Any) -> bytes: + return struct.pack(self._endian + fmt, *values) + + list( + map( + _register_basic, + [ + (TiffTags.SHORT, "H", "short"), + (TiffTags.LONG, "L", "long"), + (TiffTags.SIGNED_BYTE, "b", "signed byte"), + (TiffTags.SIGNED_SHORT, "h", "signed short"), + (TiffTags.SIGNED_LONG, "l", "signed long"), + (TiffTags.FLOAT, "f", "float"), + (TiffTags.DOUBLE, "d", "double"), + (TiffTags.IFD, "L", "long"), + (TiffTags.LONG8, "Q", "long8"), + ], + ) + ) + + @_register_loader(1, 1) # Basic type, except for the legacy API. + def load_byte(self, data: bytes, legacy_api: bool = True) -> bytes: + return data + + @_register_writer(1) # Basic type, except for the legacy API. + def write_byte(self, data: bytes | int | IFDRational) -> bytes: + if isinstance(data, IFDRational): + data = int(data) + if isinstance(data, int): + data = bytes((data,)) + return data + + @_register_loader(2, 1) + def load_string(self, data: bytes, legacy_api: bool = True) -> str: + if data.endswith(b"\0"): + data = data[:-1] + return data.decode("latin-1", "replace") + + @_register_writer(2) + def write_string(self, value: str | bytes | int) -> bytes: + # remerge of https://github.com/python-pillow/Pillow/pull/1416 + if isinstance(value, int): + value = str(value) + if not isinstance(value, bytes): + value = value.encode("ascii", "replace") + return value + b"\0" + + @_register_loader(5, 8) + def load_rational( + self, data: bytes, legacy_api: bool = True + ) -> tuple[tuple[int, int] | IFDRational, ...]: + vals = self._unpack(f"{len(data) // 4}L", data) + + def combine(a: int, b: int) -> tuple[int, int] | IFDRational: + return (a, b) if legacy_api else IFDRational(a, b) + + return tuple(combine(num, denom) for num, denom in zip(vals[::2], vals[1::2])) + + @_register_writer(5) + def write_rational(self, *values: IFDRational) -> bytes: + return b"".join( + self._pack("2L", *_limit_rational(frac, 2**32 - 1)) for frac in values + ) + + @_register_loader(7, 1) + def load_undefined(self, data: bytes, legacy_api: bool = True) -> bytes: + return data + + @_register_writer(7) + def write_undefined(self, value: bytes | int | IFDRational) -> bytes: + if isinstance(value, IFDRational): + value = int(value) + if isinstance(value, int): + value = str(value).encode("ascii", "replace") + return value + + @_register_loader(10, 8) + def load_signed_rational( + self, data: bytes, legacy_api: bool = True + ) -> tuple[tuple[int, int] | IFDRational, ...]: + vals = self._unpack(f"{len(data) // 4}l", data) + + def combine(a: int, b: int) -> tuple[int, int] | IFDRational: + return (a, b) if legacy_api else IFDRational(a, b) + + return tuple(combine(num, denom) for num, denom in zip(vals[::2], vals[1::2])) + + @_register_writer(10) + def write_signed_rational(self, *values: IFDRational) -> bytes: + return b"".join( + self._pack("2l", *_limit_signed_rational(frac, 2**31 - 1, -(2**31))) + for frac in values + ) + + def _ensure_read(self, fp: IO[bytes], size: int) -> bytes: + ret = fp.read(size) + if len(ret) != size: + msg = ( + "Corrupt EXIF data. " + f"Expecting to read {size} bytes but only got {len(ret)}. " + ) + raise OSError(msg) + return ret + + def load(self, fp: IO[bytes]) -> None: + self.reset() + self._offset = fp.tell() + + try: + tag_count = ( + self._unpack("Q", self._ensure_read(fp, 8)) + if self._bigtiff + else self._unpack("H", self._ensure_read(fp, 2)) + )[0] + for i in range(tag_count): + tag, typ, count, data = ( + self._unpack("HHQ8s", self._ensure_read(fp, 20)) + if self._bigtiff + else self._unpack("HHL4s", self._ensure_read(fp, 12)) + ) + + tagname = TiffTags.lookup(tag, self.group).name + typname = TYPES.get(typ, "unknown") + msg = f"tag: {tagname} ({tag}) - type: {typname} ({typ})" + + try: + unit_size, handler = self._load_dispatch[typ] + except KeyError: + logger.debug("%s - unsupported type %s", msg, typ) + continue # ignore unsupported type + size = count * unit_size + if size > (8 if self._bigtiff else 4): + here = fp.tell() + (offset,) = self._unpack("Q" if self._bigtiff else "L", data) + msg += f" Tag Location: {here} - Data Location: {offset}" + fp.seek(offset) + data = ImageFile._safe_read(fp, size) + fp.seek(here) + else: + data = data[:size] + + if len(data) != size: + warnings.warn( + "Possibly corrupt EXIF data. " + f"Expecting to read {size} bytes but only got {len(data)}." + f" Skipping tag {tag}" + ) + logger.debug(msg) + continue + + if not data: + logger.debug(msg) + continue + + self._tagdata[tag] = data + self.tagtype[tag] = typ + + msg += " - value: " + msg += f"" if size > 32 else repr(data) + + logger.debug(msg) + + (self.next,) = ( + self._unpack("Q", self._ensure_read(fp, 8)) + if self._bigtiff + else self._unpack("L", self._ensure_read(fp, 4)) + ) + except OSError as msg: + warnings.warn(str(msg)) + return + + def _get_ifh(self) -> bytes: + ifh = self._prefix + self._pack("H", 43 if self._bigtiff else 42) + if self._bigtiff: + ifh += self._pack("HH", 8, 0) + ifh += self._pack("Q", 16) if self._bigtiff else self._pack("L", 8) + + return ifh + + def tobytes(self, offset: int = 0) -> bytes: + # FIXME What about tagdata? + result = self._pack("Q" if self._bigtiff else "H", len(self._tags_v2)) + + entries: list[tuple[int, int, int, bytes, bytes]] = [] + + fmt = "Q" if self._bigtiff else "L" + fmt_size = 8 if self._bigtiff else 4 + offset += ( + len(result) + len(self._tags_v2) * (20 if self._bigtiff else 12) + fmt_size + ) + stripoffsets = None + + # pass 1: convert tags to binary format + # always write tags in ascending order + for tag, value in sorted(self._tags_v2.items()): + if tag == STRIPOFFSETS: + stripoffsets = len(entries) + typ = self.tagtype[tag] + logger.debug("Tag %s, Type: %s, Value: %s", tag, typ, repr(value)) + is_ifd = typ == TiffTags.LONG and isinstance(value, dict) + if is_ifd: + ifd = ImageFileDirectory_v2(self._get_ifh(), group=tag) + values = self._tags_v2[tag] + for ifd_tag, ifd_value in values.items(): + ifd[ifd_tag] = ifd_value + data = ifd.tobytes(offset) + else: + values = value if isinstance(value, tuple) else (value,) + data = self._write_dispatch[typ](self, *values) + + tagname = TiffTags.lookup(tag, self.group).name + typname = "ifd" if is_ifd else TYPES.get(typ, "unknown") + msg = f"save: {tagname} ({tag}) - type: {typname} ({typ}) - value: " + msg += f"" if len(data) >= 16 else str(values) + logger.debug(msg) + + # count is sum of lengths for string and arbitrary data + if is_ifd: + count = 1 + elif typ in [TiffTags.BYTE, TiffTags.ASCII, TiffTags.UNDEFINED]: + count = len(data) + else: + count = len(values) + # figure out if data fits into the entry + if len(data) <= fmt_size: + entries.append((tag, typ, count, data.ljust(fmt_size, b"\0"), b"")) + else: + entries.append((tag, typ, count, self._pack(fmt, offset), data)) + offset += (len(data) + 1) // 2 * 2 # pad to word + + # update strip offset data to point beyond auxiliary data + if stripoffsets is not None: + tag, typ, count, value, data = entries[stripoffsets] + if data: + size, handler = self._load_dispatch[typ] + values = [val + offset for val in handler(self, data, self.legacy_api)] + data = self._write_dispatch[typ](self, *values) + else: + value = self._pack(fmt, self._unpack(fmt, value)[0] + offset) + entries[stripoffsets] = tag, typ, count, value, data + + # pass 2: write entries to file + for tag, typ, count, value, data in entries: + logger.debug("%s %s %s %s %s", tag, typ, count, repr(value), repr(data)) + result += self._pack( + "HHQ8s" if self._bigtiff else "HHL4s", tag, typ, count, value + ) + + # -- overwrite here for multi-page -- + result += self._pack(fmt, 0) # end of entries + + # pass 3: write auxiliary data to file + for tag, typ, count, value, data in entries: + result += data + if len(data) & 1: + result += b"\0" + + return result + + def save(self, fp: IO[bytes]) -> int: + if fp.tell() == 0: # skip TIFF header on subsequent pages + fp.write(self._get_ifh()) + + offset = fp.tell() + result = self.tobytes(offset) + fp.write(result) + return offset + len(result) + + +ImageFileDirectory_v2._load_dispatch = _load_dispatch +ImageFileDirectory_v2._write_dispatch = _write_dispatch +for idx, name in TYPES.items(): + name = name.replace(" ", "_") + setattr(ImageFileDirectory_v2, f"load_{name}", _load_dispatch[idx][1]) + setattr(ImageFileDirectory_v2, f"write_{name}", _write_dispatch[idx]) +del _load_dispatch, _write_dispatch, idx, name + + +# Legacy ImageFileDirectory support. +class ImageFileDirectory_v1(ImageFileDirectory_v2): + """This class represents the **legacy** interface to a TIFF tag directory. + + Exposes a dictionary interface of the tags in the directory:: + + ifd = ImageFileDirectory_v1() + ifd[key] = 'Some Data' + ifd.tagtype[key] = TiffTags.ASCII + print(ifd[key]) + ('Some Data',) + + Also contains a dictionary of tag types as read from the tiff image file, + :attr:`~PIL.TiffImagePlugin.ImageFileDirectory_v1.tagtype`. + + Values are returned as a tuple. + + .. deprecated:: 3.0.0 + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + self._legacy_api = True + + tags = property(lambda self: self._tags_v1) + tagdata = property(lambda self: self._tagdata) + + # defined in ImageFileDirectory_v2 + tagtype: dict[int, int] + """Dictionary of tag types""" + + @classmethod + def from_v2(cls, original: ImageFileDirectory_v2) -> ImageFileDirectory_v1: + """Returns an + :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1` + instance with the same data as is contained in the original + :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2` + instance. + + :returns: :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1` + + """ + + ifd = cls(prefix=original.prefix) + ifd._tagdata = original._tagdata + ifd.tagtype = original.tagtype + ifd.next = original.next # an indicator for multipage tiffs + return ifd + + def to_v2(self) -> ImageFileDirectory_v2: + """Returns an + :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2` + instance with the same data as is contained in the original + :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1` + instance. + + :returns: :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2` + + """ + + ifd = ImageFileDirectory_v2(prefix=self.prefix) + ifd._tagdata = dict(self._tagdata) + ifd.tagtype = dict(self.tagtype) + ifd._tags_v2 = dict(self._tags_v2) + return ifd + + def __contains__(self, tag: object) -> bool: + return tag in self._tags_v1 or tag in self._tagdata + + def __len__(self) -> int: + return len(set(self._tagdata) | set(self._tags_v1)) + + def __iter__(self) -> Iterator[int]: + return iter(set(self._tagdata) | set(self._tags_v1)) + + def __setitem__(self, tag: int, value: Any) -> None: + for legacy_api in (False, True): + self._setitem(tag, value, legacy_api) + + def __getitem__(self, tag: int) -> Any: + if tag not in self._tags_v1: # unpack on the fly + data = self._tagdata[tag] + typ = self.tagtype[tag] + size, handler = self._load_dispatch[typ] + for legacy in (False, True): + self._setitem(tag, handler(self, data, legacy), legacy) + val = self._tags_v1[tag] + if not isinstance(val, (tuple, bytes)): + val = (val,) + return val + + +# undone -- switch this pointer +ImageFileDirectory = ImageFileDirectory_v1 + + +## +# Image plugin for TIFF files. + + +class TiffImageFile(ImageFile.ImageFile): + format = "TIFF" + format_description = "Adobe TIFF" + _close_exclusive_fp_after_loading = False + + def __init__( + self, + fp: StrOrBytesPath | IO[bytes], + filename: str | bytes | None = None, + ) -> None: + self.tag_v2: ImageFileDirectory_v2 + """ Image file directory (tag dictionary) """ + + self.tag: ImageFileDirectory_v1 + """ Legacy tag entries """ + + super().__init__(fp, filename) + + def _open(self) -> None: + """Open the first image in a TIFF file""" + + # Header + assert self.fp is not None + ifh = self.fp.read(8) + if ifh[2] == 43: + ifh += self.fp.read(8) + + self.tag_v2 = ImageFileDirectory_v2(ifh) + + # setup frame pointers + self.__first = self.__next = self.tag_v2.next + self.__frame = -1 + self._fp = self.fp + self._frame_pos: list[int] = [] + self._n_frames: int | None = None + + logger.debug("*** TiffImageFile._open ***") + logger.debug("- __first: %s", self.__first) + logger.debug("- ifh: %s", repr(ifh)) # Use repr to avoid str(bytes) + + # and load the first frame + self._seek(0) + + @property + def n_frames(self) -> int: + current_n_frames = self._n_frames + if current_n_frames is None: + current = self.tell() + self._seek(len(self._frame_pos)) + while self._n_frames is None: + self._seek(self.tell() + 1) + self.seek(current) + assert self._n_frames is not None + return self._n_frames + + def seek(self, frame: int) -> None: + """Select a given frame as current image""" + if not self._seek_check(frame): + return + self._seek(frame) + if self._im is not None and ( + self.im.size != self._tile_size + or self.im.mode != self.mode + or self.readonly + ): + self._im = None + + def _seek(self, frame: int) -> None: + if isinstance(self._fp, DeferredError): + raise self._fp.ex + self.fp = self._fp + + while len(self._frame_pos) <= frame: + if not self.__next: + msg = "no more images in TIFF file" + raise EOFError(msg) + logger.debug( + "Seeking to frame %s, on frame %s, __next %s, location: %s", + frame, + self.__frame, + self.__next, + self.fp.tell(), + ) + if self.__next >= 2**63: + msg = "Unable to seek to frame" + raise ValueError(msg) + self.fp.seek(self.__next) + self._frame_pos.append(self.__next) + logger.debug("Loading tags, location: %s", self.fp.tell()) + self.tag_v2.load(self.fp) + if self.tag_v2.next in self._frame_pos: + # This IFD has already been processed + # Declare this to be the end of the image + self.__next = 0 + else: + self.__next = self.tag_v2.next + if self.__next == 0: + self._n_frames = frame + 1 + if len(self._frame_pos) == 1: + self.is_animated = self.__next != 0 + self.__frame += 1 + self.fp.seek(self._frame_pos[frame]) + self.tag_v2.load(self.fp) + if XMP in self.tag_v2: + xmp = self.tag_v2[XMP] + if isinstance(xmp, tuple) and len(xmp) == 1: + xmp = xmp[0] + self.info["xmp"] = xmp + elif "xmp" in self.info: + del self.info["xmp"] + self._reload_exif() + # fill the legacy tag/ifd entries + self.tag = self.ifd = ImageFileDirectory_v1.from_v2(self.tag_v2) + self.__frame = frame + self._setup() + + def tell(self) -> int: + """Return the current frame number""" + return self.__frame + + def get_photoshop_blocks(self) -> dict[int, dict[str, bytes]]: + """ + Returns a dictionary of Photoshop "Image Resource Blocks". + The keys are the image resource ID. For more information, see + https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#50577409_pgfId-1037727 + + :returns: Photoshop "Image Resource Blocks" in a dictionary. + """ + blocks = {} + val = self.tag_v2.get(ExifTags.Base.ImageResources) + if val: + while val.startswith(b"8BIM") and len(val) >= 12: + id = i16(val[4:6]) + n = math.ceil((val[6] + 1) / 2) * 2 + try: + size = i32(val[6 + n : 10 + n]) + except struct.error: + break + data = val[10 + n : 10 + n + size] + blocks[id] = {"data": data} + + val = val[math.ceil((10 + n + size) / 2) * 2 :] + return blocks + + def load(self) -> Image.core.PixelAccess | None: + if self.tile and self.use_load_libtiff: + return self._load_libtiff() + return super().load() + + def load_prepare(self) -> None: + if self._im is None: + Image._decompression_bomb_check(self._tile_size) + self.im = Image.core.new(self.mode, self._tile_size) + ImageFile.ImageFile.load_prepare(self) + + def load_end(self) -> None: + # allow closing if we're on the first frame, there's no next + # This is the ImageFile.load path only, libtiff specific below. + if not self.is_animated: + self._close_exclusive_fp_after_loading = True + + # load IFD data from fp before it is closed + exif = self.getexif() + for key in TiffTags.TAGS_V2_GROUPS: + if key not in exif: + continue + exif.get_ifd(key) + + ImageOps.exif_transpose(self, in_place=True) + if ExifTags.Base.Orientation in self.tag_v2: + del self.tag_v2[ExifTags.Base.Orientation] + + def _load_libtiff(self) -> Image.core.PixelAccess | None: + """Overload method triggered when we detect a compressed tiff + Calls out to libtiff""" + + Image.Image.load(self) + + self.load_prepare() + + if not len(self.tile) == 1: + msg = "Not exactly one tile" + raise OSError(msg) + + # (self._compression, (extents tuple), + # 0, (rawmode, self._compression, fp)) + extents = self.tile[0][1] + args = self.tile[0][3] + + # To be nice on memory footprint, if there's a + # file descriptor, use that instead of reading + # into a string in python. + assert self.fp is not None + try: + fp = hasattr(self.fp, "fileno") and self.fp.fileno() + # flush the file descriptor, prevents error on pypy 2.4+ + # should also eliminate the need for fp.tell + # in _seek + if hasattr(self.fp, "flush"): + self.fp.flush() + except OSError: + # io.BytesIO have a fileno, but returns an OSError if + # it doesn't use a file descriptor. + fp = False + + if fp: + assert isinstance(args, tuple) + args_list = list(args) + args_list[2] = fp + args = tuple(args_list) + + decoder = Image._getdecoder(self.mode, "libtiff", args, self.decoderconfig) + try: + decoder.setimage(self.im, extents) + except ValueError as e: + msg = "Couldn't set the image" + raise OSError(msg) from e + + close_self_fp = self._exclusive_fp and not self.is_animated + if hasattr(self.fp, "getvalue"): + # We've got a stringio like thing passed in. Yay for all in memory. + # The decoder needs the entire file in one shot, so there's not + # a lot we can do here other than give it the entire file. + # unless we could do something like get the address of the + # underlying string for stringio. + # + # Rearranging for supporting byteio items, since they have a fileno + # that returns an OSError if there's no underlying fp. Easier to + # deal with here by reordering. + logger.debug("have getvalue. just sending in a string from getvalue") + n, err = decoder.decode(self.fp.getvalue()) + elif fp: + # we've got a actual file on disk, pass in the fp. + logger.debug("have fileno, calling fileno version of the decoder.") + if not close_self_fp: + self.fp.seek(0) + # Save and restore the file position, because libtiff will move it + # outside of the Python runtime, and that will confuse + # io.BufferedReader and possible others. + # NOTE: This must use os.lseek(), and not fp.tell()/fp.seek(), + # because the buffer read head already may not equal the actual + # file position, and fp.seek() may just adjust it's internal + # pointer and not actually seek the OS file handle. + pos = os.lseek(fp, 0, os.SEEK_CUR) + # 4 bytes, otherwise the trace might error out + n, err = decoder.decode(b"fpfp") + os.lseek(fp, pos, os.SEEK_SET) + else: + # we have something else. + logger.debug("don't have fileno or getvalue. just reading") + self.fp.seek(0) + # UNDONE -- so much for that buffer size thing. + n, err = decoder.decode(self.fp.read()) + + self.tile = [] + self.readonly = 0 + + self.load_end() + + if close_self_fp: + self.fp.close() + self.fp = None # might be shared + + if err < 0: + msg = f"decoder error {err}" + raise OSError(msg) + + return Image.Image.load(self) + + def _setup(self) -> None: + """Setup this image object based on current tags""" + + if 0xBC01 in self.tag_v2: + msg = "Windows Media Photo files not yet supported" + raise OSError(msg) + + # extract relevant tags + self._compression = COMPRESSION_INFO[self.tag_v2.get(COMPRESSION, 1)] + self._planar_configuration = self.tag_v2.get(PLANAR_CONFIGURATION, 1) + + # photometric is a required tag, but not everyone is reading + # the specification + photo = self.tag_v2.get(PHOTOMETRIC_INTERPRETATION, 0) + + # old style jpeg compression images most certainly are YCbCr + if self._compression == "tiff_jpeg": + photo = 6 + + fillorder = self.tag_v2.get(FILLORDER, 1) + + logger.debug("*** Summary ***") + logger.debug("- compression: %s", self._compression) + logger.debug("- photometric_interpretation: %s", photo) + logger.debug("- planar_configuration: %s", self._planar_configuration) + logger.debug("- fill_order: %s", fillorder) + logger.debug("- YCbCr subsampling: %s", self.tag_v2.get(YCBCRSUBSAMPLING)) + + # size + try: + xsize = self.tag_v2[IMAGEWIDTH] + ysize = self.tag_v2[IMAGELENGTH] + except KeyError as e: + msg = "Missing dimensions" + raise TypeError(msg) from e + if not isinstance(xsize, int) or not isinstance(ysize, int): + msg = "Invalid dimensions" + raise ValueError(msg) + self._tile_size = xsize, ysize + orientation = self.tag_v2.get(ExifTags.Base.Orientation) + if orientation in (5, 6, 7, 8): + self._size = ysize, xsize + else: + self._size = xsize, ysize + + logger.debug("- size: %s", self.size) + + sample_format = self.tag_v2.get(SAMPLEFORMAT, (1,)) + if len(sample_format) > 1 and max(sample_format) == min(sample_format): + # SAMPLEFORMAT is properly per band, so an RGB image will + # be (1,1,1). But, we don't support per band pixel types, + # and anything more than one band is a uint8. So, just + # take the first element. Revisit this if adding support + # for more exotic images. + sample_format = (sample_format[0],) + + bps_tuple = self.tag_v2.get(BITSPERSAMPLE, (1,)) + extra_tuple = self.tag_v2.get(EXTRASAMPLES, ()) + samples_per_pixel = self.tag_v2.get( + SAMPLESPERPIXEL, + 3 if self._compression == "tiff_jpeg" and photo in (2, 6) else 1, + ) + if photo in (2, 6, 8): # RGB, YCbCr, LAB + bps_count = 3 + elif photo == 5: # CMYK + bps_count = 4 + else: + bps_count = 1 + if self._planar_configuration == 2 and extra_tuple and max(extra_tuple) == 0: + # If components are stored separately, + # then unspecified extra components at the end can be ignored + bps_tuple = bps_tuple[: -len(extra_tuple)] + samples_per_pixel -= len(extra_tuple) + extra_tuple = () + bps_count += len(extra_tuple) + bps_actual_count = len(bps_tuple) + + if samples_per_pixel > MAX_SAMPLESPERPIXEL: + # DOS check, samples_per_pixel can be a Long, and we extend the tuple below + logger.error( + "More samples per pixel than can be decoded: %s", samples_per_pixel + ) + msg = "Invalid value for samples per pixel" + raise SyntaxError(msg) + + if samples_per_pixel < bps_actual_count: + # If a file has more values in bps_tuple than expected, + # remove the excess. + bps_tuple = bps_tuple[:samples_per_pixel] + elif samples_per_pixel > bps_actual_count and bps_actual_count == 1: + # If a file has only one value in bps_tuple, when it should have more, + # presume it is the same number of bits for all of the samples. + bps_tuple = bps_tuple * samples_per_pixel + + if len(bps_tuple) != samples_per_pixel: + msg = "unknown data organization" + raise SyntaxError(msg) + + # mode: check photometric interpretation and bits per pixel + key = ( + self.tag_v2.prefix, + photo, + sample_format, + fillorder, + bps_tuple, + extra_tuple, + ) + logger.debug("format key: %s", key) + try: + self._mode, rawmode = OPEN_INFO[key] + except KeyError as e: + logger.debug("- unsupported format") + msg = "unknown pixel mode" + raise SyntaxError(msg) from e + + logger.debug("- raw mode: %s", rawmode) + logger.debug("- pil mode: %s", self.mode) + + self.info["compression"] = self._compression + + xres = self.tag_v2.get(X_RESOLUTION, 1) + yres = self.tag_v2.get(Y_RESOLUTION, 1) + + if xres and yres: + resunit = self.tag_v2.get(RESOLUTION_UNIT) + if resunit == 2: # dots per inch + self.info["dpi"] = (xres, yres) + elif resunit == 3: # dots per centimeter. convert to dpi + self.info["dpi"] = (xres * 2.54, yres * 2.54) + elif resunit is None: # used to default to 1, but now 2) + self.info["dpi"] = (xres, yres) + # For backward compatibility, + # we also preserve the old behavior + self.info["resolution"] = xres, yres + else: # No absolute unit of measurement + self.info["resolution"] = xres, yres + + # build tile descriptors + x = y = layer = 0 + self.tile = [] + self.use_load_libtiff = READ_LIBTIFF or self._compression != "raw" + if self.use_load_libtiff: + # Decoder expects entire file as one tile. + # There's a buffer size limit in load (64k) + # so large g4 images will fail if we use that + # function. + # + # Setup the one tile for the whole image, then + # use the _load_libtiff function. + + # libtiff handles the fillmode for us, so 1;IR should + # actually be 1;I. Including the R double reverses the + # bits, so stripes of the image are reversed. See + # https://github.com/python-pillow/Pillow/issues/279 + if fillorder == 2: + # Replace fillorder with fillorder=1 + key = key[:3] + (1,) + key[4:] + logger.debug("format key: %s", key) + # this should always work, since all the + # fillorder==2 modes have a corresponding + # fillorder=1 mode + self._mode, rawmode = OPEN_INFO[key] + # YCbCr images with new jpeg compression with pixels in one plane + # unpacked straight into RGB values + if ( + photo == 6 + and self._compression == "jpeg" + and self._planar_configuration == 1 + ): + rawmode = "RGB" + # libtiff always returns the bytes in native order. + # we're expecting image byte order. So, if the rawmode + # contains I;16, we need to convert from native to image + # byte order. + elif rawmode == "I;16": + rawmode = "I;16N" + elif rawmode.endswith((";16B", ";16L")): + rawmode = rawmode[:-1] + "N" + + # Offset in the tile tuple is 0, we go from 0,0 to + # w,h, and we only do this once -- eds + a = (rawmode, self._compression, False, self.tag_v2.offset) + self.tile.append(ImageFile._Tile("libtiff", (0, 0, xsize, ysize), 0, a)) + + elif STRIPOFFSETS in self.tag_v2 or TILEOFFSETS in self.tag_v2: + # striped image + if STRIPOFFSETS in self.tag_v2: + offsets = self.tag_v2[STRIPOFFSETS] + h = self.tag_v2.get(ROWSPERSTRIP, ysize) + w = xsize + else: + # tiled image + offsets = self.tag_v2[TILEOFFSETS] + tilewidth = self.tag_v2.get(TILEWIDTH) + h = self.tag_v2.get(TILELENGTH) + if not isinstance(tilewidth, int) or not isinstance(h, int): + msg = "Invalid tile dimensions" + raise ValueError(msg) + w = tilewidth + + if w == xsize and h == ysize and self._planar_configuration != 2: + # Every tile covers the image. Only use the last offset + offsets = offsets[-1:] + + for offset in offsets: + if x + w > xsize: + stride = w * sum(bps_tuple) / 8 # bytes per line + else: + stride = 0 + + tile_rawmode = rawmode + if self._planar_configuration == 2: + # each band on it's own layer + tile_rawmode = rawmode[layer] + # adjust stride width accordingly + stride /= bps_count + + args = (tile_rawmode, int(stride), 1) + self.tile.append( + ImageFile._Tile( + self._compression, + (x, y, min(x + w, xsize), min(y + h, ysize)), + offset, + args, + ) + ) + x += w + if x >= xsize: + x, y = 0, y + h + if y >= ysize: + y = 0 + layer += 1 + else: + logger.debug("- unsupported data organization") + msg = "unknown data organization" + raise SyntaxError(msg) + + # Fix up info. + if ICCPROFILE in self.tag_v2: + self.info["icc_profile"] = self.tag_v2[ICCPROFILE] + + # fixup palette descriptor + + if self.mode in ["P", "PA"]: + palette = [o8(b // 256) for b in self.tag_v2[COLORMAP]] + self.palette = ImagePalette.raw("RGB;L", b"".join(palette)) + + +# +# -------------------------------------------------------------------- +# Write TIFF files + +# little endian is default except for image modes with +# explicit big endian byte-order + +SAVE_INFO = { + # mode => rawmode, byteorder, photometrics, + # sampleformat, bitspersample, extra + "1": ("1", II, 1, 1, (1,), None), + "L": ("L", II, 1, 1, (8,), None), + "LA": ("LA", II, 1, 1, (8, 8), 2), + "P": ("P", II, 3, 1, (8,), None), + "PA": ("PA", II, 3, 1, (8, 8), 2), + "I": ("I;32S", II, 1, 2, (32,), None), + "I;16": ("I;16", II, 1, 1, (16,), None), + "I;16L": ("I;16L", II, 1, 1, (16,), None), + "F": ("F;32F", II, 1, 3, (32,), None), + "RGB": ("RGB", II, 2, 1, (8, 8, 8), None), + "RGBX": ("RGBX", II, 2, 1, (8, 8, 8, 8), 0), + "RGBA": ("RGBA", II, 2, 1, (8, 8, 8, 8), 2), + "CMYK": ("CMYK", II, 5, 1, (8, 8, 8, 8), None), + "YCbCr": ("YCbCr", II, 6, 1, (8, 8, 8), None), + "LAB": ("LAB", II, 8, 1, (8, 8, 8), None), + "I;16B": ("I;16B", MM, 1, 1, (16,), None), +} + + +def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + try: + rawmode, prefix, photo, format, bits, extra = SAVE_INFO[im.mode] + except KeyError as e: + msg = f"cannot write mode {im.mode} as TIFF" + raise OSError(msg) from e + + encoderinfo = im.encoderinfo + encoderconfig = im.encoderconfig + + ifd = ImageFileDirectory_v2(prefix=prefix) + if encoderinfo.get("big_tiff"): + ifd._bigtiff = True + + try: + compression = encoderinfo["compression"] + except KeyError: + compression = im.info.get("compression") + if isinstance(compression, int): + # compression value may be from BMP. Ignore it + compression = None + if compression is None: + compression = "raw" + elif compression == "tiff_jpeg": + # OJPEG is obsolete, so use new-style JPEG compression instead + compression = "jpeg" + elif compression == "tiff_deflate": + compression = "tiff_adobe_deflate" + + libtiff = WRITE_LIBTIFF or compression != "raw" + + # required for color libtiff images + ifd[PLANAR_CONFIGURATION] = 1 + + ifd[IMAGEWIDTH] = im.size[0] + ifd[IMAGELENGTH] = im.size[1] + + # write any arbitrary tags passed in as an ImageFileDirectory + if "tiffinfo" in encoderinfo: + info = encoderinfo["tiffinfo"] + elif "exif" in encoderinfo: + info = encoderinfo["exif"] + if isinstance(info, bytes): + exif = Image.Exif() + exif.load(info) + info = exif + else: + info = {} + logger.debug("Tiffinfo Keys: %s", list(info)) + if isinstance(info, ImageFileDirectory_v1): + info = info.to_v2() + for key in info: + if isinstance(info, Image.Exif) and key in TiffTags.TAGS_V2_GROUPS: + ifd[key] = info.get_ifd(key) + else: + ifd[key] = info.get(key) + try: + ifd.tagtype[key] = info.tagtype[key] + except Exception: + pass # might not be an IFD. Might not have populated type + + legacy_ifd = {} + if hasattr(im, "tag"): + legacy_ifd = im.tag.to_v2() + + supplied_tags = {**legacy_ifd, **getattr(im, "tag_v2", {})} + if supplied_tags.get(PLANAR_CONFIGURATION) == 2 and EXTRASAMPLES in supplied_tags: + # If the image used separate component planes, + # then EXTRASAMPLES should be ignored when saving contiguously + if SAMPLESPERPIXEL in supplied_tags: + supplied_tags[SAMPLESPERPIXEL] -= len(supplied_tags[EXTRASAMPLES]) + del supplied_tags[EXTRASAMPLES] + for tag in ( + # IFD offset that may not be correct in the saved image + EXIFIFD, + # Determined by the image format and should not be copied from legacy_ifd. + SAMPLEFORMAT, + ): + if tag in supplied_tags: + del supplied_tags[tag] + + # additions written by Greg Couch, gregc@cgl.ucsf.edu + # inspired by image-sig posting from Kevin Cazabon, kcazabon@home.com + if hasattr(im, "tag_v2"): + # preserve tags from original TIFF image file + for key in ( + RESOLUTION_UNIT, + X_RESOLUTION, + Y_RESOLUTION, + IPTC_NAA_CHUNK, + PHOTOSHOP_CHUNK, + XMP, + ): + if key in im.tag_v2: + if key == IPTC_NAA_CHUNK and im.tag_v2.tagtype[key] not in ( + TiffTags.BYTE, + TiffTags.UNDEFINED, + ): + del supplied_tags[key] + else: + ifd[key] = im.tag_v2[key] + ifd.tagtype[key] = im.tag_v2.tagtype[key] + + # preserve ICC profile (should also work when saving other formats + # which support profiles as TIFF) -- 2008-06-06 Florian Hoech + icc = encoderinfo.get("icc_profile", im.info.get("icc_profile")) + if icc: + ifd[ICCPROFILE] = icc + + for key, name in [ + (IMAGEDESCRIPTION, "description"), + (X_RESOLUTION, "resolution"), + (Y_RESOLUTION, "resolution"), + (X_RESOLUTION, "x_resolution"), + (Y_RESOLUTION, "y_resolution"), + (RESOLUTION_UNIT, "resolution_unit"), + (SOFTWARE, "software"), + (DATE_TIME, "date_time"), + (ARTIST, "artist"), + (COPYRIGHT, "copyright"), + ]: + if name in encoderinfo: + ifd[key] = encoderinfo[name] + + dpi = encoderinfo.get("dpi") + if dpi: + ifd[RESOLUTION_UNIT] = 2 + ifd[X_RESOLUTION] = dpi[0] + ifd[Y_RESOLUTION] = dpi[1] + + if bits != (1,): + ifd[BITSPERSAMPLE] = bits + if len(bits) != 1: + ifd[SAMPLESPERPIXEL] = len(bits) + if extra is not None: + ifd[EXTRASAMPLES] = extra + if format != 1: + ifd[SAMPLEFORMAT] = format + + if PHOTOMETRIC_INTERPRETATION not in ifd: + ifd[PHOTOMETRIC_INTERPRETATION] = photo + elif im.mode in ("1", "L") and ifd[PHOTOMETRIC_INTERPRETATION] == 0: + if im.mode == "1": + inverted_im = im.copy() + px = inverted_im.load() + if px is not None: + for y in range(inverted_im.height): + for x in range(inverted_im.width): + px[x, y] = 0 if px[x, y] == 255 else 255 + im = inverted_im + else: + im = ImageOps.invert(im) + + if im.mode in ["P", "PA"]: + lut = im.im.getpalette("RGB", "RGB;L") + colormap = [] + colors = len(lut) // 3 + for i in range(3): + colormap += [v * 256 for v in lut[colors * i : colors * (i + 1)]] + colormap += [0] * (256 - colors) + ifd[COLORMAP] = colormap + # data orientation + w, h = ifd[IMAGEWIDTH], ifd[IMAGELENGTH] + stride = len(bits) * ((w * bits[0] + 7) // 8) + if ROWSPERSTRIP not in ifd: + # aim for given strip size (64 KB by default) when using libtiff writer + if libtiff: + im_strip_size = encoderinfo.get("strip_size", STRIP_SIZE) + rows_per_strip = 1 if stride == 0 else min(im_strip_size // stride, h) + # JPEG encoder expects multiple of 8 rows + if compression == "jpeg": + rows_per_strip = min(((rows_per_strip + 7) // 8) * 8, h) + else: + rows_per_strip = h + if rows_per_strip == 0: + rows_per_strip = 1 + ifd[ROWSPERSTRIP] = rows_per_strip + strip_byte_counts = 1 if stride == 0 else stride * ifd[ROWSPERSTRIP] + strips_per_image = (h + ifd[ROWSPERSTRIP] - 1) // ifd[ROWSPERSTRIP] + if strip_byte_counts >= 2**16: + ifd.tagtype[STRIPBYTECOUNTS] = TiffTags.LONG + ifd[STRIPBYTECOUNTS] = (strip_byte_counts,) * (strips_per_image - 1) + ( + stride * h - strip_byte_counts * (strips_per_image - 1), + ) + ifd[STRIPOFFSETS] = tuple( + range(0, strip_byte_counts * strips_per_image, strip_byte_counts) + ) # this is adjusted by IFD writer + # no compression by default: + ifd[COMPRESSION] = COMPRESSION_INFO_REV.get(compression, 1) + + if im.mode == "YCbCr": + for tag, default_value in { + YCBCRSUBSAMPLING: (1, 1), + REFERENCEBLACKWHITE: (0, 255, 128, 255, 128, 255), + }.items(): + ifd.setdefault(tag, default_value) + + blocklist = [TILEWIDTH, TILELENGTH, TILEOFFSETS, TILEBYTECOUNTS] + if libtiff: + if "quality" in encoderinfo: + quality = encoderinfo["quality"] + if not isinstance(quality, int) or quality < 0 or quality > 100: + msg = "Invalid quality setting" + raise ValueError(msg) + if compression != "jpeg": + msg = "quality setting only supported for 'jpeg' compression" + raise ValueError(msg) + ifd[JPEGQUALITY] = quality + + logger.debug("Saving using libtiff encoder") + logger.debug("Items: %s", sorted(ifd.items())) + _fp = 0 + if hasattr(fp, "fileno"): + try: + fp.seek(0) + _fp = fp.fileno() + except io.UnsupportedOperation: + pass + + # optional types for non core tags + types = {} + # STRIPOFFSETS and STRIPBYTECOUNTS are added by the library + # based on the data in the strip. + # OSUBFILETYPE is deprecated. + # The other tags expect arrays with a certain length (fixed or depending on + # BITSPERSAMPLE, etc), passing arrays with a different length will result in + # segfaults. Block these tags until we add extra validation. + # SUBIFD may also cause a segfault. + blocklist += [ + OSUBFILETYPE, + REFERENCEBLACKWHITE, + STRIPBYTECOUNTS, + STRIPOFFSETS, + TRANSFERFUNCTION, + SUBIFD, + ] + + # bits per sample is a single short in the tiff directory, not a list. + atts: dict[int, Any] = {BITSPERSAMPLE: bits[0]} + # Merge the ones that we have with (optional) more bits from + # the original file, e.g x,y resolution so that we can + # save(load('')) == original file. + for tag, value in itertools.chain(ifd.items(), supplied_tags.items()): + # Libtiff can only process certain core items without adding + # them to the custom dictionary. + # Custom items are supported for int, float, unicode, string and byte + # values. Other types and tuples require a tagtype. + if tag not in TiffTags.LIBTIFF_CORE: + if tag in TiffTags.TAGS_V2_GROUPS: + types[tag] = TiffTags.LONG8 + elif tag in ifd.tagtype: + types[tag] = ifd.tagtype[tag] + elif isinstance(value, (int, float, str, bytes)) or ( + isinstance(value, tuple) + and all(isinstance(v, (int, float, IFDRational)) for v in value) + ): + type = TiffTags.lookup(tag).type + if type: + types[tag] = type + if tag not in atts and tag not in blocklist: + if isinstance(value, str): + atts[tag] = value.encode("ascii", "replace") + b"\0" + elif isinstance(value, IFDRational): + atts[tag] = float(value) + else: + atts[tag] = value + + if SAMPLEFORMAT in atts and len(atts[SAMPLEFORMAT]) == 1: + atts[SAMPLEFORMAT] = atts[SAMPLEFORMAT][0] + + logger.debug("Converted items: %s", sorted(atts.items())) + + # libtiff always expects the bytes in native order. + # we're storing image byte order. So, if the rawmode + # contains I;16, we need to convert from native to image + # byte order. + if im.mode in ("I;16", "I;16B", "I;16L"): + rawmode = "I;16N" + + # Pass tags as sorted list so that the tags are set in a fixed order. + # This is required by libtiff for some tags. For example, the JPEGQUALITY + # pseudo tag requires that the COMPRESS tag was already set. + tags = list(atts.items()) + tags.sort() + a = (rawmode, compression, _fp, filename, tags, types) + encoder = Image._getencoder(im.mode, "libtiff", a, encoderconfig) + encoder.setimage(im.im, (0, 0) + im.size) + while True: + errcode, data = encoder.encode(ImageFile.MAXBLOCK)[1:] + if not _fp: + fp.write(data) + if errcode: + break + if errcode < 0: + msg = f"encoder error {errcode} when writing image file" + raise OSError(msg) + + else: + for tag in blocklist: + del ifd[tag] + offset = ifd.save(fp) + + ImageFile._save( + im, + fp, + [ImageFile._Tile("raw", (0, 0) + im.size, offset, (rawmode, stride, 1))], + ) + + # -- helper for multi-page save -- + if "_debug_multipage" in encoderinfo: + # just to access o32 and o16 (using correct byte order) + setattr(im, "_debug_multipage", ifd) + + +class AppendingTiffWriter(io.BytesIO): + fieldSizes = [ + 0, # None + 1, # byte + 1, # ascii + 2, # short + 4, # long + 8, # rational + 1, # sbyte + 1, # undefined + 2, # sshort + 4, # slong + 8, # srational + 4, # float + 8, # double + 4, # ifd + 2, # unicode + 4, # complex + 8, # long8 + ] + + Tags = { + 273, # StripOffsets + 288, # FreeOffsets + 324, # TileOffsets + 519, # JPEGQTables + 520, # JPEGDCTables + 521, # JPEGACTables + } + + def __init__(self, fn: StrOrBytesPath | IO[bytes], new: bool = False) -> None: + self.f: IO[bytes] + if is_path(fn): + self.name = fn + self.close_fp = True + try: + self.f = open(fn, "w+b" if new else "r+b") + except OSError: + self.f = open(fn, "w+b") + else: + self.f = cast(IO[bytes], fn) + self.close_fp = False + self.beginning = self.f.tell() + self.setup() + + def setup(self) -> None: + # Reset everything. + self.f.seek(self.beginning, os.SEEK_SET) + + self.whereToWriteNewIFDOffset: int | None = None + self.offsetOfNewPage = 0 + + self.IIMM = iimm = self.f.read(4) + self._bigtiff = b"\x2b" in iimm + if not iimm: + # empty file - first page + self.isFirst = True + return + + self.isFirst = False + if iimm not in PREFIXES: + msg = "Invalid TIFF file header" + raise RuntimeError(msg) + + self.setEndian("<" if iimm.startswith(II) else ">") + + if self._bigtiff: + self.f.seek(4, os.SEEK_CUR) + self.skipIFDs() + self.goToEnd() + + def finalize(self) -> None: + if self.isFirst: + return + + # fix offsets + self.f.seek(self.offsetOfNewPage) + + iimm = self.f.read(4) + if not iimm: + # Make it easy to finish a frame without committing to a new one. + return + + if iimm != self.IIMM: + msg = "IIMM of new page doesn't match IIMM of first page" + raise RuntimeError(msg) + + if self._bigtiff: + self.f.seek(4, os.SEEK_CUR) + ifd_offset = self._read(8 if self._bigtiff else 4) + ifd_offset += self.offsetOfNewPage + assert self.whereToWriteNewIFDOffset is not None + self.f.seek(self.whereToWriteNewIFDOffset) + self._write(ifd_offset, 8 if self._bigtiff else 4) + self.f.seek(ifd_offset) + self.fixIFD() + + def newFrame(self) -> None: + # Call this to finish a frame. + self.finalize() + self.setup() + + def __enter__(self) -> AppendingTiffWriter: + return self + + def __exit__(self, *args: object) -> None: + if self.close_fp: + self.close() + + def tell(self) -> int: + return self.f.tell() - self.offsetOfNewPage + + def seek(self, offset: int, whence: int = io.SEEK_SET) -> int: + """ + :param offset: Distance to seek. + :param whence: Whether the distance is relative to the start, + end or current position. + :returns: The resulting position, relative to the start. + """ + if whence == os.SEEK_SET: + offset += self.offsetOfNewPage + + self.f.seek(offset, whence) + return self.tell() + + def goToEnd(self) -> None: + self.f.seek(0, os.SEEK_END) + pos = self.f.tell() + + # pad to 16 byte boundary + pad_bytes = 16 - pos % 16 + if 0 < pad_bytes < 16: + self.f.write(bytes(pad_bytes)) + self.offsetOfNewPage = self.f.tell() + + def setEndian(self, endian: str) -> None: + self.endian = endian + self.longFmt = f"{self.endian}L" + self.shortFmt = f"{self.endian}H" + self.tagFormat = f"{self.endian}HH" + ("Q" if self._bigtiff else "L") + + def skipIFDs(self) -> None: + while True: + ifd_offset = self._read(8 if self._bigtiff else 4) + if ifd_offset == 0: + self.whereToWriteNewIFDOffset = self.f.tell() - ( + 8 if self._bigtiff else 4 + ) + break + + self.f.seek(ifd_offset) + num_tags = self._read(8 if self._bigtiff else 2) + self.f.seek(num_tags * (20 if self._bigtiff else 12), os.SEEK_CUR) + + def write(self, data: Buffer, /) -> int: + return self.f.write(data) + + def _fmt(self, field_size: int) -> str: + try: + return {2: "H", 4: "L", 8: "Q"}[field_size] + except KeyError: + msg = "offset is not supported" + raise RuntimeError(msg) + + def _read(self, field_size: int) -> int: + (value,) = struct.unpack( + self.endian + self._fmt(field_size), self.f.read(field_size) + ) + return value + + def readShort(self) -> int: + return self._read(2) + + def readLong(self) -> int: + return self._read(4) + + @staticmethod + def _verify_bytes_written(bytes_written: int | None, expected: int) -> None: + if bytes_written is not None and bytes_written != expected: + msg = f"wrote only {bytes_written} bytes but wanted {expected}" + raise RuntimeError(msg) + + def _rewriteLast( + self, value: int, field_size: int, new_field_size: int = 0 + ) -> None: + self.f.seek(-field_size, os.SEEK_CUR) + if not new_field_size: + new_field_size = field_size + bytes_written = self.f.write( + struct.pack(self.endian + self._fmt(new_field_size), value) + ) + self._verify_bytes_written(bytes_written, new_field_size) + + def rewriteLastShortToLong(self, value: int) -> None: + self._rewriteLast(value, 2, 4) + + def rewriteLastShort(self, value: int) -> None: + return self._rewriteLast(value, 2) + + def rewriteLastLong(self, value: int) -> None: + return self._rewriteLast(value, 4) + + def _write(self, value: int, field_size: int) -> None: + bytes_written = self.f.write( + struct.pack(self.endian + self._fmt(field_size), value) + ) + self._verify_bytes_written(bytes_written, field_size) + + def writeShort(self, value: int) -> None: + self._write(value, 2) + + def writeLong(self, value: int) -> None: + self._write(value, 4) + + def close(self) -> None: + self.finalize() + if self.close_fp: + self.f.close() + + def fixIFD(self) -> None: + num_tags = self._read(8 if self._bigtiff else 2) + + for i in range(num_tags): + tag, field_type, count = struct.unpack( + self.tagFormat, self.f.read(12 if self._bigtiff else 8) + ) + + field_size = self.fieldSizes[field_type] + total_size = field_size * count + fmt_size = 8 if self._bigtiff else 4 + is_local = total_size <= fmt_size + if not is_local: + offset = self._read(fmt_size) + self.offsetOfNewPage + self._rewriteLast(offset, fmt_size) + + if tag in self.Tags: + cur_pos = self.f.tell() + + logger.debug( + "fixIFD: %s (%d) - type: %s (%d) - type size: %d - count: %d", + TiffTags.lookup(tag).name, + tag, + TYPES.get(field_type, "unknown"), + field_type, + field_size, + count, + ) + + if is_local: + self._fixOffsets(count, field_size) + self.f.seek(cur_pos + fmt_size) + else: + self.f.seek(offset) + self._fixOffsets(count, field_size) + self.f.seek(cur_pos) + + elif is_local: + # skip the locally stored value that is not an offset + self.f.seek(fmt_size, os.SEEK_CUR) + + def _fixOffsets(self, count: int, field_size: int) -> None: + for i in range(count): + offset = self._read(field_size) + offset += self.offsetOfNewPage + + new_field_size = 0 + if self._bigtiff and field_size in (2, 4) and offset >= 2**32: + # offset is now too large - we must convert long to long8 + new_field_size = 8 + elif field_size == 2 and offset >= 2**16: + # offset is now too large - we must convert short to long + new_field_size = 4 + if new_field_size: + if count != 1: + msg = "not implemented" + raise RuntimeError(msg) # XXX TODO + + # simple case - the offset is just one and therefore it is + # local (not referenced with another offset) + self._rewriteLast(offset, field_size, new_field_size) + # Move back past the new offset, past 'count', and before 'field_type' + rewind = -new_field_size - 4 - 2 + self.f.seek(rewind, os.SEEK_CUR) + self.writeShort(new_field_size) # rewrite the type + self.f.seek(2 - rewind, os.SEEK_CUR) + else: + self._rewriteLast(offset, field_size) + + def fixOffsets( + self, count: int, isShort: bool = False, isLong: bool = False + ) -> None: + if isShort: + field_size = 2 + elif isLong: + field_size = 4 + else: + field_size = 0 + return self._fixOffsets(count, field_size) + + +def _save_all(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + append_images = list(im.encoderinfo.get("append_images", [])) + if not hasattr(im, "n_frames") and not append_images: + return _save(im, fp, filename) + + cur_idx = im.tell() + try: + with AppendingTiffWriter(fp) as tf: + for ims in [im] + append_images: + encoderinfo = ims._attach_default_encoderinfo(im) + if not hasattr(ims, "encoderconfig"): + ims.encoderconfig = () + nfr = getattr(ims, "n_frames", 1) + + for idx in range(nfr): + ims.seek(idx) + ims.load() + _save(ims, tf, filename) + tf.newFrame() + ims.encoderinfo = encoderinfo + finally: + im.seek(cur_idx) + + +# +# -------------------------------------------------------------------- +# Register + +Image.register_open(TiffImageFile.format, TiffImageFile, _accept) +Image.register_save(TiffImageFile.format, _save) +Image.register_save_all(TiffImageFile.format, _save_all) + +Image.register_extensions(TiffImageFile.format, [".tif", ".tiff"]) + +Image.register_mime(TiffImageFile.format, "image/tiff") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/TiffTags.py b/Python/venv/lib/python3.12/site-packages/PIL/TiffTags.py new file mode 100644 index 0000000..613a3b7 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/TiffTags.py @@ -0,0 +1,566 @@ +# +# The Python Imaging Library. +# $Id$ +# +# TIFF tags +# +# This module provides clear-text names for various well-known +# TIFF tags. the TIFF codec works just fine without it. +# +# Copyright (c) Secret Labs AB 1999. +# +# See the README file for information on usage and redistribution. +# + +## +# This module provides constants and clear-text names for various +# well-known TIFF tags. +## +from __future__ import annotations + +from typing import NamedTuple + + +class _TagInfo(NamedTuple): + value: int | None + name: str + type: int | None + length: int | None + enum: dict[str, int] + + +class TagInfo(_TagInfo): + __slots__: list[str] = [] + + def __new__( + cls, + value: int | None = None, + name: str = "unknown", + type: int | None = None, + length: int | None = None, + enum: dict[str, int] | None = None, + ) -> TagInfo: + return super().__new__(cls, value, name, type, length, enum or {}) + + def cvt_enum(self, value: str) -> int | str: + # Using get will call hash(value), which can be expensive + # for some types (e.g. Fraction). Since self.enum is rarely + # used, it's usually better to test it first. + return self.enum.get(value, value) if self.enum else value + + +def lookup(tag: int, group: int | None = None) -> TagInfo: + """ + :param tag: Integer tag number + :param group: Which :py:data:`~PIL.TiffTags.TAGS_V2_GROUPS` to look in + + .. versionadded:: 8.3.0 + + :returns: Taginfo namedtuple, From the ``TAGS_V2`` info if possible, + otherwise just populating the value and name from ``TAGS``. + If the tag is not recognized, "unknown" is returned for the name + + """ + + if group is not None: + info = TAGS_V2_GROUPS[group].get(tag) if group in TAGS_V2_GROUPS else None + else: + info = TAGS_V2.get(tag) + return info or TagInfo(tag, TAGS.get(tag, "unknown")) + + +## +# Map tag numbers to tag info. +# +# id: (Name, Type, Length[, enum_values]) +# +# The length here differs from the length in the tiff spec. For +# numbers, the tiff spec is for the number of fields returned. We +# agree here. For string-like types, the tiff spec uses the length of +# field in bytes. In Pillow, we are using the number of expected +# fields, in general 1 for string-like types. + + +BYTE = 1 +ASCII = 2 +SHORT = 3 +LONG = 4 +RATIONAL = 5 +SIGNED_BYTE = 6 +UNDEFINED = 7 +SIGNED_SHORT = 8 +SIGNED_LONG = 9 +SIGNED_RATIONAL = 10 +FLOAT = 11 +DOUBLE = 12 +IFD = 13 +LONG8 = 16 + +_tags_v2: dict[int, tuple[str, int, int] | tuple[str, int, int, dict[str, int]]] = { + 254: ("NewSubfileType", LONG, 1), + 255: ("SubfileType", SHORT, 1), + 256: ("ImageWidth", LONG, 1), + 257: ("ImageLength", LONG, 1), + 258: ("BitsPerSample", SHORT, 0), + 259: ( + "Compression", + SHORT, + 1, + { + "Uncompressed": 1, + "CCITT 1d": 2, + "Group 3 Fax": 3, + "Group 4 Fax": 4, + "LZW": 5, + "JPEG": 6, + "PackBits": 32773, + }, + ), + 262: ( + "PhotometricInterpretation", + SHORT, + 1, + { + "WhiteIsZero": 0, + "BlackIsZero": 1, + "RGB": 2, + "RGB Palette": 3, + "Transparency Mask": 4, + "CMYK": 5, + "YCbCr": 6, + "CieLAB": 8, + "CFA": 32803, # TIFF/EP, Adobe DNG + "LinearRaw": 32892, # Adobe DNG + }, + ), + 263: ("Threshholding", SHORT, 1), + 264: ("CellWidth", SHORT, 1), + 265: ("CellLength", SHORT, 1), + 266: ("FillOrder", SHORT, 1), + 269: ("DocumentName", ASCII, 1), + 270: ("ImageDescription", ASCII, 1), + 271: ("Make", ASCII, 1), + 272: ("Model", ASCII, 1), + 273: ("StripOffsets", LONG, 0), + 274: ("Orientation", SHORT, 1), + 277: ("SamplesPerPixel", SHORT, 1), + 278: ("RowsPerStrip", LONG, 1), + 279: ("StripByteCounts", LONG, 0), + 280: ("MinSampleValue", SHORT, 0), + 281: ("MaxSampleValue", SHORT, 0), + 282: ("XResolution", RATIONAL, 1), + 283: ("YResolution", RATIONAL, 1), + 284: ("PlanarConfiguration", SHORT, 1, {"Contiguous": 1, "Separate": 2}), + 285: ("PageName", ASCII, 1), + 286: ("XPosition", RATIONAL, 1), + 287: ("YPosition", RATIONAL, 1), + 288: ("FreeOffsets", LONG, 1), + 289: ("FreeByteCounts", LONG, 1), + 290: ("GrayResponseUnit", SHORT, 1), + 291: ("GrayResponseCurve", SHORT, 0), + 292: ("T4Options", LONG, 1), + 293: ("T6Options", LONG, 1), + 296: ("ResolutionUnit", SHORT, 1, {"none": 1, "inch": 2, "cm": 3}), + 297: ("PageNumber", SHORT, 2), + 301: ("TransferFunction", SHORT, 0), + 305: ("Software", ASCII, 1), + 306: ("DateTime", ASCII, 1), + 315: ("Artist", ASCII, 1), + 316: ("HostComputer", ASCII, 1), + 317: ("Predictor", SHORT, 1, {"none": 1, "Horizontal Differencing": 2}), + 318: ("WhitePoint", RATIONAL, 2), + 319: ("PrimaryChromaticities", RATIONAL, 6), + 320: ("ColorMap", SHORT, 0), + 321: ("HalftoneHints", SHORT, 2), + 322: ("TileWidth", LONG, 1), + 323: ("TileLength", LONG, 1), + 324: ("TileOffsets", LONG, 0), + 325: ("TileByteCounts", LONG, 0), + 330: ("SubIFDs", LONG, 0), + 332: ("InkSet", SHORT, 1), + 333: ("InkNames", ASCII, 1), + 334: ("NumberOfInks", SHORT, 1), + 336: ("DotRange", SHORT, 0), + 337: ("TargetPrinter", ASCII, 1), + 338: ("ExtraSamples", SHORT, 0), + 339: ("SampleFormat", SHORT, 0), + 340: ("SMinSampleValue", DOUBLE, 0), + 341: ("SMaxSampleValue", DOUBLE, 0), + 342: ("TransferRange", SHORT, 6), + 347: ("JPEGTables", UNDEFINED, 1), + # obsolete JPEG tags + 512: ("JPEGProc", SHORT, 1), + 513: ("JPEGInterchangeFormat", LONG, 1), + 514: ("JPEGInterchangeFormatLength", LONG, 1), + 515: ("JPEGRestartInterval", SHORT, 1), + 517: ("JPEGLosslessPredictors", SHORT, 0), + 518: ("JPEGPointTransforms", SHORT, 0), + 519: ("JPEGQTables", LONG, 0), + 520: ("JPEGDCTables", LONG, 0), + 521: ("JPEGACTables", LONG, 0), + 529: ("YCbCrCoefficients", RATIONAL, 3), + 530: ("YCbCrSubSampling", SHORT, 2), + 531: ("YCbCrPositioning", SHORT, 1), + 532: ("ReferenceBlackWhite", RATIONAL, 6), + 700: ("XMP", BYTE, 0), + # Four private SGI tags + 32995: ("Matteing", SHORT, 1), + 32996: ("DataType", SHORT, 0), + 32997: ("ImageDepth", LONG, 1), + 32998: ("TileDepth", LONG, 1), + 33432: ("Copyright", ASCII, 1), + 33723: ("IptcNaaInfo", UNDEFINED, 1), + 34377: ("PhotoshopInfo", BYTE, 0), + # FIXME add more tags here + 34665: ("ExifIFD", LONG, 1), + 34675: ("ICCProfile", UNDEFINED, 1), + 34853: ("GPSInfoIFD", LONG, 1), + 36864: ("ExifVersion", UNDEFINED, 1), + 37724: ("ImageSourceData", UNDEFINED, 1), + 40965: ("InteroperabilityIFD", LONG, 1), + 41730: ("CFAPattern", UNDEFINED, 1), + # MPInfo + 45056: ("MPFVersion", UNDEFINED, 1), + 45057: ("NumberOfImages", LONG, 1), + 45058: ("MPEntry", UNDEFINED, 1), + 45059: ("ImageUIDList", UNDEFINED, 0), # UNDONE, check + 45060: ("TotalFrames", LONG, 1), + 45313: ("MPIndividualNum", LONG, 1), + 45569: ("PanOrientation", LONG, 1), + 45570: ("PanOverlap_H", RATIONAL, 1), + 45571: ("PanOverlap_V", RATIONAL, 1), + 45572: ("BaseViewpointNum", LONG, 1), + 45573: ("ConvergenceAngle", SIGNED_RATIONAL, 1), + 45574: ("BaselineLength", RATIONAL, 1), + 45575: ("VerticalDivergence", SIGNED_RATIONAL, 1), + 45576: ("AxisDistance_X", SIGNED_RATIONAL, 1), + 45577: ("AxisDistance_Y", SIGNED_RATIONAL, 1), + 45578: ("AxisDistance_Z", SIGNED_RATIONAL, 1), + 45579: ("YawAngle", SIGNED_RATIONAL, 1), + 45580: ("PitchAngle", SIGNED_RATIONAL, 1), + 45581: ("RollAngle", SIGNED_RATIONAL, 1), + 40960: ("FlashPixVersion", UNDEFINED, 1), + 50741: ("MakerNoteSafety", SHORT, 1, {"Unsafe": 0, "Safe": 1}), + 50780: ("BestQualityScale", RATIONAL, 1), + 50838: ("ImageJMetaDataByteCounts", LONG, 0), # Can be more than one + 50839: ("ImageJMetaData", UNDEFINED, 1), # see Issue #2006 +} +_tags_v2_groups = { + # ExifIFD + 34665: { + 36864: ("ExifVersion", UNDEFINED, 1), + 40960: ("FlashPixVersion", UNDEFINED, 1), + 40965: ("InteroperabilityIFD", LONG, 1), + 41730: ("CFAPattern", UNDEFINED, 1), + }, + # GPSInfoIFD + 34853: { + 0: ("GPSVersionID", BYTE, 4), + 1: ("GPSLatitudeRef", ASCII, 2), + 2: ("GPSLatitude", RATIONAL, 3), + 3: ("GPSLongitudeRef", ASCII, 2), + 4: ("GPSLongitude", RATIONAL, 3), + 5: ("GPSAltitudeRef", BYTE, 1), + 6: ("GPSAltitude", RATIONAL, 1), + 7: ("GPSTimeStamp", RATIONAL, 3), + 8: ("GPSSatellites", ASCII, 0), + 9: ("GPSStatus", ASCII, 2), + 10: ("GPSMeasureMode", ASCII, 2), + 11: ("GPSDOP", RATIONAL, 1), + 12: ("GPSSpeedRef", ASCII, 2), + 13: ("GPSSpeed", RATIONAL, 1), + 14: ("GPSTrackRef", ASCII, 2), + 15: ("GPSTrack", RATIONAL, 1), + 16: ("GPSImgDirectionRef", ASCII, 2), + 17: ("GPSImgDirection", RATIONAL, 1), + 18: ("GPSMapDatum", ASCII, 0), + 19: ("GPSDestLatitudeRef", ASCII, 2), + 20: ("GPSDestLatitude", RATIONAL, 3), + 21: ("GPSDestLongitudeRef", ASCII, 2), + 22: ("GPSDestLongitude", RATIONAL, 3), + 23: ("GPSDestBearingRef", ASCII, 2), + 24: ("GPSDestBearing", RATIONAL, 1), + 25: ("GPSDestDistanceRef", ASCII, 2), + 26: ("GPSDestDistance", RATIONAL, 1), + 27: ("GPSProcessingMethod", UNDEFINED, 0), + 28: ("GPSAreaInformation", UNDEFINED, 0), + 29: ("GPSDateStamp", ASCII, 11), + 30: ("GPSDifferential", SHORT, 1), + }, + # InteroperabilityIFD + 40965: {1: ("InteropIndex", ASCII, 1), 2: ("InteropVersion", UNDEFINED, 1)}, +} + +# Legacy Tags structure +# these tags aren't included above, but were in the previous versions +TAGS: dict[int | tuple[int, int], str] = { + 347: "JPEGTables", + 700: "XMP", + # Additional Exif Info + 32932: "Wang Annotation", + 33434: "ExposureTime", + 33437: "FNumber", + 33445: "MD FileTag", + 33446: "MD ScalePixel", + 33447: "MD ColorTable", + 33448: "MD LabName", + 33449: "MD SampleInfo", + 33450: "MD PrepDate", + 33451: "MD PrepTime", + 33452: "MD FileUnits", + 33550: "ModelPixelScaleTag", + 33723: "IptcNaaInfo", + 33918: "INGR Packet Data Tag", + 33919: "INGR Flag Registers", + 33920: "IrasB Transformation Matrix", + 33922: "ModelTiepointTag", + 34264: "ModelTransformationTag", + 34377: "PhotoshopInfo", + 34735: "GeoKeyDirectoryTag", + 34736: "GeoDoubleParamsTag", + 34737: "GeoAsciiParamsTag", + 34850: "ExposureProgram", + 34852: "SpectralSensitivity", + 34855: "ISOSpeedRatings", + 34856: "OECF", + 34864: "SensitivityType", + 34865: "StandardOutputSensitivity", + 34866: "RecommendedExposureIndex", + 34867: "ISOSpeed", + 34868: "ISOSpeedLatitudeyyy", + 34869: "ISOSpeedLatitudezzz", + 34908: "HylaFAX FaxRecvParams", + 34909: "HylaFAX FaxSubAddress", + 34910: "HylaFAX FaxRecvTime", + 36864: "ExifVersion", + 36867: "DateTimeOriginal", + 36868: "DateTimeDigitized", + 37121: "ComponentsConfiguration", + 37122: "CompressedBitsPerPixel", + 37724: "ImageSourceData", + 37377: "ShutterSpeedValue", + 37378: "ApertureValue", + 37379: "BrightnessValue", + 37380: "ExposureBiasValue", + 37381: "MaxApertureValue", + 37382: "SubjectDistance", + 37383: "MeteringMode", + 37384: "LightSource", + 37385: "Flash", + 37386: "FocalLength", + 37396: "SubjectArea", + 37500: "MakerNote", + 37510: "UserComment", + 37520: "SubSec", + 37521: "SubSecTimeOriginal", + 37522: "SubsecTimeDigitized", + 40960: "FlashPixVersion", + 40961: "ColorSpace", + 40962: "PixelXDimension", + 40963: "PixelYDimension", + 40964: "RelatedSoundFile", + 40965: "InteroperabilityIFD", + 41483: "FlashEnergy", + 41484: "SpatialFrequencyResponse", + 41486: "FocalPlaneXResolution", + 41487: "FocalPlaneYResolution", + 41488: "FocalPlaneResolutionUnit", + 41492: "SubjectLocation", + 41493: "ExposureIndex", + 41495: "SensingMethod", + 41728: "FileSource", + 41729: "SceneType", + 41730: "CFAPattern", + 41985: "CustomRendered", + 41986: "ExposureMode", + 41987: "WhiteBalance", + 41988: "DigitalZoomRatio", + 41989: "FocalLengthIn35mmFilm", + 41990: "SceneCaptureType", + 41991: "GainControl", + 41992: "Contrast", + 41993: "Saturation", + 41994: "Sharpness", + 41995: "DeviceSettingDescription", + 41996: "SubjectDistanceRange", + 42016: "ImageUniqueID", + 42032: "CameraOwnerName", + 42033: "BodySerialNumber", + 42034: "LensSpecification", + 42035: "LensMake", + 42036: "LensModel", + 42037: "LensSerialNumber", + 42112: "GDAL_METADATA", + 42113: "GDAL_NODATA", + 42240: "Gamma", + 50215: "Oce Scanjob Description", + 50216: "Oce Application Selector", + 50217: "Oce Identification Number", + 50218: "Oce ImageLogic Characteristics", + # Adobe DNG + 50706: "DNGVersion", + 50707: "DNGBackwardVersion", + 50708: "UniqueCameraModel", + 50709: "LocalizedCameraModel", + 50710: "CFAPlaneColor", + 50711: "CFALayout", + 50712: "LinearizationTable", + 50713: "BlackLevelRepeatDim", + 50714: "BlackLevel", + 50715: "BlackLevelDeltaH", + 50716: "BlackLevelDeltaV", + 50717: "WhiteLevel", + 50718: "DefaultScale", + 50719: "DefaultCropOrigin", + 50720: "DefaultCropSize", + 50721: "ColorMatrix1", + 50722: "ColorMatrix2", + 50723: "CameraCalibration1", + 50724: "CameraCalibration2", + 50725: "ReductionMatrix1", + 50726: "ReductionMatrix2", + 50727: "AnalogBalance", + 50728: "AsShotNeutral", + 50729: "AsShotWhiteXY", + 50730: "BaselineExposure", + 50731: "BaselineNoise", + 50732: "BaselineSharpness", + 50733: "BayerGreenSplit", + 50734: "LinearResponseLimit", + 50735: "CameraSerialNumber", + 50736: "LensInfo", + 50737: "ChromaBlurRadius", + 50738: "AntiAliasStrength", + 50740: "DNGPrivateData", + 50778: "CalibrationIlluminant1", + 50779: "CalibrationIlluminant2", + 50784: "Alias Layer Metadata", +} + +TAGS_V2: dict[int, TagInfo] = {} +TAGS_V2_GROUPS: dict[int, dict[int, TagInfo]] = {} + + +def _populate() -> None: + for k, v in _tags_v2.items(): + # Populate legacy structure. + TAGS[k] = v[0] + if len(v) == 4: + for sk, sv in v[3].items(): + TAGS[(k, sv)] = sk + + TAGS_V2[k] = TagInfo(k, *v) + + for group, tags in _tags_v2_groups.items(): + TAGS_V2_GROUPS[group] = {k: TagInfo(k, *v) for k, v in tags.items()} + + +_populate() +## +# Map type numbers to type names -- defined in ImageFileDirectory. + +TYPES: dict[int, str] = {} + +# +# These tags are handled by default in libtiff, without +# adding to the custom dictionary. From tif_dir.c, searching for +# case TIFFTAG in the _TIFFVSetField function: +# Line: item. +# 148: case TIFFTAG_SUBFILETYPE: +# 151: case TIFFTAG_IMAGEWIDTH: +# 154: case TIFFTAG_IMAGELENGTH: +# 157: case TIFFTAG_BITSPERSAMPLE: +# 181: case TIFFTAG_COMPRESSION: +# 202: case TIFFTAG_PHOTOMETRIC: +# 205: case TIFFTAG_THRESHHOLDING: +# 208: case TIFFTAG_FILLORDER: +# 214: case TIFFTAG_ORIENTATION: +# 221: case TIFFTAG_SAMPLESPERPIXEL: +# 228: case TIFFTAG_ROWSPERSTRIP: +# 238: case TIFFTAG_MINSAMPLEVALUE: +# 241: case TIFFTAG_MAXSAMPLEVALUE: +# 244: case TIFFTAG_SMINSAMPLEVALUE: +# 247: case TIFFTAG_SMAXSAMPLEVALUE: +# 250: case TIFFTAG_XRESOLUTION: +# 256: case TIFFTAG_YRESOLUTION: +# 262: case TIFFTAG_PLANARCONFIG: +# 268: case TIFFTAG_XPOSITION: +# 271: case TIFFTAG_YPOSITION: +# 274: case TIFFTAG_RESOLUTIONUNIT: +# 280: case TIFFTAG_PAGENUMBER: +# 284: case TIFFTAG_HALFTONEHINTS: +# 288: case TIFFTAG_COLORMAP: +# 294: case TIFFTAG_EXTRASAMPLES: +# 298: case TIFFTAG_MATTEING: +# 305: case TIFFTAG_TILEWIDTH: +# 316: case TIFFTAG_TILELENGTH: +# 327: case TIFFTAG_TILEDEPTH: +# 333: case TIFFTAG_DATATYPE: +# 344: case TIFFTAG_SAMPLEFORMAT: +# 361: case TIFFTAG_IMAGEDEPTH: +# 364: case TIFFTAG_SUBIFD: +# 376: case TIFFTAG_YCBCRPOSITIONING: +# 379: case TIFFTAG_YCBCRSUBSAMPLING: +# 383: case TIFFTAG_TRANSFERFUNCTION: +# 389: case TIFFTAG_REFERENCEBLACKWHITE: +# 393: case TIFFTAG_INKNAMES: + +# Following pseudo-tags are also handled by default in libtiff: +# TIFFTAG_JPEGQUALITY 65537 + +# some of these are not in our TAGS_V2 dict and were included from tiff.h + +# This list also exists in encode.c +LIBTIFF_CORE = { + 255, + 256, + 257, + 258, + 259, + 262, + 263, + 266, + 274, + 277, + 278, + 280, + 281, + 340, + 341, + 282, + 283, + 284, + 286, + 287, + 296, + 297, + 321, + 320, + 338, + 32995, + 322, + 323, + 32998, + 32996, + 339, + 32997, + 330, + 531, + 530, + 301, + 532, + 333, + # as above + 269, # this has been in our tests forever, and works + 65537, +} + +LIBTIFF_CORE.remove(255) # We don't have support for subfiletypes +LIBTIFF_CORE.remove(322) # We don't have support for writing tiled images with libtiff +LIBTIFF_CORE.remove(323) # Tiled images + +# Note to advanced users: There may be combinations of these +# parameters and values that when added properly, will work and +# produce valid tiff images that may work in your application. +# It is safe to add and remove tags from this set from Pillow's point +# of view so long as you test against libtiff. diff --git a/Python/venv/lib/python3.12/site-packages/PIL/WalImageFile.py b/Python/venv/lib/python3.12/site-packages/PIL/WalImageFile.py new file mode 100644 index 0000000..07bbf74 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/WalImageFile.py @@ -0,0 +1,129 @@ +# +# The Python Imaging Library. +# $Id$ +# +# WAL file handling +# +# History: +# 2003-04-23 fl created +# +# Copyright (c) 2003 by Fredrik Lundh. +# +# See the README file for information on usage and redistribution. +# + +""" +This reader is based on the specification available from: +https://www.flipcode.com/archives/Quake_2_BSP_File_Format.shtml +and has been tested with a few sample files found using google. + +.. note:: + This format cannot be automatically recognized, so the reader + is not registered for use with :py:func:`PIL.Image.open()`. + To open a WAL file, use the :py:func:`PIL.WalImageFile.open()` function instead. +""" + +from __future__ import annotations + +from typing import IO + +from . import Image, ImageFile +from ._binary import i32le as i32 +from ._typing import StrOrBytesPath + + +class WalImageFile(ImageFile.ImageFile): + format = "WAL" + format_description = "Quake2 Texture" + + def _open(self) -> None: + self._mode = "P" + + # read header fields + assert self.fp is not None + header = self.fp.read(32 + 24 + 32 + 12) + self._size = i32(header, 32), i32(header, 36) + Image._decompression_bomb_check(self.size) + + # load pixel data + offset = i32(header, 40) + self.fp.seek(offset) + + # strings are null-terminated + self.info["name"] = header[:32].split(b"\0", 1)[0] + if next_name := header[56 : 56 + 32].split(b"\0", 1)[0]: + self.info["next_name"] = next_name + + def load(self) -> Image.core.PixelAccess | None: + if self._im is None: + assert self.fp is not None + self.im = Image.core.new(self.mode, self.size) + self.frombytes(self.fp.read(self.size[0] * self.size[1])) + self.putpalette(quake2palette) + return Image.Image.load(self) + + +def open(filename: StrOrBytesPath | IO[bytes]) -> WalImageFile: + """ + Load texture from a Quake2 WAL texture file. + + By default, a Quake2 standard palette is attached to the texture. + To override the palette, use the :py:func:`PIL.Image.Image.putpalette()` method. + + :param filename: WAL file name, or an opened file handle. + :returns: An image instance. + """ + return WalImageFile(filename) + + +quake2palette = ( + # default palette taken from piffo 0.93 by Hans Häggström + b"\x01\x01\x01\x0b\x0b\x0b\x12\x12\x12\x17\x17\x17\x1b\x1b\x1b\x1e" + b"\x1e\x1e\x22\x22\x22\x26\x26\x26\x29\x29\x29\x2c\x2c\x2c\x2f\x2f" + b"\x2f\x32\x32\x32\x35\x35\x35\x37\x37\x37\x3a\x3a\x3a\x3c\x3c\x3c" + b"\x24\x1e\x13\x22\x1c\x12\x20\x1b\x12\x1f\x1a\x10\x1d\x19\x10\x1b" + b"\x17\x0f\x1a\x16\x0f\x18\x14\x0d\x17\x13\x0d\x16\x12\x0d\x14\x10" + b"\x0b\x13\x0f\x0b\x10\x0d\x0a\x0f\x0b\x0a\x0d\x0b\x07\x0b\x0a\x07" + b"\x23\x23\x26\x22\x22\x25\x22\x20\x23\x21\x1f\x22\x20\x1e\x20\x1f" + b"\x1d\x1e\x1d\x1b\x1c\x1b\x1a\x1a\x1a\x19\x19\x18\x17\x17\x17\x16" + b"\x16\x14\x14\x14\x13\x13\x13\x10\x10\x10\x0f\x0f\x0f\x0d\x0d\x0d" + b"\x2d\x28\x20\x29\x24\x1c\x27\x22\x1a\x25\x1f\x17\x38\x2e\x1e\x31" + b"\x29\x1a\x2c\x25\x17\x26\x20\x14\x3c\x30\x14\x37\x2c\x13\x33\x28" + b"\x12\x2d\x24\x10\x28\x1f\x0f\x22\x1a\x0b\x1b\x14\x0a\x13\x0f\x07" + b"\x31\x1a\x16\x30\x17\x13\x2e\x16\x10\x2c\x14\x0d\x2a\x12\x0b\x27" + b"\x0f\x0a\x25\x0f\x07\x21\x0d\x01\x1e\x0b\x01\x1c\x0b\x01\x1a\x0b" + b"\x01\x18\x0a\x01\x16\x0a\x01\x13\x0a\x01\x10\x07\x01\x0d\x07\x01" + b"\x29\x23\x1e\x27\x21\x1c\x26\x20\x1b\x25\x1f\x1a\x23\x1d\x19\x21" + b"\x1c\x18\x20\x1b\x17\x1e\x19\x16\x1c\x18\x14\x1b\x17\x13\x19\x14" + b"\x10\x17\x13\x0f\x14\x10\x0d\x12\x0f\x0b\x0f\x0b\x0a\x0b\x0a\x07" + b"\x26\x1a\x0f\x23\x19\x0f\x20\x17\x0f\x1c\x16\x0f\x19\x13\x0d\x14" + b"\x10\x0b\x10\x0d\x0a\x0b\x0a\x07\x33\x22\x1f\x35\x29\x26\x37\x2f" + b"\x2d\x39\x35\x34\x37\x39\x3a\x33\x37\x39\x30\x34\x36\x2b\x31\x34" + b"\x27\x2e\x31\x22\x2b\x2f\x1d\x28\x2c\x17\x25\x2a\x0f\x20\x26\x0d" + b"\x1e\x25\x0b\x1c\x22\x0a\x1b\x20\x07\x19\x1e\x07\x17\x1b\x07\x14" + b"\x18\x01\x12\x16\x01\x0f\x12\x01\x0b\x0d\x01\x07\x0a\x01\x01\x01" + b"\x2c\x21\x21\x2a\x1f\x1f\x29\x1d\x1d\x27\x1c\x1c\x26\x1a\x1a\x24" + b"\x18\x18\x22\x17\x17\x21\x16\x16\x1e\x13\x13\x1b\x12\x12\x18\x10" + b"\x10\x16\x0d\x0d\x12\x0b\x0b\x0d\x0a\x0a\x0a\x07\x07\x01\x01\x01" + b"\x2e\x30\x29\x2d\x2e\x27\x2b\x2c\x26\x2a\x2a\x24\x28\x29\x23\x27" + b"\x27\x21\x26\x26\x1f\x24\x24\x1d\x22\x22\x1c\x1f\x1f\x1a\x1c\x1c" + b"\x18\x19\x19\x16\x17\x17\x13\x13\x13\x10\x0f\x0f\x0d\x0b\x0b\x0a" + b"\x30\x1e\x1b\x2d\x1c\x19\x2c\x1a\x17\x2a\x19\x14\x28\x17\x13\x26" + b"\x16\x10\x24\x13\x0f\x21\x12\x0d\x1f\x10\x0b\x1c\x0f\x0a\x19\x0d" + b"\x0a\x16\x0b\x07\x12\x0a\x07\x0f\x07\x01\x0a\x01\x01\x01\x01\x01" + b"\x28\x29\x38\x26\x27\x36\x25\x26\x34\x24\x24\x31\x22\x22\x2f\x20" + b"\x21\x2d\x1e\x1f\x2a\x1d\x1d\x27\x1b\x1b\x25\x19\x19\x21\x17\x17" + b"\x1e\x14\x14\x1b\x13\x12\x17\x10\x0f\x13\x0d\x0b\x0f\x0a\x07\x07" + b"\x2f\x32\x29\x2d\x30\x26\x2b\x2e\x24\x29\x2c\x21\x27\x2a\x1e\x25" + b"\x28\x1c\x23\x26\x1a\x21\x25\x18\x1e\x22\x14\x1b\x1f\x10\x19\x1c" + b"\x0d\x17\x1a\x0a\x13\x17\x07\x10\x13\x01\x0d\x0f\x01\x0a\x0b\x01" + b"\x01\x3f\x01\x13\x3c\x0b\x1b\x39\x10\x20\x35\x14\x23\x31\x17\x23" + b"\x2d\x18\x23\x29\x18\x3f\x3f\x3f\x3f\x3f\x39\x3f\x3f\x31\x3f\x3f" + b"\x2a\x3f\x3f\x20\x3f\x3f\x14\x3f\x3c\x12\x3f\x39\x0f\x3f\x35\x0b" + b"\x3f\x32\x07\x3f\x2d\x01\x3d\x2a\x01\x3b\x26\x01\x39\x21\x01\x37" + b"\x1d\x01\x34\x1a\x01\x32\x16\x01\x2f\x12\x01\x2d\x0f\x01\x2a\x0b" + b"\x01\x27\x07\x01\x23\x01\x01\x1d\x01\x01\x17\x01\x01\x10\x01\x01" + b"\x3d\x01\x01\x19\x19\x3f\x3f\x01\x01\x01\x01\x3f\x16\x16\x13\x10" + b"\x10\x0f\x0d\x0d\x0b\x3c\x2e\x2a\x36\x27\x20\x30\x21\x18\x29\x1b" + b"\x10\x3c\x39\x37\x37\x32\x2f\x31\x2c\x28\x2b\x26\x21\x30\x22\x20" +) diff --git a/Python/venv/lib/python3.12/site-packages/PIL/WebPImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/WebPImagePlugin.py new file mode 100644 index 0000000..e20e40d --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/WebPImagePlugin.py @@ -0,0 +1,317 @@ +from __future__ import annotations + +from io import BytesIO + +from . import Image, ImageFile + +try: + from . import _webp + + SUPPORTED = True +except ImportError: + SUPPORTED = False + +TYPE_CHECKING = False +if TYPE_CHECKING: + from typing import IO, Any + +_VP8_MODES_BY_IDENTIFIER = { + b"VP8 ": "RGB", + b"VP8X": "RGBA", + b"VP8L": "RGBA", # lossless +} + + +def _accept(prefix: bytes) -> bool | str: + is_riff_file_format = prefix.startswith(b"RIFF") + is_webp_file = prefix[8:12] == b"WEBP" + is_valid_vp8_mode = prefix[12:16] in _VP8_MODES_BY_IDENTIFIER + + if is_riff_file_format and is_webp_file and is_valid_vp8_mode: + if not SUPPORTED: + return ( + "image file could not be identified because WEBP support not installed" + ) + return True + return False + + +class WebPImageFile(ImageFile.ImageFile): + format = "WEBP" + format_description = "WebP image" + __loaded = 0 + __logical_frame = 0 + + def _open(self) -> None: + # Use the newer AnimDecoder API to parse the (possibly) animated file, + # and access muxed chunks like ICC/EXIF/XMP. + assert self.fp is not None + self._decoder = _webp.WebPAnimDecoder(self.fp.read()) + + # Get info from decoder + self._size, self.info["loop"], bgcolor, self.n_frames, self.rawmode = ( + self._decoder.get_info() + ) + self.info["background"] = ( + (bgcolor >> 16) & 0xFF, # R + (bgcolor >> 8) & 0xFF, # G + bgcolor & 0xFF, # B + (bgcolor >> 24) & 0xFF, # A + ) + self.is_animated = self.n_frames > 1 + self._mode = "RGB" if self.rawmode == "RGBX" else self.rawmode + + # Attempt to read ICC / EXIF / XMP chunks from file + for key, chunk_name in { + "icc_profile": "ICCP", + "exif": "EXIF", + "xmp": "XMP ", + }.items(): + if value := self._decoder.get_chunk(chunk_name): + self.info[key] = value + + # Initialize seek state + self._reset(reset=False) + + def _getexif(self) -> dict[int, Any] | None: + if "exif" not in self.info: + return None + return self.getexif()._get_merged_dict() + + def seek(self, frame: int) -> None: + if not self._seek_check(frame): + return + + # Set logical frame to requested position + self.__logical_frame = frame + + def _reset(self, reset: bool = True) -> None: + if reset: + self._decoder.reset() + self.__physical_frame = 0 + self.__loaded = -1 + self.__timestamp = 0 + + def _get_next(self) -> tuple[bytes, int, int]: + # Get next frame + ret = self._decoder.get_next() + self.__physical_frame += 1 + + # Check if an error occurred + if ret is None: + self._reset() # Reset just to be safe + self.seek(0) + msg = "failed to decode next frame in WebP file" + raise EOFError(msg) + + # Compute duration + data, timestamp = ret + duration = timestamp - self.__timestamp + self.__timestamp = timestamp + + # libwebp gives frame end, adjust to start of frame + timestamp -= duration + return data, timestamp, duration + + def _seek(self, frame: int) -> None: + if self.__physical_frame == frame: + return # Nothing to do + if frame < self.__physical_frame: + self._reset() # Rewind to beginning + while self.__physical_frame < frame: + self._get_next() # Advance to the requested frame + + def load(self) -> Image.core.PixelAccess | None: + if self.__loaded != self.__logical_frame: + self._seek(self.__logical_frame) + + # We need to load the image data for this frame + data, self.info["timestamp"], self.info["duration"] = self._get_next() + self.__loaded = self.__logical_frame + + # Set tile + if self.fp and self._exclusive_fp: + self.fp.close() + self.fp = BytesIO(data) + self.tile = [ImageFile._Tile("raw", (0, 0) + self.size, 0, self.rawmode)] + + return super().load() + + def load_seek(self, pos: int) -> None: + pass + + def tell(self) -> int: + return self.__logical_frame + + +def _convert_frame(im: Image.Image) -> Image.Image: + # Make sure image mode is supported + if im.mode not in ("RGBX", "RGBA", "RGB"): + im = im.convert("RGBA" if im.has_transparency_data else "RGB") + return im + + +def _save_all(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + encoderinfo = im.encoderinfo.copy() + append_images = list(encoderinfo.get("append_images", [])) + + # If total frame count is 1, then save using the legacy API, which + # will preserve non-alpha modes + total = 0 + for ims in [im] + append_images: + total += getattr(ims, "n_frames", 1) + if total == 1: + _save(im, fp, filename) + return + + background: int | tuple[int, ...] = (0, 0, 0, 0) + if "background" in encoderinfo: + background = encoderinfo["background"] + elif "background" in im.info: + background = im.info["background"] + if isinstance(background, int): + # GifImagePlugin stores a global color table index in + # info["background"]. So it must be converted to an RGBA value + palette = im.getpalette() + if palette: + r, g, b = palette[background * 3 : (background + 1) * 3] + background = (r, g, b, 255) + else: + background = (background, background, background, 255) + + duration = im.encoderinfo.get("duration", im.info.get("duration", 0)) + loop = im.encoderinfo.get("loop", 0) + minimize_size = im.encoderinfo.get("minimize_size", False) + kmin = im.encoderinfo.get("kmin", None) + kmax = im.encoderinfo.get("kmax", None) + allow_mixed = im.encoderinfo.get("allow_mixed", False) + verbose = False + lossless = im.encoderinfo.get("lossless", False) + quality = im.encoderinfo.get("quality", 80) + alpha_quality = im.encoderinfo.get("alpha_quality", 100) + method = im.encoderinfo.get("method", 0) + icc_profile = im.encoderinfo.get("icc_profile") or "" + exif = im.encoderinfo.get("exif", "") + if isinstance(exif, Image.Exif): + exif = exif.tobytes() + xmp = im.encoderinfo.get("xmp", "") + if allow_mixed: + lossless = False + + # Sensible keyframe defaults are from gif2webp.c script + if kmin is None: + kmin = 9 if lossless else 3 + if kmax is None: + kmax = 17 if lossless else 5 + + # Validate background color + if ( + not isinstance(background, (list, tuple)) + or len(background) != 4 + or not all(0 <= v < 256 for v in background) + ): + msg = f"Background color is not an RGBA tuple clamped to (0-255): {background}" + raise OSError(msg) + + # Convert to packed uint + bg_r, bg_g, bg_b, bg_a = background + background = (bg_a << 24) | (bg_r << 16) | (bg_g << 8) | (bg_b << 0) + + # Setup the WebP animation encoder + enc = _webp.WebPAnimEncoder( + im.size, + background, + loop, + minimize_size, + kmin, + kmax, + allow_mixed, + verbose, + ) + + # Add each frame + frame_idx = 0 + timestamp = 0 + cur_idx = im.tell() + try: + for ims in [im] + append_images: + # Get number of frames in this image + nfr = getattr(ims, "n_frames", 1) + + for idx in range(nfr): + ims.seek(idx) + + frame = _convert_frame(ims) + + # Append the frame to the animation encoder + enc.add( + frame.getim(), + round(timestamp), + lossless, + quality, + alpha_quality, + method, + ) + + # Update timestamp and frame index + if isinstance(duration, (list, tuple)): + timestamp += duration[frame_idx] + else: + timestamp += duration + frame_idx += 1 + + finally: + im.seek(cur_idx) + + # Force encoder to flush frames + enc.add(None, round(timestamp), lossless, quality, alpha_quality, 0) + + # Get the final output from the encoder + data = enc.assemble(icc_profile, exif, xmp) + if data is None: + msg = "cannot write file as WebP (encoder returned None)" + raise OSError(msg) + + fp.write(data) + + +def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + lossless = im.encoderinfo.get("lossless", False) + quality = im.encoderinfo.get("quality", 80) + alpha_quality = im.encoderinfo.get("alpha_quality", 100) + icc_profile = im.encoderinfo.get("icc_profile") or "" + exif = im.encoderinfo.get("exif", b"") + if isinstance(exif, Image.Exif): + exif = exif.tobytes() + if exif.startswith(b"Exif\x00\x00"): + exif = exif[6:] + xmp = im.encoderinfo.get("xmp", "") + method = im.encoderinfo.get("method", 4) + exact = 1 if im.encoderinfo.get("exact") else 0 + + im = _convert_frame(im) + + data = _webp.WebPEncode( + im.getim(), + lossless, + float(quality), + float(alpha_quality), + icc_profile, + method, + exact, + exif, + xmp, + ) + if data is None: + msg = "cannot write file as WebP (encoder returned None)" + raise OSError(msg) + + fp.write(data) + + +Image.register_open(WebPImageFile.format, WebPImageFile, _accept) +if SUPPORTED: + Image.register_save(WebPImageFile.format, _save) + Image.register_save_all(WebPImageFile.format, _save_all) + Image.register_extension(WebPImageFile.format, ".webp") + Image.register_mime(WebPImageFile.format, "image/webp") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/WmfImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/WmfImagePlugin.py new file mode 100644 index 0000000..f5e2447 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/WmfImagePlugin.py @@ -0,0 +1,183 @@ +# +# The Python Imaging Library +# $Id$ +# +# WMF stub codec +# +# history: +# 1996-12-14 fl Created +# 2004-02-22 fl Turned into a stub driver +# 2004-02-23 fl Added EMF support +# +# Copyright (c) Secret Labs AB 1997-2004. All rights reserved. +# Copyright (c) Fredrik Lundh 1996. +# +# See the README file for information on usage and redistribution. +# +# WMF/EMF reference documentation: +# https://winprotocoldoc.blob.core.windows.net/productionwindowsarchives/MS-WMF/[MS-WMF].pdf +# http://wvware.sourceforge.net/caolan/index.html +# http://wvware.sourceforge.net/caolan/ora-wmf.html +from __future__ import annotations + +from typing import IO + +from . import Image, ImageFile +from ._binary import i16le as word +from ._binary import si16le as short +from ._binary import si32le as _long + +_handler = None + + +def register_handler(handler: ImageFile.StubHandler | None) -> None: + """ + Install application-specific WMF image handler. + + :param handler: Handler object. + """ + global _handler + _handler = handler + + +if hasattr(Image.core, "drawwmf"): + # install default handler (windows only) + + class WmfHandler(ImageFile.StubHandler): + def open(self, im: ImageFile.StubImageFile) -> None: + self.bbox = im.info["wmf_bbox"] + + def load(self, im: ImageFile.StubImageFile) -> Image.Image: + assert im.fp is not None + im.fp.seek(0) # rewind + return Image.frombytes( + "RGB", + im.size, + Image.core.drawwmf(im.fp.read(), im.size, self.bbox), + "raw", + "BGR", + (im.size[0] * 3 + 3) & -4, + -1, + ) + + register_handler(WmfHandler()) + +# +# -------------------------------------------------------------------- +# Read WMF file + + +def _accept(prefix: bytes) -> bool: + return prefix.startswith((b"\xd7\xcd\xc6\x9a\x00\x00", b"\x01\x00\x00\x00")) + + +## +# Image plugin for Windows metafiles. + + +class WmfStubImageFile(ImageFile.StubImageFile): + format = "WMF" + format_description = "Windows Metafile" + + def _open(self) -> None: + # check placeable header + assert self.fp is not None + s = self.fp.read(44) + + if s.startswith(b"\xd7\xcd\xc6\x9a\x00\x00"): + # placeable windows metafile + + # get units per inch + inch = word(s, 14) + if inch == 0: + msg = "Invalid inch" + raise ValueError(msg) + self._inch: tuple[float, float] = inch, inch + + # get bounding box + x0 = short(s, 6) + y0 = short(s, 8) + x1 = short(s, 10) + y1 = short(s, 12) + + # normalize size to 72 dots per inch + self.info["dpi"] = 72 + size = ( + (x1 - x0) * self.info["dpi"] // inch, + (y1 - y0) * self.info["dpi"] // inch, + ) + + self.info["wmf_bbox"] = x0, y0, x1, y1 + + # sanity check (standard metafile header) + if s[22:26] != b"\x01\x00\t\x00": + msg = "Unsupported WMF file format" + raise SyntaxError(msg) + + elif s.startswith(b"\x01\x00\x00\x00") and s[40:44] == b" EMF": + # enhanced metafile + + # get bounding box + x0 = _long(s, 8) + y0 = _long(s, 12) + x1 = _long(s, 16) + y1 = _long(s, 20) + + # get frame (in 0.01 millimeter units) + frame = _long(s, 24), _long(s, 28), _long(s, 32), _long(s, 36) + + size = x1 - x0, y1 - y0 + + # calculate dots per inch from bbox and frame + xdpi = 2540.0 * (x1 - x0) / (frame[2] - frame[0]) + ydpi = 2540.0 * (y1 - y0) / (frame[3] - frame[1]) + + self.info["wmf_bbox"] = x0, y0, x1, y1 + + if xdpi == ydpi: + self.info["dpi"] = xdpi + else: + self.info["dpi"] = xdpi, ydpi + self._inch = xdpi, ydpi + + else: + msg = "Unsupported file format" + raise SyntaxError(msg) + + self._mode = "RGB" + self._size = size + + def _load(self) -> ImageFile.StubHandler | None: + return _handler + + def load( + self, dpi: float | tuple[float, float] | None = None + ) -> Image.core.PixelAccess | None: + if dpi is not None: + self.info["dpi"] = dpi + x0, y0, x1, y1 = self.info["wmf_bbox"] + if not isinstance(dpi, tuple): + dpi = dpi, dpi + self._size = ( + int((x1 - x0) * dpi[0] / self._inch[0]), + int((y1 - y0) * dpi[1] / self._inch[1]), + ) + return super().load() + + +def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + if _handler is None or not hasattr(_handler, "save"): + msg = "WMF save handler not installed" + raise OSError(msg) + _handler.save(im, fp, filename) + + +# +# -------------------------------------------------------------------- +# Registry stuff + + +Image.register_open(WmfStubImageFile.format, WmfStubImageFile, _accept) +Image.register_save(WmfStubImageFile.format, _save) + +Image.register_extensions(WmfStubImageFile.format, [".wmf", ".emf"]) diff --git a/Python/venv/lib/python3.12/site-packages/PIL/XVThumbImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/XVThumbImagePlugin.py new file mode 100644 index 0000000..192c041 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/XVThumbImagePlugin.py @@ -0,0 +1,83 @@ +# +# The Python Imaging Library. +# $Id$ +# +# XV Thumbnail file handler by Charles E. "Gene" Cash +# (gcash@magicnet.net) +# +# see xvcolor.c and xvbrowse.c in the sources to John Bradley's XV, +# available from ftp://ftp.cis.upenn.edu/pub/xv/ +# +# history: +# 98-08-15 cec created (b/w only) +# 98-12-09 cec added color palette +# 98-12-28 fl added to PIL (with only a few very minor modifications) +# +# To do: +# FIXME: make save work (this requires quantization support) +# +from __future__ import annotations + +from . import Image, ImageFile, ImagePalette +from ._binary import o8 + +_MAGIC = b"P7 332" + +# standard color palette for thumbnails (RGB332) +PALETTE = b"" +for r in range(8): + for g in range(8): + for b in range(4): + PALETTE = PALETTE + ( + o8((r * 255) // 7) + o8((g * 255) // 7) + o8((b * 255) // 3) + ) + + +def _accept(prefix: bytes) -> bool: + return prefix.startswith(_MAGIC) + + +## +# Image plugin for XV thumbnail images. + + +class XVThumbImageFile(ImageFile.ImageFile): + format = "XVThumb" + format_description = "XV thumbnail image" + + def _open(self) -> None: + # check magic + assert self.fp is not None + + if not _accept(self.fp.read(6)): + msg = "not an XV thumbnail file" + raise SyntaxError(msg) + + # Skip to beginning of next line + self.fp.readline() + + # skip info comments + while True: + s = self.fp.readline() + if not s: + msg = "Unexpected EOF reading XV thumbnail file" + raise SyntaxError(msg) + if s[0] != 35: # ie. when not a comment: '#' + break + + # parse header line (already read) + w, h = s.strip().split(maxsplit=2)[:2] + + self._mode = "P" + self._size = int(w), int(h) + + self.palette = ImagePalette.raw("RGB", PALETTE) + + self.tile = [ + ImageFile._Tile("raw", (0, 0) + self.size, self.fp.tell(), self.mode) + ] + + +# -------------------------------------------------------------------- + +Image.register_open(XVThumbImageFile.format, XVThumbImageFile, _accept) diff --git a/Python/venv/lib/python3.12/site-packages/PIL/XbmImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/XbmImagePlugin.py new file mode 100644 index 0000000..1e57aa1 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/XbmImagePlugin.py @@ -0,0 +1,98 @@ +# +# The Python Imaging Library. +# $Id$ +# +# XBM File handling +# +# History: +# 1995-09-08 fl Created +# 1996-11-01 fl Added save support +# 1997-07-07 fl Made header parser more tolerant +# 1997-07-22 fl Fixed yet another parser bug +# 2001-02-17 fl Use 're' instead of 'regex' (Python 2.1) (0.4) +# 2001-05-13 fl Added hotspot handling (based on code from Bernhard Herzog) +# 2004-02-24 fl Allow some whitespace before first #define +# +# Copyright (c) 1997-2004 by Secret Labs AB +# Copyright (c) 1996-1997 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import re +from typing import IO + +from . import Image, ImageFile + +# XBM header +xbm_head = re.compile( + rb"\s*#define[ \t]+.*_width[ \t]+(?P[0-9]+)[\r\n]+" + b"#define[ \t]+.*_height[ \t]+(?P[0-9]+)[\r\n]+" + b"(?P" + b"#define[ \t]+[^_]*_x_hot[ \t]+(?P[0-9]+)[\r\n]+" + b"#define[ \t]+[^_]*_y_hot[ \t]+(?P[0-9]+)[\r\n]+" + b")?" + rb"[\000-\377]*_bits\[]" +) + + +def _accept(prefix: bytes) -> bool: + return prefix.lstrip().startswith(b"#define") + + +## +# Image plugin for X11 bitmaps. + + +class XbmImageFile(ImageFile.ImageFile): + format = "XBM" + format_description = "X11 Bitmap" + + def _open(self) -> None: + assert self.fp is not None + + m = xbm_head.match(self.fp.read(512)) + + if not m: + msg = "not a XBM file" + raise SyntaxError(msg) + + xsize = int(m.group("width")) + ysize = int(m.group("height")) + + if m.group("hotspot"): + self.info["hotspot"] = (int(m.group("xhot")), int(m.group("yhot"))) + + self._mode = "1" + self._size = xsize, ysize + + self.tile = [ImageFile._Tile("xbm", (0, 0) + self.size, m.end())] + + +def _save(im: Image.Image, fp: IO[bytes], filename: str | bytes) -> None: + if im.mode != "1": + msg = f"cannot write mode {im.mode} as XBM" + raise OSError(msg) + + fp.write(f"#define im_width {im.size[0]}\n".encode("ascii")) + fp.write(f"#define im_height {im.size[1]}\n".encode("ascii")) + + hotspot = im.encoderinfo.get("hotspot") + if hotspot: + fp.write(f"#define im_x_hot {hotspot[0]}\n".encode("ascii")) + fp.write(f"#define im_y_hot {hotspot[1]}\n".encode("ascii")) + + fp.write(b"static char im_bits[] = {\n") + + ImageFile._save(im, fp, [ImageFile._Tile("xbm", (0, 0) + im.size)]) + + fp.write(b"};\n") + + +Image.register_open(XbmImageFile.format, XbmImageFile, _accept) +Image.register_save(XbmImageFile.format, _save) + +Image.register_extension(XbmImageFile.format, ".xbm") + +Image.register_mime(XbmImageFile.format, "image/xbm") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/XpmImagePlugin.py b/Python/venv/lib/python3.12/site-packages/PIL/XpmImagePlugin.py new file mode 100644 index 0000000..3be240f --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/XpmImagePlugin.py @@ -0,0 +1,157 @@ +# +# The Python Imaging Library. +# $Id$ +# +# XPM File handling +# +# History: +# 1996-12-29 fl Created +# 2001-02-17 fl Use 're' instead of 'regex' (Python 2.1) (0.7) +# +# Copyright (c) Secret Labs AB 1997-2001. +# Copyright (c) Fredrik Lundh 1996-2001. +# +# See the README file for information on usage and redistribution. +# +from __future__ import annotations + +import re + +from . import Image, ImageFile, ImagePalette +from ._binary import o8 + +# XPM header +xpm_head = re.compile(b'"([0-9]*) ([0-9]*) ([0-9]*) ([0-9]*)') + + +def _accept(prefix: bytes) -> bool: + return prefix.startswith(b"/* XPM */") + + +## +# Image plugin for X11 pixel maps. + + +class XpmImageFile(ImageFile.ImageFile): + format = "XPM" + format_description = "X11 Pixel Map" + + def _open(self) -> None: + assert self.fp is not None + if not _accept(self.fp.read(9)): + msg = "not an XPM file" + raise SyntaxError(msg) + + # skip forward to next string + while True: + line = self.fp.readline() + if not line: + msg = "broken XPM file" + raise SyntaxError(msg) + m = xpm_head.match(line) + if m: + break + + self._size = int(m.group(1)), int(m.group(2)) + + palette_length = int(m.group(3)) + bpp = int(m.group(4)) + + # + # load palette description + + palette = {} + + for _ in range(palette_length): + line = self.fp.readline().rstrip() + + c = line[1 : bpp + 1] + s = line[bpp + 1 : -2].split() + + for i in range(0, len(s), 2): + if s[i] == b"c": + # process colour key + rgb = s[i + 1] + if rgb == b"None": + self.info["transparency"] = c + elif rgb.startswith(b"#"): + rgb_int = int(rgb[1:], 16) + palette[c] = ( + o8((rgb_int >> 16) & 255) + + o8((rgb_int >> 8) & 255) + + o8(rgb_int & 255) + ) + else: + # unknown colour + msg = "cannot read this XPM file" + raise ValueError(msg) + break + + else: + # missing colour key + msg = "cannot read this XPM file" + raise ValueError(msg) + + args: tuple[int, dict[bytes, bytes] | tuple[bytes, ...]] + if palette_length > 256: + self._mode = "RGB" + args = (bpp, palette) + else: + self._mode = "P" + self.palette = ImagePalette.raw("RGB", b"".join(palette.values())) + args = (bpp, tuple(palette.keys())) + + self.tile = [ImageFile._Tile("xpm", (0, 0) + self.size, self.fp.tell(), args)] + + def load_read(self, read_bytes: int) -> bytes: + # + # load all image data in one chunk + + xsize, ysize = self.size + + assert self.fp is not None + s = [self.fp.readline()[1 : xsize + 1].ljust(xsize) for i in range(ysize)] + + return b"".join(s) + + +class XpmDecoder(ImageFile.PyDecoder): + _pulls_fd = True + + def decode(self, buffer: bytes | Image.SupportsArrayInterface) -> tuple[int, int]: + assert self.fd is not None + + data = bytearray() + bpp, palette = self.args + dest_length = self.state.xsize * self.state.ysize + if self.mode == "RGB": + dest_length *= 3 + pixel_header = False + while len(data) < dest_length: + line = self.fd.readline() + if not line: + break + if line.rstrip() == b"/* pixels */" and not pixel_header: + pixel_header = True + continue + line = b'"'.join(line.split(b'"')[1:-1]) + for i in range(0, len(line), bpp): + key = line[i : i + bpp] + if self.mode == "RGB": + data += palette[key] + else: + data += o8(palette.index(key)) + self.set_as_raw(bytes(data)) + return -1, 0 + + +# +# Registry + + +Image.register_open(XpmImageFile.format, XpmImageFile, _accept) +Image.register_decoder("xpm", XpmDecoder) + +Image.register_extension(XpmImageFile.format, ".xpm") + +Image.register_mime(XpmImageFile.format, "image/xpm") diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__init__.py b/Python/venv/lib/python3.12/site-packages/PIL/__init__.py new file mode 100644 index 0000000..faf3e76 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/__init__.py @@ -0,0 +1,87 @@ +"""Pillow (Fork of the Python Imaging Library) + +Pillow is the friendly PIL fork by Jeffrey 'Alex' Clark and contributors. + https://github.com/python-pillow/Pillow/ + +Pillow is forked from PIL 1.1.7. + +PIL is the Python Imaging Library by Fredrik Lundh and contributors. +Copyright (c) 1999 by Secret Labs AB. + +Use PIL.__version__ for this Pillow version. + +;-) +""" + +from __future__ import annotations + +from . import _version + +# VERSION was removed in Pillow 6.0.0. +# PILLOW_VERSION was removed in Pillow 9.0.0. +# Use __version__ instead. +__version__ = _version.__version__ +del _version + + +_plugins = [ + "AvifImagePlugin", + "BlpImagePlugin", + "BmpImagePlugin", + "BufrStubImagePlugin", + "CurImagePlugin", + "DcxImagePlugin", + "DdsImagePlugin", + "EpsImagePlugin", + "FitsImagePlugin", + "FliImagePlugin", + "FpxImagePlugin", + "FtexImagePlugin", + "GbrImagePlugin", + "GifImagePlugin", + "GribStubImagePlugin", + "Hdf5StubImagePlugin", + "IcnsImagePlugin", + "IcoImagePlugin", + "ImImagePlugin", + "ImtImagePlugin", + "IptcImagePlugin", + "JpegImagePlugin", + "Jpeg2KImagePlugin", + "McIdasImagePlugin", + "MicImagePlugin", + "MpegImagePlugin", + "MpoImagePlugin", + "MspImagePlugin", + "PalmImagePlugin", + "PcdImagePlugin", + "PcxImagePlugin", + "PdfImagePlugin", + "PixarImagePlugin", + "PngImagePlugin", + "PpmImagePlugin", + "PsdImagePlugin", + "QoiImagePlugin", + "SgiImagePlugin", + "SpiderImagePlugin", + "SunImagePlugin", + "TgaImagePlugin", + "TiffImagePlugin", + "WebPImagePlugin", + "WmfImagePlugin", + "XbmImagePlugin", + "XpmImagePlugin", + "XVThumbImagePlugin", +] + + +class UnidentifiedImageError(OSError): + """ + Raised in :py:meth:`PIL.Image.open` if an image cannot be opened and identified. + + If a PNG image raises this error, setting :data:`.ImageFile.LOAD_TRUNCATED_IMAGES` + to true may allow the image to be opened after all. The setting will ignore missing + data and checksum failures. + """ + + pass diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__main__.py b/Python/venv/lib/python3.12/site-packages/PIL/__main__.py new file mode 100644 index 0000000..043156e --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/__main__.py @@ -0,0 +1,7 @@ +from __future__ import annotations + +import sys + +from .features import pilinfo + +pilinfo(supported_formats="--report" not in sys.argv) diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/AvifImagePlugin.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/AvifImagePlugin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6f9030a983813d3a5719c01dc7dbd84d792f1f2f GIT binary patch literal 11575 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 I*V2&x9~QFBOaK4? literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/BdfFontFile.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/BdfFontFile.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7c784ee8ed06bc2bda3a1b2c3c9a3b089288fcc7 GIT binary patch literal 4211 zcmb_fTWlN06`fr!mv2%c<=C;JWEIJ>7|T+mM6w&Zc0@gF`61booW@KHcEw#vtMHZC zl_d&GR1FN2s$Gae+KNF7gh2~bhEYKM^JfaQ{pm-=P_5{NKMb@*>p!|m+QdKYoh6rk zz=<2QBWNCX?#w-Ncjn&1-@9CP1m&N9*f;wpCqjQF1EZKL9cpJ5I%`NkK_pND9i?J) zkfuoA6g9<|AOn3yFh|WXHps>-K?{X!)jz>5uveI%l}0C!V7Y<>tH{oRoyW@!Q$-TA zrEGr3;!E~(JeEc7O)elQF+Rx+O0t5bsX0YT#JS-Fj`0fD9vB?<+wYQveoAxj@pwYv ziGmD6Ye0(gI5jeMmm>4DW*tt%m0>9=YUYs`KP`rd+$a|400L^~d8pR_yNYHXp0DcN zsJ3ZJrDQ6FRBE=0+t`S-0(GOh7E^KRTAKWRDjE#UL_zZ!@rxOIO1dXv&Fl~#5eT5!rbg46Ja>Qr43W&*V!#cSxaBHTzlY^%YT zdC(fRZoo-MNxLqhYrXSm!E_PLQ~vrsWA6XCg-7+2)3 zb17ve5%0Pz#xHk8rKzr@K7OUMyQfQ*6!Bn^55EHe0u)EibOnTn5jZ-Nsr$C0(_&m) zNaACQjZ;D-6rSO6=h0{)%tz&8owdo606-?L{X6=634PLfYJ>Xu#CrWN-YB%5`eKKi z_`O}b0d*ko=Ks?d*bO^la*=R7R8>D<0tD}Z>MJpyAuAqW_8iW2|In1}Ut(J=H*x<4S*AtXpLm`+t%lQ6%aL6y>& zsj0*QY!Z`+&$vg5?l8@2d|%uP8ZW@V{A;+6OQ^gDIXoq&Yvt7PsjFu))Gbe4$+x@Y zaIPF(KALlGIrf#D^<@Vrm7U1$$aH6VGP_n9mm9A(ZQGg(wx-;4(bl#UD6`1rSsE(Y z-H&btK0mX1CjabK!vWZc%ndIOXI~|zO8eW_>(|d;-?ib*r?>YXDeOOT^F(p~V8)!` zvvjsTBd$c3qq##xcT2(As$=-H4!L(%k1pkYUm(#tnO@cb|5>RZ7W#!WZ1F| z4sfpl?K@3vT)5f$tGBm%PZWAj6njUuT2B?2=B1%bU$!sTch8FIzL7WQXFl?5bG-$w zx5ypZ@*Mu|$)$me4~}SeWx^SI$>zznWq0TL3iZwT-u1qZj%^HY9NM%VDcS6q{>)r9 zvT1E9TNo$1G+1^r=7YCg-j&dDC^rGxZTYT^zMH)tw-jB&8M$#UtGSJm2(&J!@04dtK<80*$fl+WfBa3bEI*o z9sRbwdDveXGeBv&yEz~(WDF#xGh7X_x@i(D!88yqkp75T zLrM+NvRg$zfO#WHQG|R{(?CrLI>vmOR_Q0E?OGs}T>_mpDK#RX*67B26wnQ38qy~u z=BHW#%JF1Nwf!J5e+P6N596%#g&HkMvns8!f?1~=EKrFjq-w!ZOKpq_luCW79-$nD zreM8{@M~X!!)EL(*xv!)<2KbiTT93faDN?)#*UDzeg^5C1Z2HDNM&h@YSC$=MW-A< zH{OP?Psl^snRW?w)fT1~=y&!4o;`}MwjRxrDE(M5tm){Vi32^4`v?W8kN}{wPgtYc zbV@ercZ|x!-FiwN9vhwHdOEuo8-Px8Ja?IoN|Ad8x};9+RIFep=7=17l~;4vkLgbYWoZ+{N*c6DKESl1a`arX@(3H! zspO2`qcO4=jc9ZviQ9>$DJDA~ zj#bC|u1x&Akqi2=d=6PI#xS!^F{Ceg0meEWWCwu%-rUlo`R>R#TkYH2 z`%2OG>c+dD_zssEo?9DR9n1IU`Ss?H#PzBC+3nWDh1SD2cNbgxw;BTFdgSqy8=$&f zwo_<@jzq_yaOJ5AtNCOlmyT>6vI zk9Zwb&O!pkee2PR1CQYgFeDz4k3&^9Q51Erou-)2tcYs)D{A~3YAUlwsFzC?PuT=* enPtt69Sih6RjKExo^1QJx2521`3%88H}D@SfVuhr literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/BlpImagePlugin.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/BlpImagePlugin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..89268d905f4d40cd6e508be20ef334e09cfaf0d0 GIT binary patch literal 24129 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 Xp=^)z>bOTWW!IdDjeJJA$rb+p!nD3n literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/BmpImagePlugin.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/BmpImagePlugin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2c518835123dc6a6c338fc7c298eb0330efbbfdd GIT binary patch literal 18064 zcmb_^ZBScTme_mJ)3<~^5E2M5;v0d%24frBw7W528-L&r?6!yL4kPmf76w5-$saJH z$KB~oi?OFH+OunUySG|QvT1pHQcWk53|pDXdiGB`lcb`D=tBL9t*|vtW=U-&xb02N zc&Dm!&V719$im~<>}_-3ednJ0b?&+6opbI{|7U|iOF{a-|E+rD!AXkxCB8^WB^Kx> zZE}jbN3j%3k5XfFKTTsuz9SJHL>Q8l>JuL(qF*V zvia{Z{Wf@7;c1sqM<}-7J&Lt?)FUQo`Ww$rVg8u<3kjwjFbe^*MTBPNX-o&fECNi2 zr!WmIW{cSpwv^q*ma)!{6#XS^9a|1FDAiD`OG9P<$JVnI?(va$0m(PQ>5*oTv$2VZu?Xw;-*@5y=+UiGOOj`mu^{=)$-``E!k?1BMU1RJ&JR# zsn}zG33}viTbea$E_&o_$<}1G%tepfEi>pbDRVWfAvs*MpmY0t;{kWTJMQ!Mx@3Z^ z=aeAt@J+7KST7e8J!9@+kDwus!`@MkpeM!C?om%5;DH_#-sU}{VqsUysOJGK$i~|c zJ}$w>5e|LRr>Eqn4>Y@E93BTOx2DPj02uPKM-Dwx9y)UNK=W>>G6R|*hgYf0K>4Ce z$tj^?jloQf8Fsf;h?x_z!-F_?Dd8!DKl(`(6z)+$Y9zBZg~igJrl5V4OV;}Y+4ay# zScKLeaB~6wb#LG@EKE7Ud4{|<{D|v(c5cVz@iEVi%kD`}U`N;Z;MFmYFW}#CdNOc% z+_&SJ$9HYVsQ1#23G%+Hskvo`-y85WPPhlJ07(I{=fsXfV-q4dN3RZheN7XSf@;7$ zIOv%Oa84Lx5B&M_A-hQ>b>?MV39l=OoKNT~<4olf08_b_S^_oqs6cw5K}uR4OJAeN z5?!h_Jz%ZXVb+RS8)mOzHi}sgG9ZB5yQ_sOg|fJ4t_+HTZh-Y(lIGa}ko|~Yf$S!= zqRR_iyLBM$Xp8IG;!GP?4&XufOQ*C1zX_mwl!xl4Sqh{!-7jZl{R}JbSD?gZm8^N?p{OQ2PdKTfe$r0$~0Vg1z4RsA3&KxQV{q{!UHVAC7WtB8MRvEp-r{2j9T4u zwfc-&1J=T<@qA<@HV^3lqZ<*2H9^UYrLfFbn4Y=i8WpCw-@<(J5u3H*N}#rY^b1df zax&KDqggq??Fir4m0at@*4WCg--MT5lP`}g%w2=jh1Sp0qbOs=&(kCQorSi99-Des zX0#=g*i>7bQCsrd+S1?BO>NQ|$B+z0EPJk%Go#OPtYs08(0&u2mLZh_R>(+_TBZ0D z4>U=jQ6W_bb{8c{9_a+Y-rFS1jVD`)<3cMVj9&W*l5=ZCkfAp1Og-6|tt3dM ztZ8^@%1<5xdQJ?eCp`}_P-;Rq}ZK* zBA?a<@FPr8P%G`syYwdNs9!X{O_17JOa!@Aca?=>*7mcwAv;0MvK^fZ&{S%rZw~{YIdUUqv3h+3W7bFq^ z`@y;3lW;eDo2F#}R3=HvwJvELY>RXbP%{C_p(aPtv<}WYs$N;iZ)JB$tzW#`Z0och zFkeb`a1TLp?EVqW?ir@py=>dCjNSKY7XAiLL>?`a+_Eq*Z`0HQ~v7Kz!N4n`e zX%<1lHHy0{y|LYdR!88yiBQHM)!-Xo?%%Wv1ZOMh8Qd5n)!UE^dzsd;hl4ukOU54b zZ9%6@TKfKjGzazwwAu-8jXCF5xoK_$=cVRGFr~Tq-e-?)bpp4pfjPZsr-&9nD7!7a z7Ln4YgEZTNHGXBFUSbxmn>~gcg2g|Ag@>bsXeZ4H`& z`9UL&Ej?Ki$`J=OT@Wk?G^fX~O6{Q@u&?ZebR+gg3ei)%6Xp&?T^pVyIU^Wt;=F(V*ZWh!H z)6=$~o;^wWs}9<7X%!hg<u7c z_Tm(n#2X`S*^3={Z38dE9zi2HD*+``gwLh1#V;ijl-;2H4jMJPtQPn>a^QKOq&EiA zdS%ci&EnIPMK%n!-M}`f?Ii8`)|B(C$IUu9 `+ZS+peM93;_oeZx0b;p=G1@Cy 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 Tjajrr?fSjO{F2&Dbg%yhfKgMG literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/BufrStubImagePlugin.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/BufrStubImagePlugin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f2630c368f8a19ce3198f2eaecc302cb419c0bca GIT binary patch literal 2579 zcmZ`*&2JM&6rWkIzwMYfUk(IVB~UO0o3yl4Q1ye9l(fYlA`W$1SsU*-S+m}CXV)aQ zTs0u1CTc5!P!%d6wTB*xxbP?R-a{P`lxUSoNF1u%qMG)AD$zHySv%olB)@rY-kXp8 z&HKIa@6l)oLHqZQ{ly=A2t8tk+q{l~n};w$i%3BV)=&v&F=o1;30VPpkLD?fSrNuW z#jANszO1k0&-%d@Cvj=tBbf5GjFcNC^^uvDe+G-QV>%dN!hTC?S{; z6%g?i2ig&?Mk2*MuHNoRgoNBRFyeEiw%65OGB3wuaC>G|NXFLL zge11ZvaTDJY^jEBX22H4&aDHKC@I+9v64JV>>%$(RgL7C!);6lByckT$|9;G8C7vo zsO3Tuv@zYZWKEOga#>UJeEB10ndH@inwL&p9K9f^Y;kEy))kG=REWB~gFoYvHdbeY?)r-olko2o^Ql;!*-I1dDleUd&^DbR7NGQmImyjGc1^;EfP@1SH- zH7!Ej-DwoI?17&d1Tl*?I?#^3D`%Quplw*OjNw@A1BGE#+=?U%ho<1Wo1^1^ekLiH zB8)PuxRM>oj=<-J09R_6)2cNEmaj}nL7j2Fokk$u_UGh$o|G*b2Wtp^W;cjgv>NVQ z2@foV2O7K6_rpgU;!)ZGjy(KY&CRW*b54S?SV6!bob|vDxT6S=?_R~Hc%b)H#iZZv z+=doQ6I*15-Ua}pDF@(hP&fdsJ=@Bx@DaL-Er@d(z~ri1`r;<#w+wB8&V|s7D#BOT z^1D&>7PwdOOV(v~_)Jqg7B4+)xX93brnM=hh;@`}?WTCaV!Yt3ijuy}I=jqTEMr)b z>=2*;P_6&>^yyO@k0u4mK8uTF&=v}1etot`iLBV+@v3ggGp8vvs4bd=T(Skjv;*U( zPk)>nxp=|$=1PV_pflAP0p>!CR5S=0S$15 zvTI3V$_m}qH23B-Lsnk+EzEJ8g|qvZMQgFXxftITIA!}Nu_{!z#f+f?RP+GEJQ-+} zxD?~PTXyOa5As93$?0;5$DpogOpoMpUshyo)8i``v?N=0-05=)G4oU{v%*Rl zo#-nd?jU{;ejSwYk_&bQvk$~Iv>NT29bN6;+Yo!3V#vGmaRPf2&Kwq=Z;=Cx7O7^y z*b3a09c>b|;e`6K$!|^$kJTbl-Q&^*=m%>#t=LLucLYJ@s^hxQe!U>IJsC(h`7){P zN0gV4JdKQQLoRoToG$hT)`W3u=k(WDx;I4F)S60+Uxi z_NKT=%(kF!g6Aaj9t8oH?2k44eYdB7nYq`yy!Wluj`W;ot)pil|E<;t>|7Hg-<-X2 zc42T~;?}_j;t&V4=1omNp@(CIVF{XKg53l?2m(esp|iacRg0K>+!iMcLrVteF>utv zJY`Z`@>AD>W9L5O(O=Lvc!X(DsV=n_a2AfU94b^G2_c6lyHCpgB-lQyT2}Q*Dl!96 z_@jd;y8#Xwe`%bO5N*9otkyb7#K5qlt>=lcoF3Ue#z3>T!6V z1m1S?`yKioj4^JS^B^`n7~_9>5gvMkf`6i(ztEnC;n-}T>GR{h<^aaSj{}`JaVxlz zNG~PQj}aKngCgFy(T#BTtak-x4H>sv-+tElTa->+mD9eaop a%#m0^iAMjSmHy$S{^5JaAE1-`sQ&}37&l7* literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ContainerIO.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ContainerIO.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..39dab10b0e0fb2137371ea4fc75923df4d8abd2e GIT binary patch literal 7008 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 Q--@mkr4O~P=vw3ZU+(=fZU6uP literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/FitsImagePlugin.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/FitsImagePlugin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bad3be5e8fac1754126d0632ff2ea2e1ad307c4a GIT binary patch literal 6241 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 literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/FontFile.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/FontFile.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f6e2206dd20631894cb969b12d8baf24f44019e5 GIT binary patch literal 5562 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 literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/FtexImagePlugin.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/FtexImagePlugin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..83f3f09f5075d8e426fd91c8310a0d58a4eea540 GIT binary patch literal 5344 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 Wr-_kfVq_1&;LD##3298E?SBAcEP5jV literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/GifImagePlugin.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/GifImagePlugin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bfaf0864c1303e7940736dda737fc93870a25c6d GIT binary patch literal 45711 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 literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/GimpGradientFile.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/GimpGradientFile.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e740fec1356a23efe8678521c326f8d7d78a5d46 GIT binary patch literal 5530 zcmd5=TWlN06`fr!-=z4`%Z?+jBtJyimMlLcyNT=AqNF&9U_mTQNZX|fqs-M(^%d*sM@9t^ruuwi{_`jGfPqr zKZ^c!fW33~&dlApGk5N}v%j(1EeOg#e!G3*x&xuVke6!FYYemU0GOLdKmjB$0vluE zY=C75uZ!v8T!4$~1NyijV2B$7Mv!xYK4yxW17_e20gGtCHt1`NS>v{VjgB+L?D4ul z9q{IW!;FM_!SWs#a6)Z`+6A=@YB$t&s69~EL0vC8MVIInJz{-CA80Tm77Zc6@g5SK zcUf(&fkrBGfy^y7-qls4O*0;EL;4eoU!EEp3@76jc^rl$F&3p%G9g405qJ|sKAPZ%PMkcwo4oFN97Mk!j;vct3%cZ9%dy0%uS>)3c9cvA?#L=Ogj*A0Y+eE26kUz z(%=^gN?Q@~)81+DpbYo|$Os2*PmI$E?D~;u(CJ5BZa7l?#FrYgc(lSSAB9O92TuD> zym4yy4yzjCQ9+1_sxFn3Br<=V|Mso!@nl@=9uLikae<&VMP+eMDippDiilG8=@V~s4@KjtAsiB-u>FJ4nAnw?Q4O(ZLJVPC z51-i%k8}>m6|`WqWXImkELdGPhJI&#VZqb5=xNM*W)J5tmOR^ww(W~`uH4|&SXQ^- zs?S}V-I6tI?3Ri-ENpbKzHLTFl0AmvZb^L%-ssVDw8W7 zPIg4*sy(Zxq1vD9RT?zIinGJm4&A&uOnR%jcxW2KxkuOuq_VEqLz)cqWC*w!UJj7P zHXyJF*18+}bJEobBh#34G z9fC*d0&)dCwmELJh)D8r!vO03Q8yE9qg>bp4bKYNS+I#OzsgW9G?JIJ9PnuHmM$Hs3 zV2w9E!XYdp)Hs z2TF|x%C3VY>%k&-P@6jpsFljeU{-d3=q3_TfB^(!-voCFKs*vTK}Qxx&pe2UEBtUW zA*!ZGCH$;AHD;I_^`gJQ-a{Zj6E(|LnJesT=v^j)GOWO4AOJtDkD}WI1Kxpykl`}= zj3Hypm@?)yn^y}fK9pldI-s9Lu_zGg$;OdWnXxK*#Y!QdRe_~TLj?KXzE&I0Tx$iM zBbqZd#kLxT+E*sWgBF>r9xVc=m;{Eb zfMV2Y@@>UVL98l)R`M?B*2b3VDa_P8Q!iW5OY3!dHOce!I-aRlU(rkJb$T_)^YuEP zsn<}^OY3!dHOce!x)gQ-R)1qr>J$fAH^oV*Ywa2`;8E9haY!&u5Y*XF6t=p?f@zF} z_-!7>B+y|Jb|_3O{hM$v0$C!*nI3YLJ3DmznAeE6fkf3qA{P-g2qT-W>LATh4WU#@ zOb9ABk&Gt1Zb**A*qCYrh{sV;QjL`qPi3RiDm%Rwo*sDODu*MZdnxTvjg_2GWuhuG ztumKXy%dJjP-U>nL{w%}WkQl0KFL2(Gyt_kM7i>zbko|f(zV*~HjI~k4M7!v)#16G zxtb|DI*O(apbPH$tZ~s^mt_|^yMDIk&Yt^hsq>|hX=j$r9?!8kUw&J`_=T%6cWJI= z1vQvEv&R;kuH4)C$=UNIXKVJ@qPspf`J){RPIoReYs|3=`+7gw^YNYsY-wMA$=MAm zj_29Dudr?2xU5H>hTP=bj%5>ad2(lGjWFEdywUgmHfbRvur^2`s>42hx0x8$y)~tJ+}@QCT|`2%;sI* z1uw z{Ev7Iswo&ugyLc_s9J)-cv6^(5#AOIPELhlT8rlHj$m-jB_J5YM?v=;?O;%^!vyOo zc@-Gx1t32_%bStezPt(P?aQpi>{!v+^!9JIwCKHbwzPK`I@Ss~gix3jlKZVfCk0MU zVBspp&FH*()wwZwPIr(Lnja4(AXUfoK0|IfJ0-q~aYP0eo35v0-L!^v%tS5CpcA3w zZiSs7kzhkvO^qeHz-HJr*<&rnyvr!h)eDHGd#Y|-HA>-@=WCd#;m_*ysduL{&c>UAL~?vbH_rP#l8(LLa!XU9iGlk_!bbt9Su>i6#KYH9(cNG87#{WS1{h!#ym~1 zlsr4io{p^V3#TXNn=@zii_M#}+%-Ev%Bi_6e@9NUk0DU$zGeB|XKo$H0Rk_$+_|3FdSE>Dxih)R zTyNH=u{hTUpKolrEfsnSXFoXjlXR)EGduLSp*io$@4MA77sw7SIvVn>_b)Fr_U3et z8^OZ4Skc+G2sWL(dh(%-FWLA)TVZs*ZC<$NyT7y8di?jc{;yie-2e4wXD4;OU-h_s zeTHE`nKxk})8-SW&Qnww!Na5wS5C6p~>;j`Kt`NC-J#8h8-Q zz=TZ0BN4ZL4?W`cea&sv`xvbsX&v?&Fo_(P{G`C-%xfI^F6F$BfD9`J8?$?* zg<%e_m>6b&A@mR-y^vJdJ-NZWuh_P~cyO?29lBzI0sl1YVZ2`i_@% literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/GimpPaletteFile.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/GimpPaletteFile.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2cf0b4cc20583a8c8ae0a877af098c8468d26182 GIT binary patch literal 2738 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 kYv}kR)W$ZG${{R_X2-Jg7jPV?>l51m0bU;qFB literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/IcnsImagePlugin.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/IcnsImagePlugin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3e41585b36101f3db1457acef040af5f5d102285 GIT binary patch literal 16835 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�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 A(*OVf literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImImagePlugin.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImImagePlugin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9bc7a09191ace04e8cdb1070e69bc36305a30ee3 GIT binary patch literal 13134 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 F`u~9C^iBW( literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/Image.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/Image.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..69027ea9489c829b8737b7f8197255bd628712ed GIT binary patch literal 180750 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ξ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 literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageChops.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageChops.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4ea72af2d0efb3182fd63fb4f72fbaee73e38bad GIT binary patch literal 11228 zcmd^FO>7&-72c&t{gAR`D~>2Tjx%=bR&*pvaxBN9?K+N}AaWEtjgvGnP)IB8Qe1n< zWoMU?DX5K87)gy5O>%Ntpr}uQ6a#hA9+E=~^jM&WN+60DJQXc^$fXd#q=%gPy_sEV z^=Da?0u<^JoHx5O^LF;VH*em&_x`+NM^wS}@4p;h~9Yy*4<@FBq6 zfV%-727Fk5Om7ElU-1^E$MHO_AJ7l#dw{W{)RB1n3nEBDt;Do^-gY(DwDZmvpbb5X z4CSj)csi(NE1bcbUbah&}683HaU|PN7@!^t^2u;2AoM~B1 zW9cmBU|4L@bhEe}Hz$ld8|PYyS;mB6C8JS>E5+SX!AP-Gp_EEnn&YHKfArGOa8k@w zmZPF$MIBDmahhKaJ?HFn zF=ymmr{|@To3-;jn8-wrWsda}#Ql@WzN0;k=^EVyEqxWp&~a$EN6cU_YZshkp;T#1 zgOaY6cli#yB96cF2#V{gPv{a|eLAy{|q-BzwwM@-n8Ji1&gJ5gL$7R0xwZl->EYAzh-EqJ)(gGpG# z2fL`O_rWR=1ihDEs|($ghUNVhNq5I1t018zq-Q8UVQ`mec_ze#b$Zg7NU~H)N+L<4 zU3A%L_Tt&sS-0%CK_N|qD`Csl^h$VyWHe;vDzP*~Xv7rn=escJAZhEp=N)*Spf)N% z*ES^*edqjJ=Wh((i|u?D1b)xBm3=?^dHa$1_9Nx?u5zqf_V+9WUM4BU0|fnxZxIg z-of$!tv$YCmAaalH}m5HAEB|#@hn7_Nd>VQzjNBPP9YY3T@uaF#D@9KcZ1^mVJg~D zRGJ0by?4)sD)sUO9z5zPD!ITKyl#9yMjprCIe`LVuv>}5-g)7z7jC?GFC6tMv0d+; zym|7yiCd-jOP|NP=i}WonY-q!S&pA5#|GxY1KUX|e*cY0g|6|d_ZJE?zvV(9b%A^} zr|n~j7}R?W2hi~BhNPftKHfF++TAy1-zdkQD#uRDg->iJDfq3Bf|tGJPHS2lb8M^V z8gfxHJ0lc^P!io^rEaM$bTgANxRFmAY|L;c4VWLES`qlff^=5X2f*&J-rokcKq0gW zg|IlMmHdwe8V`a0uWU#LdgtT4AGd$H=aW6<_{nk%8}g}bBm>%`*wY2uE)@#~H**Es zp>3kJMKBxOwF@K)hL+AU8?5G@5j2!xCA-LSMawk{7VIhC3h+!*$dakEF$>n8)c;*V zP_PeS1T!7klw?C0F@q(zmY|r-!io%{kj4fu6!RK{G3^@qY62(s26n{TeOM2fAe-KT zb_j{{zj~#-HP)KG4M|G}q^)D!eJ42|PtHu-EzOq7@quzIH5X28BWauZXbn*lR-B`Q>%!3ReZlI@!}J>)Lqq&YO+O0L&?4M)IlGRu8i119G>w#GK! zW!_wa=XAVWoz<-9z|a)B;*yV#Lz5IugTCrV;`9LbNqRd3URpJ9%sGj&8)PGILKRY zB5mC=lSegM;$6AM8vK@HV8bu*_ciAF3vA8P897G$iyRrkN%9+1{#VcJ)1m1)-^+I= z=wA6k@bav#2aT~VrkfL{?kh*nkizNRNoy9YcO2d|-ES5M>`cZnTr#nkoikn7NnKuN z-NRSzrMMZn2#rBzI8V-oA~(E&z>vC z2g|W@bK!GRDQq8M`j@8|#$2wYiRCr(enS%FF*qr(ZMj5wooGXXMpQTV|oKR3SZ} z-Z)H$vCS(BY0P2ykK}BC?=wT$9DE%X|FTlHd??M1tf;;afF*JcJ{)# zMbBMrEAX5;&%nduJN~3A4-Ov3Wm#>)U|3=XJJ@$n7!>5MnY4?Rj!?i=gcWQC4-!IX zIi`sn!V0_&UZmyTA%RP{lW@{QBhbP>#7kl(C}M`bb7hp72pk$33>tY{ z)TBG98&*)abQt9{=c>Sl&>ndx9Rpzu&&hCKB}Imm_;zeYTO`PyO_SGG>Zh1Ts1dxD zKL?@xdq8mauB)IHZJ2WWSUJ`|7w+Fif;;u0FSQq6-n7uJ3`y4PSww!fnBxsXb=iC+ z!=paK(KrNNe;MHS`k|@L`FQ6{``taWa7aH{jvbo|AKOm+{+-Y7*S{f#kJ+~6onjK~ zz-hL4e>Abh%l+DF+^;QnY8?jakw{asN7iTmn#&z$-P%=)SNG!4dif{Q%CtHi@=u{6 zYJBq<%kXs|ob19K=O=1FM{9Y9!pZq`iA@^hoC_pS)YNyTm`?|jD8>lo#`7maGB+h6 zh9grYa3IvILRNF=yZv(@zknN2v=LD$odlUAEtE+jg1a9~+%5)V{98%0w+Fd_Tn?5- ztlg%x7vGH;Bo}Q-4??UOlK+}uO*Irth!&<9ET!3ZiDp#n3(%~MXm;l2nGcTNK0bqO zrFSmeE7Z(|bdYHE7>0YbdL0!wSwh!C)9MdH_fNsuiUbGf~)-sH-119 zsZx~X;{`E=c4w1_UKvc+Tnz>d0#FpZ^qd}WqmYpx@~MOn>n0^8r47U~&(VNMt`(3K z!R;cJ26Z)bc(8>jG&)+6SVm!%z^U!KT1;19!Xsp0Az2FJY`l~iKPbWuLw$7gnm^Fb zEW*mta&j|Dv7vkchb%F7dF)QfW^YuAy@GjU;TNBx1Pu%RAvxzIoxQoq&XlhstiW1V zw!}L$29r!onw%?sANp*vpIn-=Fr~Dd7bN!H^q}cxiSV+F4n6?hK}0D#s?y+nSEa$5 z^HNEruA+Y@NoqgtgqNqW_4=Fl+V=dU;a<3DmF%8d_WSnj@tMhTdoYHds28vNIyOXs z2$>PbV>F36Gw)XFWfly74Nov)&6u4 ztwb`&ZgRz^@i*`w@Rr6^M_r^&57hHz>M7>9ICJ$vqA~DE6cFd%qvBN*Q&D_Bn`Rg6 zyb+kko=S9NBvV9ckTEjCNe5IEp_)bFp2%S19fX6DZTJBy4pBidP)(3woUZO~QBPJ6#&El@3AY_yky_ZR zTvA_A7wTHnXVrVnaj$Zq%d7OKyvq5Dvhugc&T51@FC40kJnxT0MUF&8jzmR{Jg<5q z&#TpgQA}ZPRDDLR?rl|%R}VF-{WQ(v)%^`>a$$Fq+9#$$knj;ac1A#f1ovNcw5l>o F=|8GuRUiNW literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageCms.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageCms.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2523f0d67da0fd651b4b9d97815bb5d1a74bc3ac GIT binary patch literal 42608 zcmeHwdvp}pd1qBW)Gev?ej^?wA&?sM;0>c0h7pngd4wcOVwh=XEE-h_8l-Nyx&k-}xO$`ZoPAFRzHm zxBt;CN#`V0Qsr@JLJr9?#a-jBkc;o`kQ;aRxM#u}@=oN0a`?Sx+&AG5`8n<#&z;B% zKXv2RUX@90&CyZ{4o!`4J}g(LW)`#s&h$uCAH{fNiEjA7tt2FLiPN# z1W!vHPgnEPGCVEUa;&rsE=luiu45k%d7YuwaM2}xht@_UwL;DLgsfJoRS2uq8idQ# zT7=8h6$n?Vs}L$`9m0BbHNpmU4Z^i*Bf=&%h;W^{9$_+C^ zZdJFvEJfshEr%Kz-tB-l--4rwpY6c2$F$;OgHC8g+-lc4wO8G*w!iERt>-+CBhM3B zv-Q43t3UQj_vTk!>Q1fU*oW_ZGv>*~crE=;?NgsbZ5zxKYQMVcWlv~h_Ij46!)4~a z_pT18PoexxOO#iCZ0uf`QOnVLpN_fjEq(D5^@C~$YTK%93T@N2hPDG!2Q$;CL+Wm% z*nv00_8awp+KH!+sn4igXni~G-MBxF`ySk%zhVMzx?f%wkSr2CGCC1Y6>*l%iTHpX8;gun`hqTPOw$2O zx30(Z@NBLmul1-#~#~3P1=YK&=U~~BjKRv#(uOs5)F@!Pb<1M zu7%^8s!T;yO;>vN4)nGv%3eJ@8i`HCkwA?_F_bFxu;_AbAxaxPO5OHYvoeNGRwMC* z9yvTkNM;m8;}K7UqiR@JIqP_2REx$n0m3lea^qVkr(K=`Ev2wNb7KXMSXiB47^jriLinZI<8G7(2++p0Hn8yjyQM}n6E?<^nNlHk4FyUCpvo+rHCFv z%WPoK(*)}HbTjfa#udzLoPOZyA5CCHH*Qu2FyRS=UYbaojB+T&hF0X^92hbD7Fe)xLo;K7T{5M0UV~aR zJOLa6mQ0R^r)i*RzEd5DVhoH2tqP+BJ>u3l%P`|+UUU}?tNGI$NK95D2Q&;waahA3 zFIiMPGBGty$lc7{xO8zRk4Av)k@%7&g+~)pJe{U!Dxq0MOWP)O&?p9Uj3%67REYsu zvaBWozEK72oG&(&n4C(O?F=d{K(BaAiEA2 z7wo8Y$x=lQPW++zq5eI?1B3njdwTlz);~|vSJlSCQ{xF`3~Y}G*OKKNo{EgC1B8jg zdN>+K(g~$0M)US$BrZmV8*UCv8}Xv((&KP4HZ{&;8aWaLB~pV~rj3kaKqf?Nh zKzvRZ44?@l(vY4kxk(T{=ELAJK?ie)#-iZVGr1O%7!^XN2n`8TzP%j3&qnOjySHPw=b7%2&i>y1!Jhry!-GAYsl1_%;RAzs(chP< z=-55f-+N#pzjPrv|#-jEMr zPRNhY7s^HG59O)3p?t*hLIH&Np#p?~P$9yCP!YnyP%*-yPzl1~P$|NaP#MC~P&vY~ zPzA#BP^DTCs!}UM)oN9!My-bJpe9tSE`uIb8(N_*53STzsjJi#FMBRBw6Gs2(<_5Y z%1cU5d}cG>n8K(A8nBWC(g*q!J`Q1X3^YJFbZ8tx_omjPhYq!J&)<3q<=v7n32s46 zLr_cs9^R4^1Rj2i@RsC9fIsOLo=dk*Bj5oO(*U`U1P>#Kct~555tHesivkY?ehP{y zP$+ncg45EdF#(ZBl4vmSC*R(J$T=xN&-gk9;1*xAFbK^cx9XZfo*ADc4M{=w%r9Hi zb5A6ywIrsZBrHc0dTd;Yfr2Q|7Z2kG8gfLBsFN{}khslQ+9$($ctVM`EA5lh?W5!2 zc)a}(k{lxX2mX0PLoaSnp4h2GDcH1i>!Cwdjko>@K7 zpjbq$%KG{b?&}%u?(gH*2xG$bB$_I3;nr3#+z?j9H!>i*z??!HdI4G=p)6+s(Q zRTPd4^bZY>Aai%eU{6TEQz>2yb}xFKPlK|TN$*f9ud{#Pxsi_EfqfmR^1lAA?mZm` z&?@fAEB}=M6#c?lRc6xu( zqZq%JC(CM1_a;HwSFE1*EK4p^<~>zO&+=qN?diUxXQPq4?PhJ=yr(+pS)Hr`BPdUL z9yi`>Hwvmtu56h1)FwS!jgmZDlBLzBpH6yqB};0l>c^9{Yf#3`@>&3}D5zM0+U%fm z)#?75-jeURa=dM~-BM2JyA%`jnM!~D&BmP-WDM^EzN!KeEI9oUZ`JK z-h5hc*ik&UE`tusw;S-t!7jb33=^OmW2=0jUZG~{bqPOLEFv$E>7S`kdxrInj0>^q<* zDQMAULcc^!&VD1j;OiI(N{cQF3O~2d0j-*I%9E%wlh1n0nqHDuONm1BIV`;UWhp_! z$`@MZG0WU4opL{*ZSF^Hn<~>kvj$muPMQWh8-dR!UGz)FKYAvt#g^6BH}htmsU{g* z9eOS)K4>IznRO;pv1H*Nbf8PCTHzLQ^Z_Q)IYYx%2h6qUX@`^xOx$#;s@Cf787{==XB z@YOY2=ZovpE^kR~vV86J@|K12mJ3I&m2XSuNh=!8bbWmPjoMY$YnvBpn=c%^TD$d3 z*RS{9C@4RBaBl2c!5V(IaiMnOrN%#P{$leVw_dI75GktWe4i`-{Ho8cx>m3;SzAvJ zZAX=|JJX--RW#Xk9xe4}yw^~RkG zjXN)g|6=UV#{T^1)yBPZo;L#DchmcCl`s3g*NEIr`%uE&I5DFym2{R#ZJ8q z1-oj!UoG(?{?%G<*P7g~DsGCe@gU5gztqd17V_;GM8G~UyG}@Yal)W{BvQ}HpOQZ9 z0yQ)VzBCOjXjaN5h##}4G>S8>PeEIvGE~o}y{B9WqWFBxx@?*f%%L?L!Xzx%Bv^O0 ze?_8Wv6&ik)Gag7fS5q7w}^J%l^bVj8_l^09E9;xAv`4Wy{0rmJSL)*${iVDK_1dC zk=0aThna>kKj_wfnI3ycN7r9OG>+aOJQP@%KQaP4Hh(|-Tb=l zuc%*n=Ia~h3-_OK-zZ!@H*~eIZr)$VVowJ1C)jxOof{gBGQ#MEN4N1vnl)0V`*O=Bm>k)Gkz$ zcst7CS#ORRDP{)!B%3uYbs5ybHcVl7ND)jG8E-}sF+q`tngnGYJBMhK@)_@EsumBG z@gkRoiEIl{u!^PP^6N#b7m8M&@A`c2XM3*}ZJhUSw6rU#;_iA7RAp9iuK#_AA$T57 ziCnhYbV;XmPH26wIRX2A4L|e=3h1#;vjB=AC-HI#_n15Mk5a-j6nu<=l@!=^4&u2i zPkk2=!_INrwai<0dxzIsf2Yvz-6RkOudT~K0QvTB;gLgTgNaM?9LuxPSrOHR=ayJt zJ(e`zG1BxGT@PGzCt1)N%2oZU2QncHCTgDQ#glwI$-$Grv@4jODltdPvQp3d6=SCL z8>@N4N3j$#3WG3~6nKGx?Sq6mK#ox?{9>h7!9qeaF=6YSxpv3Jky=mI&-OzvTJ~o_ zURv1}a7YolmSN637{QvAK;JBj7-STn+7BHPO9ZV%wm#Gt866!lu(k1d*jl*azR_Gq z&r!GYEZzca1P#tPz2yNjSd7KOL-x#8 zV)lA+vZfWa`%u48zO(*W_X{Lf6A$7GaZ93~_3%5JTSy}ogtIQBw0dw_dQMxq4B~P*I=$-8eYzt z$`NmMnqvAKf>aJ{G7ug3mM<~ZA-hc>csmCl4zMVoi4J&+0$+;=F%_ z0MMETNMXrAa8e-vU8mPO=7zH=NK99DZi*RWVX#O?p(>evOs9ak*>u%x8Y;@lqLrGO zUv{019o8k_yh%!`sOozZ@)%4B+&bwN&W^`-J1WDQe~;7qxr+DU=$ zo_J(N(?5xa`oE$#UdT+53H`U}0kN`_hiIcAYw5qsNg@;dQ;7^=i}Pk1TSkdpG`1SD zl7LkV)Gx0&*YjG>oO*p_>%z*`ORhilebINh{A&4=XS$RAz^jF?6khi)U+^!V8~n_( zuRr^#(1nUWtbMcg;)-kj?a79w>kZo%8n$0=*tO8G>uN*C8SkrkujHNGx!|u$7L}g~ z+>6l`!oXjU5Jo1YXz_*4&w@I~x1%2lR2jmsP5KW!`qQ8lBHm2ymN7;l>&WMslCNE@s0686jjytN&DECs#%oKZ^s8jIj_E)x_Rj*gB zU8r39PX5|tX&otQ5V}9nHXo?Vjyk1(Sp8=8#bww0TatBauGei@sM~VA?umuEC$82# zdB*js?-k$Kf(8G|WKqePTt=N>vHmG)7z=H0STSZ1EEE!-5aQvdDMp4M{dW-Dtu$LR zVAu<06_P0R&sfRMQ>+mIq)eJick?-m5M+e3`9(^?6g5ZmB0r$fyj$u>3>lWoW(k#& z1Pd0e9q7BLB!-SGUpkqzxNcrc5EAR>=o!s>{SPTvB(@U2(kUpXQ6TB|W$9g)*XvI& zla?vhYt}8)tV=dECs(bxzUuLXRgWjDmYZ6;l|(!1tn(aN+J_jHa_qNIHk^Gg-g z>0FBCNtHF}e2N96lB#q8#js|wHeE!qVyS9Hx`bk-SVy@{rQLo?mc1+Q9^^%G`~A;PP6{`_B?{gv6XC*Sdb z9+Z98v+O&*lCx{)nm*I~dh<13!lkON;mvT*`;Uxxb|}RYUxw2_`c(O`bQtS z{E@30JFb@QKI2RJ3QvC&<=n_$Hn;t1K9*`$3*Ln4tjics`8E;hOf3)kl{=L;K+dOZ z@R<2P6FW)-m2P&HA*VVvkcf_EB@6w}3KpsQH_>0Z@M_jpkh6IJz`@;MAtK66UEBszs%FMCK%uQIT z3YT5UWqa+XWKdhGrd-KUmz=POg-Igf`3Z~X+Y<9BCxosCZ6n(u|F{vD{E{D$g-OdFBYs=Dh?*ol|))<~f|jec@k6_X%ocV0j1Bi3qt}McKk+ zDTcyF0uE_mDhZie zwO00m6t(kGoY~WZdv{ZVJNG~Lw5XrUF>8RgJbF*eIOCb9)aW3}O^)lr2b0o@N$D&k zBLmk%IZSayI0Z!}+LaDqI@ZaY-a(7)h=)w;c2fjR5}HXX^yDVEkp{U=SbK;x2q~P3 z<5$fJ#3>_%v0&-MuXbgK7c0>U@*vHm8rYoyM@e)MwT{f_oYShz>=p7^h1V~qB;Qry z?g_G~M#yB(R@1OKs75Qe3Z8Ep=y7WOdjya*PkPv{)~?X~2v&BRHneOG zniy{2E6litYd3m_%y8syYjx4R-2&G+(}ZZR)DrMKZm{{cidtK3pH6yfUOSZyN|WJE zWDh&NU7SCwAE>fZ*=PZmEtl;kYSu`1xTM`TS5}8o7uUf?2CZ$Y{Lz|gR{Pa%$FKmiIS8W%v8 zVxAna32e&(7ZST~659AQb789($BOgIx>!v4{dQ z{B~t`EJk~aOhG_!exq(5EwKhl^Tvh=XHvD|@uH-?0<2m3UL ze>53;4uT{*fS_5;cDPC|NelskSVlqjSt~Qv1T&Z}w)zkf8x3V6dB&V33hJEI*iv9Q zsgp%r;hL|CNQD8tqovfHG5{X#j^XDIIOdwUXs6G1YT$nN0 z7#=p?32Pr&pHlLPI4LtU(8eX!*^3RPFdQ>DjQ%wwnN zeC^o0X&UUhBD{;zi+NEYsn_w?n7X#E z<4d^+lEvGymI7tTK*jYy z!$P3p{NS}fQ?k7JOgD^Gfs)g`>0GH|<+=XX`p@saTHg3dH|$#U_y>1^?!@Qwap;J7AfseY$pd{EHZ}0NO&LW z7xW5(a|LK+Qx`V(!2ic|>oEIM|BpzPvEWw-n;YTGfRH=&zeIw0AXS{)WI+`g+%#oZ z&VBT1QQN$~?FTmkWe=J?WFvbiuR!|s@=fl~23p*|@7?4cC8Mu-S(c~ssL1JLGwVrM z6U4O6(7Mj7$Fc-@;e={im)xgv94kIK7f~Kvur3)fEUp>Fb~kcH_=4B8Br%b()}Cy) z(gY0(Uj~u!Ir`1A%FX&fWO7dVUi3MLj4$j$rHtYxk=aeV9xWgTfhfUppv@U+a#o0B{V_{d~vRI(|$=isQHr@y-X^1z53~E9D zaMmGi7!$=vl*DP!LXbS}HRGpg<9cX2ju=FgV%u`ijSn_dalTAD4pVhO^$jv+Qe&%` z!j407-C{K0@-T$rU53nqR$4X?F;VrU3N7D2OY(QdVh@S{63X8rd?jDN`WNq5+ z2n%07_AMwUWBPGc&oitcXCsL)6uEKlG}P6T(jSL|-W`mdr z7^DJQY%vxF)aIDb*aIlWsi+1S21#_Sg_KG7t8!t4ZsW1o@u^Ad+cRA)>7mul4j~C* zP8@wBb_MrOMl8ca~)R}AMpXn+W3X&g7l zl~Bjo&s^37h=7qh186F90;(#utH*SxmBVa3v|M$8I2dm_)d8Ji;0fh-V7AavZ9I15 zH4#m?CwF4e+A#$<=C7!{_Kgv_rlo&0Q9V2X@#-oXEnN|T~&SVI28FoBt6b-S? z%wTLdAWSzv60_r<1(V3ieM<$JbvPxR+W-=P7uR0#?{aVWL5yOL($=g5FW^KcVQvsU)~YyeLb7%JnLBP*ab8+-<>vk1PR>KvU1;CHmAa0c-A&S4P34^h?zf%@bo$+I`@M*d zS}p)cg;i+bypTluGgQcI>K>_(wz{`ih4edAA^$}~am-L5eM_j2zDHCcm#FC{tU?+s zB;V5qD4tHYhD^m%c%j2ZW7cQ-p+B_hnd|89T(iGtbD?^APvyRt>rg#&!oLkyTV@|W zUe!|wCs+X_0Sk+_#)(g0hj0kc;&c=cOKqlb!XU*C)Akw&RS*+}Kn0c=8#A~*RFw>` zENF6+h(!*_4}4q`%MqN(beheJqq0<&`xUxs7 z!68fjLg=VJPJA)+-)y?C?RUaRGiWZk3Ld?*axB(_fOD2&%p)w$>0*rmDg^$sLm;hy z*T-XHi59K|+Fd=ZRb|tkjZ(;;!SE=sbZA>Wet`aL@I4zK(qc08XXRma=L2!nZ=$o9 zx2#E94ByyUjHYTY;4n65Cp0I`MMF{{84gSM$+TTJnTiLdIJ6UV4<;m4fbx!La3QwO zb~||#x{6SoG5f@9H|PNo7#Lj*N2DV$9FYgNlQ4lzYr7257@q>ir^0DCBUYS;N9r5t z_t1gpkTB9@js4O>`M(bhLdm3;(Mf%d{&{wp|Fg+FLn}|u`aAkJkA;2 zXJQ@g;Kdlw3e8F2o303#CbnHr1~KZ6&TeK!cmn4z3PuOObUqH$;E3iP)L#TGyvf4d zsW_WEf+oX$XlnuYED7*}Y@oy0q{5GlE@XNO+CpqTtAcFu|9c#gIOjbzyl*ow`r7K5 zAH{O4o}V;kEu>DIil% zsyrJWE;ay>xq~LXxP%GlH>n5;9>yC_2j=BL1i$6m=Mf>7 zoLLukSjbs-NoVe`aL>B2!$LmhEX^p@cIG+dMu|v=9Trp*U$(!%n2YyScpNML)^Sg> z9(LsMyy$TlI$Yr^*qX!S#58ntnENVh20(&(#%>CG#TyE^*n2?R5G-1Q6BEpB_)G0c zfJANVco6Ib<^odYm)P}yci9ThtW;1u-sI1s3VuDy%wB+lbttrqAUP-95zu|ZdwtnD?HoUmAzrJh*gWfmtb?g_#_ zVXp^1PZ#3JXVED9TwiL zG+tt@SNNjRfy{}F34ty!w*i@k6Iu<8MWOeZn>Zrk`0FJRn8Xw3%S;TW)mnmsnhrY? zK9NDn`AMOhqb{tTj$*+Xb^uC6i^6t0aVWfob=EO_90Mxi4A7g#g1>JdR*z9Qk0fco z8YJ38kXwP>C&r2Ahc&FxN0139h_)J?A-d{*p2%FPVO~Kmn+<@Pjs2`NbnFz!&@S0@ zgPfTPrPvU1ze+9l0nwud2?U8Scg2`sFm%K`4cBlYaW-YVcL$V(*M zw>NCc=NY~MT%*|%K~9BFIoZ;P#+nZ0M7aSmx*MHiI+2rm23#gYv&=ob0!676VpPb? zfyr{{kl{j3M&XC_!M2>lt&XwU#_m?MgN|qrpIL=?li9%nQrbKwa1aO7lfQw5K8}wc zSa2DAC$NRbRlQZ-A^-KCbSEG)XDq5u1 zOIoDgFX||8e<{%6cVF>)5zRR0&XTaoc?pirNj)L!v~O3!(RA)lyRjG6vD9?Yh`)pb zic}9DB#J}5ojY^Q6sKf7w|pkEZSJQ{|E7QCePyt!Q*Ps^yqu-rnRP=R^PO_P=(gpt z)%Ta`>{ew;b-q)XQk_3Mh)&`uW=eIPYsfsM7KEY(ZQit4=*`@)(A5+3Nq*kS2V0mOxlwf;KXozJ@^LGOek^j<`tvJ`W6XwhR}GwqW|UjDZK+oSyrgm>G!@Skr^Q3f@~C zPc~Q>){k?i(87l)a+sU_A_*eZLXQp$R}?+-cqf0vObj%U4_o=6hC3#RIs9UFViGjnm4o^>K=o%DL?QUJ z3(g@4l6l83hTN$*;FJ*3%~?c>j}kj6VG4V0j4?m?{wXG$3>>oK%~~ zy~;!`m234dd%C1#EgLh`Qz(dozb6hzTc^MQpW?krHEj#Nwwr}LUtjn2y|6MXpvio#{#E@wSGt>qT`7MRn)bU5H#Q zqJ!6da3^0XS@uTze9_wP!EGg&EZ=dt=5qd59-lAmw+=Bn|B?AX(+|^Ly#L{yfK>1R zhT05}-^hPbx=_*4D1Eu8qrrWpptNI^`^qXW#T$!u``lNy1$MjKZ@IjPk6P>n8EM;u zo6H#Fc)ECJ(Y;(d@){csQw zm%YUy+o2a@9yZCi6IEvVS?e@%76H7OB0w-F96(nJqln49_i8XMv!F;zmh|-=%qBWt zS0S$qi+G9iE{ut0Gx$S?j7Q9ONslu(n%~P!FlVjB9-{vyuX_moN$N#*hKw&bfyps- zL7B#?9yN!dPlS(<2Jv7+O;*nAC=FlU=pO9r=oQ5-;yU;u6FDL?5Fp|Jls43(ZW4G1 z7Nd`_SWTx|!)@JIapRZbhy*Ak<~k>rV`e!C?Jj12vrrHp+GsmOYsO?SKp`N|R2#1Z z!LUFsJVLQ@YL$*WEL`uX}Lmfo)d$=`9Yu zC2>Ra4Yz@~tu^9!Zgh-=MD*T1*r~%T!DxXgyO8k4c*!HWsO!-?j?Sk7GX}t5PfKez z`oG20xhv=0qT`2V-1z8NA9llz5UP++-73T?^52aW3AqE~-M0V_(Ra}eNc0Z-B1wE@9f`Y`|W@8az; zH@F1t&;^%R2gCJuzzP~ax9eKb<{Oo3&L6p2*?ML#PBts4K3DWw(e>gr3&m^Bc#~Bt z&wcc@k6y3Zyim3IOyFC^6|XPHcQk1G==JjL3+3D2Dc^Z{(^twD%DU$R-QO&#{jB#3 zt1oC5*Im+ouPs?wi}TBOpM7FJunOB#&sNR3=X&R!yiht{)I9HR{=s(w%ih@gx##`_ zJ5C>8QtN5}#4mL;?#`92tgA%$mh7W2w`TWd_gnRW-L3AoTD^#8XAX4!-p?X)n01Z0 zx};a3Hy*)9DxQal`xLC}arxspv+mbiAJ6qjr##TmvYx7Fe;@&0B0}#Bp#&L!r`#vW z>VDrnZZ-oj$i6pGfg<>twT@?-^+NM=o$|iuwKcz>JN$LX89XH)O!b{~!jxuzy2Rh+ zHuqxzB*HofHZ_BY;zKYOqx=W40B6ToJ5QYC-8jw1teM4iP-ZyPz)#5}%P{fq$M0~s z4NRoY>_XP2lX@aTK_k*{(0jZCp(AbY=Z1S?kOXdg3OMCC2K8%cYMdjEea?5%Z{H|fxA0};ln>vpr9%r-ej^eW#F}JRBGy^R zbq_Jv|AqHmM6Q1e5hB+GVx2JyxdwfXy%xJ(`Pf3`V`uV{r8Vc;UTeEvx_+T_Jx=gz z-hR1ietpM(FWZ0K_twGR*gIdg|BN3&vZ&_OkG}HJxfiY$HCL-L52ni-0NP6(1s&U@D@DGJjh-u29tvwK=*dPeh1+U&EAF?70=sM7Z`FDc&rYLh z#rG#cqZbRzYW+l{;`d;s zj%DLTgwbxqPlY;WRR1$BaK7iHi=|EdZ!v57a2)(1^7Z$4yd<@H(@+E#o<@QQQK1kbph9bNvI~vL;wm9B1{aEh?-aLP7`(J)p=kTOe>=`Zc(8OPyq*@HY`*g$BPK749 zl+LODZ%omQ!%-@2g0bJB&+504@LxO%&1haIZhohD(b)l$z-rxREG(&$E_51>n zho_e&4`fvMxuy%;fS-yK!3G&p@7|{b4obj=rH7{kMGi_pL#h7*rsiiIB%tX*Vgp&4 z-YH&xq4Yvxp=k5GfAjk!Ad5or{E{TVp?dy269Q*5ek$Z(5dc5WL;*%}%P3;3B0SI{ za$mLL+nCf#sulN&2NgC^=&}vl`u9=Fmmh^RY+fkd{7&&>m-NfS3q>9C{*E7&G<*dR z{3L7*ya4xJSr_C*)&*DicRfp4Voh&FvEkzJ0YjShSpG z7R?@f=2F^W4TpxuunaQ+A5m4De`{@T!m1FT-z*H;Fv=RLJ#4i5W5{Rx6gJiv&Z07X za(ON;E(UH9bb7fsO$+6!SV@~eF>ooN3TQzuF+Iu7DYl!hn8oNrhmQ(xQ4RC9O?F&0 z!Q>5$rb8dC777Pf%jqT(@8R|gneHj#^eF6@jEuou$k^5_P6UhS@x)J;AQG%}#5PXY zb{@s+9LdE!Y;Z$|=cPGd?{65xhh=FEmoUv-OTf>?J(y*~7+I~+>5jv-mtGgW*FKdh zwyH2bO85v|r5IeLOL$`o%+>FLoc}d3lmSFwqI%Ms-B6w^sw8{&^`f=~^RUhb8>ZrH znA)&e`s138749p6Ku5LvO0^g9QB-MNWX#8J`Sv^_?>TS5%HZOQPPa6DJau^*pHF&Z zOSao#$>s(xfb7cC=P3=538l$A&k(sy-%_}lppiH_0K4Onh~b&Uf%o`kJ)C^*b&25-;qxToW3CmZI*5p^U~HagXo5#HxG?;*z# zBW6uHd(ez;%aGHLKsK68POYhXUm5L5ts3w3sR3{|#aRqV-@sksM5J{S&S%?7b`!H~9L9#R`_>@c4!sc}D5<8Ol_y z1!FdcrjmPvRsElk%LP3s{yZY!{R47dcIJ<7y#>l%-Sx_@>-nt<`K=dDT$;X?-;pdU zzgbrCQ2L}01hzje{drBt8uyj*K!@VKqIeM(AG-ADmjS{|sUb*{Se@~C%S(8RuX6q_ zZu%D~cnd+QV#IcC?8I5D5Xf-yDxZC)OK@8f=iSk_$@t?2GkI{0GmE8NGAYkte27Er zhi;@)Pg3wl2+*(piQ*r(p3;GP!9ua|n#+EhUU7^!T~E+YT89_k1^p_;xaRW|vr9jV zpTW|s<&gCAFeNTfx+Tk&_XPcpj`}1erb@-WAep+wZl=r!55m#X3)euGM(y)#_EOwlNqW2-#^CN6THa23=i_dcbMHUdP(TTV;J zE86q_C{|Aa<)0}u;c3~}tZaNfxI2|MGBP$ret#n)x*JJSew>64ck-CdpOH*?G&qy% zKxugP((7Di!WiVZPC{lX2l^mLn@%#JPR0e%9`YsD=@2?$!6`rtRbdkt<~+94=;Q~S z@{Jgoizs0+1qljx*wZnCJ)Y0>YV;JEo85U!hnIe*t8O&CID1CY=MctzjQ_1_0^B z7}EzWQ@P#dCNg$+)R*C*_~Pr=DE5~We1d`%6m(JWn+Q@XGk5VW-l&^e&F=?D^t1Ml zEl$My$%J1$c}%h&4ljfAx)xiu*@ne>2NR%0pPaqxe*z-S)VTJfPJ6%bUyA=7h8kbb zkmY}9lH}FjmWuvb%KKZX?r)^!e=F_&hP3;;QrX|o&$_fHU#|Nb&zhUd@hRZ^Gru&q zW}!ei-|+di&$i8P?wa>^z3X}$s-aR2p1!ZS@ z&vvA}h|#w(OU`ah<6|N&d>q8PY;I#Zm*Rzzw`Q(BT}1I>$y+t&N|#W)RPq*`b*0NF zUQT&erznd|2Kg zm(F>wSGO%xw^3)5-Z>$c$_;n6c;wu(HPmgn02LnrUfH&=vMsryE?HiaEUP}({#tvw z=y_Q#N&3suZi?J2ZA^P9f-Wi#rhOdsOO?yhxg3S}Y;8K9qXDU~G+n^aLVRCE6og*O zslHvpPoHvE$g7hTPoeYW)i=H6x4pQh+if@u2nq&dq(jASirg$~N_!~+2nveRK92gO z!jg0@NAYFi<>`Em($`+noErm|Q+2zDpMqpsEnOYFzIxZf>Ro8;^|Cb!WoyzU_)^>Nfs_2zOkkLu0mXn^W1;Ao*#TbHI!oUTT50Roo^903Sr{PeI}s^2g# ztxT?cY+hOo4C|76(b05QfRl880^NiAO>fn0FYal4mFH=>7l}6j%;FYtZ{N#z z?n6AkJtj9I9G2@5en754xPyabh_!Rj0NDEEO(>(FKJBJ^^CofMwU6&Ny=8a2c>aU* z^h(KJ_C3if*Zl*g#hRP>%g^k*p1*t{A0KzWny>t7*ALVAczHKYyC=T9d~ccbwKDJC R$K7A6uHL)N{k3fr|NqG&C({4` literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageColor.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageColor.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..26e987b2caea95507902c71f060fb6c7a03e1eef GIT binary patch literal 12477 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 literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageEnhance.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageEnhance.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..90ec768b4a71a86cffda3ebaf3687102f241cdcb GIT binary patch literal 5390 zcmb_gO>7&-72YM66vd@Q{n<_AR9;JBY|1j_-^6AO)2e?G8@6o3a!?3GnH6^|ky-At zvrD;@)gp%!kbxAofdGn6mVpAc;6v;~VIP}A&_fR`O$Q_vIT+}n2+)I5DJ|er-<$p6 z52(5}I)dKJynXX#X7_#Hyy2fWZ3=Tx{`HqwZdVt_{S7;A3D^yO?FKZKIfYYrmCN(f zJkKdU#jpDE{%L<+m=^MZ=>X69xc4|k_>@xu_kH%r=^)buLDxZo_x+BxgK0yc?QGD7 zm^KVru|eC(v=Pv5YS4yDUGeC5=q}D%qO57UDVtecGrr?d=eGi<^YSdQL{^>3swSaU zC+l1U%Z$AcTRN-a*G8eg%n@#ySGZ~4CD<+TE50M3Wi3Bz1!0G<<5D2rVTIBswK-YK zkQeqm3478&mdzbj$Slzal}(ay-Upiy-zv<>ul(g0WWi=2AVN@wX$Ju=!=+{ z_!ztvMVf zl#&@$HjLy)zqxSwtQ|16{K#_|7bwPv6_`M)RPBbS9C9A`Ul7((J#uJX_$1tg}4a6th`WCKx^YyFOu6}XgcIsB@-ia^Ite$xs ztVC0P4W-t=gqwuDbVF?gSS(pV`@2)*oOl2Ll-A@tNvExFI-S>*qKfTEI{nL{tU6Dk z>2w3W(`niZV^=xa2Nmr>(dmjep<(oc_$^lxw^W2JweGDIVe7ge29ELe0JLpFzk@k` z?G1QRN58^P`xQa)F|7Mxse$7dTyi&nYC_2s4bzTMC+22k6?wn`(-cMk`^-`XVsnN_ zMT01ksY|jw6mf&WTBMRQ5)lBV43c9~R%5{+OL^Ej#H5kUXH}V^2YV=kpdmrD$*!ZR z4<&<`32DMZIEDf9V}}b)u?G-1o1G^>1k#KO0l*^v${fUlLk9?Z8?9iDfMw>)4Nl#R zP&>ez*bSJ?X15pYeJ=8gTpC(-QLyLno#I>MbIuv#T3~(O>CAJqL-99`0N!)HSED_6 zX~TvezYC#p0G{C|Zz=8l+;>*ic0}7b+!4R#**?9!l(@JsY4K+*e!}vdornh+eytv0 zQ9|=X$-GhZTrZQ@H8}76T5E2mJ>GaA3{zXeq^^KOaB$2ZO+d&==5@rUjUAlxn^_%R@$IT;Te*8+GADW z>liRQ-~+K@dYH?x?9$cS^`bW>habA7C_bcd#lHa3^X)Sc2(0ArJZUMwD|`;mg_g4D zb2B1f5pN}cemo>vO1r&-Ws4Pd+gUnn)84bk3w3AzyJz&a`$FZ!N{Z@FwZTEyT3-p>y&AH8{WC06O% zS?$|h?%RD&F8A$uu)o~*P9^&8lJM=ow%hSr@s;EEHh(#=I`CksGLQrwj@HEJ_0+Xg zRoqqD9r5<-vmwlt;OTxkvg#y)t-e>BMK}p8;== zERWtCt@g&sy|GH~j$?EK9^=)`avqP?bucsL(Je*sxp;PK2iN{d25B3~ zoi>tjWppo!VHEpNL{K1F>3$TLn$Q@C#!QCg0tVpvG7MM$QeZS(B)mb*uy_Sj6e)%4iF5am8^Gh`{~O@K zzBo6I*yr9DBw1n$gI_?rUm6glO_v1^L{H&Wwt@)4(g}Td=oM3No9&W*H&g*Eo*hdL zM0ZrZZUIXh@a5V-3|7?!LiIGrU4a7@-=vL`5W@-F+}Tf26z?lm@Z!1i=cnF(1)%hL zf#cys1y9BW5FSn-JHI`4YwY(|t2+*tcN})kpZ_~Tk}xMlp3YN~JYBDb3js9{G zesqExJ;m>6aqK*2TW3eTeQ#%p{}_&DkYip4JZH#DFG5G`p9YT7W6;G*nlTCDxu56x zA9iy5@ZY&zWp3BMgHiq%|2>CteWZt%mfm0IpjzMA%TMr2zgp+8ULW1WAGz_yItSId MgzeA|*k+6W4{4Zq>i_@% literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageFile.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageFile.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8bcfad4dc02291adf33bb6db5ae2e9120411c5a8 GIT binary patch literal 35932 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

o?PEJsk?5QvdtH*g`~i2 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 Tyzce!J9+nn@mCyPY-9c(Erjf~ literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageFilter.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageFilter.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..3145f9275138f67da5a9a38e6a34715cc07f14aa GIT binary patch literal 23159 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 Ik$1TN3$`;eegFUf literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageFont.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageFont.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9f661a6789477984a0864d49b811ae07bf44cce6 GIT binary patch literal 68318 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 literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageMath.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageMath.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6b2c79316442ba0e9636428004805dcfcfd72749 GIT binary patch literal 14447 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 literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImagePath.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImagePath.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..777fa4f210fc205a52a6eefd1fbc8beaa23250ad GIT binary patch literal 338 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 literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageSequence.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageSequence.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..12ffa65026a96d14736318a414185b4c899654d3 GIT binary patch literal 3405 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 literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageTk.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageTk.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9fe7d0f4b140be373dad62943e6a77eb7551b542 GIT binary patch literal 9366 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 Jh%NkR{tK@mG!Xy* literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageTransform.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/ImageTransform.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..906b2b27f6149f5e9f7b36296259bb56b73dac2b GIT binary patch literal 5371 zcmdT|&2JmW6`$p|J}Fyv;?#*d{z|zuP5Gk;S|M@k+Hxbn7Mw^)3Z(|M+#QN*FL#;Q zr9>)Ypf-9)N}xc1!iU^ci0Q%Tp}#jvE?2ga+ChBi z3Y?jJGduI<&F}Z#8~u4~Y?$Hs_g@cRKA&gopY+my(qTi}{0kblnZ+#4VRda$)2N+r z67}R_Qniy#s-9j)P&?g zzu)JUsM@Zuxb5=kMti#MS<_2bFV3DXDOID1mP%`RB`HOsPNpt`nrE4b*nX&uEoqxO z)ppjkbykkL+w3E44kk%iMqucPPRbWfRgR(Gr|&p_urO8g>SC&9v_&v=)-#)R;RgQH z#Woglr&ff!GUeEnsfKz#Svr1V%C`e?v|*T6U|0;CJwLTo@lvDR$(75tYX{}>+RjM( zQeXBwEkA_f1NP~zJ=ase9NNSSGwI0sPqeEOklbeL>~g;+Rzn)MM6aism}hbnFM2`} zMbvh6O^&1O(;8fYFRYVY76F-MZO1^xp6J^&bTMD3yXf=$1;b#U$463`H_MqbveQ z*lVJbwuvX5tk+PC8W_&c;4`isWj0A>S(_Y~ESm5DI{c$3K42RYY|rzz*MGJC>#H|L zuV-$hKF#mD-n{w#jrZ>azkBl!3-|J`{P8UmcXO{OW6tR*bxLbveHyBS6~az(b|WDX2TJ0Kg5k9k3O~C;L;^MC!e9w`EWF3MKCV7B%g)!!ASVED&-zX zBpsoeU+zUq&k=-Oqb|zj&TzR5k~SS`kCw~tG!3WMlP#Am&xAN%F30>)xh%B^9KJ|05K?V1G}|e>S@JZ>hbTDJ}inW=2cDxRDu3pZaY4g^e`ojSQRE zyOE_tRsaBzHD&bmZnl>avO+=!iX+i8T*BaBvAd z*~y=-lGlok-B<>ShY1#El{@2x%MCSzDGp^A~%cNDsoZeRh_TaY_rBq&kYQCN`igWmVTfn3syZYy;V#|xTikbT@ey~*Q>@f ziJ-~rMj-80iJyZ*76#^R*e&6xxeBc!Z|mfZX&$c`G@3!UhoX|WVwJBLP7`bRN^dt@ z)!+>eu8?+9FnEg}QL|Nen;%j8AQ2bp6}#z8Z@aPCrPp*VkT>wSD-0?8AXKZgoyANT zxFUGd4?plt!-1XD4jm&vQ&KcUZMYWqYnYF;S2}spUbbDs33t_-eO`#Kau}fs(+xu! z^`7;n`RT7Zuii=7?y@qQIxOBlD5VFX64nE^Mr->gWnOg>dP z3ivz~O?p1-g3+L$A;BNRU3LV})XSwSZRKiAPr6`^9&0!!a}VxL-Q>PTY^qee7DcA-^&MYm?jr9S zD$FCu>DpBrNe6|bhKE$p?*(P0B*ms!aQ==DO+5)E5mUL}_5)EbA;Uz>l%hJlH0V4U zb}p6FG>;LgW`4RbGqcc;%58 zg*+IS*pOfSi^f)>(gcIWZ=626EuxBmhNPm7UlbNbfT(Xph}wT|Y=1v2(9oxcs0+fcMTlDa zlQLtJ^3>7!2%I>WtvcYH!vC+pe6DZ%U@r`aTcL7fo(wZx8*XLAws1jHh8#p0|7&;_ z^7iCe9IQr*70A^T)x=;lI;ZF9 zPFii^Zj3vrOhVSln;!lXpl(-w$*7nzMbb>rZotv1+ifSzm^-^?iL=o;yb63eLaIbs z<;g0IP;N*eM`Kpi+xNxc%L2m2Yco|o9t$G zX{Tp((@!evqI%7=0*$zSVtffryb*(E|ZBS_Ei-0;NIU;HQ57 zIWw~tE^R9XiVnduvuDobKj-|H@Bjb#=f=i}gzK~49GLmpvy${5^uxUZ;z8d02_BXu zUDD;Wl#$0|S<-#FlJ;ekF-4Yq(yNm0e_PT6_k5zqn4i}LQ5W*+0=zDax(2T<$m=4g zi+Xh-UKc}MqY=8NI3tD&P4VX6(~r1pN40D=XK7X{mo8!Vdm3TDm$g-CT5JJr6$p8!cb>5(=>F|%Bj}0!N(Y$EevN2YkGM6&o7)k zKfvjGBb6N(NlgssOq(Ca_`3R4t&D})oN0{n(P*TcZVvDtNoQ$%o%D=tk~eqoWtQZU zl;AI@C`fnZ(Yvzk)01(Z?Kh3|B#WZnq+Y7}<>=saE@KQ%YX!p^9LXi~86#_%gBJ>z zEju`8WakFcsfoc^{`<(l(2Ij+$};+Awd9-FZZtf5e$ZRlY{3pE5~*y;N+gOgY~6tS z3#=uX4JfWj>pR*P{XY$D;)j%^!*efs=Ihvvhh?cG&A4wW?w2G+!!Y97yE2R6W>QC$ zHKMdbG$G9%b!W$q{nUsSjmewauFo&cFE+7e{2q<_`DWM(I@v*HSb3JU{iC_8ao5M% z(So(1xErKpWwnfvNZ64?B9qheX?l(&5^v?TwDSgY>$zki!J4Qe9mZXWPs2%LA*!XK z3;$*-inpbYef~grGbRT*J_*W!ouW0h`Csv||I8bsBgMb3VPw?(zvARRP-9w#rmMM0 zRa3z%PtDq#6~Nred{&S9I5V(r+FiliV&CaBijA}-9yj(=8;2X)I>C)$zVm-LH>wzr z(UDg0BIf`|fjco6@dav8X2gZ1g~eu%5s7flZi4YT=w~MtJE_=11@Wv{)INHm;voKO znQ136QZK{|F5=NK2Ift@ZDK$3%ywn;cZxN(ZhJ#pttG`xJL@U_zqiv64VZY7JlX@ROm%LH*cyFDJ!GRs`Dvp zn)IkTm4XUVA#es)mS(DG45(ZW^EyZOLSBi9_7Cmvw=4@IkK$pLjPeGxB{bseaVOd5W-lt483BzKse9}VyBr`ONw=wf6OPfdw z?e28oWI^@kk}2LQWtE9fkwqF%U%?=-5gNBbugWFgwFA2Es^4;Oog|g~_nf{zkxTMS(Cu5kUsX^aF8_9)uKG%f zuFT1-!ysf2-S-t$At#@(cNyqNxv72L$JDy+bc>a$6j{czI$fEz9 z$a;GhZVk@u!)VKso!zSke%1DHXaD_J|NXZ9^;paGb4%xL@v>34!_TMJcc=(3q0sZ$yKF+U}?R6o)oyfAYC5s z%iHxL%vy7Sn-!Nz@F4N&H=WO;llndP2hTY#Ehs;b=H<9gQ?c*}=OYxSaeSw zBWZC351&Uh(d zT+4bixU@KT^3Gr>2xDSU%VE`+H@gkrA)3Dt*>?F3I&~Bxqi9mHZ_yBH~DLy`J^v^jFX6NOQg3UpucS&5D+(l;%rtXI0Hq1yl8@ z6M1ks04P8>p*`@uIcp?SlLd7i;0$Onr&7?Oj7<6n`g#I2FTfOC^gTk^8Q?;U-7GMKQ zvX`hQv9?K)KpMi;5r2%|#jqP#%2AVL6xXDUeNwD>@ul@0T`Na#AHQ{cZAZ`IsV5y> zPpdSRn{PI+`c_ZfX?xhx{}pQE`fE$Ct(?1~+`059HngqcAfWh<4SP>^OCNOaJNZ4O zDxBqMj;-j{(+gi`-Cu`%d)fk%IoH=%cloKTyN48kk?YS^PqKltUF`*3qFma}O4rk1 zo_)uR==oF@zG_}iC&(H(3?2)gC6t;@3s=N*a9!tCukmbQak;<=nHBcm8)_>KxJ-_< z<0hKZxqMnDuZ$c@$PxD&dwakC`ss^57(M;Qg%jsbU%q_0x3@~i^!7USr_P)hef9JR zUe|Lmg`}4!6Jb5*7mv7XF53^dom1xshXZ3!{D8sTgx+vt1Mc#n0ayy&**q!1Buw=b zDVj>vN9sc;hVrtQLBgD^P=EjDFvwf&u-JfM9yZD5GZXN&p`_h~@i0K;>eNH2$*L`J zT8h|;P&-b^gCz*vq$q4bY=elxS8PYTtQzZsCZPx$-^v@TkZ?{wXheaT7->YV2Ps-h zfq1hTESNV_65h&zwT=U;GY>k37GDvVY1iJ{yKn7& zylZG}*U{IG{`iBIHl4o$Qz3w>`9Gg`7NlraH_&T+3!sf7N@Xm_{ zl*ffWtJCA2GdD#N*z?=yyn6nVJmY!(6?1r={a1K7-*_~aHW~|l%cmgKV7tT^a{ zM=kXnWCaN<#NseO4YGjZoJ0JqI+av05IyoyoG6jwj5$ki8#*hP$Su$kTrkBWO_aJK z8BH6LRv#2E0)BleOHEDVSEX8WhoU=RA(X~!YQabYPvw|SAdWn(ONOCBzf2B~m#h2D z0yaD|UIo}HN2B}-fhb`(s=Ma_y0q(gX^1Q1pw9fQlL4}Wg0`w8&{=Fyv60TyYyJO9s}jM64KE&d4==1vsYqL|du ze!aLM6+xOee&-mb8 z<`>H%B~gr4EQ`HL^N&)&+ffu5)Stu64)7DHsCTl+uTh&Qqs%YcMa6C^o}q$5;f!KD zjGQ=jf(p_=j98Y@k<{k?dZ>;HYG%HRf)dHCf$+v5>5P0{-cZ^C`_?-Siu=F_zkk%w zxEVnGW^YTNccV`l`qoCnuE2{QwWu2b+<{-3p5F-3Q&?&m;O{mfQlx1!in`5XU4hPx zW6tR9fu8jpdp8ui_h59~`RKTB_JslmKG_ir2=U=mCPAQgIl4;ToIur<>|@l;J&HRr zk0JxvC^C@9GX{`B3?j40^Nq+XhVVO#`l<{g>LaL+@=Rk;q!x?4r+6Mu)tppR*_jb$ z$VyoVH;{237_EwAQ92%Ey9ravTT4BRR2NNc6T>a}7G%?hZ)xO`;y&H;i{UFX8puNU zMnwoAz*7Wl2#xHRNKDT2%&Fa$5bMM@2uN-ct}u{Wn5M+I6K)Lf721LMlx|HU_-K&H zuYu3RjKyX#l9wv@4Ju8VlBWs~*FSgj+~fAcYwd^EW34xiI$?j~mosT*iJ{_t^)zC)BehWCk~@~9LPt@PC$d}0v+5dY^5V`d zwI;`It(Xw8L6$2NySC0K-uxTQR-W=3o(3C7w=LUV zu~25rYAIG{q2k5ASI>$)uDZ6{a|dF+LB0PJMKx1aO;0+f?)3EHcQinG(RK02%V>i% zFiLTKQ^n-s5|S}t#gz*E(!gUY>0EAh%c+Gk02=hh(-m&Te}V#&K7G0-JqcGpsz>2{ zoKfP6t-uc(9Yr+s3YxJ#DrlF!j0nrmVFB$JGpT5&f}7YN`w>0!4wM6_`Bvs`jE6== zEob#MYQ*`SKXIn#PsI5(z2gz~^nD!T?oh{%nvc(^=TBwoW7`}5%S4Vr#WWR^B4KGN zvQ)f9Ma|bg-={h%{ssRg^?zIX&`&{#i}DrN|3DzJ-q9uQ@gw3sGRp7VQsez*lN>m@ ziSL9O>lO3?(X;%(_%yV2-bGT4OWqtn`4=@tT=(mNMQKvT*OiUsuPYa&1$it8_#3hX zk`f|bJm%WutP?<+=f(^fhZG!Z2O5iLq~j}cbXgT5AtlI#@Ett-O#ZshAmE5I@5Es|r4#@Dedgfs*u7oIj;&O8#HT?&qqG)dJ%76ab*)VT{cok#I)` z@zV~Nc{t!41)@caS{$K*3y0U)Zb&4OX?VMdL|K(x6YeUv+3g&lI-1kX@&7jlG6^Vu z0cmXBwQ}ISwuj9Jp0w{=3A}p_8UBvlJR{$=_jcq~WT|m6us8>yT?(y*yH+|@jrU)< zAMSb-eo1KfN_Fc&q7e-KG@cN4neS97FzGLc!CmbmJUW4c$BA~DQ#g)dsU#J}J(Wu> zn-8I_KcjAYQE)R!F5UI!rREji%Ei?ks~7L=xWA|GQMg~IBAGEX#IDnZ*Lp7Sf+`f0 zC&$d9E}`v(nMkx7ozqGh>2x9ymstU|{L{df#X{!rn^Ey!^r8jD7bL+if94MazVkUm zb3h0mH5rXJ&_}0}d3>CTk4_nwU1A5RAl4V3mC{#!g0r}4;KNtzj4#9ALDUGJt$vqX zMPsrf=4ligiY&{Y9+c$gekZkk9*oL6KbBB@z9%Yo(NovwdtUd+Js(R{em?8pD?j_O TgyNHz<)}Pxu(cB5Z}FrABpp_ox~0yB;jdZE)UVt2US%b4TJzHRKh$glRZ0U&Uen;g<$I} zMF>?;A@!V4*%6iE(n?L0e(2}^3;ocfQH442Arh4;zNHH72R?Q7oO37&mD>HVGdnZ; zo7tV&*`J!48W4=Xe%_iEfqP09&fsedUikr-5+aCT31x5$W6CoU6JrQVIEl@0F)qW$ zc#Ie%FlnCyuto_#hij{tn?WZKaotA5E%0gE`GOHd z!0F!eiXv<G8j}dSHe#29yjQV}#0UeN99nBh@<7#{g z?m6ytWaBoIKe`JYmvdN4G`| zmt$4HFP*xc3BuF+*P7SW;p;~sH?=%*6kOlnAQP{HYv+$K@x6dftKS~!O%At4jk?c* z+i=_2cc=T-^bQA=)!@9?%kZ!Yo`To#kVe~2yS~}6GwKl(Sc5gVBm>#0cLjMD?D74} z9&VjIZLp`w-s3a8q}k@&qy=yTj#oJ6r;*m7X9NT*^tCqRo1u;LCgfgt#7XEFDs2WT zEg4(yvsg7T9${)?sa@?Z(pXBA_hxetsFD@ryx-B#zP;C$ zZ2|Y%kC3JbwCq8x!OzFjQYbv{3E$yOeyQ32xTU=s>?-dse_)<8aW%ZDf-6k9tLRz^hDs-j zCrX3G!AjfI852Ja1gov>OD(PDiO-DZF4W#rI#WDT4Q;H3dMd$h!(W9LLOZLW?iu&A zd&W2Id(ixSVD^)_4GW=zRO+4fu6X(Oj%C)p(Qk71y~}>o)&b`ThAXaxz&08MnMqBj zW~6Cp_P}CKbRifuj{`Ubt6W$N?K1glYnyqYbg_7`JUVrGp|y`j+%wZP-BmfZ7~W~R zo&-9~(Wyh_bCd6Uv$>M^dfV)Qhr6r6a5WG#&lL}Td7!L6IQ&as%j018Z^3ZsRPj^= zPYuD@Iz!Z|GgKNcj+aL(eN%-ZXJT_7Y%F^w-+R&x_wwMld92#EZI-Wen@7JmS#9qq zM<%bnPPJq5N@aBR*u#9aZ;N^K{>eWsVbl^>ffS-4_?lg+ppU6g(?g0Zz(4AV$K^yu zh{vslI4#jJiSoX9d~_@!t!i9JMTNq){52XUf;Oy*S^DRzZvgIhNZkiSjnaw!JNDEI zj7B@jZB%XYPaLm?H_vk&&$+kxtu=FM8EK?`lVcDQ_*LmwYcZ-|A(g)A+Ou>IE14{9 z3A7#B&{mTwq(n^@RJ%UaH>u(B$oo6$ zS#Chyz#ZoEhPw^(fnAH9-4p!t<|BBkdH7La8Z0 NaQkfcujr8N@oz#H84=hQDHK6L8=KL8FzpcxM*D9fCgxPT#Mw=qCk&~9Ee`%00B+W>QAAb+~%4) zAbqo|B_%~R`maN2=IzXTGjC?!ys!Nyi^Yhb{P(Y#L(Oi4{slj%g;oG!vz$OEgBZjR zVH6=o2m-^JuqHx|kTOh$sR%tn157b=SR2ue=pyb(qRv#)?StzxSNCh4#*C19GYAB7U5L+Hbo9 zsbD}5*WvJxS0mBBNMMYW406-Qg;_wLxkJaUDZr7#*I0?<1CtUJnqbGg8eR)@>-Zf6 z@eFFg9dH!HCf;iXiN!I7h@)xfV>Aq^Mvu1ohmn^Y5~wZe_1}O0{r9jg$sIWi4G|PD zn&-PWJFmwgZ0GgB6f1W2#)3B^Y*Z9FFHDKoW6{oAZ1h%Vn7h_FAwM7KICQvE;6(P| zL?Ad0djdq?xlZ4N7?k&RA$)U;i*`&*Ng6-L+hKuv_!nGI&7f6NS;~|Rq^*m#MSITL zyliU8Q7xM=hJv_Ki~7zsk3vrdv1o)~(1?a1Mo308LV^5{@E&N8A_`h9V`OM(b&QG8 zLaU$BdCiig$PzwoiSk{z)HAKeb>~obcW`S7c}09c@~Iw{mn)rW9EG;y$;b%B3AiiU z&zKm37lyYgQCxI12CthE*zl-Cj5gSa5IWMi+f5K!+f457+S zf`}8LEhVrWi_xeU0x?C#35LR_0WFQ&QB6VvuolCNZu~fGNf*~_J?n1~yoE6&NKvQG z7$?=)fJ=fgV!8wsrx??CFG7HA25iHg*c4+KZvz}HqXi00oEp^(BcQa%lrM>-S$HeO%F1nLoeFkv7I!QA+AyGUVU?f@)d2T{74NpbIzJF4Z!(l5 zVG6S)d2#k=>gb(Q*(2E-^T%>tU%tjyuz8a`tG2pqaM{+7GdJM1DpD1*Vv;JDtf|I3 zCkwU{7{i@yyw{#H?<-g;Qp0zy6zq;Ow##V@sSO1-=Uigvt+I!=vg zo;Q99CX8C+)QiUF{(0|FM&1iU$|{Y1A&#s<6WTbm;KwY;9uZO4d~!KhvyHNdEjF>D`YjC*qcZ>4JQ5k(m*{4*3*i@g)9$~!;Weo0%ze0f#nu1>=60zSRmnOv969%R%VH9iBzPM54D{gon%f8_! zhDl-)y+>X~lZ3Zo=o1a!49M$vuizrcY8s1F$tXy~Ik{UR-{?QXH^7)g^}K$0P{r=v zMu|NDwIA|uiF~LT`Q1~M;hUKvZ0~o7*$<%ZH^$TyD z9Uk_bACmNg?37|Pus_3N`31a7*h(G2FePH=*QD4HZESQ@U_~CA1Z7wUW`zle0ZAJM zca#?-1Kva|3LdFMT?+sMrtP~TSRVUqf(a_w`Y6?w4f4l;<=r+&?i|8IUxAIDL2Fj~ zP773KD^$8OZ>QhRTuooS_lL>8f~$7HIB)#OJnKvLq#RG}RoTWx=bv{J$}68*?S<-n z3$6353+?mmi{f&1ds??vy)UIJfZ}H|T$;;U_pjRPvdjWE&n=Pj(Z67x*pCz(u8c43 z%Lda!D-Lho;azI|+HrWT<-kMk0r!}E5PdwBYd)RoRggX$TB~nMQ5i$pkZnwtZR|%@ z`$iM8Rb||1clLO`qH(c1U(u4(s?(0;9W9GDVA`aiV5&%6yz}z>RKZ=F?427Z*qyUr zl`69pcm4=E>l#wjpBW1k&g`KNYaX}@b&VDrW5HRInMzMBI`dBN zQhnapzH}q+{85@(bGlL#7}cuk%$4+&Mdxy*cj@S-FMsm#g$nxy888(PZH zvRd7|$UGc>F#fo0x#i`2^{M0_*jKYP)q3ajH|6e(72*NylJ>FVuiby;&bOWXtnU|B za&Nqq>wSB<{0}xrjk_$_`=`DQ5}B)i`^<#OUB5vZLrcMSxM;l>yL0B|-)+#){hb_Y zd~w>V!P6k9s|z00eNBTjCJbQh3~>^h zpKWus{E%wzx#9+umxM8Di|Z4{xH07YA+`Eu;Vg|IY+!a3u(3sXfIJfX)OiUs241ee zh%dIQV5kVGJ#Yi|SUX8u)ZdqmBR!D|#kbpzA3th%$#?#Cg z4|jDL`D4(-ArFY(34pv#egGPY3h-kBe+GlJcyj`bnPNKymL2B@p_|7}ghWsBkQtFJ zS;?Y8l*C0P5<)Q^`_B@Et&&7W*-6O^kv}%4*suu_g+YmqusmdnsBjFzG7T4zP3V@v zw7!PAsC*ChwDjx|6&o<5$l zx8%$%P;Zas91HGw_u`@X+7)+u-rfGheDIkTRk-dMlHCPsb(a0g+6dO9!j{pcbvf5d zOU$R-CtTij{7Lzb3%064UH!ty{K!XF)5a8)Vt}jc@ef}uINXJ*>g>f2uVWjno7XLv z=gmJGUUDpnKlLxWx>DUwYibLwx`LxJ)1U6ocHbWW6Zvt^BJojQdMMQkp`EiPd-2}& z4Fj?}pH(57GgFlzj=&tF~?mU=#Y?UUD*>$-Ba$Nsi* z<-}nA#Na>l{>t}{zU32dvpr_N@Z(u1q+eG4`7HH()XUVd=-F}>_QmOiuQ zu1%dOII1u+_kD%x+J)x%W-z$AZ!2K64I6UTfQ|O8T3svFhP<_5#oC&;wk}c2)`L0y z!EY-u66WhWS#Uo;c*fG-Mt<2w_aD*?c_|({rqfngKCeKUsU6~e@f}Iav*Jx2Bo3ay z0c0^!gMzdR)f4v&fvcs^ZJ|mO?o#RMaCa~W4(1l2*C6Tr{%9b= z`u&p8k3GekVGNu7{u?&~;jIzvXpD~pM9HSKeufo-kbJ-?RN1douFf04r!1$RAUSlF zeL5aT3UY<-pMW*tZB($>XZi~6#vE0(NfC6zrnZK5Z=O6%mp!{qG|?RjIi{SZIyf$} z!wJ9!Mh?PH%T548Kx!M(+zBEAnJh?ElRL6iNGuv8Rc-OFg2FVyEW1jmm?xGqeNL}_dew*nuzpsQ^NpZ?lq(K5+cV0?BA!dWzP@(Pz=gB@ z?VcE~AmI#VhfyXxIT7Fk5r|$-db*>`<^3#U=o!gR z_rpP z+~RNGA-oAmHwp)X{T&@XGXMmvhw(dAigF~TZD-2g286$af8kx($@$iS=p$<;>rC%A zx{6f8{m2tt(^`GwL+1nM!@37`Ki$7#_02o771{2e4}5mx^X9LQzLp|Vhtgn?eL21F z8-qP{CTm@Bb>&@MPYlP_6w{s=Ob;%amL2U$!&8%^V6V-*l73~eYT4d4+q;`&LrWSe z3ie9uWUbhn^Y-S&*h))p9{%iS<;1eyJQFWi?cZt%+VY3>31 zu9n&Ezp~i6Ty|ilAABfB)lC2GbE_4utm9rCfCC#8Nm~kf>s`yNWzGt@>V3@%SLd&; z)OF_TI+yDXt(XSVmr@tA#Lq{5L44lzb(b&MoxCyIyKEZBQ3L<8=_6420P)*r)pG1j z7%HBc%Qr}9fA_2nS)3p1bEf*=V9uWE&CpL`9VT>8BY2$*V#_(-&N31|NXJX zvt8(OPkA4OzOcCZ+}bZ%Xk2$0`Uvuuh`=>v?W-bxSxG>ReHt8kf-elKMEbt z|1LC;+QE4)EQB3JNO5ouVTEvImw(glk>>$#1*f#G$Pe$lqdG5@*ku{L3BD4zEIfDv z2;A?O;@E4!%LWak2<}Z7l3jTvyQTAANGzGWLS#`e*zU8I6?eZ10ov#6;=Hj zIsXmq`!%YEzcrgP+m|nEoH1>d5k%`VTbv*|Qoa>OYu?fN415KmW8)_zA{;aH3bN;s zJ@xvEqb=`fTRQjz{df(zaK9^$T-mx6_rbjT;L@!p=-7t#C^1MB^fenK2G;0f&u9$D Hy5)ZXkX*q( literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/Jpeg2KImagePlugin.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/Jpeg2KImagePlugin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4e0bc3ffdc8ca43c87040f3575ed974256a7c4c6 GIT binary patch literal 18538 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 Bh?@Wa literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/JpegImagePlugin.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/JpegImagePlugin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bbf7e854bb4bfa113bc029dfd6c9b50816e45ad5 GIT binary patch literal 33536 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 B2zUSh literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/MicImagePlugin.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/MicImagePlugin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..9695bff405a46ea9989c224573e7ba5766116da3 GIT binary patch literal 3700 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 literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/MspImagePlugin.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/MspImagePlugin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..16744c5940643f4bbd1edaf9c75206e39530878d GIT binary patch literal 5985 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 S>r$Y*9Ozyc`xHG#U;RIZuM0>3 literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/PSDraw.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/PSDraw.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a7e01244466fdf9a53bd6aa1b5f4ef2c23104731 GIT binary patch literal 7938 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 literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/PaletteFile.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/PaletteFile.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..583f0bed9d9484d5a963ce692c2c1c332df4f130 GIT binary patch literal 1920 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 literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/PcdImagePlugin.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/PcdImagePlugin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ded3eae8becff9ca594986bc24f9fa1180147501 GIT binary patch literal 2461 zcmZ`5OH3O_bY^#LFW3&mfWs$2#-RjP1oxMp5>;wKLP!xpEj`4S)z&k>`m^iKE)ZKp zLRAh%N(7wXNKZ|a9&+d*r>gfJY6Fq26$hjqDlSzd(jIc^n>A}YEg6aT-n`$ueLwSC zFxZOV{PX(^a~K1h#-P9D2o#qBO(wnBV@&dn3WO|Mgkf~M0$jX zhe|2gbK&xP8JzX6u*4Vg=wY)QNg%e*fpA9D2= zw*9KE8;de{dt!H z{zb$D63{UTf}|d&b=uWQg{ioKnPo0%*1YZiI@Q`@6t4Z@MB6)58=19}FuY>Df}Bhjk3UfWHsqFSXsSyQR*FqV%NY2;xTXOf=6U zR2?6cfOzjjUx#Tv-ZI>Sdsy7!_RdMwd*0s zZKO8!4Sjp&$NN9rf6=-dzFr)AJiafVuE>35xvwG*m*wH7ov-9k76msa7i$qD?<*F& z2r1@M|DSX6LMHep!A*UtUd)Cml%rnwJWr`OH3L6VUiu)X>LeyQIkmmDk!G+d5&IB8 zQ^suB$q&^@q3i!?1NJqp{}BKuWfgy9#~(Qe_im;)(%XZT=#_Hx%CFLTdN+K#624mw z-z|8nC`hBZB$_47BR+uM-V>$C+dIG9>o)Q z{aU4CsN6C12JzeLX^e2^il>4)%BW*~veJ2>+Y**$dm0CjVIcNukWovrkYlzT>= L&b~sIoLBz^Qda)# literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/PcfFontFile.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/PcfFontFile.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..eb94c49db63957a611c3400485e51b4988dbd34f GIT binary patch literal 10001 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 literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/PdfImagePlugin.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/PdfImagePlugin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bf82f1028f630fb3a3a1236e48f6fff111a5f24e GIT binary patch literal 9734 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 literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/PixarImagePlugin.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/PixarImagePlugin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..68fa21af2d88dd41985e8a9f01aad0c05d1ae811 GIT binary patch literal 1955 zcmb7FO>7%Q6n?Wi>z~+e632;>s!h|hg}AgaX%W4k@{`gir3xV}h#HC2#yd{dwb$z^W#CcyE}&qp%9`2ce5(2uU%ULNWC*>SX zQg=oggVUIb*^z^-YU|Fhr5GV%Yp$)N!6DOpZX5Q9pBX3$8MCc?(8O~`F%n7>FStHBP zPca5w%(9g5@P>E={>bKG1oJQpnJ2B=UOHLc)?UD)M=Xl^xxd`dO_r^3+nP4)NetjC zaF#Y^EaBbr_?^ULKF1Q1T9Mg_Gx^k1j+wTV7%ke9c{6d9nO758V?0rC*C+c2P9!YD zX2%O!>M~v(9f!{+MvWPbyKflHPE8nQf1&93RV|fb1)GO4OgH{4!Tubqg<4lb`)Z+m z)&0+}ga)c~U=#I_62coEf1CSIGY<@sM2DoLlccOmNvbQljM-O;H12cuG=d8P9c6U* z-B-s-QFrR$nq@QIV+fjeQHq6Fr}S&2!KKs-{=_^dor4bv(*1{u%CLgo_eO!n0(`3Os4Uf5Q{=A3Go$*xU{hccWj8la^$h0 z*BqH^({YIlg)0oeBjaI5N*5f;nWnpS>x3>8O z#1}>7QP)6)-l4W=W{NtNO*_PL5b}Tc+!w=E|v$US8|!E}yw|ZYuyC2jf+l=XYXD7 z_R=?(YR69Br}yCln9$*^k!s%mOErm9Yp zDwv$g3LI9|D^pr_+u}>-c}}yPXnj_7W~I1M5Fb!}7|;C@+~Zvyxu`!^JcGb$LvbC} zBC)x%YhA~yv}22QC}X7VFI-Eszc9l`;*^X3CPx`B+RWld1g7Kpd^R2t7fVm!rSW21 z^tuCFv`szbes$b1HD2VRm-${H#COiUffM0u!VupbH;Y`P(TVQp*o@6gOFZJ3*dZ8l zpYS;FQk{s?`~}ou)q?dtibpabu A6951J literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/PngImagePlugin.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/PngImagePlugin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8f03eb1babfbae25ab0d4f9ec326ed856d807088 GIT binary patch literal 63089 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 E0r5)ssQ>@~ literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/PpmImagePlugin.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/PpmImagePlugin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1d0943fe0c5e8d60c8f683916e0a373006369870 GIT binary patch literal 14185 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 I9U$!cKh68-sQ>@~ literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/PsdImagePlugin.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/PsdImagePlugin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b2043cc3baafb4006ffdc3a69ec25a7b7821cf70 GIT binary patch literal 11238 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 literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/SpiderImagePlugin.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/SpiderImagePlugin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c7662934a0b31e0f80ba87a2976d7c8329eaa318 GIT binary patch literal 12573 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 literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/TarIO.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/TarIO.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..b083530e255806afb37563e4e89f166bf91ecaeb GIT binary patch literal 2031 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

28%wOw?afmIB~6=7e{b!p_<&;@*$ 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 WTIqD-%UZ>}7Q8w8o~Hh<&;JMOv^BH< literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/WalImageFile.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/WalImageFile.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c29614ac651130f30178654d67158354aeb21405 GIT binary patch literal 4171 zcma)9U2NOd73P&FQ6j}qkz`SSmMF=hOh=Y%C9Y!Ct=cqe=Ph&6AGE87L8V11mZQIs zbX=wG5EOl|fdWp@2dBWcX6S%5$ivd7_HmB`_Aq2F=kQpuJziV3SaYc|t*ot%+K;c^krG zd(++`=SdioilgahIp>`%YM!#@&Zev7o~Nxb)nr)@qB5tEygjeObPu zR*ThhZ(gdt+GwiPS36ouHuCzS(Q49iTM-sz5UHvlPSp(%ywWfh1zD)8D}pY!x>y#R z(}j9x8K{@_M*FgGxzoAaRP!{Q&kOC2p_a?E0L?O_ZV3=-avOGlvmh@U9S{jNG@CuJ zv(~xXZd_B9oS=6s8~dhP9Kd{hN>eX4Kp73x0d^o%?W8u-;tZvdF+${4*~PG9NlPxcv;EQkMPw= z$Yd;YtXt4wYMZ_I2(FHhY^K9vW4aHx!M3Auy4X}2>ssH z|De4Q7;F+MF^?b`Z3>#VE4F!3aVmC*6^BA8Bz&DchvYInPpfU(!N_YTtSc@GZ>jGa z%ivwC)}Y~Fhu}kde}Pp9cC<=V2YbXSv9zzk!4eFv+kQfP1a!ykE$xHnX?n$WcVFU% z$e;#0s{o_B``nMLl7rQ{4Rj#~^ae8+EqMl`!!Kxa9IW=`BI1Yy$3Vh|AmLamP9Aa| zj8+e8HBTX)RQ1i)!tPNn$GKRrQML z(7VlsVUmq@y(5u$u~|2ri&jE2ot=7JR}GB^hC04)oG8A3qp;X%sf9(kry7Oxo!W9s zZ5w*wQqNfIvUdYKT>;Dk;p~ON(@@BFd!RXn{x#o` zb!#n)W&Z=Z>%{I*XpQ`Ye(WT?fsK{*l`Sr{zuCf1z0 zF3$$FPHlMBJvZLI?}~w};q>j(x6j@B>4Vt#c5M7h_1^0{vC=naJ62vJH{9#)8{)Pr zyc>$&(r&-D70Nvb6}LmhdsE*ecS1AYyuKZ(Y%!I!Y3Oz{`L**Kv+J`ruKeATdTb{= zFQGj!j5q>&3_}a{zq4Qu0fkAPY1h9v9v=M!VBo8=+7b?hXWEkcnFW{vH|y0sx&y1n z0D1r+NCAf_gIGEan8!o-7-$|ZNkRJ{Jw^+~hWD-kTm~s@@P#BmEDasC1kVhpCi?A= z@+nUp_-sH$5KCCZGi~)i-kXGEpR=H9fmUKod$rNh@R>dW$y!HKO?z8iF-eS8Ee>0z zt>)Gxm@RY<#f(!2>R_%_VM=J6vYVmC-PO=ise%YAU>OZIhhqv{lKb z6|n`w{W<`9Du1c*zS?}bR)d5ktO^ztWxA?X%BxmQx{7n&GL%78(^IX2o0>Qo!pzw( zTTEa73yDv!X^k!}1~d_*SkAgbSeo>`hhHoWcWL<7aeDih*kyg!U)>E$TV!yL^g0Sp zMw||@e+E+?0Vx2q57H0}HVI?@HN!v}1Q&z{l8dlGy@|aKS37u-+o-| z9PHqNhPFj{clmzSGH?vPeDpz4z~Mc5AyTyn~WAwymV_Wg=%pVwhcbyd~0hN4>K z+Wxs8Dy;gq(eDpq5-K#Ir9yUxn#$6x+?6%CWtC|73d#osn}DY|0m?qPZ54C42n3s; zP;D#NH0+CVKM?e?@N!#d;5tyiC7ax??Gr$_V~;}#=E8?D&!4ord_2!bqtSRgo=T-eQIsSpm&+9jg<`QdH8oW# zmCEJv%*@P4+@Fg1gs3kO@eYT*QJ#wgxln-R{cO<32E2@)W4tWQF*M6i3{9oeVk(tM z3F%}aCB%iqaC|r#i$)@ma5w}agTX)`;P?BzUN6USEX$6M3erd{n~G!-{MmebQi|j< zyeI@_CIY3L|MaMDe8fAN;8GDL8le3gH5my`@cw+zn+vdGJ|@f28IDS_D9)f5gCYzH z(I`kGKaIQ;Vkso0kYE3k6~DvrYQ>O^Apl|K6@%Bj*X3sO6hDiDT;}ak>OM-mPkZmu~0Z1$Yd&2 z5R&8Z#29E7jb_5(B+thKfvDfddpSSLaG+A5D2-2ur}86GE}0#RXGUXbF_O%L;;BG1 z;SI-FK0^C>%IilghiC?&3i8h|(P^(R6-ZC=>G4on3RQ5Mu2d!~m9a`is8j-#8DC|Z zt4uMKB2^hjFN~q*MKqm6rD1d?f{H;@@S$-IjWH-op)^9n2=NGc5qbfkaJW*zrc{DK zh${#xW+p%OTvnJ!hNP%>X1Y`=7AA9}r^Mt$N|=*K?RfymwaC#QGmv0sFaE-Mf_`ab z;y&WMCRME}omxNL)|c^*l4@1M>CSW-y)OKI)bK-T_MbQn7XWZ%q0yGLp5}s?7VR(X z6XROLVr}77o4`~2Mjhtj?_D$fwEm*@3T)s^s=ol;V>{URUEGbx{{#t?{ueRyZzBFJ pk^GiOKXJy8cw_p3U)=VKPY9Uoy-1_f<9NaGWAvSaKqoBr{{uJ!a%BJj literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/WebPImagePlugin.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/WebPImagePlugin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..382a8edafbe96bda303bd9df840d9feea226e341 GIT binary patch literal 12966 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 literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/WmfImagePlugin.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/WmfImagePlugin.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..39e2c092fe85b71853f8b4decb6b1e36af4b83c5 GIT binary patch literal 6303 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 literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/__init__.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ab72b89bbba290e594afd305196457efbb6c02da GIT binary patch literal 2038 zcmZuy&vP3!6xP~K;yB4VB{Sv5Xv#3H8R8{nfQeg}aemlrvD0nskc>Gf@=9x~*_w?TTK0Qg_{=BwU0rL6hmk*v? zE&=d|GOnJ5d|+H2%fSmkzyJ_~6nrBn3RhGf-@(GSr4b+t zKNy3>0%!xW_#BWWy7W_VHea5UYs;7#065I|qo?prE8?dx@}L+~=uE^o3ZWg~5erAK z!-gF5Nv%?u1+ydz^Ejg+@h8x+JJ3`4!wGyqJ&)4~yxsKa`E9uCW9i2sfo>EE&W5Ro zcv7!G`HY2#lZIuDm>8$Sx*G*noFQ+<87V7=v*vLX3?7R_d4^u5hm<)vzS&6uv>FpLBiGADT{o3DK3t12~XT5X;&Pqm#o zekyxEHFx}2w*$@I*hxL!6X{S3+D*A;@44r?O%l!Ck2Sm6VnTD6EuU!#tyn8qZ3(J5 z%=S=c(AJl=(UvFSI_-_Gi1+DrXVrE?or~>8^IX>KVBR$CK+M}!I~K0yco5UkyyJ#) z-2GZ}bzPfa9k$E#GTm!s%xLP9ffs=onyVLPN=QK zbmD6WiH`6n(zmfU((D_(m=UT&^wLlx*&pF~yV_@-#p%{YRrz`jUKJJ>$`|WkVVU3mZ@RY38`4lzy;R7BAjH+rZVI^in@(5e z#9FQ_&g3bsJ{D~dFxm6*0Yu0ORIk^e!NmRBWTm=yXhYD@*-zF|PRFLA_CB!DzUcDqok~_HWeg^#r76m_u zgH8?y4pJPt2?d8vCarykyuat+c^}AYyrtNuvCo5U0D%WsKugRUE*e)Q%bmgJ@)P{;1G(3zOr2=JVvPtP4Ka}vx-)eV zYgUpdjzlO&)n-$%L@Hy=O`RqV8O5PgoEY6G7d4E-)TD}GtbBW1_&V1`HDtt@T9up^ z5Y^AdU}hQ2J7^#|Lj#gCgDzw*M55rjoF#nu=VZ(ddEILK7{ZS>`p-K8*G1p%ESKS`Ad7;e&0I& K04HkQX8r(ifo6;V literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/_binary.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/_binary.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4b88a9e699b9dff0b5c87330724c29bf37847303 GIT binary patch literal 3425 zcmd5;&rc*p6z=NjnSp73E-Wk?TzgSi#{exeNH&D!peDLeiNwUic<40K%}nb|_oTXp zWC#Zid(e0pPk7vei9wG386L#!#dN$GWA>&Qq6ruMUNs;%0kUBfJE`}+`uSdcRj=!P z+uNH_@csVX>6BRg;Az>O+q9 zNGqhAVJ8Wlc5XT&PU=yz&?QkCs9T~gpo~P_K)OU3pdN{Ipk9f3fchlr1?tDTeOPw@ zx*vKFdI0(c^dR(5<3@ILbMiIMw|T?x{90X@L0v!@VZBxhxG*^Cp6`aUPibda7U{O{ z2f`L!;D=c?(rR|`<4CXjq^)%xREsR;KuQ%7oUm38z>cy72F8HiSF-8~r_NnklNCdn zWE{S0mV>HmmhFZs%r}B!z3TcRG~a88a^RaAuD@Ycyfw2X>-pKaoEdt;ogv$H$;H5j z@0iw_+|F#R5vksNPG>cO66z4!$`5+aC##>%Z@=9_RXO9Uh6d@Y0kETplYNlao2ad` zy`whi|I|)p69A{3aM+fz#rBRan4=!inArR}W8ix|@Hbp8Lc=z4GtwdBrMU%T z%@bkP2nF~2k|6@a_Kmt9dL`d=aNfc#xqLPw7g(&>+^!nM#pBV%z!$dX)5Lf^Oh+48 zIXxj*G=lZ@&=pW^17YK6IXUG}U3x1%b;fCy!K1WG5K>>X{fcu8qD;b*U`rRwK1Wn@-mJHW-Jlp>d@7kuid^uTbE*}R+`A(A67LW7C@tDv3|KjoC zMHedR<#Px`3c?4Sq^K?6E~MyM1J1jM9|W8v=q|{4vy%k11>Ca`bbSGLIavs}7eLf% z2gzDFRF~sd<(%IlJtwd`1)CqDv?v>(w|L~=cudHfOJfS&ybLES6n>9{Oao5x4YZu( zBJ?l+XBx0~lrY3u6r~osjMEI>4{ama~M$Rh$;DWo?|MX!`aQlOzn)Rm8>Q+8BPR8 zDej6o_oDUCUF$XhL>4N?Vo_6fG;tSk`(S%et1u zDG7{H$m;4v5g$BdQ!>?+DW^=GI9(n2yvZLpr=OGzJ{bw}0&=<-oDPW-eR5+wO^A+4 zCS!+POVz-sSKMX3h&H;T;Rg`ECKzMC-BH-|&&tFv%8RWOV*{-&#-2OKq}kNL@VSDa T7vrW{8OFwFMl7gpOxpbmM8V-w literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/_deprecate.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/_deprecate.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..26b7dd17655790096f4f9d1de4f3863a1e4524d3 GIT binary patch literal 2565 zcmcIm&1)M+6yMcKt1nBoB+IegxS1*+wh~*4lYW3GO+%bQpmEbux6~$xjb?1Ey&qzB zWh1c$w-g$;Jvb1EAPwZ`lKufX^pInqhbr}<>XL#>+JkROQv&s=Z+0b1Hler7!p?hd ze(%lun%Vs+5(#lIp8tG&@ozuJJz-3H_*{a2_AwB*ILu*Q;Z%N>=Nau$JhL7wV6P&m z-dQit1vwnV9_+&+_J1b?fq(IXLpboIf7Vy=q{BOGi!^VCB~8;!$&_`?nBL)A!hC+2 zPy=N7{ChhB6AHE{6&T7EOG=qaiXAdcsj#GwWug=qgbg+a+?jv&Em*t7SzhYFyvAeC zs%Y_R;P$Ft%Uit3_Hu^V*5($yZCPi=zI!bs7KcFG=9Y#zjwUSbHi!L|2=Blh?`pt= zRJy|ow2@!%7LS8VV}KWM2zE!nhg*CP@PjyF@n9ipGT)s6T<;wp*bBEM`|NpWuO-k3 z?)x8vAIB^Y*oof}Rt0Ss@B=tu35$`o#m?M`5%4|-@4@}6g4x@~EcUgj&fFDy((>Qt zEa5hHM>OMYgys8T;9e`YJXaCYholU!Ap~QJlqe~zQt~l_Jq{=!&c;`U+B|MV+EnC$;n_QT1hlk*w|0qokxr z1)>to?CjSi+y{0WF^4W`hDjvMTuXIfQ{!ksUM5IFg|cDlDk?~d!nSwy9Cuj`NM<2} zQZuCmDq+IbHL~KynA*3U+wVCfvkY`c-b#pUAQv(Y76@iJN=cNYAjXb=vH?b&t!Iof z_)~EcO3=Jc)ttM+oJ!4gGJh3;=?;q|4WkuEEz5r=kL_&FvD{xpV-*+^sycyj+6{x5 zoiPZS>&g+BcAd+l+`T{3%aA7xDMW(Q>1ET2wMzpTP#dBZ$jfrJ<;VvVVl;~otPa_x z2a5NyHt%F=&h3(`kQkOYTYys99@&_#_DN{IY?di$xAZQbp&mGGyF99<4i?HN>SYCY zl`6BtPJVTubvP!^qOmil&%8M?d3s{d=g~r0FY~TXsoldyqrb zUUuw)Xn%b%;BWQEo>)?S)(W=Fe9IO=rJs2kvDRRm2ySA%=KQ1xVx%~g*cjO7JQ zm*!~@JWhvfLDo#lzF4-;C@HdO_k2{=Oj#utDb=YR$mcbKp>VL7Us*uCOS(^C`Q!9hbl%BX9d#2gDXsW5Hmq zvT8bG_e!>?t0Y^LD#XlA>4h@8c8u(midodP>@v}ovx8D8(lN6~Z}+7)k8KWYR(>43AA0awJvznI25X6L^m<_A4}bi|awD2MAZsLs zYNu)=cjbEQ^t$+4u(y#&Zp`0OZ>V=KYz>Unlj+S^J$7nc+>Rx#i+_51zPkMRk_2EoJc#dJDK4+CWjP;NQ`R5b+c zf-E!*{YhU1!7ltq(6+#-;vdDq*IIUIeLrQfX!IqT0wcCV{Y{?(5xMx`J#^$yGweuvxJaxSamXka T>u);R%|1>H{S#wS$Ep7S+fvV` literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/_tkinter_finder.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/_tkinter_finder.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1df7bdd28366f3d83b7881c8311c8f4bb51d879a GIT binary patch literal 749 zcmZuuzi-n(6uz^aICXwNpo&q%VA?ViN-fI5fRKtPQq-zKD1hqaJ^R{VO^n0acMo%>t?z*aDRh>cmUZNR{9X&)@g%zVE$vepf6i2;%pLtDUNV z&{3a^LK*^m{2stIvXOyoYzrRt1w+7nEPA3L4!)8h35aH>WJ^2X(+?v%hM*=>(awx& zOr_b*`QiE5+_`X;4Y8pF1-Sj+6YwoisZ;$|wS!O9r9_-WG(Uw{24)ovWd*&yyoT1r z6|{z@v(M%pIDxHMq2F~pYHNOI#~#%@CvcshrSVX!Tb`zCbr)(4W-^CHKl;|wIL(_u z5OR|{VGu2+Il@80DNDz@NjD))@FjGeS}`{p9-Tgy%7oaVMM$a;(u{e`C?QM)uT+eZ zD3wQgxkbU1vsB=2D!0vOKosu61jK4K9q0x29>~*teX+J&UwA~8YWLF8JgA&T%;^GS zAp=`58LPWbD2rgo6fDT<5Whvo{Vh%&>+R5|dfQAW*YAf`?9+fp`on~`!$4o9!Kw~j z_3nV*n!P!vM-Hbqx~AotEeaQFOZsT>!OE1)c9WCbo#8{?Wh!*(|BEPu)Dtnrhv@cq zG;xHKFR1h_Q`mUA+1bxrc`o#%999qI(nj=g{Msk^`sd1}ZGX!@sLbqDW?tpL0(H0C zjr`97DwQ|YgYv{)d1Ajf`9k^A%cET77ZS1B%c6_w%f+4y_#`Sr&o?vkRkT}`=cmNo HNeuZfbkEF! literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/_typing.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/_typing.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e5992470ed0a54936b8ff0d328a801a8e9fa4809 GIT binary patch literal 1613 zcmZ`(O-x)>6u$TU&oB=d=oBgyke}+LaVEBCn`ks;pp>*yB535*3wg& z*DjnUEZW4ykeGlg(N(p^=t}opx-er*Os_#nx?+c=QNzk}XPA~IdKc%Od(L;y&v(yz zKk9lM!TRf`;iU}`p@;m?TuMX1``=)MHjs^M>>w8#7;{~41VgCrq9MXAI+80Ja@{96 zimMu`s~MUbGh$$qjW~(ZlYmp47B^w&7{wY1vG)|wl!q86OHt8>^FQbq2kp6mX zVQI8sJ1R*}Gcx&ae}B_&3@ji!`2{uxBViDcjv+)vjONhCpRA$}#W}Q!(;d4!bQ-f3 z%k%uu3X8rMOu<>3A=k^q%agRo#0y@;v}x*xe%^POIvbV9dltP2Fx{N=Lb5^x`rkm-6Hh=KQ|`uzx+o%#}` z1ttZ=DKNz$-a@z-aCm?J!Q0tI-zC{aDl0zu}RG@{BG6^PmnJGEnr*=^1z1}vH=Q#~9{y+quaoWeP zsHSN-4)E|S;Ro6qjn{dTo&y;C4^i+ph&>Twyp0APqS$XJzKw?dKwvG;fBg`JM>%Hn|qWr0# zSbJ678u>+gsUkmCFg{m3zd64C)?)-JMUfBL)A zKakp)v08Gh()vh2Efe^b`p@3$DADx@VOf8mC7@whKM44UeU-{3(EWs*J0{-m#326# D&M27% literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/_util.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/_util.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6ee029e1e3d4afb75fc94febedc9e15373aeba4c GIT binary patch literal 1569 zcmZ8h&1)n@6tC*9`O0Lo+0AOi#fq>>qfX<-QxL(;#<*;VVY3%UrKdAp$#gQ)Jyz9h z(jiEY99Bg177t#81qty#@nB>xS||#OhrO*kqOd35>z)~zebBF8y^pHjd-Y!ZP_32; z&_6$3+5X-j*WaR?we+a@c2}wxXq(keJqHMH{x)GXnlbd1+)>hl<*mb+()SXVD zUH~6EblSyEsa^uP92SnOdf6b$BrG10uyhKiA=N9X;Z`1^=u%w?;y6)(ijr8azT=wO zd^=8caW%QcRZqmabUW?xsy5KKa7e+7hNqDHm@ zq6Wtkq6TS#g#HgTNBBo*Q3Hao5zz)f;m6@-CZ?4?CaBt(goo{!}X0P6_ z%%55FeXx=yvLQifkZ8XK{Frc3ry+qmwL=PbWrj{@z~AC_SP0D{>ooI*8*@_2E$ZrZ zzR88);gS%EXpZU$UMOdEM`*|7fF2Nk5KKr)1h(7>)dt^l4Q)x@-W1P*N@5&i;ynCx z(f6Y`Qog@`Y3!idP>)`+1niLfJbm%5^+iEkfYlffEPDn7O9Md2HvFHaPiY27JOc*T z5VP>pCU2`TI2GUD;?S5%0HWEa5sge2Ay`&`0jSC8FSkD1x?9a*jd~A^SojPUWlxK(D+29-6-Cw!O%4r$hbKkfzX+#>Mm#bsc60%lc3 z%?^ig3&jhdIw2XJER#Gv%y9}n$$%Y^zCrDozC-Oxj~wDmKQ?T8u5W_$7fN|Bh5$m0 z%5Y@}_h&~h)d%A*)JN_FqTTGlg9c~?HiMW1rmMH#Ut97Q-(6a~d1G~1JNaegdtw;` zzE8T~5A^s(Wy7B%e+id30a-Rrif`uicuTwjI_xTm!XuMX`Wt!i0V(}4HFH?~#hm)x Z@_w?sKdqM`Px{8c#VVb9On_yZ{RgBEXvY8m literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/_version.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/_version.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..30b3e146c53bcd583c3cb5eae02250cfee653fc8 GIT binary patch literal 254 zcmX@j%ge<81mDi9W`zUk#~=<2FhLlMpGAO-=?p0hDU3M`xr|Yaj0`DEQB0N0nk+9t zN;Da7aVO^G<(DLuWaj4;SFsry=^5!6_-QiV;);(?D=jH4N{x>%Vg@R`#T_4CmReK{ zR2Lt=lHoH*`!7HJjQreG{fxxQ)DnG{{N&Qy)Vz{n{ea4njQl+PvedjX{hZ7s{Q@xG zSkKT%zc{lbRkt89IXf{u6{yhDM;~UYUP0wA4x8Nkl+v73yCP1Y@r*!R%nKwwFf%eT RK4nmPz$ezoUBnI)0RZvFMYR9` literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/features.cpython-312.pyc b/Python/venv/lib/python3.12/site-packages/PIL/__pycache__/features.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..64091100a30838da55c560ec83bc31994c6a8660 GIT binary patch literal 13503 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 eD;WBz6&FkAuTe9R2OX5XODk*J(y7p*I_Vslh; zR+X2m{^7%P|A5)j;a<&WH~b2{@od5jhV^OPt_DX^i>AV3v*Cw_TkV!lpOg^t3cDY$ O{RZ*f_yu-Mc-lAV<5klD literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/_avif.cpython-312-x86_64-linux-gnu.so b/Python/venv/lib/python3.12/site-packages/PIL/_avif.cpython-312-x86_64-linux-gnu.so new file mode 100755 index 0000000000000000000000000000000000000000..6718d4792bb26b7abf9551a9661a0a21ae7bcc37 GIT binary patch literal 91985 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 z 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 Any: ... diff --git a/Python/venv/lib/python3.12/site-packages/PIL/_binary.py b/Python/venv/lib/python3.12/site-packages/PIL/_binary.py new file mode 100644 index 0000000..d3236c1 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/_binary.py @@ -0,0 +1,113 @@ +# +# The Python Imaging Library. +# $Id$ +# +# Binary input/output support routines. +# +# Copyright (c) 1997-2003 by Secret Labs AB +# Copyright (c) 1995-2003 by Fredrik Lundh +# Copyright (c) 2012 by Brian Crowell +# +# See the README file for information on usage and redistribution. +# + + +"""Binary input/output support routines.""" + +from __future__ import annotations + +from struct import pack, unpack_from + + +def i8(c: bytes) -> int: + return c[0] + + +def o8(i: int) -> bytes: + return bytes((i & 255,)) + + +# Input, le = little endian, be = big endian +def i16le(c: bytes, o: int = 0) -> int: + """ + Converts a 2-bytes (16 bits) string to an unsigned integer. + + :param c: string containing bytes to convert + :param o: offset of bytes to convert in string + """ + return unpack_from(" int: + """ + Converts a 2-bytes (16 bits) string to a signed integer. + + :param c: string containing bytes to convert + :param o: offset of bytes to convert in string + """ + return unpack_from(" int: + """ + Converts a 2-bytes (16 bits) string to a signed integer, big endian. + + :param c: string containing bytes to convert + :param o: offset of bytes to convert in string + """ + return unpack_from(">h", c, o)[0] + + +def i32le(c: bytes, o: int = 0) -> int: + """ + Converts a 4-bytes (32 bits) string to an unsigned integer. + + :param c: string containing bytes to convert + :param o: offset of bytes to convert in string + """ + return unpack_from(" int: + """ + Converts a 4-bytes (32 bits) string to a signed integer. + + :param c: string containing bytes to convert + :param o: offset of bytes to convert in string + """ + return unpack_from(" int: + """ + Converts a 4-bytes (32 bits) string to a signed integer, big endian. + + :param c: string containing bytes to convert + :param o: offset of bytes to convert in string + """ + return unpack_from(">i", c, o)[0] + + +def i16be(c: bytes, o: int = 0) -> int: + return unpack_from(">H", c, o)[0] + + +def i32be(c: bytes, o: int = 0) -> int: + return unpack_from(">I", c, o)[0] + + +# Output, le = little endian, be = big endian +def o16le(i: int) -> bytes: + return pack(" bytes: + return pack(" bytes: + return pack(">H", i) + + +def o32be(i: int) -> bytes: + return pack(">I", i) diff --git a/Python/venv/lib/python3.12/site-packages/PIL/_deprecate.py b/Python/venv/lib/python3.12/site-packages/PIL/_deprecate.py new file mode 100644 index 0000000..711c62a --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/_deprecate.py @@ -0,0 +1,72 @@ +from __future__ import annotations + +import warnings + +from . import __version__ + + +def deprecate( + deprecated: str, + when: int | None, + replacement: str | None = None, + *, + action: str | None = None, + plural: bool = False, + stacklevel: int = 3, +) -> None: + """ + Deprecations helper. + + :param deprecated: Name of thing to be deprecated. + :param when: Pillow major version to be removed in. + :param replacement: Name of replacement. + :param action: Instead of "replacement", give a custom call to action + e.g. "Upgrade to new thing". + :param plural: if the deprecated thing is plural, needing "are" instead of "is". + + Usually of the form: + + "[deprecated] is deprecated and will be removed in Pillow [when] (yyyy-mm-dd). + Use [replacement] instead." + + You can leave out the replacement sentence: + + "[deprecated] is deprecated and will be removed in Pillow [when] (yyyy-mm-dd)" + + Or with another call to action: + + "[deprecated] is deprecated and will be removed in Pillow [when] (yyyy-mm-dd). + [action]." + """ + + is_ = "are" if plural else "is" + + if when is None: + removed = "a future version" + elif when <= int(__version__.split(".")[0]): + msg = f"{deprecated} {is_} deprecated and should be removed." + raise RuntimeError(msg) + elif when == 13: + removed = "Pillow 13 (2026-10-15)" + elif when == 14: + removed = "Pillow 14 (2027-10-15)" + else: + msg = f"Unknown removal version: {when}. Update {__name__}?" + raise ValueError(msg) + + if replacement and action: + msg = "Use only one of 'replacement' and 'action'" + raise ValueError(msg) + + if replacement: + action = f". Use {replacement} instead." + elif action: + action = f". {action.rstrip('.')}." + else: + action = "" + + warnings.warn( + f"{deprecated} {is_} deprecated and will be removed in {removed}{action}", + DeprecationWarning, + stacklevel=stacklevel, + ) diff --git a/Python/venv/lib/python3.12/site-packages/PIL/_imaging.cpython-312-x86_64-linux-gnu.so b/Python/venv/lib/python3.12/site-packages/PIL/_imaging.cpython-312-x86_64-linux-gnu.so new file mode 100755 index 0000000000000000000000000000000000000000..49f1901dbdd8b6b324ece00c8205f0f5b9678c30 GIT binary patch literal 3365761 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­mWnG zq+wqn5riHwZD?o%h)&g3eY0XR{xFObEiLl4LnZL=svNMx75UowHEmN1N11ZmXkCyqMU~-BWrnG=;S?@9KS|Ia~n-a-nqvJJkA{ z)HZXC+4>RbW>sM_Q$MF^Q!>IRUZYWLr3J=+Eq|f+d6&=-I~c${Va$_9FqRs|#MFYs zTt*Mu@`moBs`k78GqsJ{(gW`K2G)o^)5$ocM9S*Q2hF`03{+i6@?BpkkD zO81YC^ba;qot#`ugrR+|x4-+MBG{d`-}RjZSj#Fw zO}mVT$i~JBaY6kziFm|&x<}?oJ+Z$f#$+#5b}R`Kj1aD{V%|@c!4%);n&P_OA2l#Y zNr{iBq~@QSUN;RoO$}Tp;1i1G|1^0f-lgMf!PyD5hzE@dXw4y7#rU}Q%?e1Bnu~c< zr1|@%C2;{-y5KI@EVs=f8iuUr;aU)3XxnK+sJpTwLPmABd$gY@%Xs^+;9lQmD&cJfQDB)YcKy?b>8Klsp_uZ6>0uIw)==LFH%SxI#b?!$M`4<8X8IH*t!R4)%T1S~Oiib{nQ%jw{UKgC97~R)YVo?N9ehs{6-0C!S z@>flZ;N3bw(;xG`Z@`c=H#tqRypKbaCPXo}Z`j}lm#wwy_mN9AnZcz7r|Cgt97kltoeS^ z9)g^PI(qVEgc=4MXZ4%Bc|t7cB*UGlH?{s^poqa_*dJ>@-wm~P?8zGoU4U6bl<#^? z!qgt;fjYYEZL91Llq|VgY%w*2;8uLWM&KJZGLPY+X`(5_#@I5D7ami!r~ZY&gf@Pf z@+5aH__MAqXiYJI*7!P(8fsB{yYCZ3iYJccbk`8Ks!H1J7{LX)KVJvH|whU3}Uqu;raY9 zlPnC4C%vFCH64|>Z= zW6j^y)Y9n4#_y&m5+tj8z*HixPi<@Lde2s##M9hO#|K`M1Shv*7n`^6{zpI#huRG$z+oEz$qG=85LkTu0 zPdm6q(Le}QPa!Q$w~u9!jEre$g`|pcOCi_eJn-gGZHhKwapA1JEmWO1d6a~+XUY9Z z&g!@0KRkWy`Aa@X=?RjBTM#Zl)IZ^mL2ZMM|CY!4X@$zKE N$vZ2)sP$J-JLxbC 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

jIPsgcX6dste;V|D=AD3Di~bt>#gm<0&(Hg9 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%0D*5K4i9!Gu^erBy;LQZ!<$6{|*w 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�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μ`EK^H2#y2Z!&~d!O`We~;FVc1Jk7doYEcQ7 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 z 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�V@hb@X!rpuI!d#gEPr@G?>^;0 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�kt8x;~TsT>pv0H}KctCr%E@x^x!A}PEceP>b zes&rKGTZ4giXrLQ%?ZGUk;+e6H+fBCh!Xa8pVc^!G0jXeqRF`SgXRQa{~QwVP`i#M zz$kcVvl#Xy70a3t$atv6#pt8B5pXuuNAvfk{n}&{O?%Az^XIMrM5u_kh6oiA zCnI=-h#ES8zTGcn)-bNE2+QhH;b()0QRRxT(q@ItMo5xp>Vt}i3u{mjB{oY=%H65? zK*a zmr8|GPaMY+-{?JY2#9lPyT%TxO_Mt5Q0k;Zv6EIymH1)h*;%VydVcJv<2<;8ED>Yd ziwGkJYt}Jcuu&a@(2x?5F#~FrmSAWr8N&wD=rL|Ujf{Zq zsmI2Vh>RRiQwoL-sF9_%a}pNSVR`M)E_LG{D$T8;%o>>RUj)7E;+pUWRd0`rYZS5S zV_RHfkl{Tnt_f%8Z?zCMi&lE#OZKq1Cj8YwFKHUHuqK>t+$wLQi|h37VZluJ3e}rz zaf|QWu!l4We{axB>SNl6@Xzi=-Z=Tl9v16_Go4OWpV-yI61`J@U^7T!-75b^ox$E& znc!r-2z#5K;6{N=n7RsNko$gf00*tN9Zn^-6Wp>jAI4o0JSb!s;H~VQtY8m%YnV{qDs0|wTJkg9hnf+bS zxJPMpIuD&f>lpjLG-vGU?Zq`)62I2yu?tJ|*jrUI9=@xMP<1?mc{$Ed-oE0+D_Iiq z?iDXyiHILZ;>9ZwJ^VzMEbn}Xh#x!QoevScRp0U8oevQurLikc&Uj<$)}8JzWrfOZ z4B+eabu;rYL)JL3Z&a}?t$p}ruN>ZRP6bk1`Jg6rmG!i1bcqJ z0Rt7iw`q78^zLiGK&5W5u2k~F(EC9H1}b_#((wC(-hVV;pknvM>KA7O|M+nO z1}YcWuUC6-4|cz+0RxqMXR5sqRVwX&cLN40_PkNU-yQV6+kk4 z?^7E7*`W6y4H&4DZ;|@N>A^pK+<<{*K0_(L3?ru^?Oig56!N$0Qf;s2g?8I9@$o|> zRQ~N$DwW?c!H-lyt&ks=fLbA646ppC)DHhf=r2cH+E$ZqZ9}b)4^l&|&_xP=<9f7p z#5FNTMR7&so7EH_Dk2IGH8JBl7#VN$Q3WHTI@R&KPxBs3wgE6;0saSd%7fXy$RgQU{d^0`JhVTPq0rkcy>(>Br?R zPR%wRzoe}95U5%m23VhBc1#+f6ZuT{yEL>>sYr-XMC(^UJ2@+q z^Gwx7i*7sH?!%7AU3bGETAG}8pK4*X+0vQ9 z1%_MybV3PN-&$==U0Quv{N?H$X^86;a?zHM5EVc_Z@C-u{8UOpIRt>mH|^ z>8xblMAgPYbeaYoEKkvzZ=I+j3JipEih=8IYRF5zHrq_3-g1NX-WMqCk+iQV=5G+2 zBigJ%=?k!`hyrdcRlQ298ovZ8F?!1%Yw!NKQd3oJHAHlWgQexO%}Xcgzt}ZbUvX{X zFyfG!ELsayyOj%s7-*iNF&4CN8skdM1td>m@)3~}g9GIKFP~IzN$0;$-vG?LUo4Mq z)EH>}M758}ys#Tvg}B7w1119%LnfU!mq_{+aTtCWc#I?-d}ihcpJdn(y~y+JtJP&Z z;7s-|L_E}lCt>tpcRwp0WJE7=MW+`JFTE{1#XL%hy>@2aYs=VQTcv3pA>pa`*)c8h z&$w6OTDg};%~L^~3diW*8>cE=&kTRNiZ0JgFQ!{ANWxsqjB6%wISymi{rMp-wplBP z7#2Ipz5$3y>@hzK!@ovnjAwk7=($yrWRzPHiI{2rDLOoAX<-=*Wt+kr{{ zb#28(v44mNSHQd)nLz=INH)1Okd)ImxdJ&*lP~-g1s}By->+Sheyny4AE^x=pNhT?9L7?Vcd0|zs4$dI^eEUQU+i_GrdzO?&ncQ)UDZY0 z^}3{atJ0q0Dl>y_l35$k+chXVgBnE?KCFuUvRJrvqU(qr)(e@Lx3}bbPPZ+yjaKC5 z-K*@pYw|#ASI|zz(4dXhBdUE&GWpAhs~-YntTwZ)$?04A6|)DFh6QA}b-T%bgafVL zs&&9Kho~g7)8uqGU{xy=vPF)LpW0Ez;b;TUjM(cY)JE?onK3n_H`AUsN zWkxquL&Qgf)8(Hk@bVOL}Q-)kf=Yy*A%?3N042(Rzhy?`LM>M|+p`2Nl{&TZ~}-YccT3JQ0s*I`B#e0~=$Qj-(R8 zP!^4`nOTSD-}j#29AxzZNB4_954yFl-T{& z$+>*OUsIAevDxA{(Kp7YJu3ft-S%RGZrE=x%Z%%T7 zQ%-hN=JlNu*Qr7G*U?i>aSzZP%`Hl;9_dzT9CuH(ixd89)^0Seo!qpI%O@xIaS>#h zP_0ojewMb~eZCEcfHZ4Y(Y^BOqOaT%wXLLkebTbyM@B81IWjjZ66eGJcXFryxJkve z$NNull&{UoiEeGV6Y;fK5e=${ug!|+tt#Scvm$yxMSN{mL{B)?rN!4~MHK(KiikL2 z<~ye%;!~&G;S>>Hu6sa_RYgQEJyB;=5xM-rUvmW~T*iT`o-(6LQ$Xc>78qJ*oYsNL zrU7`o)?XY1NE_<6IcP_yI5IFa?GQ~16)j+B?IBtlDq6r`fFTS3m3{(TptdnLv1HQ# zi>c(77|f6UESj~cn0u{#M2bL#Kvj4Fd!5^ zcgrTEu`SKkXEUb5PF5J3#0p~zSYh1YR!IBOkX9JCofXo0G?f*`4P}LKQ&}O6Max(r z)rGo2$8l~;ql)KO|sY7XQ zUt!8k`1GKcEjQr@s$Q#mJ>nTt7m~mJ0A5a(-nP9rUW3}%H9};q2K5iGZ-Clc{%h0;@$Sl5C-?v8*PlE zc%DQD;$${D3|^$sA5f>l0VFyQTifU`7*nG^LH&TqPH!Q@GGs?{jO@kY@mtz49=)X< zF_as z5sj;ekNJz}1{Lu!e-S;PB0lCXB0k=Kn?70-(XSNp-F^{0=`5Ec-|ZLC4JzWh{UYjl zqSNBL{UW+dMSQnkM6>}ktnXw_v)8h#ho?@$QED?sYe8kr2Yi#Znmz`H4edHaBSK}d z0z5>U$=vRgwH0h=?jhP1Dv^OVH%EpIRv4nmp;Bz%N3`j+*s#GkLl_4tehd7ak8GEO zu)&O@m=P+)2A-$p)H=gHUB#ja#0R8|=8iai0F?p(Z}w^00>K848O39uk_~WQ^&Bk_ z>^v2VCJ=X%0-5u3Tn;J)0zTKLX$u4!oKqLVxTaZTg|BH&)=|wB@3^NL87_tI7+Ks` zjSTO>O^ht=twx5U;1NcK{V}wWVOES~WSE8aH!@nAHZ(F?i)Jyh&>{|XTH^k4ZQY%( z@i&&HJbm@0mA)#2HSBg3i=}~dU(-EAlg6ck>TPV;!+cM)UnGD%O2x9}0%9HG(vmL5 zpzmtBuJT_Dypo+;^Kyc>N-wbg+Apo*o!K+LQa#?o|cod98f@6)v(`hu;6 zJ`BWFBwcflA8(=8YlUGisPtpehJC6}cNB=b(U7V^&)4$8zQ?C)%M1HqpY9M4mz8we zr382_gMyY9cE3tD7j4*H70ZAC#O)^ksoRMb)YrfsBz3)$3LXJA5R`b-9aH+a!FkmO7zgNZAsz7lFW zU-_Yh4%*#iu9R7BdPboyczV?P1f~U8+5cA@q3!#?J)w*|?D3S&I)heH2 zV@Lo3>JgICOap1xf5owy?cXakcVEGGd)Yt8hSe&$^{KT^R z*U>Q<@@1oGOxeI!Rmui_sh2G*!PKQzEb{dVvc+EZP9Jwc3I33m4V2(7c-g`dOxu_| zz)(|v@DF`l`5`F9zxA?#65Qq6b72XltxX0)2(C}ExCi41#6suD(?NU^LBwRs}No-SRNCo=3RVO`{j4Esu|5=Nd#v9u4hc_PKW zE?t)=GVCm2Q^*q;_Lfv7j69KIc^_)?M9Sdn(sg+vyFmTNj4>_*37#|E4AuXey*Gi= ztElq+Z?EYrK-eOX5JDD3g)!Y7z+FU81ReV6e!A@>orHkS;5Z_LMV8RPK@r6n!GOkb zxhSYOI2skj4MoQ#BPuYsprRu13ZmmMBgo>yd+OHtp1My}J)I8B{Ab?(XIe@9>eQ)I zr%s(Z_uRVAbDt$LsBaFj$D^LASgGV)bQ|=_X9?UAQpf#f%7<OF zhrROo2q!$|oRM(Ka39g(VrH-R-z#~QnxVHiqY_QMruQ{%_4Zxj0eTCB2fgJp1zEjQ z&eO7-qGeZn#geN!7b^@USMXSyf)fa{QRer3I=h~){emQY7#ieNmg>?MQWOns5G{c8 z?UM&3gYLJtODL3?M5M2aMrfNg@BE|*I@AAwp(HJeM9jw&MDs&Y0sFZoil)Kd{Ivo?7lp+qu_|C#Jf4=bGCzenU zJJV_8o8tMnfnz~)5H!0uZ~sJ?ivV6&)f@}-UrTXckBr5-S8P;DxPG(bvklK#I;Xh( z(Ovc_H+Q4)EH%XZmO&zBn08g>u3~6&HxnPAcD5 z&RyJ8m%7RBbBY{-r}OoG<o38-G1@>0#!hbh z6>66k*X#rS3#0Xy;PZ_(P=c|ilXtVW-)(%$OK`W@w!Z}LZ?u6D%vv~kr)c{djZfa@ zrua&u$qBIHFB@&31hbAgd&lWJ0}=v z40w)_Mu68FX&hG`RnvA9V^=A}>XK@{Pz`|Lg!Bs~;k%OX0lO@G4FmD!&f?^`;QfrP z0mQ+(ic>qx+Yb$VK%8CEnQ!B*vD(MYZbEuvi@wG7n-A=Jm;l~*$`rAR_3l6+piSk z=fcKnz24mSWt^hZ`lnj^&iRL^WcL^PhZ}5wuc(@dCXJ2=i69B~v!Bo@eq$LWX#Lc+n= z_(H->>g92|DL2^WYy$snmS=QnQZw0|2tmNVBmR5>MBk?qNKt=!iUtj zWR%z1D8s;qjWiCtp{Dt8Ni7VM-u~)%-&0w8xlh;2pS;rmc!-f!qxUCme(Qd!FpROz zOGy9yp^h=%1U7-+Hqr!R{F9B*ydxPSO`SE1u%ffmAPGjd`!<*S?X0CsXuwZ4T7L;X z!e|2}c%9J(OYqr7TTy~9Gupu=`13|Pqy&G}Xor?y%Fg2HM!VJcmY3jvGg^NM?p0H{ zBn-T-(FRNK3Ztzk!N(Zw;1aySXor;G(~Wj$31-!t&fd!LzdzU2f3IpS7Z%|AjWmuN zTsM1n;6x*CNR^Rv12|@+W-5*oB~!1nvn%{hsI^+Bi=*AD9G>DHQ_2SvsNyU$ggp2} zX@GEq_Hzw~xCRKgjca&@Yk+|7xQ1uD1_(HiYj~b(fPevA!{M$00v4SiAGE9*@F{#p zf9#bi?lYtM{aFzN0UvS=)hr<3NUoup1q8gwHB_^JfJ?cCY8DV!H`h=p3xS24As@S} z8f?*O;PRb(<=a}yxdZUQC;KLOa{17?wJs4v!WT?J6Zn#yJ+Hj$1Gr6v`ild#8hwovr^FeI*tA zpsU!_SKhzG3x8NkAi|`3Re2@ACeo_%*Pp^o+ zbNDwlFeY7SzuK|}xJV5ua<)vyhN_6MRVw0-)dZ(5wAr4l*0@+pv0iMGs%vb3%;#Lg zObqG0Yf+4=!YsSQqj=GU6tAx%MN26p7LwTri3xqnCN|o+$ZIiAOW`_F;m-rmjdHhz?mzxm`DMEDE?j_l z%l>S6{BTLJV99wM1ItQ?f7I85yC)wsF6k&C<2Lf#x@z7yuuNL-(zSV(hE6wH>{BhH z#lF?j$g1o&-_OQLV|lLA<#Dvw%UXnB2rE1FPYC{{e#ML#-STG)HBjTNsBr2F-Q=vK zr?aQ4YI4Y*nbi6V?CRa4M(C8&70gdab5j8G+Ibhj!AIyyxCjnrm0Sb|2cxej!N=M{ z43@7}OzFlwTWM^ju43k+<@lan;{pAomK%gsyg);!>kR%oqxF~IcNlG;1hXfdy#J%^ zM{4|aG@RjKqsh^~V&2x`3Frn40`4{%{HllR)`-RddoxDes zw#y>VUpXq3c}jEwk5v4n8tsDpeJ4sc$i5n;DcvAni9&ca2$!`p^|Iy$0iS2Iff9V7 z(fUg;mqa%R(Q4LGuau*K=NoOX1RrR${u0cE#d+$Owx45sgXI#v%22v7z#$ottBrpwZG_sgWm$-QB&C%Csw8 zbe0bWOVpLq1&PA`Ux&K79PW|QT@qdYIdgW|#hp;ioH=JsC?)DwJzZZXhkm|~tGmAS z(qUP*N~^ByzrIh~@iH>2F)B@*&Z39=Ur$v^Rh~_#W^Qcv*CTB$rO+$=yL$UXH>Y3q z*CoFU=4a*R*DYTa+Ii<)cP)Bn&YnBhU#MMc_4gu84_;eK6Tp;i-N2O20VlQ3{nl5m zNs5=v_41u>fGM3kFr|}sp!Rvc^&Kq1w-{}C38r-Nz?4qjkF?K_T}KB?@av4WyaZD^ zd0?@ii=YpnC}r|CuhxmvpUf?sO1{t`T4w1M(9iqAJ%e+hn@(FV$GiYeU~;JJFq zb~=OiGunV%(%)dTD8Zy@Zd~wuOV5^`J@BiIZ+Qtm%V_;2_`^mUD8ZCYKhj4^XBY7O*0;X|Q#!kVNjIH5Fr||R zo?~fYe+i~^^1!63P9B)j$pbH`$pce5d0^5~Cy&(hzFJ>!hu)sMzTm@+CZA4GJYuwg z63kJDTg&(c*~vRh)8Elr8Vsg%eP6BZw;SJJ34Xw6%S$k&>$|h2)339%dawk)-Dt~8 zFs1AJF>POBsj(zPil1(@kFoIwgOYSbpum6dEk9* zT**)sldd~?U`i(sOzGr-pIDOzCe?THz?4oNn9|7uA5xPCrgZYa+&VaUU`i(s{NkEC zFr||R9yY$g5=`mjf!7*ee+i~^^1$4(IQ_tsP9FHAnmjP2lLzM3#>oSR+nnVkcsIR` zasC2+q0t6PFr|}sj<&zq_?DO8cN(p~1b@V6110!VMhmxGHyCYs3I37M`b+SgMjNzS zvtJo)c?sqg&DkZrGh1HHTjX=WBeisV;8TpYyabDRs62Q#$>?|D-aUJn)T18!W*O8Ett9?zMZ^{t`^- z7jSHr9`hoAZ z`|g4AdHR@Pm6on=d;snAi%*~(&3j__w>!Wrn(8=utsWlBhY^6UHPR4p(n!N3`6RH? zk$mq|&54A>iQncx;=u2UK+2spbKb{UmIz}noT`5BkaSi) zRx;HB+^pGR_4tSr*A1HHRYZi=Q&=U3-q> zKU3&mS1RvNjUPVDudy!aj+o=85-rSq5p(>wqJ?=*#LRgL&n$K=&g_g>cyvK2ESn;h z_~AuH3eL?<{S>Bwh5PlE3B;y>iJS2j=GZhaQMNG0rs39`TjtE9*q+>>w#bVIhl$(I z7UpKhvTHe}pTYvL zaC+Y|bUZ1TIM#1rjwb~Zmx~tWcv9qBenW?Z7=Ge#R#xKcnsZ+mmT;p>;ckiqh$xm$~PB z^)BKpRbwdYtu46bMHQXLI6R)|E#6xV#v>XY$3W-t%dhm&4D|RBOh>VPg+5Wi=Y$00 zK@7dA^AJW@@6z5pZxK@bxP{(4a=A($uLvtoRVamYCl6or&|gSTQ^+$G1X3ps3oD`c zE1`G%#6Y;%O7rya9f8!zW`q^U`9G}GFH{l2%8@^%kgnHOE(=0p%idsDi1nO}@2O|r z!WAEb3n@MYN0ay@96E8}-}N2}&QUn%yycPoG@xT{q69PGrJ4NZzn}aw?A$>qw3AaLukLVD{ zF&)Qm!aAf^WNs6M6d$SyiEA$L8-dix@5FI|gm~!<5+M@<5R z70AT`snjW<^VwF;oP*sw6}^ zS{#s_yf_#;S{#TSEe^t6#W@{QK2IUI%5TXMS9vtzfUS~*3)L@r?? zLLH;$=RyJ!q}%{;baJ#fGC7)Grj~zQaOv(Y+!uvkt%)ExqJ+J-D~ZqUbQCXVukL1P z)A4LkO5x(6B&o~J#U*cx}t1;&Ae z2GZ)i?Iff`EBQV<86am%LIQFyP<5q3nkalv)Z71O+ui&)@UwOTeD=8|6>jmninBK+ zAKMk;x%Ro;T{Sh7L4Z8}uK1{Md@Ouq1w34+_^4cL&k)8rN#MR-x&r6x6}y@*751g@ zapJ%&d^H3W?#+d72Nq6Pzocu&0g!BlSL+!N2S7rauPe&|kdSUr5(hx?3e^KNcV`8K z3&{Ej7cea4>JRHua*QKfN9(Z-$2dazwURi-5z9fo{A`lXglO5?8ua|J8 ztF{u6(>>t7}?yhdUMC-4v6p3#ywplzl%FrELJv}w<_Cy z37fpuu6hSU)n{`DjMrEP8LmZc)B#2uWRW~%n7YRi>NhXavSnTnkI}|9^P+jJvTb)> zFdlCmwlgmn@$x6jcY$k`n#v^qp<_ItWy=I1KCF#xCP?!f-9Fo$AdGXZ!*(VJBYSoS zCRpkiS7$TpJySBgNq#2P0ycgX*%Mu=OqafZA>xN3kvNb2*i7MA%h)9~|D zEn5bIIAD#n!5}_E8*MNM1iNam-JG$%uB_iOd9|5Ayu})8gF*ahJQxJRXf>Fu+UAZE zHHx03B{P$S+uQ;1bZZnl$^WZHi05jfn_1NWfdE|%HsIvNG1VUhrvG|AN3Z`!>?EA^ z6=xNL)hleF5V!i|)up}#3YR$dqC$D;Yt@UGMHmV4pb#&DJSbcrcdthf1QRRRzCkb) z_Gu6dg{y2cZ8lROE z@7_LnldYdgymkBBZz5E4j5lHE6Ys##C*Dh;PrQ*rpLk1zKJk7C3mbcObrP*#?u@ak z2O3_@#lJ@^Az$sJ`XRk$%PV_;T$Sg_yD{zRb*cM4C?3rPS7lKh)ytE}0&*oxW#PnJ z+f)|SE)DS_3&=$$m4)AO8R?PzDe6+a)?}>)azO~PqQ3%4mXsEb~)zbGfp za+n55;f%dRIb#=*Up;VY6J_r(0TZ#yr~v$hNGL74bqsQ3Q`42ZC`Ew>5Tvk&3 zM{|?az~ClaIVBx*p}^dPgiB>nU2Sf%8W`LpmW7*;+o&w6GsDsXgPX*%a1+vqo+`kX zRIf8xD}ljHkX5;f%n>)?ny#{_a*3DQ0o;TOvT{=8`YfEd30G6)q{_urIPnKAh1IW= zEi0)8e@O1w{56vA&GXqh`D_`G&(_HcvVgUZ*~RW<_0Cu8-S`GAOP|;t=dBjM~@dSRt#1AzzEG$s_WSgpgL#zKW z5BLZx3k%-1n&-!u53BseCO>CNKL)&nsl{^TZ*P9zhXvT*7Jzx=%p-_~H~y*WTRm#Vhn_Z*DGb zZ?ySr-@D=Ef;dfcze9)kP%>0|Gr;=^>%*pK-v?f<$H5Hk`*5AU)5bYn<8pg*!^^dO zaY3KSbJJMvcV2w$4}ID%5xK#Bnj3^Z?RA5fd}5jDHsy|ZrVjDqWT^J0gLlOGpjP`n z@RB)%DYfqtu1lca>Z7^-Bf0f|KcH6xt|aoQW-b;4ejyRpiMK*pqk({|Q%G?L6A}@M zXd|SZ)NM#5g%oc_A+gukH$wWNcEpF|)7G(z2ni2hHH8!>9U=>}P`Xe3%#iJXT4*FSW_Q2z-ye+0-+7In()9-B2dh1TsN6*8?&;C%u`O>qu^{ z&62q?8<7ZPDqbQrW+RNi`o!A4qusqv$-Oa27RcwM>D2Y}(K68n@M`6fEd=b-b#`BY z+eC%Z>Dnl%%{SJwJ4z}GZ25s97u#zqi9H>i#8#@~KiE3>3xX8U-a!8I>p*<~XJ4)JOJJJiw6~EnRgXM1&;}z~W2mCVi9`{aR@N0~AND02cXa|?z zD~z_H1b@Y7gC+Q9MjI%>9T-&R0VbHZ`GQ}deAQV*Lo4g8vwXNy@i{dbc$3lkOYr$d zlOIA-OzDn-{#j{k1*Z(SLwBMx7I?&Hhm_!t8tvc`yp!%-XMFHq8f~xyf7NIMC3vCa zH}20ZI`~6ITV8_y(P;f8_?t#sUV=|{E?&tyv;@D;X#FMlE~5>U;75$sUxJ^~hrB~d z@Jo$$a0x!%Xe&za2BXQ_PZht#Xagnqt413v!H*hkMG1bMeqGzWOdEW((UzCsGmLg< z2|mwg@}5b>?=o6{38w5U4l&wSjqhOlor}ASwxR_8%4mZnc(z_2+y({{Zk?|YX1{BE z%S-V0jn-c-(qOw-ODFHuieF>2K?~0J8f``S2gP$V?Q(t(-qmRGR#?UJj3#egO=$93 z7NtGe_*RtQ7a47^1QXz$O;6W$Lc7xie5Lh0xCDQ~Xe&zaXN@*kf^Rn3Kneb-(fUg; zrPBrcfbkt%f`4zc{t`S>b5y4@cu%9PD8Y-3CO@*L_$Z?tT7oH^KZ8#&z7-|-B%>W% zg3mPCiV{reR}vR1A^k{6 zgk&MTQzP=#S_+9E{oOz!Mze2(3&{3yO9E!w2-_~|`Rp1YO(=;?Bcx9%311fyE{^L8 zXGdlz`w-Tg2J;RU2X@cDG#aV)oND_9|k%a_2z^>nC zcYw(sI*YT<;<7wpt1-$|IV|HSYsNy!0MlEb(KxJ0&p4_HiHwt=CM057VWuDLQ5cqS zlm%i{q$5U8O0u-1p(5m3d;BU%Mj);J9LG9qTUGbCPVsDcO3LjhDX+-5jp1x7t~wyu zimNsxTXEHOO2RYb!x4k(31o_Lp9v&U++A)p+%3RDe@J*qvAAz&!KvDh%u!7IW+jn0 z3h6^i`hu210+LF~5B+t0U7IbHEE;zz>7mdQ_y;9P&yH?&&?f{(eStz8R&JBuq9o#u zkbs}Hjw^vbG}0=An*ND($Py_RcG+C35KypQ=J(!=i5;h>|qp)>? z-yWoqL6%C&PLjq?g?_-#DM`flfWK&Lqri}qp4q^2@J7r3xvjL|ep zJ$c3_v^iW_SN};#;nKSLnB>yB`t3?0g3E>@h!d{mJ1Jak_Y1)sNM0$*c7qQ$wnm&{ zW{u57oGZAD2>fdkwF(%n6{~@7G_J$)MNn+iKfWHyg zfHxSa0VLIxo}J*I1~%XwO3Ipt#`{7)Alb0fAN-K9jRHxKg{=cTTN6~-azOH9Ve1By zAIts%k_rpk4Dh%~YXHfPoiy;NfelC^?AX8;1~%YkB{??mmcRxit#fQ#d?{N9tvTHc z4bOJ|<8Jq_){eJmDGwOZqaeAfjjre})s2%pN8?(~`L2lL$`?|#p)@b+x5W9w76gXV zThQg1TTuC0aS;YQ7njc;QY<~NTD3@E=VkI4YB#HfpnQuENh5Y!W!b#*&5QjnYC%Myf(JK z{H!0Daj^B;G!0&hN$O?m$71R&j{&=nFiz($=Hmf~l-!7rhdSp1laqEAhaJ8&Ikt4a z(0JIhm+qgOUAl%@#iIS~0P`oR<_!7R{;Z;V{}Mt-K}Uh)o7J!Howt8-xG6D=v&{o7 zb+kuINOfF*e2X=d0UGd$V2 zMmcHGjp8fjh#;ZhSh zN{UH-DFy*j`prO%GcXiq;_*8 zR4>u^YDP!FNtIWg8aWi3lsbowq5^Oi%~8y%5J<4hst`!C zL^mK=mRl|`rS~3cBw9U1->09qG&!O4(}>R~m6_~|(o3esWm}l970J`NbU2=)HR~dx z%G(@1pd=!ykh(R35>bV;R!KxuA$?v+L{uT|sbP_bDx_B_iHItshm`bd3tz_*wuo86 zMW`WM2r1q#LWUaJ>+NsECTEeRKJj@fJo zINwMUz~>ri2zZ8(CV*!fX$XkLomm@Z|IL9Bc%6|ZfWI=*5bzI1ngH%*OEd&z_57gJ z`i*e{7#1n{SW|6n)U=-RG_(CM@Uuo50kSMkgW-}D`I#-!2=Fc?dB)kQA`_8|D5?&c z_9H;F_kC*$D@MG9KR8rZ^rn(Zi&`3i- z3?tHj7(~Vdo@tA|5_iH-(vjso&bTtk{jrH$cz|fwQLMXPr!vR3*ec*$ zC3T85(rvdc-DB(04Ye-a6zkF*&|n92+00h~v5(UN1K~-c|8~ugFg#Ib{Cr!)Ri(mU zmsNY|{Er|P`1`zE$kz4|1wH&n7B zSpv($6A(EP_(8Hv>*F;Mu1_WFu>J-m-DE~z|2u_PS31tn`Cwfk%~KNA71A@5gsp^x zk27N-rJlMzJIl7jr)Z1h1i(X;J}b zYWq)X;;OIxi5^e2Z8roQP*Nq13MQH&xwuuQb+49AYjDtJ0(*S2rVTiZl39ms+95Dy z?lo>on36C17X=0hl9F$G7sW$5ji7pFIL?#;oa_ zEg2dRmEF=bGInibCh*ts1bpXMeZSus8?EJF0{DJ?A9yu?nE<*V9(rDIQ6QSR)TV{# z9hz1=j<3Hz*%Zg4D7KL~0nuI7If=(k9=cwyQhSRBc74`^2bI*nYU{i{Rp($e7_$@a zOqe>(S0>7i;?)ULML^0|wS$-s?Z0RHx&g%7oCC-5{H;?e@8zkymuKW?Y!XPc!#x05M_aL4^MhLr3vTb#NA_`hv|~-oE^n zx_nw&+UY71T->GGvCobtIw<_ggeYjS!Q@Kouf&HgS`CXlz%IW%G&ZzZ2Lko`YMT&e(s!QzXE?^YOe#L%s_G25%Qj* z%C7xOmvn4r5(^jfFSChUY7QdF3D&#yZUC4iz zKfx&Y7K&V2f&ZvYUBxLKC6&)AQTTvg3VfX<6`lzRAMobD*Hu#CGljwjy)3S;$R8F#8Hw=88@om^tQVF|r7@zug<#SU2NLJ4_w? zrCQFG_iX!V$z>YiIodeW8cRrQkXpaa65>a~?zwW3%B?1B0|tcjdu_si8^nM;8eVp_ zFf#@`)=1;PCT--)Q9{~VSMpu9 z$PHjvl5v(KsMCnm5m~V|ZnXM;qLYq-+wEIS$_H>4^2(@_-K&q~;rH3a;!VZE#pa!_ z&~C7A@?SWM*>6^d`JtAJy!6T^T6@UqR0F_?do63*!@ZDRH1pk7>SDiKOVx{?sX(u@ zbQIWdyv2T$n7w6)e^Jr+mkz;O{upAT4guSptr~5JECoAkcb~SR3mq8|!C#7$2}U z{8g5zkX(qoY0qe@jZzc2H4#}|cc(4%nw-#Uazd|3%+%p_nY@OiM7}x@ynuqe(u^t)C;^WZ!vd0xwrm^#UL&9}9fIn*v{FN#$pO4_NH%hZT8UC6(Dq zl%xxIVBqU6sXR0A0mlR1rjp7D#y5PY!kPLub{9zZQv6aaC5*dFe9@T_#-V*j+p6n@ zYh5s~pgcw$5^ofJflt>>AfKcGzQFdy*_%o#II!@sRX(qLPBrjNN(;lwWey_mqpmJ< zm2M@Zb9VRUtxpNsrP|ga6XG|tvAUj9IZ!ti(oPctLEEZrv*jhBmHC{3KBGjop-9^{ zN#!aH2{LuyCoM{diKwvAgpWJZm3lkS<}!%;`?=dWgj7Sz)QFzCU#QmlI}+Q;H@DWT zOADxY{$01+AGGW#MmKkFobq$H&nKFt##Gr z?jv+Vj%nH23UzI^73yDQTcHw4T2zKenQgovD;MhDWm}>CeYO=UVXI|Wh?LpJPiN&q z{bIHi>Nm5kPzjMO!$PFYHvS?j7wT`atxzAywnDXV96V}sH$=)7ognU}QMT2epzf1x zh5E#7D^x;%%dikBvyIQs%7yykY%A2!Y%5eQGp)0QdSbRO)YoKNp`Mj(g}O1@3YD@| zs}E?OPifgBzsV)Bhw9gq+~>#>F7`mVMO)mjPq~&gF7`lts$L!Eghq)?P!Gn-C5@&t(Saea&tHI54CBB{-rkU z(7)5B9s090v0!2{{^o9oq!>)hs}A)V?K-!RMY?2*C@m{>$>mbg^7XbHwER#xc5*U; z0La~%j6}_l`?PtM_1@eKjkIUBwTaask_+uzS6$jkj6SY{nYc_$TA|)$t#V=W4l1os z|25kR^$*!rsGXV%%_-`Vp^`DRwnFXH45(FSs5@m_p)Sa_LVaSk6)H(q>$p&tYMzxk z2`z`T<)G!o$`N@1o*DRJm0W$D%08>6 z3izegb#>ZxOgmt~>?>X`RHh&)Il_`3j!BrB>2R1VNE(fq+`$a1k9N+oXvpH^?q~dY z7QJzpnxi66{4bW5aY;QMt29i7nnMPmV+h6Hnzk3H0GH^wIL zmqr=`{=rC1V9;{P*t3`RT&ksW1@L;4+5n!Yq$;LR`B>lse!9*_<#U0r)lk0nGhLI1 zwREb0zinMJvFH2R0h?uGPoGK%k}|PpZo-s_J(w&=%Elg6AMM<9(2&K+Z9E?==#9hF z92J4$f3dubOV(pgD%2b@2pvNx{wA>ph`&kf0sg^OW_qqizuC1bOzaIV_P~ey_OSL>ht~m?(193PvDCb_q>1~oRIM_P#c7- zRU&+wqU0`iKL2nyqfeXA8SArG;nKBAqbO~QH42=YBFT~sUbx2DIuE6gZX$1HK zCHY87tw%jQb2W{J={K28;P;I*21KwAh19|@$)+TtU8u4+V|U)cVfocIP6PM}B~{rO zm9Garw6B+A+WZ$y0!5{ECwN z-lMjwYLT&N-D?FWgEblK%Qn~;5b^%%NA0J^*aY5fq%q(lMrs0smYJpUTlYlmb&{5D z!Om0s4wE+4U zFeSUPC@@8klziye@0WB<&4Ex^`~t1RA|!VmD$Y+zRm3}FvcMp8459deZ~^fHxhnwT z2f_sm+9WPfX`@;&r28x@W75^p;&tdK7?U4s$#J>t96l5Zdp|xXg`-dR+KwDnWJb{_ zaaxoe$D=%k!-`qn8c)&E#S?`eHPQ%htCD;?q4r2%j7@8GW!c+Uo4}75X$**9A4#Z% zVUpD+kM?04J_9_ zhiU1w1Bb4eWZ zii*QOWd8$$xUp1R;uMv3DvX|PW5-={o4upBMSDJ=Wsa-Uxb9c35D>PXh%-X1?+zvd z_vy#d_6aYq1%A{>Bfzan(#@;2M*?HbNn0Sp%rw>}@MA_A1J;LWmej&9$vQ=wS0%31 zvf8|gH`r(m;8{xYn^!Au419m9FudQl0p#_)RaYt>4qaPppp~WCyh2N-9XNE&Y~K0W z0ej>(uQCNmxy_p}=dFR34%TF_cbbebAmaV?m)cdv*aTi{q%q)4Mrs0smdP>)4dv^qi9yz*BPzHT z0f5m#zD5m12ge5fvFWoOh(3<3u0ShBoln~OG=T3inG-;?awcn()KE;mKL%uQc^7W$ zc=7>i{S5V9D*j1Yx*!8S(S{xZzD7yaZ4H$R0$)6gtKY7Z;_b<92yp0{xvlwuc4UV6 zXRtbWkd%pIa}%aa9K#erQWD49bVgLxt8CT{AU*qv2Xh5hn6`Lxcegb5E>$Bd|w0ydvQnZi=2Lpbc1TNhd%Q-rRC!%w0=jqc;XS? zKhcg>;r=P+gaf?;=X6g^=jzuB*Vs1{M}Y@eh#3L?nUZ|Gr*?K=j2El5o(|SzuqT_0 zF(Bf7yr=ebV{8InWTY|RaYkwagO-U))wN7@T#t^Z;36~_9VFfZ(ZR8SUuF8N2cpl^ z@g8+vVC&NWKGkGS0MW|Fduk{q@gB(FQ^fnLbi`}5bh`}98}B7w1U{;4RlKJ%&r}?$ z+ZcSZ_IYz{2yp0{iT8Xll^JH^{T7uPBxU0L3{H2pvNx?j?~N$PSQ54rE6P7m(Ry zJ5l?bq@{B!@P|y^Fz};Fs=f!y4C`gTG8|o#2mXr5OY-ZY zI6xbjvaCs6uE*ob6eMM0&~XVpzZNfC%1Pku!k{ ztnmF#7pZ+JEGoJ2Og~2MqBjJ01qF*H=vZNlRH$;QKT}%K8DXQj!mY)NTum z=4@Gz4%TEaeym6q5r}vn2C03-25SO8Wu!6SHX}8GLCahitiAzql=k{_Eu9;Hd0~rW zdcX^nt;+PMyxT_3W_tVt$FkZG;LtS_8#}ebRVF`^#PQQ6K~g4w9;OlkQzn37iolc! zplejp>$R+Yr|Z%A$!)mXEv!BBaJFSGw`u>}w)0K&#$9S|ia>GGSl)IbPb$>hF$f() zDBdQK2Z*%9ZBgjqqK=U@hCeU zc`kR;lE0s7DN71`odu&2;Dt)^k%!tB0;3n!?%#B|H{} zV!O#JeRz2gJn<}Cn8Hz*w6hWu|AG$HK1|UY->UgE0wpHJ^0pJEQlaL%LFgDlan1i+ zFU7mBox%jpP2jsq`PzpmI6kSII})ZcqqGTA@hCeUrjFBFfcI)COA1`68$;F)c$|`a zn4)%RV2pjPwVn>vWUw_RV+@FRAEv0i+!&j{R~u;zc%G4(z@TL=Ot}Q9N|NqTL)@pO z+YR8IOlkwThmxwtxKsuMAMlxVJ}S=*e65D^wX0QyuhmomH>_(Wq`hA|U^Ce)seFF@ zBuL7{z1vk%V9LZjOct0jaZetosw{plO%C&(qO%A+hhs%u)WUC=ms=C&#q1raQZ1b;fWNIYIi?1FS4maWqVn6o2YjT?N99j} zPf<&8jMiSErBemGt4%NywGP(~*en~h&Qzu#DHFBMOPDfI3zG#&*{FpTZ&jHRweC&C zXQP&K70k;Sg1ND*xh<SqLDWDp3n~ zn62sboR)saYQLNbIz>(Rkl#LP!EuaA+>xl28Kq6sibr|uQOm8t1%4q4SytfgdX^@y z(z||=%0WsLKH$shd{j;ee86w%rvfW^I@~mh6{cAe_;Op~5g_{cFh^~XX)yvsLC;9- zBx7s>&sLIWq;`cdjsTgLXPm~2goXVtF%Za1#Fc?)=Oi~uYNwkD4ItWiMr!<8fk*__ zb!{XEN3rhDGt&5+yOUHSkzL-x>FEz|M<=Lqh%A0CvSA-n$|{}GehUvt=ea54A!3#(sQh|Qs! zxJE`c)>$I&sNSwvm@%a&tE^=XFVpT*z(w&V&!9UifO2sbBgHYQ0DOhS}|l}@~B=Brw|JP-Wc9zUdn z;cb&tequy zM@i)!N(|#exmH^wkqyZu}J z9l!s)hH^h&cfkj>l!1XCHqt2YPx{H#ClqHFUf`zI!C{!IjdMiCx?ef2CGj=&iV<9sjr*>-A=|Vc?sMGz7#< zVn-EdcJ#x;fRV&Fj2w*PSz)Q!@!Z6Yp0%Cz0)3ep>(9(+O<=!~Mu9aub|!YbXG%M^ zM*!^rBX*Y#ZQ_7-z{Zs7mjz`}V0}WsO!<_Wc7{YKm?@7(wFwfY z-LGwQ&<-%N21}=o5!#DYAUxERgG899DF+Gj$|__dhYkW8#ucNsi67bl#@Z^hi6Yto z>r?9UOvw@XV-*M>Gv#+8v@;|ENzL6LVO&`Sc5JwIRohTy!5FW?)V){*f=f*~NCcUh za*!~utU@;KsA{lbTv-LQilUEpfU&j;ZDNpiz}ETlEZq{{wa`5T#A++sI{D$tssn|E z?aVLj7jBYE<>E9(9lmVwz|tfU`Rl2-2jf-Q$`b4pt$7%`&L2;k^X?pHXYU=l-jp)>Z>Pt( zvs?oFg}#638S?u!rl^8ccIFp>`??wUZdF7Scr>R#$|?6EnIFUIMi6C3k$e-TcNUG5 zGHTY8S^?lv;LFX~1Rr5w@5%h5ZFMoO9U6LO=boHFWF z$*5Vj%M-Raa~Y3P#?3lomNRdcoXqT8cHaH>8pJ7O^z8P^a%O!Z%bA_guJg{<(J9;c zS(Y>FXIajypLO*yDy58`m6>w(Np{`8RDRbk+14qqct^VIvvy%nN*O$>X3Ck}*jcvB zUg+Tx{Yy2yjGJ|$BH_$D?Jar`Ln%+A;;mKm+@CsG)*VyM%r^;(9(FMbydq`S15=DG!%{KQht?@OC2&0q-@^2=KQ?8U^03B=_8Iw4~P2h)uQ1XCkcqp28zr?j2S(skMj8SB#z+%DY~jUG`<=N) z1BiuWQvxxM?@J8}$@wu5^LR#T!C2e*@~C`kPu(3~kf#wqEZ}4hn?0DZFaqzk$&WEj zCL&y^_QN^ths#v^eMb-tk*&MLZ=zt9J*@)o6`pS0bytG1ylidMpELspRB z=jp#x@3>Cw<3cU?2D8}^@EvBebwD(iqX8g#IALIPl3xe_;>3EAK&EA{(dHCJ`OD09YncO!>9hc| zu_pEM(`j5efw zMy&5J@Hitim+B%gC%JCKCinGNoU;v`Sw0C)K;*SwNhcPeOkQ#~WFkOFIfde$K3>P2 zJvHs$QLRmE4mTxC^GY>QkDRj%EGwzLTFEmivOK_tzzn2ey=Y~ z`R-HFy-U6~;5R9%^mxv6oT9i%qs))B6dM9>Q=C3H*wZ+N%>Jem-;uB1SIYz`Dfk>G&Cw*Z?9%mIhdt*zRMG%=*(NaTtgg`M4mk zE^)Yx9dqmYcxhXI?yp9pclc8L0=U*l6Ts7qGz9#(lH^Lab@E27?0Tn311>Pq1n@~p z@+(d4*~T~ud`=4^wW9(f@MA`r0G4-oRs0~-zN}Q4F7TxPgU%DcEAOuNrS?IkN?+j5 zjWhxLwUI`F4;g6!xYIohIttubNnT-UPcp^{;EgSe)P8M@qrg3W$siNJqm|?bp|&9~ z0$+MBeMf<>H_`;~twtIJ{-cp5fZs6EC~(hT)h$eIsZzzlz`rrl1aSP<^}f{Jq*OV_ z0iN`)bw+9%lq!P&PiH@SGF)__HXzMRi^Rrkl5=_ zuwC2)e%46qfb3=GBF&N-+gXwV;9}c!>wxTK-nGkX^tcS?6IA-4!B!w3pPt?`zf^= zg9`i8n~B=HgG}JdY;UarvSoc=YV2B35y+PHjMO%o#3qnkD>DXu@i%@0%gGb)`$k#^ zWMj+RZk?oZj_vYw!1HRmyjfCX?|bV%p1oYKnSZAjaLIRoueQxR!nXa1ks3g@uiR;; z8?=$zppB9ZdWvn(5q2Z{O~kRwK5o~$k#v_e(p@%^?y^R1mo-YZ)FZZ~M!1H((ssrO zo8{_2N_WNx9*!**Htu`vzm)AzQgdEA zHySh21n?9i4FU0f$(w;3DT%VcE!J@Y$cB)oU_ds6bWF_?+by+LGqqL|YjFoJH=jW4 zAorA5;V4t{KlNsQs>!6&$lZJ~4c1Vsjm|rK0~Ko%zC9A_vXeZYkWZ+-@YtnKme;)5 zT^u1bYDOVKWYmmz5F4ZB*axEKtkNBGG^p>ZrQ4a{=UBiW0X|PjZFZ&`<1XDo!O&ym zo)}u5AJ6@=KYJ*d6xzGCFKJt>a^%3e$!CSl&NZFWaoGmIhH*^**BWUE$c4Sy*<3Vn zor)Oet)3WZT2nMpvWb!$^vQ+-GQ4c4cyJ-bLpxIRCj)nNx$o1+zw!!G9sFi3-Qt2z zx74KpJXcB8_fDUq%lJ|)U0?7&Sd<(FenLsrJGQA{I7yEqJ*&?lxNUQpsz#pWh5-j_ ztlnM4le9QCa2Tb{Ltr=dDLT%jT1w0WhG9l9`ffJCAz&C~BwdH(bR$Frc?X?5XPs&# z7TQWo9I0?^AOZivNKN3Yj5Gv1NlCr(jh&711eH2VEYk*tY3Dx?H>J)e+R($PyzFAT zckxYSg;A5(1R`0o9$-*9c|tFrNl+0}FgaH^UfE8u5hsB3>=Eqrg;CFu8^NdmZV6Hev%v&z|Zt@0q1vp?zS?EPY|q3{1(3Xloay zR^O^>I2I3x#jkZ`+%{AfMY2QA^(rC>DlxPorZ;T%6!ciTVVeN1GSU!m zr||q`>m;W@+@V!Na2Lk&Oqm++%XSww0pxb7>Y6!9*_wREWNO1=YYhA)Gu^ZwA0O9BK8&k!EZQ>x60ZJTn%SQk!gR;8t9UK^&;(1$T251J)xe33cPdV;-(Sa;jheA14?d%2 zjKg#Js2P*6v7=_ZkpsG@nb}bKcf82l+=pM}ziO6J_Q?PE`+|PB<6$k`T@QG#U-0mL z?FSWd^_5I`t6mVlprz{x{;C~qjsU-9*H3v-(oI@QOE(61 zj(v_`0{B!Vbrl;ol~g_w`0iCW_-}q>3ZOWPR{*$@b!?EGR@ACO2~FL%BN*Df4NXg*BgA9 z<@w1jqjj_WIFguO``;9aN ze6EpJvAN%9mKX!R$w)&$j3i&x!*6osvFazU)Kcz(fb3Oq-wQXz(Z3>+#y-pTrf_0T zyt?9y-MS*i`sgLiMVp!@8?{E8D(bw@qRtrbXd?{)hn3`hUdMeepZa)U1x_f*-7otu z@k9BCz=jcPhzH8Qw%O{bNwWh zHYb_@;yGfMZIe{6k9ZbvM@{8T zmZjp07p5Y{OH&c2S{&>njMq<6xz%jm1Y(YgkIIhj$}WGC zAhr?9Y$tqShOloZfW$0$D-Ez_nfok!{m?G06Vo)oO=g0y>&JjNiJ0Ifi&eADW5yo4 zRVsTFX~4G4SDOhJ8MKn%g<>^b^txb$|I%5oxz#O56~$B@y3w3*1o%254FlhxB=_(} zUJY7O|6^cXtd|}ZOb)7IN0x_eu^S6%sujdZMHuiW!G(c8S5mL&<{}Jr?$P8F54hT* z#qg#iT8vH)m*Wo3bEdAW4~VglKj_t@^g!*>4&kPCiiac*~P7)Q%l1~Y{H zHUi{MUNiyX8luU?c2mEH#fT9gmUN?ncigJ=>q~d-^@ncT=e#J5ssCM8jG^oK>~R`A+ZR@~6@9kX*guDfbrVNQcEG zCcvBIP2cj;M%NPiiU^7Cszkwf4rv|lxIf(31DWU?$tVYx%ICv+mn`aC47Ik^ZnCY$ zzN)T_@y4o%@y?RRf9X_KGL<*jh8Y6#A;4Cx(usvjoO{xZ);n3)Tm!sFNpdQ6T1kc3 z$*EL&Raz6zOt`q=KFZ?e8X$qA8h{Fumaehxo!#LQP~G3Ty3x3eAxV&&8%TC2mm%QA zHs2-?r|prepL{Za=@A;0OqCU#A@NCmNMorTLXh)Y1Gh<^Fbgz*q$)k)Ng{$O$-3wZ zBpkS-4dJAEr^y@!vSn0Xb_j7*$y717X&W1z`U^EJVFSxS7Z9HiKfZnPO3en?p~445 z72&%lc~&QG=`yVj`5=uR*?q%~?nZ%>UB&4gC6ybLPl%l*l^+D+WJ%?YAdzX+%WJjy zOIq$+oU8Ai99+6d-qC?#K}_;-grbOr$o%VLINW7SNXnh_6a^E6DCk`{}IudU&g@%F8w+W5{>k_B(^nYq^HuM!w z2hO&EhJg!}RC)T-wDR=8mo6zo2Bxg{!p7L*y}-~j>%FWy<`M4&hMpPkr5{ZBjDZOs zXmf1ik$&da|BLs_7vJJb@k`)qj5Gv%#;wK$yh2yVyDGI0n-`1%KWU`43ZcyZQKck_ z0V3E9(=4eWTNr^1;~CTCZJjpaW%Yo_7QX@_TeyG>vz;4BW^|j)Xc&l1WuE~V&*?s# zndC5|f7EQb5{N>+Z#?hnDWM)FqZ1RBB?r#1B_9Uvr=)5FE!WC1fe)QgO{4))NgO<* zPo)jI%r=2d;0ha9E-6%=6Zq1BlYPpwQAS~!wbjP-k9oBjL%xThYs>=6w1Huim8sf~ zeO2W%L~YiziVbQjZ0BfT6mnO!SR=<5FJb=bhi@EYtCDQ(uI}!h9(P~&SpVxe?uS0+ zP|7V3kg`fTshp$yLhLN5Pztfjh!+OV?ve_naP}DS1A()*q(Uj2GmQ9&z}Z()p%l)U zM!Yd_&MK);3g>Ji-WE9LlvF5%b0;G{95{C_sZa{%E=KIt2qMI}B^62`?rOv(fpfQ# z3Z-!FZo~rv=N=^$O5xnoh%XMD^GYg|!ubRv4hPP?N-C7XxwjEd4V?RwR49dWz7fw1 zoC``Sl)|~M5ibjz3ri}L!nt3LxG2dJt1TcWZPhl|@iN&0GIB@xzy4knHP`-Me|Oi| z{~7*XzuI5_O-(Rwu+;Iz3SVQSA>cD^GA`g1dRcXe&1gyO!FRr(xrS6$zKAMc#f7rl$0+eO3J6i3j?R5d?`^Nuq%BPEl-~X?_r>_0K{_esvE-oJO-{|kvg+dM^ z4%6$|3$>JMKk$u48UmI|65ThJTeWgs;7cw))qw|NTx5(*;I$@D4vnY;fyu?*4S=|Y ziE9Aq>GGxg!FSquIPNSai02`fx06$Z(KbcF1ZZh;1 z8+r`LX!3&?xuM6>p|kHoNe68(C`z}ptDi|KU>E_x5EDSO@;4RK7)hSV$L8s(R;4Hy zhG|z>s9NPCS~_0`Goa&(hjFxcoKQ#mV^r#%@)4R#JLFwW1520m&3RP*_HiHf|Ee~B zOH0W+f!|ZooZ^%|dDTW7T$G(u*J;BR^bN>;3KZ?}(3-QBs#fK!sE;gXuEbVAyV--I@jN8DTxD+W&0nfHLBrJk9(zXAa={+7Kk7m z{C}Vk(~aT2EzZ8cXXPX_y%-K-FQ%7yF73sq;+or%{o72%WwYF%F=E+al3oB&d|sQa z_AMR$Ve|MQAa2#JEA6$%QHY@%z~ z?O_7b4xLq^x%~G&$3II;N&kV(KUn$?T&JWeqoVRa;Oo)QOY+(-{V&pCn+zMojiutU zDSaxefiM)AI;Bqq3?m?DGXX>^pVCufq+Cib-oOwDaVdG+b?P)7jb^L4B~RXzNz-4i z&2O<)83JCWq}DVYDw?&Ci?YwvC2qrpau)lp?!sGbH?C(QyQq~&)2Z)n>wLlzU77id!4;^ANp=iGamkLe8-X{!YRmNL;xc70lXEYumS1S5 z%FJd|WceXx2uxKP^1smREnO6;%A<_=UNhI}m4T@2xyY8OR1aFc;CMB7hWrF|RpWqA26J`i#3 zoh6kwj66DLoJ9;LCXD+!SD`cZlHCKuOkKrk>AUvC2`l$IPZ#A`>WtwG?6(>eMs=^Wa&MoHgNoFv zt+q%dA82+O1)i!TC){r}D6iF)S+vN?LfaVHrrc^pkq+HpXoQG^1J6~t?Uy{2H;gW@K@4nZ?7~sfJRRJ>9&;_f&WhV|`d|F=O#JuQO8Et$^m7V54gL(zGxX2#NEQN*P)VkwCqRyJackJ1 zf&&KP)eKAOg!8zrw7OjT$~XgFLZHcfKW=C zvrIh6EoTSFCKu-f$Tk<}1_-6JInTs5x#j!-xy;3#0_1%zE(j1xX>(^2uXW3X0rD9a z7X=8VR9_ta4GUWxqkRgkjOhv)&kc)|JXy=G+psKES#zwHBQ53Iz*B5# zY#I*`Um9(EpK3j|fxDVVQWfGJ75A{ttpl%iH?Nw&m#dWaGnl*81YZ9o*1|(u*XI=bdAeX)D_Up8zIq4OFgO;UtpX8!*kDyD@xg8fMa^7`tx*=Z%smPz2O4L|`r19ff2PNWk}h|TD8JMr)ObXBpRUuwBLJO{ zTDbSH*tUTl?y=nGF?{=p`LZ1LL+%BE_*6biRasn31x^w5cuuJI zAGLbi<^aPY)J+hrg z3)O)0PTO?a*U|Vv%i_~n6go+d7Scl_G&+`Jl2hrJ&G`h7cip6G8j*zqoTlEy87#lU zpSRbdJt`OP_2QmauN&uy%8Xjl3CLi(JzA*7Iii!c&gT<&W^F#CLsN6NA^|~>nRK8MsmXHD&=ypT;@MqH!`LmX?M1Tt| zK&8<#98R!FGFGU5)WVoyXww3H*#o zam$N)5B$GW_xVJ5$ZB+*&qm&1n+|_!J`_)QjY8cfb?I6r14wh-CnNWzMSE24IvMr4 zaWbgHZAZNPR7a-eQ91oD!c{jG29K>}k|C^~sO*3u-H&~;a&JB<)ZU;QC(+=XD7oP^u z?H<-#6G+W+)})2l={fb{{IAsJ@HT2-q8jge!FU_(z^~Odx;z(dFyFKx*F8Y0_BAH| zx$vwsdL94WdPCa6@6%GYaNti=k~|m>ke|8O6CPFad#~KD9#6MmmaaObb2|Qo)olZ5 zR+h)P)`vG(oJ5-Yo;BA5QnTwMnlIFdQ*e(qG|i@<^vIboUZ~dZweClOSF2Qo5%OUd zd&0++e8ww(S>Y`%`EoHNVWi`anqeDAvsD-&-e56|H1`f`t_h@O_b}Eg$1q;54c)9| z)Xe`5(0Suq!*&;Z>t{4qwT!u{aM8b}LvjUkyTWg4S#4vG`(5k}kcV9C3y|Nt*dHMO z|iSGe6jDtwJg9TN$hIEhiMb{yu=C#=nc-L1iuOIY9|7Vk6V=1s|f z`FCb-fb8sIUx4iIVt;@f?&72XX}LHMAjGJzaps@}>}6^x*H*yOtg<|UhIqi*dBBQm zFUE-Qtg~L4KyPpjkcQKeg!#N=509%e7Bj=TD$Yw>r}@N;7~R zCuXBh%+oB4@_`hD36k6Qaht6dSae31Bcc@jCXtznsDTMxJfqeF_E+ysRRkNKPFv7i zEoFBC9%)i*x^7qtw5)a~$Q~~C2FL*}_65jcF7^k=vs|1MAkTMkAVAi*I2a(ux;PXd zr@A;fK+bS+N`So5#i;@EY8QtC~y%YY$gA*p!XR%$MMcJ~LLuN=ejUJmWCPTztn;GIRVxLU{Ar`UU;!QL~ zoMfRTa3T&Aq9|JyQT&jNx()o8N^)&59v~jDb{?>$YXdi%Rid%;EIk#_~_4?dj=S%Ju}@YEtVN*C(r^wUj$v z;J8YCjkEd#gdAFB3CEoHxmL$Ceo8WRsdI}gCxJOF3+76Nc~e<1*84-^8>t_L8#0~r4bDgj}r zF);CwZErUC_}5|MW0-v4UDqiI;1kgV5>nYpdIE%|(@KSTgv%?He5++05svwqhj@e# zzf9+^dRPx3*Q!eZ$oV$YBlQf6ebgg7DJIgMS%3#CSw1=<;tXC6oO|G&a-cr$(t?YB zJ0t#IePFva&Td@XyJGI#WmDv*Fm{?B|2u!zJ!bB?TSW2q2EuVV42C6DdjCR|S7{Yi zn^ful3svgTSeEkbFVw27orWz$paw!N*;iAJpgfEi65EPhaUrz_LchJ2hx#{54`KXBA=A$Jpa_D zq6zfb83hvOYO{gRU)pS79`+sDZ197y$F-WreT2Aw-qJ}f2q472+H4@V+rUQZQLpv` z%?`pmDQ4H6S=0wBS@x8A(B(kdZ0h6Q-e%Ki)Q2{$+HP!X`4@GXLC9g*TI}%6dYIgj z!?KOo;d&~~OsUji!DyMnsq)EyS1)ZI+1|1I<9bb^WxOU)xYeZAewtoSw(VpMaFt5c z-T^tu#i0N>*~Q@id4;vu+NSW0TKY8!%A55_=QRo1C4S8Ij!RYhpq4whcMuZ~Ksyh> z+B^WVcjN((y(15R>>YUk+Vuc%O;R7eUz5}a&oxOt@UD9YgY}7M0tsogO+aWmZ4)q$ z@D6PgbV`KdD$7GWLWrNO^H*JyKnQiUO+eP!Opnw99Q&w8Sg%Ry0k&(BdVKAgq(1KL zZ4>o@&5oNy{Ee;^%g*kp!0utC`pr1RCjAPH*z~E*Kd24qBsTrDGf8dg16-(=8L7K; zDNCQF{UN_;dH7>#gXsAeEgPf2zcZ=z?+R}*X$|mRm8uN_@^cr50_4A491f6QTZ^rR zZb*Y#`o#sxR6Wvpae+3|kJ$z>OSRp!+`$ckn0Nr%c>vbt0gw$M4}feCc>rXC$OF)> z2Y`!<`tbeYqCR*oF7knQ-5})aWtswy+Eg@wK0Bj8;#}<-5c*5I2F%00L%Rlk5cas} z^0_y4qXl8Xxn@vn9b$b&Ypk$Tjtg{|2^nDycUN{sE|0)fHX#YKJG+uJqj1C!OB z7Ow0FY5S00=~KTMhuEaeLTu9Zv3vNj+K^*nlQs*nN!y2f%c?fOg?e#Hht(yl?l8q& zBmOOvzxIFW5uZHf+jwo-VLqUxT#5kiGO4xyb;*iSmMoC6dSM2#TJ1&b4G>BZ`%HYL zTlNPCrC7>yKef2lEe8UGQY;5e{GMA51qh{BPBwAiqiI|sP6-f75vQ7XkXsH12&Gs~ zGx2D*oE{*QVmZUa*SY1)0HGAiStfqcEoTP^rC81}@rQ0XH$W)Ga-NCPb%POcet=Ml zxRZ&8x#fZYp%lxVO+3*p7X}EWSS~X0jc&O(Kq$p>7ZX3^mP-QUTPjK-0`G9Uo&foQ zi{k-uzgI3UtaQEJ?Z2@~$HF<&R!JM^3ulZ4aipfCEHB_cT9$5>Z$v7&(#4?w`G$+b z0rCeIX9mdLHv60B2FNNG7X-+-i;Dx~LoO~2kng&zfdX`rlnPJJrY{xmdQJW;8q6Q|pO7AH3HMaMEjYfU0_m*b}7x&MWFZ0Ng zg!yx&e0=pQn^9R_@%<`pr%jSTD#{-V-+_vpMM)H?IJ83*Im41nQgL{PDssZLgllY` zxkD8>|B{r_ao?c*qV_~USeo)$ zV11X4e?NSC|Cg`LURj%5y0Yv<>#wgU(T3`aMYQ4iIuLDUJ;g@x#|QY>egxUXBz4iHMQoMU3kE$0RZrC820@ocx8A0U)sxs!?Samxh( zLMfIzn|PC3E({P#v0P;0&)sryfKZC%E+!7@wWWwl0;FvhoGsv(*~tq&kYijN50I0* za&cjGzYL8>Vimc6Vc{&WRni9f!Wm;h{6H6kEHB`o<%!(CKn`$mC_w(f#o+)McX4Kb ze89!I0rCwO7X-*}TwEL=yV|5|UK$`rxVS7pUhd*P0dk3p`v=J9U0fa@54w0rfDG7N zZC()|On7zw0$FDhI0ih$o)&6Dsumlr;6Oaiz}t3$>K179d%~UCQ(IVP?A6@?%4ecr&JO}D(=|*3ujo8Nh6`a*!>IVUy@QP z?%4ecr(+UVD(=|*3ukANTPp6@{R<~+7JyXTvHO>OHCI_AQgO%bUpSSskfh>{-M?^V zXR%4e9lL+wM9+ehiaU1ya+8jc^(hs1?EZzz09LP5+_C!?E(KVcf7Sg(*S;pt`c1O92}mb>hk69&HMDq6Thgo23&*_?4x0EHuRatY?{;x=fKW=CQ%d4g6R-B_!vXRI7pDaXrL;M{B+fALX0JXo zKz``rtN@{uHfNW_IVS$xtIrKaY`w^ji1k4z8yn}B#GOo>;g$;mWQmJA2MDG3xv(TI zGI4*ezBoWuxVTGzP)eIiO5(029`4nb2FQ6T%4b=?3(QXL1tD*Dach9Q$17i{@Lybt z%dY&7CFJX+jXy_O{q{D6_$4Fk50E#zUEXzZL!#5S*dlEL-RbN%jngVl-+iD3+>ZNC z-S4O|27HZs68K%}ceDc&#%Na`OtdQoF@B-!uiMF_xoTAJO=Fv+rR-zC7n{@?dtb7m zl&b>Zae7GRr6)irMeHq!eI~xbtM>=U8(f?eAe7SPKuH`l@lvlo6d)gQadLoAN}E$k z;#3nq7Y zRZ7*uLg9OtsZ0i%-Ja#`F^wIie6|ZDGpm=IAeUOK<*Q{7aziZpEK!(T5#`%7TJ5)9 zeUeQT;T6jPi#72PanOS0L1^beDDHg?9rAoz*iE2^FS{<3mEUjwA})q6?ob4a)h~~@ zfxdW8>#=p}t4|(rLwxzjBW{T2zdYiGG%Pjb5jVuM`m}LN;GHdBnuL<*MZfFe>$2OX zXPR;J)prv|u1tI4RxM@cyjtOPCXE2UsFJLV{s6hf#i0QChKus5g_1k9luqtZ_<)x2 zXJO(u4d6djJ-!T>eqQa+<}8RaIeE8o2a`oLTHz+3siPcIGp^wPjjFAcnv z5B&5l1Fv-X-daBJR3l|@{$Hl_>o(XXkcmilD=?pyCh(V9cYC)r)ms`}6Dg)&9?&)c z{k(P{w_)<#2_86|TD#PO;!1lME7^&rQ09_44_>&X@0c|0h7Nvj@WIZ*!D z`2I%vzeb}zw)op=zwUpWd?~9DK2;l!9P8)USM(TTkz+#~!|fld%`|CK76pfqSpgD} zeDf>fiwYr~Ct2-(en)plvWe4ra!WQdxiCg-(sj>W>X|`5qDRT=({1Q|%fpyUlri)l$V${xG3ByxJUZ1AQ!` z*IkxIOeskZyh#sL+W_RhT1kzjD`e8oH<@HhJCw()0 zF`w&^i5ejw^<;eji9xkK>YbO?2j88IWxAw^ze`1md{MJua$}RccK(~cmv79HDBt%( z@}_uoh;;eAACec*t3xEsd`$&uP+nHA4v{(s`5}2Vy*hNLO3(E}^7?vp2#ItWlr*Rg zAROa$2DAyEV z;!uD*&BfsWIn~9P0rGYi=LX1)E-nZVO6h2E_^MjmrlpJpcz0)I$b)9rYUuRuW@*p@ zK29b1(!`bkd79gGZWTEuzUN;|Fxx=fjc3$$!TEOG`DB=T-)0~Os8`7l=Dv2hFNj{_ z=Qk}6nn3)NjTne$k_SM15Gx=Zr%Q%Ce#B`;N)8P5r?AsDZE5W2Mh(t0c4F1Ro8MMyhB-7-F}(`*bI$ z_k%0nly;jJYbiS+aGOc3|5W&(Nu$7rRFe7W50KxPU8|v9PuDX3{(QXShtF0${=#{D zMj-F*szhEg2~`A|v= zL$Z_U@qjjgw2}5qm_l^{4Rl|}?t4S>wa0vI1NT!&c8~r58Fg_eK*n7h4v?!{oEaduyEr#Me&*tW03nFd zyS%rp79P>DhQ@`+`U9su^vL72lol2Q2w|<7g?Nn1w{;eHVtR(fvyU8rN1n?IZcL%M-+W+U29_eA?w5;C$NU zBOIpv7Mo#t2N=Ti%Pq*b<-(m7#*uo!sy(4L>vBg!0pSF`dCIk{@OHRN?8rS z8}*Q^+MWQp#l_wLx!c9Q0C~{G{s8%{i}Jy;k^vo}bTkkk1X;wv0P%>A5^+kN9KeaK zKWjiC+SJG+UEcJobRnv*wWv0M?pzB#H7_s1X8E zPnH6Z7*y-E-g#-gR_EKaI?Dg8)M!Q8d`f3EzI$K&Ku18iL669)0+Lp}@{^0;FM9*& z*FFNuP2K>I6qE+~!MA$@=_f}5${pSSkaU#>hQRlD1L?<00?L1R13*$+8W;xu+#5(g zXcAB!^#*_}18HC;_>bN|`e~Ga!upUP0;lNuk%-GfW%(7SfI@ai29OlX)Hwbyn_RFZ zdqk47d>OA7U+EHT+drp`<9sc}AK*hKjotH_WObjGox2~}PyCqeeoJ(D?QY9#>?nmT zEjyb+8}nn<6xzw&RL92ekkfc7T~A0)5RCf$HpDj2M?JbiM?@)`DzL4Gs!bL0QWtvz zH1jfdNq*V`Wmk&b-g<8dUdJmywfI~;&eI@ zmnvhq&Vn^EuAY9^JkDn+jBVcN>{#w*fkZDV7}9@~1tGgUv*dT9aaSgNEGnO3<# zd%xJcXae7>l2l1&U#)Vj>YuPGE#NI)WrAbqjJ57XeW3BY5dZgb9SB*})3Ag(NxP~N zigy2sgpywF)?V(hux*&5t?#7eK;u_)o+KX*!xyRE(>VTxnz6@P=5DAD2mX2OfYy5& zCp@AJx#uU4kFT%>PXLl=y^V`j(kNv*mnKF>jBJ)%KvjPxc5!@G@~Z`pTNF5iFY_B) zQ#s5NN-s?9Au!~`m2w=n;pZRSbkk2JlW@m0no8b8GZPa z9Y3)d*f+E}g4NU5KywRib~e!5^If8WiRD$<{GUv7?%l~W$E5c(PM+8d>@01LrO?w@ ze{Ysf>uHYM5i1(-@=&ekO=Z7X*l4WIjItdo{^CcYfn%F&7XE6-4X8>V8dwwz3=SFRty2X5}SC&W_VQXdKQmv+rRbOQb_OCQXYde{wYc4YAMot6fS*b zIwaCF6@JmB|5A9utIXsTzjO7LFG1 zbt+AlKMP&m@|>1VzL%(erBzuA{FGNor$w#uRn@=cRii2sU;2*rol%Th<<> zaIH(gjVejU!=0^cRsFSI1^6znGOe@9wW@!{t30gmk1hdcYr0CuGdo+^RrUQWv)2Nj z=2d2ORvA%!omY9Y!gsp_{J2We@!ZZ+3zD9vB zP)RyoP_?otW%XLskM}CT&0b~a&MN1r{sym7U)a;-Zm+7Mmy{2w>7!Pq1)QRrqEwl1 z6*^b-U2M~A0T1*l6Rtv^qWa-hr3oDMDia*bwiy0)YU8?7(&l!fmU3DGQp#th^0ZTr z-=w98y#aE&i{}Q&z20Khef9W`u5U5JHt;TMP)=YFZ?Jd*qq%>z=9)limTzog0P2;%{76zQVyhempv-F?&OqTpVw0I3wWbRE#Mbbl6RAO0_1Bh%HRD^aJ%ZLpy_B2O~ zfKE=~%Nri%js@-YfvWv3<FvaZZ4o z<>K4`d4r4d0^|x8=Lg7#T-+%@ZgX)#fc)6Sode`|E-nm4beEEOUljV3?Be3$06Eab zT>|9)xVR)hUf|-c0kYb~rQrl6<624<1OM6VN#5;%JmO++fUu_I!M-oBT`e8u-44jXE=~%NBU~H^5Z08m=?m-( zw;T$P*SI)2K;G%%lmKB(Nt?dF{@pEy1LQ6jrv=D=yEr`!h~@J} zUtn`wTpS>KySPh$JjKN&0m7ORKYf9%a!X%en^csGIp8^FC$D}$-t6Mm0J+M=a|47W zSzU)ie0>(r@eNy5Kh)EgoTGqunTulYQufk=>c`gB8MOkp@EKku zJ!;b`Tnx3n3RgYbTmrtzTS<@Fv=y$2F7_%wHg54XJ!;b`Trqvnt8i&_hf6^AZ)s)1 zqc$#_e(F_#?Cw%!!lO1Ws~Wa&TUG=VcIm9bwb%2! z3RhBZGHC?J4lmE}wp6X?W9ZA&^!;81$o?-?wsuze7d8EiS1E2l6EDx=-HhA=tvoVa zc|S`_xehe=ymY9iv3C7ff^XGQ?rVW}sU*)o`U7OQHC)fj&wM~ma&b67KJ4Pm0C~j4 zxdC#Jp17o=1pz`S;^Od3?#%2Iw|2e4w_D}2w*<&X-EId1mabF9n6O=9VQU+-u&v3% z*3QEwZ=&a6+f)kMrc&58mBO~E6gGKfoN!UfC4`6Vc@~Z~aDz!}fCNvz7Uhw=-0gtx zHK`5scxS(}M*NBEW{YbRNW+q$z$>heCeZuHKL3=AuWtIELEAb}@j`{vVRY4_32mL; z;-d*L-E_IgNl$WPfAQarmxQ5l>s@I9{ZUI9G_Y|u%W@r%vahkFCqNdcort{wvdk)v z0EhIYrJlw*;IK+ndyx4q_6EpOt2_dvl=gtjylPK?Ji*1@09oPf0V$MJJWX#(GQc8Qk6TE6qfV|Ab-T*n%+XGTcd%*L&YEOW?(Z${XxzyVOQc8Qk_j=Wy z0J+x1-T=AY+XH^pq;UF8cU5eNa|neWXdG=~{WNHv2~FsSWJt>GD!fmyZ{E60ys_cWDoI zT2CWDdKzl{YSxpgpL}9Klzyb%XUCCZ#~;z|=tJ&pX_Qi=daF??{`*qaT#IHX<15^? z*^W~2-*>X+3c1_Pn=9PNU#H9Dmlogbz05&dfel-OEU0+40w17F#j_fi_(eM~*&pq| zM4>wS)xuCZBg#ix+S`4$&M&&Im_?7O!9pA1alogjB)R^;K_S!02g8&gAZ1>;~D_tVzjIKSXu+Ilh_kp z5qddo0r%E!s#&P_BX;#};u){-ud^4T+|#gtdoS|tcizhm2V8o-Ok;MrCE12=D*UdN zyd@03%S?~IONV=pCB=rqXew!3Ytg#AC48FJVje^yKEJjGPXLkw+kZ=#ZWz}r`7rwQ z_;Iwq`^zCbncLVB4Qf_6ceZ*`Xoy4jUv8*Aq_R~xY!_(IzUCpvFFKVMf9b(z;rMcM zZ_;LnfV}uibC+1aH_+V8E|r@*C7aTdY0kYnndX?st}p(wtjKP;KK%!E!JAu0bEHGJ ztJn^gY4`+-ViWjrm7XR^vdOZbLi<;LGIL|M1ClWtV})cEXo#eGMz?zUMTIWiNrTZq z8$C{k|8kp&CXhh?uk=G>g!yld29rca{>=^25J~jEGVG2N>40PlGbtB^Ps`G<#Rzez zcpD4>Cp^K0!V9kMC3&R zGUiy*95V20T~fY`3)krL)gL!1ya3%9KF)Ho+*uXw>|@vzs&87|`giFX=m9O|$_jYO z-*b7i_EY~S!5?cW4^e^BpOp^vHRM?&WR8krH&@{@mn=R7fIr_cf7(FzXAS<`V*acF zeoG~Jd$2!1{@`}GKV2W+MfdP$u?3?E#0mLe4u}(SGX|tTu>$U7p=bgf)pTIq0cu1*Z)J$e}I{2FNBChXUkG7bgeECtaKpAfIt@ zYJmLK#o++?ql?o5bs(kub_4MBR`sl&0QrJd zUGqhS|6x+$+@R@EO*@l5W;5IdGWqhmA3)E85&XW;dKv@XppyJWhAjc&PLAbH7S2t{ zN!;6H?lpmjTgPo6KBc=@n8%{aE=VVgF78cK#_g!p{Vwfc(QW-BTHTjjG>Xx$X5iL+ zQhv{STq-32fLl#!KDay`rId34aMuHEf%F8(zAp9#$Oaet0_0Q|`vc@k7bgYCwJr_> z$d6qd43LLi914)V4>CU|2gpG#P6?1xT$~ypn_L_YkZWC>79gK=ae9E<@8XOAdBDY) z0rIGdG7&&ZS&6`DnvwDuUr&InaB)094!7K0^9+U0H|Z}dPm<#fO%gfZ14$BDo`6>%wthno)eY`I@)i zUV)|I6P7Q*xEt<^FVeMxQ*ypLdx*O(0H4$bjxo z6G(qz1^j|}(*$~Svd^f~{7jrJLJ?=T-gngKobkuZ05eC?4$OQ-JG{iDQU>{@E3ICj zW7=1qQ&exFOu68BOHNOht5XixWy$WR>t*b--nL}-J+^J@UAb4F&Rezap55whY)t8> zhWR_S+Tun>KWciK{D@}i1grO}^=_TkolbcbOv#$ZGNvwhEo<%8S!pJ}qopJS@O87( zA=z(lUXtK1v=j-rucl!2ng!%pmY3VT1Cx6&?e_83R~zWvH|hRc)_oiJ9h24q?^CH- zYmi~{XzhUt-N|gv^LXLlzUE*Ph*uIaATG#-0g&Fr3g{hYCmwy$P;G+W)YuS+nDX_G zqDD^)H7*x06B6yfxDoBZxKvtJF&Np^R289H2UA+yp{0xwI6g%3wB9}=K}tDS0&mqr zau)0fkjXQXy@>LaCMAcv*cTw@xY!>cA9rz5fc(tGfdJV{11ud42FR$3@*|r{ZqQPm ze|=WrO)h!1)KEHaYH)sJL23hMTaeZQJ#Hg(ev$RG7WgTZs?!_9om`tcS-g5+{vI{g znm`|3x2?ZHZCsAIgU{>K!KiIhjDJz9JGjGnrwio5|4HEET1w^tpZ(`_NapI5lTs#8 zO6CDSt%s`2gZ$FP-T>Kez|yfVKu&P6KS18);-mn%-Nk_b8PtGRnFl$<#i4MhlBe6$ zi~^r$Qfr&Suenr9!HKj=NMiRci(MP|O_SCFJ)9%CPwm{NwfOW=^Jy*clPXnd3%SAV zfIggJ+A<~va=Cfk1mdb(ssnLV_GX|*vJJ$Aba@POhq6;eN)B8hS}~vLn5L_>po68s zE_vVmt~DNs`7JYf`R`JqKd7awftUO-N#k0|<80s+D#;f?`UB((E)E6Ak6auMkV$_^ zElc&80kXG?a|7fE7Z(J`DK0J!kPBQ~8XzBbaan-e?BYHF@{o)B2gqd21@Uuvfb8qy zAp!CX7gq!brBr`vI8rT6(NY2oJjW`_SI;2-XbGoTCr<+Q1x~Vj$n@V%KsWhjXN^`o& z=k%pES8X8ESp9$y#OE|y`OGcr@NQd&O&}R0Cm!HB>$nN@K1x3n)ID!_e${0^hZLp9$@)u|F4dJxOg$?1f zDTNK;w5f#+;k04f5Ej|;J#AWmurbK9<8j+14)*B+vPZ-}ojCd7g?miTb`Orsuq}kC zj&pLXHc5&_4NNM;Yjg7Jf1#}Q?w9GlzC}y9Kmxu=CHYy6Uhuo!4ERwu8vuXK&49PL z*%a_SZU%hB&88dHJzae3RX9&e@ohGEnVSKh0NfX{a` z;5*%HcktD22K=m>?FGKc&472h*}mWh+zj{|H+uqjz|yn@oTrk+?I7^pZU!W)#q3b< zN;7K$NqR9m?07wVrkRZZJ%2Z!Tg=<;yV>@Su-8eWGk={fMdoWMr)A(qlUn1yO;)ec zQZ9vn|E!Xn4BIA3E)ECC11?SrkcV8H9w0w=aYld)=sB*s41`Q}aaMo~yEr>QX1F*f zK=yEPZh$<_#d!g;zl-w&Y?1b&J2(zxi~jKnl3H~5CSLFJ&G@}QMZBTSY`Qv7>Ea~od>LV zfktQ!w4I>|^iY=`ad@aT$mLMSlXo8LW*%#~$jW0a7g>3%%A;8a*+ig z=GDaugv6IyUc$akD_0jHiivJ@A)*?Qju#^JP)EB$a&A{*@4e9Su?1ucl~YRt{82Xp zvMY*NKlpYx1G3SH*%0^95xPv=c*=a8Mud=%>*CfWF70D$_Q^%c(Y5uJ5-Vf z=vxBh0k;GG!lY4P@1wX;`uxh*R7CRR1n=F|_V<37TA=J{yb$7_b$t(6irbj>FRRi}l`_Lgh!m4{1S9!hTsF64{_?UJB>FWDB+=sQ43p3!K zEE1c0!82`uBfwo4Qe*P~c)6PapX_E+z|VCv;3_wp4nD!nfG>5k+2Cz%27IlX%?Fb? zGSb`hFmoi5=ZK>Co!q`SCo6SrpQEL$Z6Ia!>xvM{>em$^uV#a2Z0-w?E4;<5`zXj& z1)U#drfuNsO&SBf(|VD&jUe7j_FN-&lK0T02WqAij>et;;?Mq3nZ9Bcf-hHRy5B^P zs>Qil#=m?hFQo@K!;%|${mU;X^dU#at51|mXTqNT#;re3+t^g?LFNv)KqZ-`EdlZ* zx9c3LVi_RF9RW zL_fAyi+(NTuh?klQRe9pSu;SI7vrw8L4|$?#9O+_TfUI}1KR{mY;-moi zCl?0-CFFC*oVf=G) zo8%pmQc%-hFU^BmT>UX$Nz}Jk{F^|gN?!8-(s0@oU_N)Hiwd7RR!22=bj-}feS&#f zV9tyHpP*9pvn< zR2PQ=Bi^EUU;ul)VSb%>tsnyW!a=veyz+F_T z?oc2Hxm`V~758+Eh|p^6=2#5dKo9E}VWpHWzW@)i(VpECAgf&L4Umm4_65kBT5Fj4bvj+=dZRcSfBdi{-;?z&&iH zUI=t=vJFdS$`*xSz42|RKg?2GQOpS`FL?zd;j6PMgoLjym?0#*i1N%=gHFPW*l*eY z1)Gu0lLCZQAeQ5{B<@yAafnC}i)ts(co2lHyMs+i2au5LqRsDR-HZUArjqG;zuU$y>1;3Xr{AoE#vOVmYNGPBrmBuRa_g&v$WJfKW=C z(@WwE6UV&z%m6vv#aRJDDQ(U!iE~Um%d5+eEGv0~i}EAOxj4Th?quRSy!wIw`H+h{ z2MDG3xv(TIGVv2$eQ|*NyNYt%4E(Oy$tMqx@42`&Kz`(v?^F1wOC7rlFs>T^SE;N9 zPyIG|PAOO5K+?6k0*8=q)fG5|gb}gNvWFQLvEQbjDHCy$%^xuralj^kpoutW5%eIm z^B`oWAtJ%BPqY=^1O^M?D3FfRbu-LkUHa&u-~Kfk{qa|96S|agiSW=CT?@feFB71EFWj$>)mqS0HGAi{Y-q9Tkanq zlw$dK6R&d1CjFXWVjmfKZC%fhK<0Ee{G1O0hiH#BaOhApt@umQOVC2X1+2 zfKZC%lT3WrEms5xrC2`M#NWH+VF5xZmQOLUPtP+VJ~a#}nPq3XQQ%^eT1ypD$~}2c zfILADiYULGspKFR&kc~Lt5|*v7$1gg=bxM*Wy{XD>vnx-mRr>$bpv>bZ3Ob;_7L9$ z7l)XS zDYh6qn>S6hZ1!}NH-90XPn)J$K6yfHnqEkVO*1SZ_OiKZ1DVF^xBekMr(Lh6n6svx zVw*tHPc9;Xq@P^s0KJdwF^1e3`z31~rALx-dC|!7CSH(`IIA>Eq(|T;OB}hlg1p7W z-T?WSi}IrjO1|l0e}FvdqWtKBl6kgl<;7XZAubLE$SN0y0%VhmlLO?fE=~!MkGVKC zKyG$%I6xk7QC=TY@{o(;0rE=~C2&AC7haE@9#AMb;;F{;mM;=ze*gbpBE~)^RXtZ1 zi4WhcSA_qWO1Vh9H@kAGZC5qkrKQp7$JzwVa(0YWL3lT5tZ zEeGTeMkj|T#d6TZN8EBKKq$p>vWfloq-I2%5+IZ!PBn3nTMh>ZrC7>a*J`o9TTTxU zO0k?_;^A&NGe9WCa+Zm!+;Vn+P>SUo6JP9>a|47@Ea#bcj$6(T5K6J!$;3Ci<$?gA z6w94WywWWf1_-5CE;8}cZn-!>D8+IY6K`_MB>_Symb;pGk6SJc5K6J!&BR~0o(gprF^;r{H*Pb^63ub$1e5;$TV9cXZHoj z6J6{NkaaFj3Xt<$lvmD_T;rm=Dz4<4E)E6A?_Hc6AiLZ2ojoN$p5x-w0C}m4!vS)U zi_-$+<1S7Q5KoD-XV~oDsg`od4ZP2!RzqjfXSDpDg-jYVHp@=1O(2;jmxw_6lIsqj z_ffh;w1;gONKfDT`z3SmVWs*IFGt7`PSnyP(9g4Si3sr%r96Lw_?b?gzd`&|CC}d= zey)+{ZxBCO$R#4gcYFD66~wn|`EC_tXPZs=ZWY8gO!;mV#CJUTZWYA0EctE~mixx)N~q zUV>Nt)NJAo8e_-XH+QA;{HwK;i{3eU9ZV_f9{4ytBsYgW0rGSgdjn*Ri+us|QWyIJ zY8@h`K+w{PIL>+$&Z&F1Ru80TZENTUef^*-0BChAOu&$Ql!r+Mf$8#q|Yiv`m9o<&niW_ zMMNoi6%0;X{pB$fkM!x)+~kq&diq$YvHXxtN)t${a>57FaQeIk<`Y_a&q-GW9WhgJ zKdPr&)EMn8=FkX`;mWmDPnJzx_P3ti#&!B;TiBg*^in^N6=yQvoLJuJ3upoe=b_jwH8 zeqz3DY#g-gOz|28AE(Gzsv~>!XMW4EagOD_XIFYLw@Hw_%;P4|N1bii@)%K9IQ1D` zT#@zhMXf$SIl0zHR;}>5+vOE5ue<*(|Edp=)9+j^e^xb?#v8Si^V0{Olca03to(xf zi;KMh@;Mj#0_5v1%5y0tx4SqgK<;#LAVBVOaWFuB;i6ozD*3I8lLO?>E=~!MDbGzK zlMzh~keyr{4v-}-P79DdU7Q{u%UzriAWwF2W`L}8aaMpF;o|H7X}LHjKwjwL+yFVw z#d!g8ii`6DWRr_K1;|zx7X--pF76y4Z*p;AfV{)SMFA3ATpS?pcX5{h`LK&i0_1uZ zcMT9qnYg9lD{66@mXfl-yG?2}^e^QNYFT{-1)1*R*05N~le8><+!S}XwB{Q5nrY(` zy~_C!IMw=+D_w{?uxV?6%yY|g17xX-;{oEX7SFkHcaqOAbV+ZsrQHPLuAD7^9=axQ zFAK;Tpm$un>Y+<^lel})0aeR8T3`R)yr-oZYCL>OTI8p^IF*tfn>Hp$DVr~Fiyo>r zImoMB>ABE)ECC`!*?a;xws%e-ss}a0dlE}3j^f+E-ng?kGQxvKtAoFJbYL3B^Q?j z$Zam}8X%O_Cif$?Xq;|Y3>;LcdSD8f>EhO~yOO`_sGRnM&i{7oX!)9H=MJ=SV5;>M zcQhsLfb3|Ho!#=>0NKmM@c?mGx3i<+=Cf>RH-We-_ieyOHH30C58Pk77Av54T-?#< zlHDZkUUWd!@{T5G^d`!s=ZpWx6lpVb^ z&9n`?z@$;&CsnF$fg#>YF z##WAh`fkKux>xAs8JR$lF~U3Xp4D91f7ryErpIZg+8Rfc)6S1p)G?i;IJiq2z6~ zFZU^#?c%Zk+0Dg$0%W<1`v=I=TwER?N4a=NfE?@MiU2v)#is@cWq)Jijg4@*ntV{p z_>f$l0vx9CAlX@cZ4B~Ex64y?G*4Ce0#Kf+n@g#>xsa?g zT0YRscWU`SGvBG@1I>J=mJc-ZomxK7%+p^!(9Cyg`9O0wjV+tAoVKPGc53-RGvBG@ z$0FIO*K0FUeR_Z#>*Ba=->2AQHi6{G)W$`RZoRla{)ps^Y-jH{I5XSeCp9*1J!sEt zcOR_e!itdtXC1Vs93bn+{y6Voa;$t6!ZLWwWwnAf>dE#MTFP@5;Hy-UPb&MsuXQuv z+uUpre3_d8uX3}g;E%W&@CG-V0sf+!0l(p9bHLwrGvE*1Y$xyoZU+2?n=JzW#?62Y z%@_&DuHXU7q84z5o9zLf=VrhqZniggnVSJ0?`Hdf4|X%)Q{C(U@ZoL-Jkre$1~=Ud zxYo^{1ZI&)h5%VFvPHgEYmmnx_2@=V`W7DP#T`5DeDBgLhugKZKf7_@vcASEQ#-p~ z+9tHfTKNHGjFLCA)Pt_6{77)U|Pe(I%15~9$4`g<^? z_Vq~JQ|0k{dfPh%$77s+V-@{gUxahwf8?KBy8<6fib!L?Kbq76o>ZO8<=gS`ciJFt zS5a2M4SMbJB`qZtfZtK6y7PkQH|nK5`6@8vk8U{}Ao^!JqUFp0**!hsh~nG;d7_I8 z0_2%4E)I}YE-np_<6K-8AUrLTj`j(VZEm@LfV|1Ykq zneM#qQIiL>^gAz5&|irdw{__>Heva|Yab;#S?E>G3bJXPh+D^FFq^U70I?!59;l{>FI zRprhrPgS||%2QSDyz*3)JFh%d<<2WlRk`!ZQ&sM~@>G>OuRK-d&MQwCyz|OamAj}sRk`!ZQ) z%h!e6lI80{Zprd>A-81tx{zD4d|k*bS-vjhmMmWva!Z!43%MoB*M;1YqEqGTP&YeOPOCFSt55`zqMO3M9PkXGqdHSw`BFTWVdAX zrDV5cWF5;Q&O4YK`+spucB7uzzhajME#Nm*innCoJKYSZUjvkDwT**d{jnC=_*+2z zh1+O075ry!4LGc`B4#tdvu&nYK>h1&v9&qiJ>3j=khiuIc!iq*pYCRhz(=?laKz1a z1+R89;4yBt2lz#927H;D?G4`KX27j(wjcOaZU%h4n;igtvzr0m>1GFmuW&Qq)o%7A zFpEUy6v&d0C3K(GAdf{lS$9j)x2LhXwvp?FLAnB9$Kz^2e$G*E6;Ph6mkM%ZOS*|b zd5#{5ud&6S@ML%9%p-RO+7`+=>YN)@kVR(1q#d(hlvu$#0b3SU+~?UZFk`=_k!&v7Z#kazAM>@mR5+`XGfjb#^yv zDYsOg&2qi?;_9JVW24n#)Pja0Ga!N$Y^;m^1?Xgh}gw zpD}3^_<5Bc%a9gWGi@Maki8MO*{oIpaV>V%4lulv@23DiXLZ}aPDi`UW)CgCTC2w^ z4e(XgrGk(oR}prva%z)zo&Im>|sCk78Px`ILOS~ zKpg35tOw#niagAHvPFXz$q?o~t>3OQdT>wksR_i9p2j*LUc|1N0p>n6fq0P&VeZqq z9r5Y8=2HuZBR!3yfp`(SY88BHm3(T2+^3@-n@?l8Psfye8Y}oTR`O}A;L|Z>pN>*_ zgGFcrhzoLk!w?@dtNfBjKTLdvno!Df5+K8zFAqz%HWtqwTDolc{JHYq{r2f;%%2lD zPRH{b=N9eoh9u}_r=D0LZ)R2)e<%m!g@P@O#Q}~V^OL>$>Yw-LGgVyE5>XCanVgR;9Qr zj0V_&+K-&K)R96#M>kokZQ!p=S`DP>*iqX$nrR_eK+a*H`ez$U}xXW zLf`B1zMGGw?-qU2PTFH(OKp%X;O;6VLzoY}%U9y^VULx%9t(8sEsoU(r0cNpWsTQe zT25*7t^CH6$~vGuY%v`nmh{kRzF0@ac;phh-fQIF($>7y)+DV-tA!5&>n&aP;iMd* z*E*8tz_U$S4Scmpqrg=*sMWyLDy7u`TVsZ!z{^cq4ZLzf-MY7(9M2ClpV~m&O{)Zk z$8xp-;#)F=9c^y4ft_v@FD|Py+x;5MADc_7fDfzG*Er+Y0BKoAtLQtp)H&FQt5lP} zi}D6->Ow8~x-R^u*82#M4&?(Q@BI+#YNXy(qwzLv1i#{ya@{IA#E?g=v2|2=k4yEM ziC?XKd`8RO#u@#8Qv8ySBpcb`fj6iW&33rKp?}XIwknL=CnpSw9Rm>KD zqp_17yvmH4oo#>_>F;!Ol7cv~pGB##QTH_Rnrrf!#ZR+S-_*a?dLCmy-!PxYfZtPT zsPU`WkN?e6e$xnlP^Hh@90Sf($&DFqUgmBz3E6kdjV6#z~rhpM6|64q7P@|R-t~!j*C!Ubes95)J?=Dl8xnrC>aryPzob%iJ^%J=QvInmy(1(i z!7c1&RsZQ>*U(U7kv7=UGJf0+zQFo#1K(u*ZyFDfOWh9tzNfCqHVOQVO4aY=Lfp^7 z-kJM$Ms~U0Qy9S+!^FC?yji`x&%AvxaI$&(lFk|l|3K}hnbC&aC@O^QeCyyPH2h7g z`x0hoPn)!?&)x?0_ON;{E%ix{J^`na6CT)8^O}8f8%13vQ8I&+ETw=tLF zKbrIav}p3HHjozZKU9*th*^hJw;Xgf$3oKr?xd0%r!KSqRyT;bBTal_xN_@o=9TKf zE#_PkNC?DiBW~?%ZZ&~~CAL;~MLdzE#_rDPrQ=M)@|UNCv~z}akv%x%MlJ7YQ1d$9;1@nwww%pqBhK_7Tz`=HUM9yQmhWfFRJJMxRQHz zT*0$bi=N48Irr?if@h}|Ju95mR)_J zfr;U%*PPNgW9ZlYX}hb(w)0p$$X(hR-cDO~tkjl!_Bk6<3y1D^X_^LTwylgVkJdXK z^d_4$`7>*>38d-X#^#ye1=dXy$h?bL@mbG>ns{%qy=MdPGL`=FIz3h`Uuunv0?#pN z6>!|7QQ$U}(pClgCpRol!gXr!6*C+Ge%+*1z}rkJW+`1PeSbpF)>85x_+9<%aZMD)H$V=2IJZtNFAFh!?S|c7V;Xu2uo@A{oNmr|c}+ z=^H+cnNLmNZRXQzAYR0-nM^Jz5@FOnh5eab!@-@Z>ReEO#Ov<}$mle}u62J_9Q zbwIp`KD7eOeJVYdF}LzKjp5U`&8PK1yog=Ns|ISYz*ix5nbI*y3;ukdY@tn8)Fm-08!$J3Q+0 zEP9=qU0~j2`$kXWEt>sbu~m@0pi(l*R#wR(w7}T~1wj)N`XkKy#x)Ky#x)Ky#x)Kl&>P18vg=*qUT>|ZQHXop zs2ul#RUz(dM9;7ts}T3xs1Wzus1Wzus1Wzus1WzusIV{OM%hWCr;!^KVqP~ImKTm* z(O7&&WARpbl$XzU-CpJ>i+*RV>)xB#9a_rO9Pr)mONV4h0IyIfo=ipq>>f7+{%C?B zY@zL?*<_b|`lk8R23}%atpegj^r>w=-RXuvyhw&H_bJP*l1~qqPfg&Z*41iYr%z4u z>3ePn#Ea-tGr-)ZES0zKQwyKoVO^~QcKXyZpYC=;AYMeDS_Pl7m9u@H#_;Jf>uNo) z)2A`>>HBU7?DT1@;8V6xPA z1MG~$8jHgZ-4NIrhc$&b6n2nh+RF2-wQTYAG;*VCHI$69^eh==`BE~z0eJTFPdNoyTlEF zS4=RR=v$rP>$l9;HgJ)(yc&pi=|Tdw&JBThmkeQ-x*@RB*LD{DiQeMtPt4aQa2IQN z9T4xL3r&mb(QXLDyJQG^hZ_PreQiEwUt9RPtF^oy*y(G_d_C3;fp`~vZ3Wn6ZV2r3 zwe^^N9mCh%tmUJDoxYBlugAF|5bvU|W9I9--4NL6>sZ0peBQGyLM~1;De%0fk!=xw zDVx?%cMtRN7+~k9*Vw2}a6@3{sMpx2FLy&==cw0Yqn1;*R%uz)!e*Tt6*lYKsIXb* zMup8fH!59Gsl!ckJew{bof~D-!tB7FW7BvH@YN<|pSa=@?o6}3+rV9{_9`HK z#k^<-n0J#cTe^|2QtNnWUB1f;Tw)!q2GVrwsA(NBE_rGw*whzMIzfI$&qtV}-ug<$Y)G^=>cb8|eFq+P5UuJ!eDcoew+V zbXplhJo4F|w>=MzD|qlg*#mj`py0s+XXhRq=RMX@9{)9X@Dz*x(Lnl(dABC(UGDJm zzO&bEd(?%=+C0(i{F)XT{YhlcKLvFTLV(&$p->1x^8Ni(`|(dFe%;^y-Ltwh4e*9Nce zh0u}=yk~Te>wD{7MxoHaja?eJF>9dO{(2r&ALd!;M}YgPByL^T13AvcOZy5wWexT> z&iHC?piQcGf5q_p)aYSa$`S)U#S&%}@M$W^uT*~Z+`>dkTUmQ;+VjfsBB?%>if5IZ zrOM?cmiOE$RW2{FlH(hw9@H&aWFH)dFdD82c5FPy(I(a9R^@r6s&w-q?c3MbJXu1h zv|4DzDruRqm2dHkN<1v9y4{wy~@RcDhr}vfP~wb$7bu165Bk zSB?YHZ}%;IYoy5^E7s^~ys}WEIw^GRZb>&P&RdwUjIc9%&I?1#GG$S^7XZOY`>HwC9z( zWocfyS*qMEOR0W|jim*=!lc!}PIt;#+Gx-sUdX41z{mY_3Y_ePmySbdb9;MX-sW+% zNp)#6e~Tk_M?X*0&L?h$s5Ijj9M_ev1saV*wV@wqX$xX&w+oK5)Uvaav>-0+)=3H! z|2_5{30i8`9%~U!;>FD19pzIRTycDkv`Ez zx*o{bqF=25dzBjkI|tBhSHtbM+XQU@;(oOQ;V^y`-<^o@puvl*!Q+4(4PHNgJ&^2`Z$m8wGiV8Ry}fkzL3g2LJu3q@Igg>jLL<=}Y11Z}AaE3}LF0ch=I10Snq;=0iG~Sfb z0+10@-0LM+3L1l(H7~kQt5w z=e#*}DG!W+$EcL*!nT;B%`;65ge0?*Z16jy*GdupzGaN?0X zKyAkT5%YZ&5Qk&S?SP~AU!3|#D(t!D>nb1)CPNtR7QX0L_C5Ex$)w_Y?4cQ8Oq*QG z0hyp=2z#v!xe2^YB{`*DI1YJj$AmQljObLR5T-751Y`EZBOqZ&hUJl$)jS@peB`bA z$YsIi!)`I`uUaJ50~uy?uw{cL38Xn78ITNNf6^=wLm<&ehA;vmmt(+D%cb=|vM1Gr z5k%>v9IJ_H9=S0xi9JCk^ZaoLVg0|%y$PJ1MV0se+`dUCO%ehMh=7P}qKJmo9Z?i_ zz4!L*_IA>p*hxT9N7<8Ll8y=vic2EkhH|5#f;xz}jNmfpxTAtQ>L@sf5P)N`Mz=Mp~eIRBT=ht%(!=hWHiR6X@9_i1Oemnp9vNj@o7%>{E1q&xJ6dYNUq z2P6~THUznl54iw|*2@h>7O10DH@4*VDVaLo){W%WLfFI+D+}B%#bpaG`R<{&FM8urk?|fZiNuPXPt7<}6X(rZ?35-c5-aJ>e65^@aaK9<78gaa; z700V;gnnJ(_bFACjpCH5Mqy?A-k$g!tb8M}u{u?_I-_uFjlu(T(2lagYXNayc5>7S zH6|>grftld2lVaDs*u)w77+XsGd2x8Sr<_mv#oQdE5Rb;nJg#=>eAtv4^)CW^GwG7 zPF*NG^Vdocif0aZEX0Tgfupo#=W(jE#(giYX4pP8E>cw^d^i~8w0R@b#7&5jdyEiE zZaBnhqx2V9ch!_WR9ktg0=U*#6Q5J~4Q(Y!SIwiy#@iX=Z=Oqyw=>4yJeL}8r$*tV#yc6~+cU;H8ROeC#ygmb?Voj| z@HF#zxT4rybKJ9BCokkVjeF{0ypdBH5cM)7AE;UToCd@XHbbrB6rLDaxbecs+Mw{f z$alE|gDEu@{+m3%J=>D^dCiW3_<)WUQ4yqLR`F#sIUE z=B=vaQ>Lu-X@y^itXv$ozC3Vm*H&&n0Ox7XP&>mq|I|9Sf#uHm2SP3FbdGhN0B%%P zm>N0DMM3vdta}%T8p$89tg+^qzG+-;8rwkB$lq!OmNn)Bj6Tko#tslQa)AgeYplCB zOw^~E#vTwgGJ?Re#{4U>=$kctQ^0cP;jhFpKsz=Dbl|4Y%K8U9-&m8t|5BFUkU%_Q zbLbjI9%{96MIn%@06EnF-=*gSkph0gSd+l78fyahR11ERQ0`ev;19MayTBJ4YX(RH zQ?Wq}#o zgSx+RMImr*KoIJ}CE_opx$V8J__whLhf^;Ew zG9h;e`7%q_Dj=bUzEDIj_jrIrFU|moUZf0`>ZjAE(Dt?ZSp}rDf?X)8ON;<1tsn>$ z6TWINop~xva*rfW+6-R_Ea$VA$!Cvzo?-c12_%Eg-Ckxk_tJc>O!L_zpTrr|<%1jK zrlC#|>XS57zhpy{gPqC*J4LYN$fh!pO%d70bcyz6Ac)ZgGS!D7O!+l0upIHQ^A>SF zP{+Xi7>8IWZpXuI^gAAPNsT#PwXz&w|w_HPZq9NLjKc zZuBAWyEM7pxg|IxEF!qS&MarOI*AW$9AQ4%w2^DKI8(1&{=a zRFVAGFb)I$KF!IJ;_MOmTUZMZIP|E4&nyo74`n|~Bd;7LF@<_wIZQ@Q$sfl1+cdCB z@7tCA+x%e*ApyjM^YSg|z106$uWRw$b|1xB93qF(@j<#Vi0NFL*wYsliXt`KP7T}X zI2vxJhTEy(%th~r`jQ&%rG{;}j)r@w;a+Mu`SDOJpO}k7b%kNYF8?kC-V5z4Ha)I| zh39fB637_&-2=-tYjIg^bp(9})*Mz%QCtnu%T>elOh);sI_jAlq%mTmI=6hnn$oy9 zAIaq*uoTzTbJa7B$Po_4#iOgWY@^XK;%vT2ZHf*cw&Z~>YDtW+SX~HLSgf-rSmZ4r z{)klB`XK(Xdiob_W!V9;M9QZHHixC<*n>CACyQ7e)@%u?qzjNmvf8COlG(*AXrr3q zV&8qV`W9FA#K(*e_rOMF0jt`p940?Cizm4_MblI19imMCP2*l$^+T35Y%?~(!XCL7 zR;oR4QXB2mMmx39PHkiswK^NU)J8A0(MxS4>sPSAM&;kO1X?yMSL&&TIujP>f;d+) z_okhKsyg{2Qbkpt<5d+pUj9EcvR=DCONGX()KkZ+E@h6F*I44dG~gq&mHQdMuNZ3v zc%!o1zIdV!^`|HZ+(+-uh&teBjWq-OuCXS7w;OAwLcu}l)nJaefFj9%{iO`OEvHvUfPAzA1@FbAtu5szNzD|gp+Nn%1cJcas7%?Y5Stf;Ai5w5MS!x> z0*NIELJ^J#0*NdLmV&544T=Ggi{^zme!CuXJn(OAcssy{X#SlT9%0_`suukYS)NCs zl5pK+ECcvq8`E*%KP$_>cL{;L%)@Bgh>IyIk@Z1p4EPocs0DntvBrVd8mkSwPFda` z2+}yrAIZm&+Lux(@7&>i)l9BrKq!~8IJ`ea@q25gVscjAs4T{1=zdjxzpBb!Z%SK0 zB9!|5z}&a=cr@OkQW;6vcmtz9tEy!xQq?jMTHl1t97$L^^h$nzeMBoO5^&a7D}iS# z%gv67KGdsqGbG6Y{Yxrf#RP%J7;6G}&GSqO_#8(2Xw;DLYdK{dF3RK$Tc{9PbrAZH&SHQ=mwGZitJRz#PISgv2N5Ou)cD=Vmj zddBh)kO%^ADV0vQ4@JF*Adq^IOD-VwB2qw#CD?_cUPKT`u>?V=H(BXS0>4O};B6iX0< zdZ(4nIFMoqf>6|pXarI$K@f_15kVlu5(J^B7ZC(fEI|;8dJ#cjxpdn7f%Qh`s_i2( z2UAwM>U7f5naPz-CsR5zY3Xz*oy9BE!D0r;na4%l=|fQl@{kxv8OVkaNEwI}kQxZ; zpeO?o1X2S*5Q@X2rQRQ_H~hauCn_fRHo9SHH^!jPpOy|l*GN>n-0eSx5SqBtDZGA|B6 zVMTE`tY}^wf|85ka9G#8I0VHQ#o{6|} z#yzUK!QRv$H6}NEfaP)v-^Htzn+Q{EpV8$-SU~pZqw-M%`QsveXm;rfgfF}H{W9D3 zRczZi>zXVKiqmB!I0uKly>)>>9pg{6l*RR2AqVZ%LKfj%83$p?n7us~q1oM=i!dm4 z(GH}>W1w&-bP)zp;ZYb4dwmfGve7p$VC-vmFjfJXB}4+v9Ek?u9H-j@(+-1eLF@vD zinlH>%2Oa@c(8~EsjumB`VCuFXMyYVX-lIxnbH5O-DNuYU-YvB46I1)rWe{ISXgBA zjdl&LcO?eBD2kt}{U@2xS&X*K=Uzjs3VCkHHo}Kfr)H@7vW;ky>>lAB|XR^xtKnLA3t1FCWQdmUqnGox2 zSXzt}De-a;9nF*6@&%r+EHB4O!)oD~WOBkX*#a`UUXJsca7CAED$rv&y*-V9qM)_Bh(A-VR=nxxCE*t)<{ zlCH2MeIjmuugE3oiuIXDugFDkMKY8%S8+MFm529lQ}5>&t&8Sev>)VlWiN8b zeN^YRpKiWrp7<7Q2d&7kjMi&K;#oR!!?Ysv9+lm%*!DTGEvd`-fYfJIdjA^fZI{pa zOd!W@bKl~kJvO?@cJaLZ`jXUnvTrpCA!g-%A}pIyJ3c7QbY-O*7Np7OYFMATeN=)) zV3=0Qo)vGHEHa#5>OElQ|KOZZ@x!zt!?HPi@Q`9nsrP|}hOOq%VMB;jY51_QT(MUj zE{zn6+fYZUt43H{n6}IG!fIZz?fT7jsq|L#M1fa=t>Q+4fBUGjnp??*ElET)p_TQ~PvICs;i0+)2M ztOahhngh4$ew{tZN7b0Hs+NRRH6yH@w_#7*2uL1=r8e5Bjh)V0qgau~u_CpxBDJCS zFJmQu9l-DcSsa{eDtEy30 zJFBjfs_Ufcb~0*tsGh3prs|TPi_`_%OV#yKb-E75kQsMIgPARv-agl7)?F1>O5t+$ z#bS`<+(jV-ZnRV$D~GEVB_o()ry(pL9>@;&^0}%5B3HF8tUA-F;U0#uA}{QvHhQUz z+H~dvY+;9umz)uRn3e!Pw>dT5!Z@dW=?Wy{zU$6MJ%u-zmPatD;VBGbMWm`W25+5y zLW||m`U8cL;+XykiqY?Q+{xgI)A6`#MCCdj+a|8a9gkZ{+(&Xewl>`8a=d%$>9UNc z%QBuW%Xqph;<8gDp#fzFs9Q9 zQo(;+6%>c=P>Y`%xUxe4p1dZo{53hm>y;ULLtUm^=?!F}_}7LBtVv&If_gzXPMq zs4`e$bIW?hs+7bn>oZB*vObfI>Xs)pPP9L&@7zc8J=H(!sr6VfQ0880P?*a`z z%qJ%#K;GuwtvZ^HR~<~ptB$4PRfp2?sbs!y&aVoU~>jSGpjLpW;F=UEO`$ch{7>>ogto6TEJ2yJ93fiNS<4Z)g9|Hk?dHP ziDbvROe8zj5lN{McdT2kD-A1(H^f3xs<9nfsf1e;^Wp|&r2Z9eYVS`vp6=HHV9p66 z#gTpR)9sWo13ceYtAN)UYX~(nP8$dUEe};~kGqH3I1$=l|V~)~;ciMt74g9UK zT0l;~GFm{E9Xauxm)jMdm)jMdm)jMdm)jMdm)jMdm)jMdXS>2z=-hKj0DnSx_b$#z zlfc2xs?c7=wwq;YCduOX(N?q_AkQ5B$$c35;(5ORw!1`$N0N0T$)7TXnB7hw_&2}Cwi`CJLO6U{A`^MZtDYnmGO@1gV{-q6i4^L zwC?r~Gv`$O1)Z}2-ekNZ``{nhFYRW2s_;J}>j3>R{PEg4@3!cQa;dh?!qtk|064ko z>E7|u)AkIfZO+k>`R&OJlwSmJmS$h*%z|&RIeBCsyq8X+k>aR6nCf%MJ6Vr&l5y@; z3(?u2?l_mYzF; zl$mEjY_*y@vJZ}RcvK%u9s17ILiEhE5~nhic)L~NXPj(uX2i6 zHb!;VibXfx;9YF{It|=IS+7Y>uB38QjgSPI7M6e6OYu%*CQ+T z$)kf*ch5$<1!PT;8(w#<8-1AyTona@l*Nc_8W>uJE_7yix|%5`2_{n_dDHsQ>W1D) z=KechH9gSsHcsBYZ+RQf^-Os$e{SF{w~L#}QN5_4*yK9w-unHT?`SKF*h};}CtmN& z0J(D~9n(u7`xV&7><7v-Kpq@OS>K%OXG9wd9E)4&*Ht7ySV@p!InYI6;cPfgD-U*o z2k4rHUuWkTOIsh6x~ z!#y)}{};vIEA0Q5V)TJpq!;SY$ub9gtk%6RIYud#d9OMo(lv7p&v5WWOQh0T?QyP) zwb~2*#eZcx770O&5pK#PNS(}0Je*`|$-DsmeP$VcSKV_b1f0RL<5lzHc+~_s-atA$ z5iI$CimevLFwPs&(TmkeCZ?*B2A>LR;S3zz-^`S)4xChlmxHypNLRvzj-lF;e&} zn=oBw^;hF502rssa?b}d%D*Ib0lqnQ8F1{K%Kt#@0%W>~ zl>x`%pek~IXEFR2ua*U|j?l_t0Q|BJxtv$7Uk?%2n|8X6Ot6kT%`(^ml0o^V`o_#U z(mGAI0cU6{&vSvClDs3-`b#Vq6F_nyOV!5AIx;~5Xd7~GpdkbS6WeIkWcF79%l4--_E%y5o7Q&<_-$jY z0>;Xi8uTjucK#gg^%`x70(m!+d>)zRmxSkyZ85oMt@^KKcM zt{)HR$J)wd1VHD9a^lq7U_yXPO}JmCBM6 z|HtPb-tsJy18#VBV0pO!tN-H8Uh0;-IsiQA87OQWqY#BPDbzcMT)Med{>Q{C%tRab z-pB&(tx50~JrHC_c44ID&ZpyD8~A%=`K}PSE?t3pTSiv`&ox#XxXF@ydZQ0n0aqd>>TYIsbvz17*CxwN2T1H;VnaR8DyaiJnZrh_2V zt1O*8Aejz=P@jo{z;fPq=7UFZ9LPBZF8d51xtBMNf#qSCvSB#KhG85?;^l3@CxXem zJhumuc6t2(NZLgTNX|tHNGe4NNFJR@F!>QNAS<&d1Cl-0GiC-f;y`IZ^|a@BBv-0> zUr}U^*A;_&xmzHoYIaDCUiLH*;%;@yi!@-1O!!(`F%{d9G9o|z9#&oxx-2yr-RPm z?@^rPpKzQLUWC#o9LMUoK3&_q)LK2tD2p>M(h<5=+k8ike%ThVNg&f`v{)~<$oA_) zGvx70Df4wCDS*7G!!_A)OeTS}`HmcAA(P;MSEMD~xP@}ALIGUCvO>2b$DP596)<;#Gu!jlqV0XfCa7oA5Q+^0lY zd_FOn;gK(UhkE*j)bym}_wB0eT zrrW(|LcUpP9gmc4*D`DtV}I*IkQ^sSX2^gSrI z>{n~SE2~z6XEN^i?p$FcS<1a2{^Pr6Lg0Kk5GI8egkY$gAecqV3l4G;?ZLDw=Emylh zg7a6!sp)oVI&;bT0nNd4?Cg{A&n5eOSdHokLaqkVp8C3#AM4tG{zV=8 zvJL+f@LS5-Rn86mA=buXfA>J{m&#vgOXm#mUdEaN;^OYb!oR(=*zb(+pl<)OMA0ua zd;eucwF3B8W!%` zBqy4RA{E*RP5CP`V)+fFV0KqE6wcH3zH({j2UUjmoG`qbba)Y2P!-*rh(16?+SsE=!sK0xwvSQE7?fpj5 zQ%dbc50Fx;c86arL3gs{hQJASL!k96g>09yL$_Lm?j371Ri6s!+rDMdR7js6l!XF* zw;KJFIXiQc!ovKR0WLAtBoJ?Rmru=}aEP2H=8F9{7XI{*THBO_m>GqtkmUNv12faT zq@H^Y(r!I5@ZY4ZT)+VDFjlMa#2~dpTN#l5R(Qgb!XaTjTjBX984GxUvizT$hxlQX z1Kt|t=K2r^J=ydD4^@`vo9jbx3o=_Sq9POa8Vjfm{HO)g27X*wvhQm2A(oo=ZQvf} zy}acGakP2g1|DbLiyTDsKD*k46zuH34C`lY3_HLtE6d#r?)0JJV0VD)G&eyI>eZI9 z4)CS{L8$+Vg1}=nk3l2Ut1RIi;AaK|p?(krf%|L5gGQ)F+R$`>+Xe)o-V+6Z9~uyZ z`g9Zo{>OkI)UTo-@XrH+P=Aerz$IE1AsDEAt$sSdQQhSQL8w?jb@zLAqI%N8>E#Ni zXNAMkAa|63k1y3juMc&R)k6zLhWUv*8@JRG|as|)bpbtkbw;vq2e$nCj&peZk2QYmDm(Jb(L`$=l|lzNsx0pv1f?VDHt2EI9H$Qa!Ke<%vhUSFP++3&XWE4|$f_36 zjt8Ez3hDwmFZ!nm5R|5zm_MjpC_<->)re)q@fK<+v4S|>Zpz!Lt>b|&veN4S-=ZuZ zEyR1G9Pq=&>H@E|uJYIg;^$EgNIgsLe7%w=AF$l4^~G5WsX<*-5}Tg9)Pz>WIocvMXpy6_oF;)cS2_+l z!BL7&iUddJEGDwPmv~(O)&rwdga?828R$FeFNlXio1yb%37BE)+B#=ct?@DQE zDD<-<%nJJ#DHgU5Xz57A*C?c_N_Dc>)}hYs3aJ#CnU7Z1#whi2h1(*lx-dyc)}@=H z)Q=Q0x*}Cwsf5Ks71Q1Yl4X$sl4S`9NR~wkNR~y4Bvsn*49q|KDqSXoXJYPHaj`BP zTpaO44Eh~13Lhp>QuRcV>-Tplr^!eS6PpYUu9 zn)8b&te#AS#d(D@2)&`1X@WDSRzC%kaAG9kgOcyJunuG&q!J@$?el>0r~O}X06RXkM^7WKOU;IF7eX6HB6fX9&{k1W7D8@`4a##|c(b z;{}ssqzpHE>_2v4EP76Hb*^~DTp2KHoFJGP=rn@KrWdU46r5o7oaF^MMX`o?rX|!sINy`D=j!P~9&)}&A=wiamss1Q z)Kv<}tw@<_19di9sf|`@qm|moJhZ8^(N1l&QycBnM&@4GCpFlwTl^VEisG4ic-q9; zY0r%MT+gYrXXf!-2)?2Ab~C%JeH1djrQ558ZQ@$HDy05vZgU=?${rW>KR|mP9hKRr zmq6OHo%YOTB<(qs_DnLu!y&G^-x1y81l6$ZW9x}}3Hf}xlx#71SiCYBskhNiZM0Jx z?bJp#18wzcP4w4azBCAy52GgGHwC7IRoJxBpSvSK8*rLzt zZm{Qe6Tpjf;ga7O0Y74_3E+>7H4QvmJ(qPJc%`wXfj1ay0yw4jV#Ffwxyo{PAt(A! zXPMvx@M2?41K(w=3E;K%OCSAAOOlX+jNE1!=>qpNm&XZg(rk?5T(pr~5ESwwVYd#~ z|A+M*X1xtuVws-YO(EkVn@-^V=3^U3#zhK9#^tRV;1ev8NnqPpZQyf^HA%eWR&)VB z7o~tdGFBV7&IV%=xWQO$;H!-_34DjK+Q69fyWdpD?CWo~N&1bJ^bYXH#%ck{v@6L@ zABuvI^$19^gCG?77C|8S4uVjmTm*rnJP1NvV5w~ZnF2u&is2EBK!zs>LfsrS0vVwo z2u1ouBao2@f-%>MH024u#9%lme0dZDB->7T&vO5Dn;AVIYf%t{Vq`=kkYNdeP>hTS z0vVPd2*t>VAdq1Rf>5usl=grOOAv%&WJDv7VF`jz-;5f83`-D%daX^D9;Fa=y?##aG})ES?$r5a1}l2K`hJq(Y4{Ntf;6U1@lX2@tUUx4TP$4Ehf68OD3 z0FX-YKUw^~9;Xgm-zBCi`YwEs=pJ&Fzf z(aPq5U!`!AK^M0#(;@%7w)u`6r7+}oV}I5T_tp{0cVy%l_Pi9MNIP7Lu@>){OAL9w zBS$F+@t(zjHs6t>l!bJx4zoDHh|}hEag?E!j&39e{`2=~=7qaide4UGOe=-U%#Nct zQ=Pb(nK4#u`+$5UcC-8%gM4rn9Ft#Z$lugu*kBZ+w1u*>9UwK{eD9hk`HKlW4)~e(#|h7yWElGOD%URfh;QA4u@tLk=h3` z0;-fOv$~)Gn$<=$kbRaGVUcy(5{pGc?WBXUG945jCL=&AI)QNnykxcd)f5B53=joC z&IKx29WQQc8{e-9)e&-cEg1{4>3F1)6Su!FCuq?E2JT*moN&6MBwas>j2w6a)D20H2NXM#0uiewz^kifK;(8N zRuQX4>eUe;t(%nh)#=2L%JVX^6Hgtwcc7mvk=dS;Y0u1M-)U;`bvBVR7yYSF;zLoS zLOW$H+3|*WSZSBpws8Ceg^Zyj=ObF6j6>%6Vo|(G`@PpxWkO7aG9jiyHQsYlxHX#m zg+eBr+`nPg5QVVfpn}}srs~F1b>peJObB^(lc~DNR9$8~57YrTLECHysZhqTRA{Hn zB?I6BY^Z*g9VrW@PuzkeKID5&rad!`byeFL+Gg{R3MD=iMJlvY=8`;w`Z*vp#mU;r z?MC1w%5s;Y6Md*_qoATpbAa+r)K-=_;0KlEw08SY*O*`n_z`1ufzh@uMk->>0g6u5 zR_>+&vE=Nw&2H4Fv(Hp1I6zz8I+0gWfMt!Hj7F{as>Y&tn6gOp-RAr%?I3~}jgDs? z1B$r2{`3D~>@iBqPypX!tQPQn%JMJeLqzi}%ri)G%L>RKi2-1AvSz$+jzKDo7e?>V zc%hHZGFo^XeaVhX+OwDT%)YIg_MA$4PHA3C4a%ag6jn*746j$>TiQxB0PiqX3-}9V zh1m;rh?a$n8}K{I3W88~MnT|r7X_6;P}OIf>y>+pwo(#69C1pzeW<2c>jH5k2txfJ z3IfY+b^BR=gn7Llc$g_@1JUg)wfj&+EhPyoTWZ%@a)z+>?`l=*5J1xy*F` z$%QHKoKn3_^`SN@R|J7&x29?n;Ix0${UiS|Z}L-!A!3I7eI|Ue%_wOUF(3uu#2B*mme=lnnz=(QgI(Z1D9gXL4)Mw;2mD%D4ubTHC+d2p zAv%^PnO470F(MKckcj?AretcmgJ}{g^AnRKPFR^Rl$EONp^`}@(*}s@|H1hcOF1TV z3Ky7ZGDU!87yh>=U0oV4)JlGXtr0EY#mchpc*{?<&z2jImnr|w9MUb-w>6kL9kwo;hD$12Od<1HTsaE?7i`JLDWI1#&q&t*#& z=h$B$PBdacuN=O*j5#Nt95As->xjlSon^&I(CKfuZdlNAB|lG9J^lmUx{6S zOnI>qzT>Tq)eLcX03rV}uPMjUNi{A|Z5F5pN5eoe;=juc!6`x3XW*-?Ya58q^2^VS zeTcYbCHsC?6!^=ukssuKJ&;)N&WgD0XJLX6F8;vkSzG{0P2wZBOmAb9UMpJMD}ew#7+GQ#+lU zoleG1Cu1jbC*_fvfN@JiCb_9lCNotb$zLX}s?^X^PRIuXvejIi0KP?8p?09Ije@`f zmQYU9z(bT3`a(S}3Ibm{APDu>D3}aeiIFN24GRJ3+9dd;nsJFk}+~ zEL-ZCCBhIvAeM&B`P9x-&dyZE&Q!)uW^R<1lM0wU2-Zh{{Xe(0% z_(o-gd0`#OKqU^a&Rt-+bIpAh?Q}ou+y<6A*W60cPOGeQ2UzZ$zu~c`cEVS=GzDI) zhg{5gx9NO@S#AT%o%3$f8DHg`4lH-hyB!k$RJA*8_9uX-x=(S2`##y}_Sv!1^aECB zXrE27FYwjM+RdG6#_p0oFz&7?+(*qgf`hU&luIDs!?k-9O7=aCqADc&<24WSZ)v0o zx2wW`F;~05FDk2Uj6SNzzYx2o`ct7yRH;zSIu`Wbqy~$nftI-he5tXffiG89m|jrt zkAlE!jWq#m?uUiUMs+aQ)Tu5`VIU+D3L7#jfG^o6=$uz<{@vz2)EWE2b#n!3t8twy z)TPFCvQUH(^bYzxND;+<+nBb2n=CyuK$7VKYxkiDP+m3y5}?#H5T8V9(1k$?hsdSd zovR}+Gly0Ialtv%$vCtsb*Pg%v}(|Wl)|Z(mSvW{<+e%WdY(qQMBcQL%G&QS`yG48L5)7_F+D7| zO8nu44++QNlbuDS?v|W4Y3G51)q!%(kh<$j9pqg(Sv-$Dq!06RB~Ljhp2GgJ9$qY- zxWmu&alqYo_mB|h3Z45fzjI#>o)ZtkWH<+U!u*rY>wySiGR{kiZ96uMlH6pT4=Aoy z!GPjwJq+|L4|qL(kYrvA<+gT zFC)ci3&G?_)cs`x1W6EeKtdOFz_`xj&M8a;T1ms?0fcL>g`;kYA;N z{O`FKos9LkJauw8PEvewIgOK7S{|1JsV%9qdE}Oax+``~APH?0%Ym_^l1pZnSuSb9 zkmsE5rp|Y9o*5)H1|%LonTUw#B4q$9Mf7)`IUz(`#y_`4S2O8&)x7x=3)v~PJS214 z%g^N=nU?5?PN>qvYB9%j4VT0;6p~0u;05RYR+sSwRuWUd$1AH@Y?$jq5S^T9$vv~u z1@a#4L*O!Qz&B_Km2>dU5)b^5I9GvxQkH)dXoT%XlQ~TmNmXg0;52nFg$yhe%)Cs! zqqM%oTwE)=!05pW2J69$P|*P%Z>;6`NpfZUNF=^VZh>!%IRjE=a!UY6hNWXZ2wY>3 z-B4AnmWPk2?|6BQcgNjL>*YRHejVUG%Ce_N@^^FHr?L-L{^79;@S(9wczUFNYWLyF zKR$K=QrGtMNV=RUR`%759%7ko0UxL=`NOf{OU?3#&V3AgnerbMy8s^>yV!$37t2Y? zZ^bUa@z}*41fDKku2uf^)};;ng0gm(p9=VoNlPrUi@JE;f&Fjjp_^kb;E$EHYq7!p z*syyRc)RlNj9q|#h+XWD4ZEblXNvAxoHKAdTMglXoPVjGMT-?m78%y3MK*M8AVcRL zqCrr)vTI1!q6uaIj*0;wKFe=uft0sMRXq>qHT=b>+*;Ujq}*DlT858#6vMA-hu%$> zxQE$NHvzoOSku5el;y6WCi+lY9u%}?U+xTtF!OBF*#+)iT2bt&$-y_bygyfYYqeb@f2zrS|Ic4A!aP+E z%3|sdE<7L{hfic<*4e^pXi1e0Rl{>`5Z^KrcbC}CjXtbn^ia48R1aZ3QV)hp^Y(st z2>-(ULmJ!<%v3L|Cq0lu=WqztEq2Iy!8+wIdXcX_tULA4BE8i0QNUcH)3)RYtiA1! zsf0xxmU_iu9fn?`BgY8I%w|3?GQxU}W{;G}3;~^BBtPJMP#$a{x8}}M`EWfvHoIGJ%gGSk$SqqHyNu- zGHAtBAW4yv74WZ`I?+Yg3vC7O682JKbqISOVU=kKzKiqBAQ^EW z@%YI^L`;|eUuI4S5ts4Lt;p3(I$kwzj+dE>T-N%zSiZ!4ds?DrruFzGWu2~Twj>5f zBK;-q8l6(>Y-;s@A5xb8W0nv^C$~MwJ+smUav!ZM0x!)}re!$?_t$ypc;F-BTm_z^ zEPsg$5$i6Q)1;GBl_m;KQ}7etCdx~ z#Jx!QZ;f4mZ;xH<64zaNy;u2H#V$bVx_pW2u2)~Lh5Qy1DCkhEB|Y;3-Bgo?Ov?6OWbX@`s>x>bhIC9quvIds4VGKy~=&29_q$k zz~#!4i0mrYcsF&L4wSkPD zzsiN6dS&B~E=N5k0gj3RAU?}gE|3ZrsjBDUDi?n-Dp#%h94%M5Rm<=(k7D>$?SnMZ zpRs|M04_N^h{|ey*LsNE9vYb8Y8UE2<$6(wmmF6Xg}PI@UKHX&{YhZZI_P1b@beSq zXBS9k(YSrXu)d$SzHMNs@9pbzeH{vg-m)1kPp_HReAF5>POSPu*=6aYb z9vpm>Is(o&Rtrd~T{e4tC~_@*fw&X|gX+P5)6l2zh0c=pn}){oWlj6{E&VNE)0|%p ze4nu6Za$pf_^Vaoggv$q`h}17t73D1Nivy`;iRb3^)f)E9YT7(A>JCU|Xz3!y z^OPo+43j&zflsgyR{@`_tY$IS=tJPFeEkVn^84})5cuzGfKQIKdie&blH5rwmv4Z0 zrOr{;`+CLS)mAJ6e`HfxJcJ-gA_pv0%H_!fmG6p_{;TfkIYjPWt~IovID3za=N-A9 zCGhi>z;WPLjMV~?9{IFJN3(IEw!$JOdp#_e6&COaV@+MLEF8T~Tamit$iVuDw!#7~ zIVK#E{BGH>;MhQ%uC2%cUtsB-1~M8V#UPMTdD|0s*5gYCE>Ys2wUw^lR(R4AN^%g_ zC{ylI0vRmn8al*(MD%wdmxiysvBJIUZH^DyyQpD0U`S6&qpO!^*esgl39qnI>0+u-XheLdhWj5YNuh5KkmWse1?Hfq-H8xSFfN}2j$TVs7U6aIy4>JjS zFCB0!x}pIeW+OiXJjRyqO^rUp@+gP(ciK45RBgN3zflj*(>+|HSaXEJ)sa>0S*4HA zAzN*u*a9+T<`vs+T|fGI75HQn1X2Mb#ioLxW#~d@hG>%1MIBlt|vRVUz)4G@NAa zze`lpYRlU=d3&GbE%WJ)L0uQ=>1EE&Dbq)5Sy5)PL?3-r=ylZ5p_N(oeubQ7gass4 z>B#EFxk99X#3@qDas02J#5#Q+sNT}bWfAb$X&gG;@somRCO1~(0F|iv0|sF*gI?$?E)!c-!(cP zQ28~~G@R*bIDh9!6%t%E>K1QOL+Fl2%mnCo)%YCUl>fcv%DI-g*S*`h#{fP^2hdpp zGlH^Z!^uTDeopLA#s6hv+TKUU=ujK03E&Hr)hy1Q>q8K;yjKr=smeJE;8!ZIe%6w( zAC`JkC3h)LmKES*pAfPsH-6^&5F}gV!qMUXlH=!Sj%9HL##z&4a{o;iGAT146Up6( z)$Eh`(sEA5OUwCY3uqb`=S#Pm3h78z$VlxST)f3KHwX+p1LSzvAZ3m>JX`srpVYYj z)s~MA@bk)Y&%1fy#=Saoqw>ESy8yo*yV!k5chm4T<=+vz0RJ;~vHOtzlK`6HM_H=d zz{e`fJ_&GE_ZdflHMo z?@onJ0;ps6RsKP-3-Hj`Wx%mz%70Ys0%W#`mGDUbb*wtT4H)5iO8%v|Cp71>YH!_e zkrHvOX{YPT1nbI!Em18XiSl0xfS^_-JJkGNtm_1jP-IEkm{|oTh=4Y{-9Z?5EVp34 zeXQIN!fkBB#{uRFe6*I^EiVt$`P$052)xBut#Xfu>3fX{c7fL#s{=%xyDOOeS)80v z(0HYFZv%g5thK~4zjn`=xIFf)$%3GBw}D{DVyEBoKok9Z=^) zL15W@wgA)x%>PoeAlU;RZd#{-7+Kw4Wg_5gqlNGT2wSoG&wo;M6C%!HmlDFl6 zpHY^qw>vgLd`p?3Ord@qdjlW(dK4z>VK@-o`KGzk1%BBSjsvk3DikW3$s`&>Ia6&+ zeZ@>o0#P2S5sJv<842)j*0&9e4rK-vhZqQakm>~f#*(oThy%`@P9F*%Bg^PRYI_RXzqhzo0n4_hGPYNxwv%^(u#M%zHAMMp z#X|5h3%ddz)Ik!_wFSVnh1>a?`CE*#EHrTR?p9a#j6~rXFvyzAJ&)Sm;XB{X#Iit-nj1 z`=%*a1uQG*xwkyC3YKXqo)H%p;1Sz`%dSu-GM!gwm$lluAMd3>o}ouyY6dc!jaTcz zi-xLthaP?3Fjd#;!Osp=b%P%Lwy9c`x_+x3yu(z@Wdi(_9{r=K%A8i_Zw=~q({`lT zm{GN-9^GHt?2Fci>%n79)uxQ9N9xhzO;z%IsVJVN2fLR+QEkO+bx6kf@_ zi9s&{mHN`b7kWxOS7hUPmiq7}^JOJgzZ_XPtJR)9W!1j5d93!9(5iiFqOJDyp;h~4 z<84S7vl`S{7Tm-}g%?LwF5WWlYIi45{<}e2SIr9dm=_MoJt^Q3#+m@$OCRyevs~bw z#%ci%H`X-pC}oA20d>#fz7K(-!bPmd|k@9!u7Nhnbt>Kq8Q9X&?^ezZKPJl;2!&l>0BV zj_?Q{TI!a&y9e%>t24k^Wyv4;YV;v)j&i`Cl;t3P9_9X9;bM)`nPogCOS~lSc{vb@U>aS&U6fGYp!u)$>*i{EN#F@VlAn29P2$;ao&`X4pr3yW_@psUZ}cI)Zk^je67Ot) zV}FTQnXTy8}@p0|_i^9Cqu+*+4UW8^tVenJr{1fyW!`dBE2jYb9{2vPPv~f4}=N zedsGq^m)Lmjg{F*h8#RWV}6#!-U7bLdQSqeC5r(t+DK|7{JKZ(4yx`KYwJp^tIAhs zDusIL+kRz_ZG7 z5V$J((u`zpL*X4gU69qTj#rJ*EnD-|g}t=hrP%hAKP)`r_q!jle;?j~=K1QX3P&>- zn3q#z)w-~9J>Q_|e51CFVm0u4mg#LLq+LIvN3XYzv#F5dd`<;^VuEXcxGVP^PN@3p zczK06?sJqW>jv;tV|9VI=~+T@0sN`5!cqcthY3yqe>)%uwa9{+1}-ty1n^$U8n#}g zQE{V7ZuSESL{=^!E=#_i0sf7--v#1u*pxxxv+E4r-TdzY%l_Zp>KNnTJT1-we`1bJ z0`b{7*6u^$w)6$!a}b2WYuSGS@ml%<%K;3#wH}>!h!o2$OyI2+z&H?>onM_y0G(U_ zoqig?cp5+_7eMajymR*-+&}W)OG8u0dJe=#`E6EeH+gAXV)Xl`->ITMY3mj+@TV;i z9pGn`)hy0vWWu9{RhfTFL$_%kP~JC6hQK$Np&sx?Gqk?ZhqyV)r6DHwZMDV={=UV8 z_IB@DZc+RR)7VDi-y& zjiDdUC{^SLmgE7Wy62_po|jX{azM{mI8!H7Rg{labvc?j ziLT6ys+m1iFB(NMA%vB)$+{VBPE_5NeM+t;JblMkmhcJS{x-zPVn#35>IIkdYy)G@ zsj{SES7lmhj`J$mMF)7DvSeK!=|lXVCCSM!El1xQ`9c1n_>wY5`+DG6itF zs)|A@lrzu})LWD*V-0+}u`=qTl3Nx2K8gc7=JPnPt1P#}ndn2kCJF*yHy{XgT@;KS zRMD-<_=~o(=>X0?451L>X z7;Wc6Y*hQYEhL@4WcsFoUsG1I*f__^tt^Ba0*+PUS=u_SV9qG=WC3`Zipehu=lT$= zZXyTNN4Q1qLS0noD#?P36HXeuQ7y@h1K<`jE;k||uqZPZi1F;BMyCTC1X>OnC31fa zh`yR&yjNUvzeSf^DL>#_l@)3Y>R+QEa7J%u20^bj^UoKxlt88QG!K@3fVd z@Ed&yS&#gGvRDAQ-{)V}zgUlt*xYIZ7Z__f@Ug~P13b-G%YobpZ5HP?`VcXs<-w!D zf1U5@f1@#iS8u^PnSJ0(l_y)Ox&Gx!a6?gw0(f0n?gl0PQ(KV(5}W+qk(i!gG4+7N zCLMva@*m>dkh6zdE4M4}z1m9NfLAHY?};IWCkB4G z^5pacWRut|&dKj(_SHUdx8DNBQCq2wmKs9+mGWwL45dCLc=b~P@n70XIRpP}ta0Fi zrv~Y;214zvT&a8DLB^T@9z4(&>Sz-j2Oe*%3E<-f`a-?d1jm7w3*ZaZyykZ zdanuY#M}(2Ab~eqwz|N-7;6$p%EC;Ay04j?1d^X12t__*!ww`FK@jS7Q6rFK1VJeB zAsT@sBM3sp)MO`WsiZt4Eu-d08%Wenf4dJwnaFt!NYp_Pioit>NYp_P>WR@bkf?(o z6oHFIAkhZFYH-78LjSo9e+T&A#+n8azq8cIWTTVIMyH=9SZ zIf!2>Q{;dj)CuP8hAz2(3Fh?{Ocyw6!Hfg(UzA?I8RD51%s8-Q{QAu~vndZp&M-&X zKvF5A1N_`$f(E(Z0`9ABgoO$UCq)qW1xwZp@MdGJ1n%=hEX)AU(Ub-YP#4%rwh~DA zb>$Scm;NOV!oJADo(0~hEJ^lVn;?FsOePOBS=iOTD09T`{5xEalMm=?RtUa&96l|2 zp|@!TR{QaJAVRGkuMRN#KyBS&+hlv$K`M0DE1E!9PnDe3Oi&VT+X=o&OV_6kqBsDp zNAMBYd4wL36#{ssvPO!d`rxag zg1a_(CyevJpxVc=P>J1*DZfaExb9)*gzA9vZ9O9AC*Z#;%d3Srd|A-oJOiJvJPA#; z!r87zWVZzTp|ZSIh@To$oP~I&&fcgN4rT0hP`fAC0@DRjo?Z@urPNizpS91j<6~6d z>rMzf*`q9)mmZ#;j3g4iua}UfscJ2k$@!y7Dscinm z0}kcp?VyBFQ3G?A)yr80Gl!jb;Dc>GOJv6@ahkT0Dd3#3TEJ_p>uH<&5KMo$jU(5f z2Lun9qEeOH!&(4`iR#56m^UJRQxJ#4?D66dRJe$5mG@`mQ+05td5MFHr=p`UoEKWxGaE5Rmf#cjcst^92 zo=KvHKPZRUB`Xw=i57+7FyFj)Z_&xe#1job&f|U%AefB4Gen%3NA;>4RV*`+JZO%tDFh&0+MPq?3?IDVJP8b{1X(1bYh~4+OK<#{&_kvYh8K|2&^DSRg?4^1mos0C+^nZp+67XR zM;*K&^|ToIsfyArkT1?;MVq6TrCkurr$LR5Awr9264cmYL}-JrbE&V3mm)$Ne9ee9 zniLD|{Nk)!s+yw+&@Kpqxu6iCMKlu>BDC_`Q-;yn#Y;I#J0fdJ^}j}wBBz}%pC`{0 zU2_xx+66%{7YZV@h-N}Tgf@(ie2u5->Efk`(1!8Jh&Gx`Q`-6RC(p7$AwVmi#dU(Y zpb()&G!qmev>~Xob3q|O8-mJ+mY26F-G#89DerCAW%!Lg1ltTJ$o7Ksz86f-_j3J` zo-~D79T(`gsZW@c2N+dL!m8R4R@I8I&{=K2kl3)V?h=jM7))(Ur#6y@SmpdWyV!bw zZtmn8x4;CU;GM?98MikS&==0i)k5QomQEekbp7jcAhamuoh;vxNXfd9D11%k)>cAi zqz* z&3G(ZPMw^zPG{|q$hI>hJ|w`L_>cfu9%vWI{%=Tth|y*PDXr1_w01=~g z;qF`)2RZv=XJ{c!vQ(poTV_{DVnO@DH18py_^Sx#T6#!0by0FmB`d^ zZ(Cxxmm2P+hI^^u%!#L=##6(Sso}}g@MLOuGBsSg{VIyo@XRGi#51Yk%yXle)bLCx zw-t!tN7)#UU#9S#_GD{3H9Ve1Jf0ff$u~A|f}5*y(+5cH$%$^q=Ihk6;(!o^yE&wg z8>C(iVn!clh#ZhRqh1bTzCA*i0DeS+_j1+nJu^+fM4Eui%`0lnhoIgcqpjQ<0Y32o zUZALMG~hq-z;L`#oD6Io1Zyqutb<{l4BUJOtXUxW%KV^8Kh+$%6l5DGn3m^LH__LB(mEcg*WuI4CpM7v1->_P3|G@6LfI&t|Db3PxVV~Eja1LPp> z645D_N~1Me7cWJS)_1sTQ(cGVC^MPXc|Bwl5u?p`JvzogTBozNkj54xM(f0D%XINl z#Au!PkWpmn(=IB`88(WD(PjhWAng*-x$T15VHsPDAg%8(Y#b4!^&N(dBg-$X3vLv&Nh6jb?jp7vG z1N7HjvhM+Y>mf+Z0^k2oSgV0-_OhSN9tq<9-_+mL_F#5YX94r6ZED@={v-rzj!L8;O{@cvoS>O{bnX7?KOXgbO2J`o1VDvZH zlr;*3wpzcnr3efX%6V2QtLbr-^~|KBDCqG{>p4pgUO&q2`F^bOv_m&7#Yp3U!B<)* zUb`R^BfJwudpCO=%AVGV*RHC?$OF_FS|>i_EQ40sq2gnU5uMpZM!Q7Bhpepg7c$9cGd?d|#6eoW zMZBVR^Rj4H1ZjPT?X?{mO%_htp?k{aC}Ol3uSdr?Nb8+=bFC9&ixH&t9k$kXSiBTL zTHm35Q`a12y`>$x&22Ohqs@lNLE534+p)!n(K_)V1%()`53zpx(r9wNqaC`dY>pyE zn+=hJw0>(lY$Oq+^&N(dB!aZQ!?2O$G)X&jquXdAMw<)?Z2tt3U*4eTQKch#;-+P+x)b7qa=Ml{Z^$v#DU= zA`a4et@RbMXjcSjeTVuA8C%Srp4NA$&$qnGJm4j7?(%-ST>Aj8J2FUCclhvkIVK!$ z6we1f^*C6wz?VM))@tDQ9|dbI@SXNR;NVip*KSe*uuxjq_v2P7SdS%P@m(ZQqYNWlNB1+f}fSnaF@PFd}o419*w z&MCkc#B3Tw<{FZIYfM$9=Hd`N#vbadrN_&xXJ(*_f*#AQ=W2Sq!Fp!0TNLy-+j`E@ zqZDOGZRy{U52-w@y9BAdVN{HKTg7RIUNp%&qAE^1^m?c{%926r#D`pc{!X>i4i#@S z(Ms#YYxe@9V~EkpuO>^0^Kfi22Wg$o+Vm}6iWsdEuf0TVG+BLUGcJsdagf&Ols8-R z7m;I&5u^1Nk@dTm#Y+*S^&RTZP0dl38`_~cX*3a|&7RmfNb7Xg?k>g_BS!0eu0K64 zUWy>?-CSBXnk+}O?n-OO{uwb^f2DPM?bdj73_)6_f5@mJM(g$8T&sWaQUqyzhns3U zG@6{dX`Ms0v!^+V7;Sb`IY{et*52S5TZ|a3_xVe;J}+L1Ag%B4@!AfJCg*lq-=Tj0 z*c?TWHX9}fX}#9^J>%G71ZjPTVRIBgTHj&V9Oe8^>oQ-vZZ(>S(PqQsAg$9mWR4<6 z>wO+JM-im;9qPBRjVAj8T6YaSWR4<6n+=kKwEjZ-*4mO9TZ|yB?=Wm;B1r2y44awk zK52c2VMU7|Z8lI2(t54KiWWgy-(gtMB1r2y3@ci8sI+c8hZHShwAnB@NIUdC%h+PX zXuZ$FiWWgy-(gtMvV)~{*U>|Y7BSjvkQ}7-7u&;%7C~CyVOY^3Nb5TcD_Sn{XkC~? zPA7=bX2awltpKjqNCatphx&@FUZ@p|0_T3(%IlcGS1C*0sJwkM#IyDe^6u*<6Md+YmFq?ri)IwqV;pf)*d{+6+M? z;bS#W1mi^^a65=X;kg%u!0{joMHpT*6A0gkDE-+Ys`KF%&MfdBlqK4BY=*d4nM)n> z5A)&&ZaBaoSMQ-!hq-#3%+PwP5M(H^$^nv9)e8S)t%O8DHKA1n)zl^ms%h4H*QC1o zVUEbBV|g&(g*)IXd#I+IigLfU1mAyg=pxy=eKW)gWx7B40e-OwzI3h+@g8N$yHvpU z?}|c^gZP0mMGm<4(jez-fG3nEA6K|Ne2D|j=k$no6XILOJbSJW@qYbuY19Gdb9zM9 zPvG~I<<&y$ckk#K_)O(Rt#H1tN4yG%Ta786LHy!AL2uLnhm!X?sPkiO3YoBc%R}w8SltGc=7#+w+;NQvi$crAV&2R zCO_XhTp?#SXBN!T=*$Mi@!#6->ZFr3c5R*1NM?gkEX!;3>u(jvY+Xoo|Qi+_|jB^-s} zyx0nOSsxq={m4G}Qkx_bK*uWzCP1v zB0#I3l*w5}gf_&J`BF?MhZ$XESc%-S0A?lf=j7b_QH{va?^1;X!x(ypm17vq2QfyzA?GsE@6~mv><1&alHbcxPQ(n#hu8eYbZH9PRWbWAf8YMnvoo8A9 zzhrx!WO^6Hbt?Zi>(?PWvHh7I{EG=?H0`5ij;uG=D9F_hEq&>O`H=<(wOu3+@oI03 zjm*!9*ZxwwIm)2Y4*g+wbCdz6bq{E2wUaV7Oh321(aJj%{zZ4=a>ZWVjtGm1$%Gzq zU5|}_H5;uzC}is+kG@kIt<*;HjJ`gO$%bBf#ckDOYGX3BG2~a&SSt!*VxuWH&Vb+4 z*kr2QwRulS6)^Iz2AGgaJO>u5V|71fBhT53hEmUd-afmKrbM&o`5+foB?P4KR9< zSt*JF`=?qKW?!vJxOC6{?Bhz6r*#jWYA0iJl+4jOarr)0{w9mx2V| zVyx9b)(}z5l#eabF7;wHUc9Kr3;5$^axL&cTdrn-(Tnu7TJTC_>cuQx+*soU{P&p` zYk()47i)phi)8Z4o<`+2TE9%fiUKE(umM|5kGERSOprxEk7roVS$c3sF1xl|tMasN zI&Z35ESjT~2dxvYU5bj4uc>xgCtka!X*AJF>%?nc>Kh$Hj5hPYsX0n1(K?+&mJP&c zv(FnjNb7XgE*tX~Qb)8IosA~5jMgnhwXrux5u?rM93A5ztc&o zH^gYOE^v_cZdO>PH0|B2u!zyhhm7O;6VT`w2Wf|{u;sVexy$xiy}vA55a7B!g7)gJ z1^&zS498`82L5I*SZjdnvqW)qmnEzqUjCOAwJ1{8*5KMFYg~hWi@7!ne2DGNR|BJK zYf{%TYZuFG&b8IJwxh;1_$OM5P6bYzYqP-U+UnG`%;Ff|Cr`6Bi)+u;tW*aS{*~t1 zTHssFwdVn&YqP0qnbQLOK4hvgqaIWG5G%wr^tjP_W(K7w=*G@48p+M(jjQHq$>iPx@@#Rw0BXr1_w6%8k7op|jF zRgET2&^qzj<#lunG1|;_usO<9pdIRQqlp-8b`9nrt{b_x88wUvh&z}uD8EH*Uy5O+nn;R??;!8Q;b z;nfDHsIfg<3;3dTzoQQ6!@5Ne zEz(2BxPv%BAWl~`l5ox=*;pMdF7sy`ETc)b0zi}^T2&lq!udz_Pws00QM8M!H_tvq z)|?{`O+3#00>mW>w}}2emJn05pZr<911&w+x^F2x7165yBlECAySvPng$EqG@PI>W z_sLZyf!1%T$Qu?Dz(?x|UCJNG-&b}eGtr0ocoYQkSAazw@T)2n`a+#*Nw1k>Rd*kv z47msaKE~`%0&&e5>t-CC#L*k9Zx@Jbp)XW)bh7GFo<7(dZ39m*V>7_AqwS2NGpVEP zoTKf2>gY_~F~`;4P8LrvCtJYd&B-<=eedp0I^iBd0wFZebV5WBO+s{(QA7a;FKD0c(`|RUJNIz&MhIYlq&q5u zsHiXoMG#L0abOe?74N8cK|mA{bp(A?L|;V(MKN5&%e$&-{Z{Q$yG|!K^M2p=e0iYv zzgDfPTDMwNyY@ckgp&MLv7{n*8`0cPoBYew#P&XoHT7q|R(po)QU19swAG`c__SU{ zdEn=jBtNXu)}U}xi&@N%OqYHU{g9=*yg z2l!zn`4>Vcd^GZXQ{mlu_2PMB7RA1L74d-kE6Hn1p(pYI4^xus?r6o!A{%h6lDxLB z*21NFb#1{{8f{VICdK#YRkQ^@s3fl~g+D~T-Sw7fj$XZZici+7bO(I3lBBz~28DHz z4|tA}Tz8uleD9HpT=CUToZ8)Cm{VYsL2 zRSW=pwvmQ_#~P^*$kiKw!hrI*5mqREb!-ba?Dhk<{#wr5W?DEvM0?Y~pd^ErBT-5sZRS&4Rr z;w>fGO^R>P>nu5b9M=uj5%cAv51nogOYQB-wRe@v?{$M5<-eMxjO5CJR<0>ySeGg& zuUMq`PiS6uFBTo)+yvpqSh2xZKq#*Sf70QmT0$BCmQ(0#O(qBERp!b|6_S^Pv|34| zCD{*>nYL(^NeO{;B^5zR^44`}3kYmRtOZ+=a&}|xAFC67ntZs)8v()zu_BBMp`0Rq zt`lgRO{5WEc_OuID9q5S%uC=bCE5582vn&E<3Cq9iB{=km68ZndG+`nB|W59ApzTU zbL~QYs^a}@!#x0eUWx4miieDCWJF=y0oRGb9lZ`KqqraVIwOq%zhR_N-~&nuHw~0t zqH!#nPhibR1He<26xveytTB!PnFX@v0shvw`hgD{sTa7|OrG2Es_5}@sOeV+{?y6Y8WHcvEtwD(aW#a^7?7*lU?a+mg zkbD7TbO{*X2TisyjB=2uI;%+O4;C>uINMXu8Z(vtY~}?dv|>YWzm8JKC;ka4DqmlTHPf z#L<&*kk^6En@9t~6OXQhL~k1Wo-cK`C#DYfL|h)7DPvca;2aWBXBO+HsVmoas@tlq znkg3~6VR#7WPGOH8c0CDQWxwm*jn6wj5?ui`@jBW3eSq9O$t8{Nx+XAsTYWYWyEGN zUFp0;)E!qh^>?*zM|qKEsy@AT%HDGN-{&?czsun;7&G5UpS{7yNPcU@5CUQb2?{>=PT-$VWM9KF(-GJcfS7b?rOdUf~t z3ZG(LuDwhlcT=(g0@rBOv|{I?ZC%mTfIyJ!>?-`P+;%m7rOZ!Q*LCiSp006#tdt2b zkrfzYtp+6KM6mB_M=^?+A?EO)U~pU}D&onNwqR!C%ulY59c0ITkd-z?T`R7f<76*BP$Z;jpqZZXmT5dVuynEsdBT<>G9f6YjPzgIY2*E1)pxvUIIE-OLhAUXe4%dQvj zUdk@N!3dnABv~mZ8dqt7h1<0Sf7{wFV>iko?${QoJJ{9a(h_xeQ|8)aiT79L#$n)Z zlq4Ts*t~gTgCf~NJ~7j&9^6^49mRNig93R$h;5BDG^Fv@)r(A15%6Sn3NFlkC?{23 zVx{b_Dt5M%|J&QkN68LXrk+~8(#5|jh3P0R1;&{xK5YvY!}esB4z7dTI2*z-L@3m>)g)C(j%P4mz6mvl8C zeARe|fN?$y09m#~=mT|%uwn^`mFlHh<%OxPRYNRWF)`XEh-FO74!pbETe>?GCsrnj z5x$^qjXqk6sZm=#WrNfRDx|7_OUc}EedTD(hKqnv@S;nV;5hO~b>tBePBhI(b>xva zQZpiW?@`5P$^p4-CdkFW7T;xhAHo}*d40|>R2^U$8a@%79pzQr#ZN)O#ft?mZ)HVRl)vh zV(70b*k9GAzp71tRh!HWM6-TXT?Wx5$~{<>d$20^U{&rx923*UU{&tHs@#*zmkCIO6%q*;VTD8>A*_%{z)V&lAuqxTiS))?6%so(a*>dlts8E#(=F6=InqC3 z{`!TTJ#4DJt05*e6QL&Ur(B-#+E99hUS*90_9`hHK~j2MWCWhp#7ODQkrDXzCdRTD zDW0L6$RZnGAcBM=MoP#cj6ehljFc`kvFgCGSoQoixk*Vx zz0%tD0+BEyMk##61>+mG9&QSSYqSyA~;sT6xl9Lb+IfPU-)Nneu>#X%ZhCVJ1 zJsli}URoV`X?5tOnW1&7mlJ@YkB&pn0LP(6szZ-dhaSlctsfeiY-sux8_fZ~O2v`8 zA0P&IY>a(DWCJpd99wl%QVpF+uBb8v%0m5A&VT7u76#y`Y9+H5xY|eqz}xH-(Umi! z+?b4ahmBVUGKfeEWDrUBz$<2jZiNf@fWEKqW`4avX?P!F1fHU#z)0yzwV?C}yg^BU zky2E(r8$cN1>a!`t_1!#l7J{Wvv{~;+n(~3TpGmpKEJC$UC*8DBi~fdCMZ%O>-4RG3U+tj~?YtbLKG%%89N4W>(l^~n zjXF!Oo>;Z?ax9G{!z)E<<7n39K&GbW!>pLi6DdR+E(c;Z&qpEJaCyd5S<-$QWJg-C z4FI2Kq<$dQlSfmZnZSN)bvC=(`U%DFvKc;rW<<$Ud6u$xeuE-GBYsDXLo_}la|2JY zkdc8utcBm|)eXFxCheMD9qo;ZF^i*RjgSx*sqkgRwkqwzQL&90*-VeA@@X1TjN)4@ z@JG>NG%5xxDRxa(vDvD`zIvTnoHHS#P()uLyTRZ4Bvk&cs&cnpMfH**Y zN*0I%q%R;25H8^RZ4F!d47Dykk?w)`L>dC|iF6N)?m4mQo)iCXxToXYYJAKrGEY^r z?r!E?3!H7FHNdS#TAQ)>SJcv6McLLdf(-XrK&;-Vz0%Bf$%)^}uWkSi|HKOALIY4ZI5Fqd|d? zn^jzVm3*sW_}tPF^W}4x`>QFA)T`_-IvNy+kX_tMoV0kBhTR&Q=z~93INj#! zAP~FmCS5S}c+rE6ndx!_eS1oA4&ykl%(*BfaFc!iP1 za3}jM8NHel#@L>a8{}aNsrnJi;)72pBy|fH**iwdU>Ys)bRBm;tZv^)J^{R??a>!L zdUyj8nR}X4`3kJ|Sv8eaAS!ZN1=1m!RiuKs@-)p6Ptohn;=A=l*Q5U|GC@1k>fBdp zg}Ssar)1ifJR%n@x)#kpM;@(q^H|0t_Be;Sr^o5QlR%$v#`%6w{ln>w&;VQ7z8U9>PXBELHw`FcKZ+sY@% zgAR;lHZS>wIz}~~l3%FfE71^I{XsyiN;rdG7XFHuuO!(=~?Biz^c>)w3ES zsg~6kNp)Nh;;dPosG&t)s^O7|w@{&FN8&^x8NIlQejRBhPUDme%?4r8Nxw{U_<4FQ zha|K&TU`uE1S(${n06L8rQo8DK8>doT;)C;c1}(Et~xaBx$4kdzdu*qSh!MSLT5pn z+q|Idz@(p|6MBD}*c)8B@`(ysx7GPn=Ifv_a(6ni%`JM%=~oo#_-649^0{lBMyVXe zthUxxZkyIA4QBNY$OpiDb06fjp5N$K-b*Hnf6t6NyB3>Eb)R*tXB%+h!l$ z)qrxD$!hm#kJ)DTB<|6o_?f$}ld9rpZlX@AZkQ@}ANsC?D3c04rx2;P?R|KcUV222 zo^5-HB0p5sqKGFG_w0J)_jD04n)BqUJSV5-bgz6M$v1SI8HI@9Oehj`i3B|jYW_<( zGT&Vk78iEq@6z4*P7<}cbA$9Wb%*;XpWiy99 zTkpd<(tDlVMU1nGo_X?_18+?3fjG06)R+s@6({I*XIYFfCbV9wYi&$t00yR=8S35Gu7!$#!P$OF=M9ph`UR#Wn-qdi~Cn^7t8F<43&Q!pH%~X#|-Jd zqAf%$wC`D6bO1E&Rp(U)ci;6MK5RmV>F|D5RzxtnyRZGxKu<+6o|6Akkq%?RRPLgq zWHvx5nor~v(VXK>YjSNWSk?KdSWlHcCXuK-2~(lOUhV1ae;O6(Nx&@GdxVpK?FK{p z5xVfaSg$*avXT~jLV)%%t2^E5pmF-(c3NS~XleS%=p z>2{YM8M$ZMEE)P5)h-U5Ieg9>7@wFL&An~Ru$OA5vTKlymuTpB4zpy}K+RQV)Rk#R zFsE>-`<%;m0ye0+YJ$3(uIuzbw-W>r( z@2;C@;L5L?--JkEp@yLJxXF?e9+YoW0KU`wA&n_q7Kxi06r#SuS<%-B1R@`k5uXC1 z^rx4k*XVO^4-ibJ>G+O@`*6>Wyk&5y_WAWv-;X3wF5fwj8}4Q5ed5mz_dcb4#3Ew^ zh;;rv5eh_zYYWDDnJ;rJifa>jb1&(bfzMNSlYr!*A&^`oJA#ml8c@hcl8Kmsi%px= zD7!I|Y`7NSQkCLby^0jTn~byuNH&oN>Et813 zz*UZsGDB7s{b(hPuc! zkl2&$3cjNeC!35k{R`=<>cMERKE7xMn@I8^g^ZYwhL}+}S^By~YopuhK-?!>L|(Mb zPzwzc@&Xn0c)fPYW_XD_IHP=(1>;)aqw13B@unmY1!AAboY-NK;vzM{s9t5KviFj0`z+}a&7r+o>vom9cCm@p zLfvXcJQ2ubZ*Bk;6T2fM>2BQpal=&&U73k#6U_Z_v*3w9jN2>&)NjQGz#k~7xdBuh zl1hME@PVX{NvvI}dX}2)SiR1b+n6O1o^tr6t*v1Cz)MK%sB~$lY+t%kxOnJK)l#CAi6!!y#K&wuO(ll9B!+rQIS;?j z3JFePqpQS4?Fx;wy(5?RD!oy^M)_o+1`;N%no>^~%?(3@G!O>yrglQ7DWO%LX~0a@ zXBs4}`b77i6m6Yk13YwzpfMC=-w^a}a_~(KSSpy(F8E zW1!8}x;^AXOTG+UX0kF+5l1;GC#0kOSOxs8UM089S)x(qF7k*;a@W2-x54wM@`l)* zE%lLyI%J&h`a8pYJ-=Hz%DCJLZUla6>sF|WP^n^Z;-MNg7jb316chT1w6C9P)FHq= zV#*+E!U)53wRu+)BSLkFrQBqIYggL=tO26pjI)VS7SBa^8Tuf1pyS%)& zJAR-Ir|HH?VoH1+d<$)k*6ksus2Wp&fr>cF$r&LXspH2w&VzcDnA$hwxNvc+RL{1# zKBnM#TzTVq8F{EfMv19?mz-`fRl?<-;YMJIsS;-y_n<05rHWZhnQGWv#Fc3&7V_aT z*E^p&1aM!jt})fj2*WOF^R6aFgz6GYxtM}$59OBB0Yt^gJ4m&Xa{G(4vsdd?Vrq_y zDa!FSA@A+>K5clOUL~f)$-%eK-mP_e$QLtdOa%ri;wYzNgmk3#A?@R2y-G~Y4U;)s zTsr94wx5qFc+OPb;G~eF;Gqr~C8p*sS!Xd-!sVXfMqr7l5@#99*T4l;88B7MV#-v* z<|3|4OR$Sja9LFSZl?FzcMc8!r|cZ~ z3K#GhN(v7vC>>%S;_EGsU%@KK1{0_b+-jsDAcBPl4wOzcG3&r@7-X1Nu14NiyvxyzT=5R| z7T%Mn0DfAl{NoA=x0!cGfYH11$N*RFv1_oRZ%pCTNZgch<_OOGsQE*Bq`(ic`ez*! zqP~+pt{@N}G3f_@QF?h?f%Kgkb?$7RV7f?!ax~nBdmODYnG(X?8ri~+52mQtJtlsgALrg;q&||!x#p!I<`iz0zJ9N@(=58i zfcSDZ_f4_-!KibJ9?1AtIw3Tp@mfC5Sd)aN`{@AxiV`y6e5)YZevYKHK!6XZ=++{! zvoD^d<6f-So#kX=qrNW&ZHv`yu)4G_cSDl)HB-3dZK_4{&xmgUrhOXEhRBol?H*>O zeb11d?6i1N7=%XT@014zjvU zRtJq?_G^xuPPy0HGKG%Pp~J0SI<&K!f0g)jIh@zG>rxSnXH(=!MVUuGO|cv#vW`=c z!qdf6Bz4(r^K_GJbyz0#WYX*{J#k@oHEoAw>8OTec+JC5clk@j1(pRby+N=%a$ zd8izqyZoTZSOP!iJoS|uLN$0Bp@>6juogw z0&x!zVRFs#hH_LyTWoTy0-hI1K!(qqMo@=5vZ(_$iME~7i0Zdb=Y_|mh$fx_e!>JF z0wSEhxjj-niFnc!c(XZq=pKdp>>mX1O$o(ri`gOIbCu-z`n9ko@&R94=A&>{ByMVq zc83vPt5?}B0?$>FA7qObt|=2Kd?hvpe!I*^;eSOw;4jO36#f$VfVkBQQ>6bgFE|#( zGIb5Ek~0I~1zP2A`zc&zt{eeISIT`me!FA;FuZR};b{jLaZ{t}xe+|~PBXsrNa3`{XqZ)qEFfqW;n8AvcH$AOxNmF8Ub%I(i&hCb1hQw)h7NP23pWZ)wkt zLvC409JzkeAaE}+%BKR=D``B;Ne&t!XWDltPwNiX9=(>W3+-U5+ho>-HmY?8B;(3w z2>qA)Bid&;8NzW{YlV+t?YA%0`UUwGnO62;i1no4doBX6C?aNLPbo3^NyU96a_|N&6TYSOFL_Bi#Iu9+pnp8;sFYj*z1YaUQbM2>&{fFy|zA8 z`KFE=M>(lFO7@@yt#8yGss}C9+^QV1&q>9#@`8Z&)~l@5!2J&iRdOE%oTsF4c0%ci zry8SmTLn76n{A*v@W)S~eJ_v!!|4Yl29$k0FpfRhTO>N>sExf6*oY(`qvZ}esJqW> zvl56Txn@;s7)8flX>zOremIhV44*qAp$>UudkSn4ZF^@VUa~WF>@L%D85VzIB&Geg z70XPomf&sL^@-;7I`D5w>L|{fXwdmQi>^9wv64I=h4UgGaBG>5!p9;X@MmQ{3K*@$ zP2^*0hH2V%syslDFVekTi}a%8mewd$%vJ4|m|@lcpRFWGQu3mhd#ww~$BcRP%?dls zL2H0JD=D^zLe$8OAl5zJ473`ELFEn-h&iQUYDOWI)GEQJse}uo(73$agkC+N<1>{i8 z5%cA%;@r1&68{I7JC@=hLS901h1Q;GT*E-@x103J17q1}K)&2s)N$a~BPoqz8H$j8 z#JHBWHcaj_nIcn@5zq_D0~T5XI2z_-n_wynlyD>0x(dkfxrK$g z6=tVZz$VeQv#_*_tS{4%d-WK2J%$DTV&X2gC%PFXx62s8~^-VTQ$QnV-{gJ^fKzqKya){Hs>A9M!cy zLKVf@l0bnNUKWC2_y!crFJ?!zDCTO{ZTjz69p-qm>#FnBPO;^xw3RET6CxArEmHR_ z6{D`H8g)%>Oh@~vww`GcFQqk}mT$T5RV6TkkWQ-TReeddH0VXj{<8UjD9ID}4JC!l zLh0WQHb&q_loS{#eJL^m|I)-*k|Kc!^>Yh3f6p|-P z42wC1lxw+MTcVBp^cnEfvSPWmj>6iGk?$Yn0-=BrsG5`hCs$~B`71-83ul2?3H zug! zV#~g&pYEt?T4f59om9#BrtE6qAxet*21=Bt;;R<a0O*%;u`kc1^g5e+DJ; zcILR|#Cp(6E5e^l6<5ar+o`7GN?=JNJ!hh!Jdi0hJ>8m~2rM;S7#juDQEK{HYq}O# zYWnQ7X;JiRgXogVbdz7&tT3%kduo?27Y+ZWnh2FGne6arr%dfx=VrJv&dqSmp!@Rm zA}!pkSIJmF|NZ_#7BMm&FN$|-liRH6Nx)LmZmlg{KCCzz;l?qcO0(9aF<7<>TJ9Fuqd69Q+hAZRT3|H2<`nCAQ zi%hVUz>*kQ=XPt8msr!az*1AVl*wJ5sW=*=;#_$LqQX=$Yf(I}!c>`9%F*(2Q$195 z>Z>erOaq*zB)18cuV>ZLzL60)w~3L`0g(}SU=t&yd65yg%PWIa^5Hq)u14wwK0{Yk z;R0S|q-DVO=mD?nw}4+V(lX$;jI=YGq#@u>RL7l*i?_-ziS1mpcQv5>+Vr=0TCQr9+0pMxt#d+vuQM~$fZsDx zKk(POj>%7wUNAx75hcpTZXdNAA?!u~A8X-U1D;}}Vc^F!P(|(wQ4<>REdvqPIHk1Q`Z&y@C%iE7gJ6 zRC;Zp?bNA7hx}i3xGhoTU#XV(`n732^nMMe+hSN9q?#QbH3U9aNgc&G(;F0yi+nFu z*cVB_0c(2N^acg4vP0TnM6B*UU!slnDaYczT6l%UVlVI$N}66={LuK8DbMa|K)J)1 z`v||Q%+|x}G!jX)5_R_}=>f~8HQ?`z)Cc^7lBUS}MBNQak1AEvo8F*MST3%0D4ZTi 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 literal 0 HcmV?d00001 diff --git a/Python/venv/lib/python3.12/site-packages/PIL/_imaging.pyi b/Python/venv/lib/python3.12/site-packages/PIL/_imaging.pyi new file mode 100644 index 0000000..81028a5 --- /dev/null +++ b/Python/venv/lib/python3.12/site-packages/PIL/_imaging.pyi @@ -0,0 +1,31 @@ +from typing import Any + +class ImagingCore: + def __getitem__(self, index: int) -> float | tuple[int, ...] | None: ... + def __getattr__(self, name: str) -> Any: ... + +class ImagingFont: + def __getattr__(self, name: str) -> Any: ... + +class ImagingDraw: + def __getattr__(self, name: str) -> Any: ... + +class PixelAccess: + def __getitem__(self, xy: tuple[int, int]) -> float | tuple[int, ...]: ... + def __setitem__( + self, xy: tuple[int, int], color: float | tuple[int, ...] + ) -> None: ... + +class ImagingDecoder: + def __getattr__(self, name: str) -> Any: ... + +class ImagingEncoder: + def __getattr__(self, name: str) -> Any: ... + +class _Outline: + def close(self) -> None: ... + def __getattr__(self, name: str) -> Any: ... + +def font(image: ImagingCore, glyphdata: bytes) -> ImagingFont: ... +def outline() -> _Outline: ... +def __getattr__(name: str) -> Any: ... diff --git a/Python/venv/lib/python3.12/site-packages/PIL/_imagingcms.cpython-312-x86_64-linux-gnu.so b/Python/venv/lib/python3.12/site-packages/PIL/_imagingcms.cpython-312-x86_64-linux-gnu.so new file mode 100755 index 0000000000000000000000000000000000000000..ea34a8772df9951e84e398714b300f32a2c709f4 GIT binary patch literal 157841 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 int: ... + @property + def creation_date(self) -> datetime.datetime | None: ... + @property + def copyright(self) -> str | None: ... + @property + def target(self) -> str | None: ... + @property + def manufacturer(self) -> str | None: ... + @property + def model(self) -> str | None: ... + @property + def profile_description(self) -> str | None: ... + @property + def screening_description(self) -> str | None: ... + @property + def viewing_condition(self) -> str | None: ... + @property + def version(self) -> float: ... + @property + def icc_version(self) -> int: ... + @property + def attributes(self) -> int: ... + @property + def header_flags(self) -> int: ... + @property + def header_manufacturer(self) -> str: ... + @property + def header_model(self) -> str: ... + @property + def device_class(self) -> str: ... + @property + def connection_space(self) -> str: ... + @property + def xcolor_space(self) -> str: ... + @property + def profile_id(self) -> bytes: ... + @property + def is_matrix_shaper(self) -> bool: ... + @property + def technology(self) -> str | None: ... + @property + def colorimetric_intent(self) -> str | None: ... + @property + def perceptual_rendering_intent_gamut(self) -> str | None: ... + @property + def saturation_rendering_intent_gamut(self) -> str | None: ... + @property + def red_colorant(self) -> _Tuple2x3f | None: ... + @property + def green_colorant(self) -> _Tuple2x3f | None: ... + @property + def blue_colorant(self) -> _Tuple2x3f | None: ... + @property + def red_primary(self) -> _Tuple2x3f | None: ... + @property + def green_primary(self) -> _Tuple2x3f | None: ... + @property + def blue_primary(self) -> _Tuple2x3f | None: ... + @property + def media_white_point_temperature(self) -> float | None: ... + @property + def media_white_point(self) -> _Tuple2x3f | None: ... + @property + def media_black_point(self) -> _Tuple2x3f | None: ... + @property + def luminance(self) -> _Tuple2x3f | None: ... + @property + def chromatic_adaptation(self) -> tuple[_Tuple3x3f, _Tuple3x3f] | None: ... + @property + def chromaticity(self) -> _Tuple3x3f | None: ... + @property + def colorant_table(self) -> list[str] | None: ... + @property + def colorant_table_out(self) -> list[str] | None: ... + @property + def intent_supported(self) -> dict[int, tuple[bool, bool, bool]] | None: ... + @property + def clut(self) -> dict[int, tuple[bool, bool, bool]] | None: ... + @property + def icc_measurement_condition(self) -> _IccMeasurementCondition | None: ... + @property + def icc_viewing_condition(self) -> _IccViewingCondition | None: ... + def is_intent_supported(self, intent: int, direction: int, /) -> int: ... + +class CmsTransform: + def apply(self, id_in: CapsuleType, id_out: CapsuleType) -> int: ... + +def profile_open(profile: str, /) -> CmsProfile: ... +def profile_frombytes(profile: bytes, /) -> CmsProfile: ... +def profile_tobytes(profile: CmsProfile, /) -> bytes: ... +def buildTransform( + input_profile: CmsProfile, + output_profile: CmsProfile, + in_mode: str, + out_mode: str, + rendering_intent: int = 0, + cms_flags: int = 0, + /, +) -> CmsTransform: ... +def buildProofTransform( + input_profile: CmsProfile, + output_profile: CmsProfile, + proof_profile: CmsProfile, + in_mode: str, + out_mode: str, + rendering_intent: int = 0, + proof_intent: int = 0, + cms_flags: int = 0, + /, +) -> CmsTransform: ... +def createProfile( + color_space: Literal["LAB", "XYZ", "sRGB"], color_temp: SupportsFloat = 0.0, / +) -> CmsProfile: ... + +if sys.platform == "win32": + def get_display_profile_win32(handle: int = 0, is_dc: int = 0, /) -> str | None: ... diff --git a/Python/venv/lib/python3.12/site-packages/PIL/_imagingft.cpython-312-x86_64-linux-gnu.so b/Python/venv/lib/python3.12/site-packages/PIL/_imagingft.cpython-312-x86_64-linux-gnu.so new file mode 100755 index 0000000000000000000000000000000000000000..7e8d46e98c34f88d1f29ca58763b293db3f7a974 GIT binary patch literal 331169 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 z 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 u59yFBy?;KnDUg-fLtg)xl=u|lcTSc=8x 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