§ w<ˆj.ˆãó6—dZddlmZddlZddlZddlZddlZddlZddlZddl m Z m Z m Z ddl mZddlmZddlmZddlmZmZdd lmZdd lmZdd lmZdd lmZmZmZm Z d dl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'd dl$m(Z(d dl)m*Z*m+Z+d dl,m-Z-d dl.m/Z/d dl0m1Z1m2Z2ddl3m3Z4ddl5m5Z6ddl7m7Z8ddl9m9Z:ddl;m;Z<ddl=m=Z>er ddl?m@Z@d dlAmBZBede(¬¦«ZCejDeE¦«ZFGd„d e¦«ZGd!ZHd"ZIGd#„d$e"¦«ZJGd%„d&e¦«ZKGd'„d(¦«ZLGd)„d*eL¦«ZMGd+„d,¦«ZNd_d1„ZOd`d5„ZPdad<„ZQd=„ZRdbdA„ZSdbdB„ZTdcdE„ZUdddG„ZVdedI„ZWdfdL„ZXdgdM„ZYdhdR„ZZdidT„Z[GdU„dVe'j\¦«Z]dWZ^djd\„Z_Gd]„d^e&j`¦«ZadS)kaè Create a wheel that, when installed, will make the source package 'editable' (add it to the interpreter's path, including metadata) per PEP 660. Replaces 'setup.py develop'. .. note:: One of the mechanisms briefly mentioned in PEP 660 to implement editable installs is to create a separated directory inside ``build`` and use a .pth file to point to that directory. In the context of this file such directory is referred as *auxiliary build directory* or ``auxiliary_dir``. é)Ú annotationsN)ÚIterableÚIteratorÚMapping)Úsuppress)ÚEnum)Úcleandoc)ÚchainÚstarmap)ÚPath)ÚTemporaryDirectory)Ú TracebackType)Ú TYPE_CHECKINGÚProtocolÚTypeVarÚcasté)ÚCommandÚ_normalizationÚ_pathÚ_shutilÚerrorsÚ namespaces)ÚStrPath)Úpy310Úpy312©Úfind_package_path)Ú Distribution)ÚInformationOnlyÚSetuptoolsDeprecationWarningé)Úbuild)Úbuild_py)Ú dist_info)Úegg_info)Úinstall)Úinstall_scripts)ÚSelf©Ú WheelFileÚ_P)Úboundcó6—eZdZdZdZdZdZed d„¦«Zd S) Ú _EditableModea Possible editable installation modes: `lenient` (new files automatically added to the package - DEFAULT); `strict` (requires a new installation when files are added/removed); or `compat` (attempts to emulate `python setup.py develop` - DEPRECATED). ÚstrictÚlenientÚcompatÚmodeú str | NoneÚreturncóæ—|s tjS| ¦«}|tjvrt jd|›d�¦«‚|dkrt jddd¬¦«t|S)NzInvalid editable mode: z. Try: 'strict'.ÚCOMPATzCompat editable installsa  The 'compat' editable mode is transitional and will be removed in future versions of `setuptools`. Please adapt your code accordingly to use either the 'strict' or the 'lenient' modes. zuserguide/development_mode.html)Úsee_docs)r/ÚLENIENTÚupperÚ __members__rÚ OptionErrorr!Úemit)Úclsr3Ú_modes ús/builddir/build/BUILD/cloudlinux-venv-1.0.12/venv/lib/python3.11/site-packages/setuptools/command/editable_wheel.pyÚconvertz_EditableMode.convertAsŠ€àð )Ý Ô(Ð (à— ’ ‘ ” ˆØ � Ô1Ð 1Ð 1ÝÔ$Ð%W¸tÐ%WÐ%WÐ%WÑXÔXÐ Xà �HÒ Ð Ý (Ô -Ø*ðð ;ð ñ ô ð õ ˜UÔ#Ð#óN)r3r4r5r/) Ú__name__Ú __module__Ú __qualname__Ú__doc__ÚSTRICTr9r7Ú classmethodrA©rBr@r/r/5sM€€€€€ððð€FØ€GØ €Fàð$ð$ð$ñ„[ð$ð$ð$rBr/zU New or renamed files may not be automatically picked up without a new installation. zt Options like `package-data`, `include/exclude-package-data` or `packages.find.exclude/include` may have no effect. có´—eZdZdZdZddddeejpd¦«fgZd„Zd&d „Z d&d „Z d „Z d„Z d'd„Z d(d„Zd„Zd)d„Zd*d„Zd&d„Zd+d„Zd „Zd,d"„Zd-d%„ZdS).Úeditable_wheelz®Build 'editable' wheel for development. This command is private and reserved for internal use of setuptools, users should rely on ``setuptools.build_meta`` APIs. zBDO NOT CALL DIRECTLY, INTERNAL ONLY: create PEP 660 editable wheel)z dist-dir=Údz-directory to put final built distributions in)zdist-info-dir=ÚIz(path to a pre-build .dist-info directoryzmode=NÚcó>—d|_d|_d|_d|_dS©N)Údist_dirÚ dist_info_dirÚ project_dirr3©Úselfs r@Úinitialize_optionsz!editable_wheel.initialize_optionsvs$€ØˆŒ Ø!ˆÔØˆÔØˆŒ ˆ ˆ rBr5ÚNonecóÜ—|j}|jp tj|_|jpi|_t |jp$tj  |jd¦«¦«|_dS)NÚdist) Ú distributionÚsrc_rootÚosÚcurdirrSÚ package_dirr rQÚpathÚjoin)rUrYs r@Úfinalize_optionszeditable_wheel.finalize_options|sX€ØÔ ˆØœ=Ð5­B¬IˆÔØÔ+Ð1¨rˆÔݘTœ]ÐT­b¬g¯lªl¸4Ô;KÈVÑ.TÔ.TÑUÔUˆŒ ˆ ˆ rBcóº— |j d¬¦«| ¦«| d¦«| d¦«}| |j¦«| |¦«dS#t$rD}|j j p|j   ¦«}tj |d|›d�¦«‚d}~wwxYw)NT)Úexist_okÚ bdist_wheelz3An error occurred when building editable wheel for zl. See debugging tips in: https://setuptools.pypa.io/en/latest/userguide/development_mode.html#debugging-tips)rQÚmkdirÚ_ensure_dist_infoÚreinitialize_commandÚget_finalized_commandÚwrite_wheelfilerRÚ_create_wheel_fileÚ ExceptionrZÚnameÚget_namerÚadd_note)rUrdÚexÚprojects r@Úrunzeditable_wheel.run‚s€ð Ø ŒM× Ò ¨Ð Ñ .Ô .Ð .Ø × "Ò "Ñ $Ô $Ð $ð × %Ò % mÑ 4Ô 4Ð 4Ø×4Ò4°]ÑCÔCˆKØ × 'Ò '¨Ô(:Ñ ;Ô ;Ð ;à × #Ò # KÑ 0Ô 0Ð 0Ð 0Ð 0øÝð ð ð ØÔ'Ô,ÐL°Ô0A×0JÒ0JÑ0LÔ0LˆGÝ ŒNØðfÀgðfðfðfñ ô ð ð øøøøð øøøs‚BB  CÂ?CÃCcóŒ—|j€jtt| d¦«¦«}|j|_| ¦«| ¦«|j|_dSt|j¦«  d¦«sJ‚t|jd¦«  ¦«sJ‚dS)Nr%z .dist-infoÚMETADATA) rRrÚ dist_info_clsrgrQÚ output_dirÚensure_finalizedrqÚstrÚendswithr Úexists)rUr%s r@rfz editable_wheel._ensure_dist_info—s²€Ø Ô Ð %Ý�]¨D×,EÒ,EÀkÑ,RÔ,RÑSÔSˆIØ#'¤=ˆIÔ Ø × &Ò &Ñ (Ô (Ð (Ø �MŠM‰OŒOˆOØ!*Ô!8ˆDÔ Ð Ð å�tÔ)Ñ*Ô*×3Ò3°LÑAÔAÐ AÐ AÐAݘÔ*¨JÑ7Ô7×>Ò>Ñ@Ô@Ð @Ð @Ð@Ð @Ð @rBcóò—|j}|jsdSt|j|j dd¦«¦« ¦«}t||||¦«}| ¦«dS)NrNú.) rZÚnamespace_packagesr rSr^ÚgetÚresolveÚ_NamespaceInstallerÚinstall_namespaces)rUÚinstallation_dirÚ pth_prefixrYr[Ú installers r@Ú_install_namespacesz"editable_wheel._install_namespaces¢sw€àÔ ˆØÔ&ð Ø ˆFå˜Ô(¨$Ô*:×*>Ò*>¸rÀ3Ñ*GÔ*GÑHÔH×PÒPÑRÔRˆÝ'¨Ð.>À ÈHÑUÔUˆ Ø×$Ò$Ñ&Ô&Ð&Ð&Ð&rBr4cóΗ|jrt|j¦«jn t¦«}tt| d¦«¦«}t |d¦«S)Nz *.egg-info)rRr ÚparentÚmaprwÚglobÚnext)rUÚ parent_dirÚ candidatess r@Ú_find_egg_info_dirz!editable_wheel._find_egg_info_dir¬sT€Ø8<Ô8JÐV•T˜$Ô,Ñ-Ô-Ô4Ð4ÕPTÑPVÔPVˆ Ý�˜jŸošo¨lÑ;Ô;Ñ<Ô<ˆ Ý�J Ñ%Ô%Ð%rBrlrwÚunpacked_wheelrÚ build_libÚtmp_dircóš—|j}t|¦«}t|¦«}tt||›d�d¦«¦«}tt||›d�d¦«¦«}tt||›d�d¦«¦«} tt| dd¬¦«¦«} t|¦«| _d| _tt| dd¬¦«¦«} tt| d d¬¦«¦«} |x| _ x| _ | _ |x| _ x| _| _| x| _| _|| _|| _| d ¦«} d | _tt,| d ¦«¦«}d|_t|¦«| _tt2| d ¦«¦«}d|_| ¦«|_| ¦«|  ¦«|  ¦«dS)aìConfigure commands to behave in the following ways: - Build commands can write to ``build_lib`` if they really want to... (but this folder is expected to be ignored and modules are expected to live in the project directory...) - Binary extensions should be built in-place (editable_mode = True) - Data/header/script files are not part of the "editable" specification so they are written directly to the unpacked_wheel directory. z.dataÚdataÚheadersÚscriptsr&T)Úreinit_subcommandsr#r'Ú build_scriptsÚpythonr(r$FN)rZrwr rÚ egg_info_clsrgÚegg_baseÚignore_egg_info_in_manifestÚ build_clsÚ install_clsÚ build_platlibÚ build_purelibrŽÚinstall_purelibÚinstall_platlibÚ install_libr(r•Úinstall_headersÚ install_dataÚget_command_objÚ executableÚinstall_scripts_clsÚno_epÚ build_tempÚ build_py_clsÚcompilerŒÚexisting_egg_info_dirÚ_set_editable_moderv)rUrlr�rŽr�rYÚwheelr‘r’r“r&r#r'r•r(r$s r@Ú_configure_buildzeditable_wheel._configure_build±s4€ðÔ ˆÝ�NÑ#Ô#ˆÝ˜ ‘N”Nˆ Ý•4˜¨4¨¨¨¸Ñ?Ô?Ñ@Ô@ˆÝ•d˜>¨d¨>¨>¨>¸9ÑEÔEÑFÔFˆÝ•d˜>¨d¨>¨>¨>¸9ÑEÔEÑFÔFˆõÝ ˜$×3Ò3°JÐSWÐ3ÑXÔXñ ô ˆõ  ™LœLˆÔØ/3ˆÔ,åÝ �t×0Ò0°ÈTÐ0ÑRÔRñ ô ˆõÝ ˜×2Ò2°9ÐQUÐ2ÑVÔVñ ô ˆðGPÐOˆÔÐO˜eÔ1°E´OØRWÐWˆÔÐW 'Ô"9¸GÔÔ>Ð>øà�gˆ~ÐrBÚ dist_namecó—| ||||¦«| ¦«| ¦«\}}| d¦«| d¦«| d¦«||fS)Nr’r“r‘)r­Ú_run_build_subcommandsr½Ú _run_install)rUr¾r�rŽr�r»r¼s r@Ú_run_build_commandsz"editable_wheel._run_build_commands s‹€ð ×Ò˜i¨¸ÀGÑLÔLÐLØ ×#Ò#Ñ%Ô%Ð%Ø×4Ò4Ñ6Ô6‰ˆˆwØ ×Ò˜)Ñ$Ô$Ð$Ø ×Ò˜)Ñ$Ô$Ð$Ø ×Ò˜&Ñ!Ô!Ð!Ø�gˆ~ÐrBcó—| d¦«}| ¦«D]^}| |¦«}|dkr,t|¦«tur| |¦«ŒI| |¦«Œ_dS)a} Issue #3501 indicates that some plugins/customizations might rely on: 1. ``build_py`` not running 2. ``build_py`` always copying files to ``build_lib`` However both these assumptions may be false in editable_wheel. This method implements a temporary workaround to support the ecosystem while the implementations catch up. r#r$N)rhr±Útyper¨Ú _safely_runÚ run_command)rUr#rlr´s r@rÀz%editable_wheel._run_build_subcommandss˜€ð×*Ò*¨7Ñ3Ô3ˆØ×*Ò*Ñ,Ô,ð 'ð 'ˆDØ×,Ò,¨TÑ2Ô2ˆCØ�zÒ!Ð!¥d¨3¡i¤iµ|Ð&CÐ&CØ× Ò  Ñ&Ô&Ð&Ð&à× Ò  Ñ&Ô&Ð&Ð&ð  'ð 'rBr³c ó°— | |¦«S#t$r4tjddt j¦«›d|›d|›d�¦«YdSwxYw)Nz0Customization incompatible with editable installz zŒ If you are seeing this warning it is very likely that a setuptools plugin or customization overrides the `a` command, without taking into consideration how editable installs run build steps starting from setuptools v64.0.0. Plugin authors and developers relying on custom build steps are encouraged to update their `aa` implementation considering the information about editable installs in https://setuptools.pypa.io/en/latest/userguide/extension.html. For the time being `setuptools` will silence this error and ignore the faulty command, but this behavior will change in future versions. )rÆrkr!r=Ú tracebackÚ format_exc)rUr³s r@rÅzeditable_wheel._safely_run.sœ€ð Ø×#Ò# HÑ-Ô-Ð -øÝð ð ð Ý (Ô -ØBðÝÔ%Ñ'Ô'ððð9Að ðð.6ðððñ ô ð ð ð ð ð øøøs‚—:AÁAc óú—ddlm}| d¦«}|j}d | ¦«¦«}d}|›d|›d|›d�}t |j|¦«}| ¦«r|  ¦«t|¬¦«} td¬¦«} td ¬¦«} | 5} | 5} | 5}t | t |j ¦«j¦«}tj |j |¦«| | |¦«| || | |¦«\}}| ||| ¦«}|5||d ¦«5}||||¦«| | ¦«ddd¦«n #1swxYwYddd¦«n #1swxYwYddd¦«n #1swxYwYddd¦«n #1swxYwYddd¦«n #1swxYwY|S) Nrr*r%ú-z 0.editablez.whl)Úsuffixz .build-libz .build-tempÚw)Úwheel.wheelfiler+rhrlr`Úget_tagr rQryÚunlinkr rRÚshutilÚcopytreer„rÂÚ_select_strategyÚ write_files)rUrdr+r%r¾ÚtagÚ build_tagÚ archive_nameÚ wheel_pathr�rŽÚ build_tmpÚunpackedÚlibÚtmpÚunpacked_dist_infor»r¼ÚstrategyÚ wheel_objs r@rjz!editable_wheel._create_wheel_fileJsH€Ø-Ð-Ð-Ð-Ð-Ð-à×.Ò.¨{Ñ;Ô;ˆ Ø”Nˆ Ø�hŠh�{×*Ò*Ñ,Ô,Ñ-Ô-ˆØ ˆ Ø#Ð;Ð; iÐ;Ð;°#Ð;Ð;Ð;ˆ ݘ$œ-¨Ñ6Ô6ˆ Ø × Ò Ñ Ô ð Ø × Ò Ñ Ô Ð å+°<Ð@Ñ@Ô@ˆÝ&¨lÐ;Ñ;Ô;ˆ Ý&¨mÐ<Ñ<Ô<ˆ à ð 0˜x¨ð 0°c¸9ð 0ÈÝ!% hµ°TÔ5GÑ0HÔ0HÔ0MÑ!NÔ!NÐ Ý ŒO˜DÔ.Ð0BÑ CÔ CÐ CØ × $Ò $ X¨yÑ 9Ô 9Ð 9Ø!×5Ò5°iÀÈ3ÐPSÑTÔT‰NˆE�7Ø×,Ò,¨Y¸¸SÑAÔAˆHØð 0ð 0˜9˜9 Z°Ñ5Ô5ð 0¸Ø�˜ E¨7Ñ3Ô3Ð3Ø×%Ò% hÑ/Ô/Ð/ð 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ðÐs£ÃG0à Gà B GÅ F+ Å%#F Æ F+ ÆFÆF+ ÆFÆF+ Æ GÆ+F/ Æ/GÆ2F/ Æ3GÆ6 GÇG ÇGÇ G Ç GÇ G0ÇG ÇG0Ç G Ç!G0Ç0G4Ç7G4ÚcategorycóÄ—t|jd|›�d¦«}|rB|¦«r:t d|›d�¦«| d|›�¦«dSdSdS)NÚhas_z Installing z as non editableÚinstall_)ÚgetattrrZÚ_loggerÚinforÆ)rUràÚ has_categorys r@rÁzeditable_wheel._run_installfs‰€Ý˜tÔ0Ð2C¸Ð2CÐ2CÀTÑJÔJˆ Ø ð 4˜L˜L™NœNð 4Ý �LŠLÐA xÐAÐAÐAÑ BÔ BÐ BØ × Ò Ð2¨Ð2Ð2Ñ 3Ô 3Ð 3Ð 3Ð 3ð 4ð 4ð 4ð 4rBrÕÚEditableStrategycó\—d|›d|›�}t|j¦«}t |j¦«}|tjur:t t|jd|¦«¦«}t|j|||¦«St|j¦«}t||j |¦«} |tj u} t|j ¦«dhkr| s| r@|j  dd¦«} t|j|t|| ¦«g¦«St!|j|¦«S)zDDecides which strategy to use to implement an editable installation.ú __editable__.rËr#rNr{)r rSr/rAr3rGÚ _empty_dirÚ _LinkTreerZÚ_find_packagesÚ_simple_layoutr^r7Úsetr}Ú _StaticPthÚ_TopLevelFinder) rUrlrÕrŽÚ build_namerSr3Ú auxiliary_dirÚpackagesÚhas_simple_layoutÚis_compat_modeÚsrc_dirs r@rÓzeditable_wheel._select_strategyls#€ð2 TÐ1Ð1¨CÐ1Ð1ˆ ݘ4Ô+Ñ,Ô,ˆ Ý×$Ò$ T¤YÑ/Ô/ˆà •=Ô'Ð 'Ð 'Ý&¥t¨DÔ,<¸gÀzÑ'RÔ'RÑSÔSˆMݘTÔ.°°mÀYÑOÔOÐ Oå! $Ô"3Ñ4Ô4ˆÝ*¨8°TÔ5EÀ{ÑSÔSÐØ¥Ô!5Ð5ˆÝ ˆtÔÑ Ô  R DÒ (Ð (Ð->Ð (À.Ð (àÔ&×*Ò*¨2¨sÑ3Ô3ˆGݘdÔ/°½¸[È'Ñ8RÔ8RÐ7SÑTÔTÐ Tõ˜tÔ0°$Ñ7Ô7Ð7rB©r5rW)r5r4)rlrwr�rrŽrr�r)r5rµ) r¾rwr�rrŽrr�rr5rµ)r³rw)ràrw)rlrwrÕrwrŽrr5rè)rCrDrErFÚ descriptionr r/Ú user_optionsrVrarqrfr„rŒr­r«r½rÂrÀrÅrjrÁrÓrIrBr@rKrKhsm€€€€€ððð W€Kð LØKØ �$˜˜ Ô!6Ð!<¸"Ñ=Ô=Ð>ð€Lð ððð VðVðVðVð ðððð* Að Að Að'ð'ð'ð&ð&ð&ð&ð =#ð=#ð=#ð=#ð~ #ð #ð #ð ð ð ð ð ð ð ð ð'ð'ð'ð'ð,ðððð8ððð84ð4ð4ð4ð 8ð8ð8ð8ð8ð8rBrKcó&—eZdZdd „Zdd „Zdd„ZdS)rèr¬r+r»ú list[str]r¼úMapping[str, str]r5Úobjectcó—dSrPrI)rUr¬r»r¼s r@Ú__call__zEditableStrategy.__call__ˆs€à�rBr)có—dSrPrIrTs r@Ú __enter__zEditableStrategy.__enter__‹s€€€rBÚ _exc_typeútype[BaseException] | NoneÚ _exc_valueúBaseException | NoneÚ _tracebackúTracebackType | Nonecó—dSrPrI©rUrrrs r@Ú__exit__zEditableStrategy.__exit__Œs €ð �rBN)r¬r+r»rür¼rýr5rþ©r5r))rrrrrrr5rþ)rCrDrErrr rIrBr@rèrè‡sJ€€€€€ððððð%Ð$Ð$Ð$ððððððrBrècó.—eZdZdd „Zdd„Zdd„Zdd„ZdS)rðrYrrlrwÚ path_entriesú list[Path]r5rWcó0—||_||_||_dSrP)rYrlr)rUrYrlrs r@Ú__init__z_StaticPth.__init__•s€ØˆŒ ؈Œ Ø(ˆÔÐÐrBr¬r+r»rür¼rýcó°—d d„|jD¦«¦«}t|›d�¦«}| d|j›d�|¦«dS)Nú c3óXK—|]%}t| ¦«¦«V—Œ&dSrP)rwr~)Ú.0Úps r@ú z&_StaticPth.__call__..�s2èè€ÐHÐH°�C § ¢ ¡ ¤ Ñ,Ô,ÐHÐHÐHÐHÐHÐHrBrêú.pth)r`rÚ _encode_pthÚwritestrrl)rUr¬r»r¼ÚentriesÚcontentss r@rz_StaticPth.__call__šsb€ð—)’)ÐHÐH°dÔ6GÐHÑHÔHÑHÔHˆÝ '˜~˜~˜~Ñ.Ô.ˆØ �ŠÐ6 t¤yÐ6Ð6Ð6¸ÑAÔAÐAÐAÐArBr)cóª—dtttj|j¦«¦«›d�}t  |tz¦«|S)Nz_ Editable install will be performed using .pth file to extend `sys.path` with: z )Úlistr‡r\ÚfspathrråÚwarningÚ_LENIENT_WARNING©rUÚmsgs r@rz_StaticPth.__enter__¡sQ€ð å �c•"”)˜TÔ.Ñ/Ô/Ñ 0Ô 0ð ð ð ˆõ �Š˜Õ.Ñ.Ñ/Ô/Ð/؈ rBrrþrrcó—dSrPrIr s r@r z_StaticPth.__exit__©s €ð ˆrBN)rYrrlrwrrr5rW©r¬r+r»rür¼rýr5rWr ©rrþrrþrrþr5rW)rCrDrErrrr rIrBr@rðrð”sh€€€€€ð)ð)ð)ð)ð BðBðBðBððððð ð ð ð ð ð rBrðcóZ‡—eZdZdZd#ˆfd „ Zd$ˆfd„ Zd%d„Zd&d'd„Zd(d„Zd)d„Z d*d"„Z ˆxZ S)+rìa` Creates a ``.pth`` file that points to a link tree in the ``auxiliary_dir``. This strategy will only link files (not dirs), so it can be implemented in any OS, even if that means using hardlinks instead of symlinks. By collocating ``auxiliary_dir`` and the original source code, limitations with hardlinks should be avoided. rYrrlrwrórrŽr5rWcó •—t|¦«|_t|¦« ¦«|_| d¦«j|_t¦« |||jg¦«dS)Nr$) r rór~rŽr£Ú copy_fileÚ_fileÚsuperr)rUrYrlrórŽÚ __class__s €r@rz_LinkTree.__init__½snø€õ" -Ñ0Ô0ˆÔݘi™œ×0Ò0Ñ2Ô2ˆŒØ×)Ò)¨*Ñ5Ô5Ô?ˆŒ Ý ‰Œ×Ò˜˜t dÔ&8Ð%9Ñ:Ô:Ð:Ð:Ð:rBr¬r+r»rür¼rýcóz•—| ||¦«t¦« |||¦«dSrP)Ú _create_linksr+r)rUr¬r»r¼r,s €r@rz_LinkTree.__call__És=ø€ð ×Ò˜5 'Ñ*Ô*Ð*Ý ‰Œ×Ò˜  wÑ/Ô/Ð/Ð/Ð/rBÚfiler4có*—tt¦«5t|¦« ¦« |j¦«}t |¦« tj d¦«cddd¦«S#1swxYwYdS)Nú/) rÚ ValueErrorr r~Ú relative_torŽrwÚreplacer\Úsep)rUr/r_s r@Ú_normalize_outputz_LinkTree._normalize_outputÏs³€å •jÑ !Ô !ð 2ð 2ݘ‘:”:×%Ò%Ñ'Ô'×3Ò3°D´NÑCÔCˆDÝ�t‘9”9×$Ò$¥R¤V¨SÑ1Ô1ð 2ð 2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2øøøð 2ð 2ð 2ð 2ðˆts•A&BÂB ÂB NÚrelative_outputÚsrc_filecó²—|j|z }|j ¦«s|j d¬¦«| |||¬¦«dS)NT)Úparents©Úlink)rór†Úis_dirrer*)rUr7r8r<Údests r@Ú _create_filez_LinkTree._create_fileÖs\€ØÔ! OÑ3ˆØŒ{×!Ò!Ñ#Ô#ð ,Ø ŒK× Ò  dÐ Ñ +Ô +Ð +Ø � Š �8˜T¨ˆ Ñ-Ô-Ð-Ð-Ð-rBÚoutput_mappingc󘇗‰j dd¬¦«t‰j¦«rdnd}ˆfd„| ¦«D¦«}d„|D¦«}|D]3}‰ |¦«}|r||vr‰ ||¦«Œ4| ¦«D]\}}‰ |||¬¦«ŒdS)NT)r:rcÚsymÚhardc3óL•K—|]\}}‰ |¦«|fV—ŒdSrP)r6)rÚkÚvrUs €r@rz*_LinkTree._create_links..ßs:øèè€ÐXÐX¹¸¸A�t×-Ò-¨aÑ0Ô0°!Ð4ÐXÐXÐXÐXÐXÐXrBcó—i|] \}}|®||“Œ SrPrI)rrErFs r@ú z+_LinkTree._create_links..ás€ÐAÐAÐA™T˜Q °1°=�A�q°=°=°=rBr;)róreÚ_can_symlink_filesÚitemsr6r?) rUÚoutputsr@Ú link_typeÚ normalisedÚmappingsÚoutputÚrelativeÚsrcs ` r@r.z_LinkTree._create_linksÜsø€Ø Ô× Ò ¨¸Ð Ñ=Ô=Ð=Ý/°Ô0BÑCÔCÐO�E�EȈ ØXÐXÐXÐXÀ×AUÒAUÑAWÔAWÐXÑXÔXˆ àAÐA ZÐAÑAÔAˆàð 4ð 4ˆFØ×-Ò-¨fÑ5Ô5ˆHØð 4˜H¨HÐ4Ð4Ø×!Ò! (¨FÑ3Ô3Ð3øà%Ÿ^š^Ñ-Ô-ð =ð =‰MˆH�cØ × Ò ˜h¨°)Ð Ñ <Ô <Ð <Ð <ð =ð =rBr)cóN—d}t |tz¦«|S)Nz=Strict editable install will be performed using a link tree. )rår Ú_STRICT_WARNINGr"s r@rz_LinkTree.__enter__ës#€ØNˆÝ�Š˜�oÑ-Ñ.Ô.Ð.؈ rBrrþrrcóF—d|j›d�}tjd|¦«dS)Nz\ Strict editable installation performed using the auxiliary directory: z† Please be careful to not remove this directory, otherwise you might not be able to import/use your package. úEditable installation.)rór r=©rUrrrr#s r@r z_LinkTree.__exit__ðs:€ð  à Ô ð ð ð ˆõ ÔÐ5°sÑ;Ô;Ð;Ð;Ð;rB) rYrrlrwrórrŽrr5rWr%)r/rwr5r4rP)r7rwr8rw)r@rýr r&) rCrDrErFrrr6r?r.rr Ú __classcell__)r,s@r@rìrì²sÎø€€€€€ððð ;ð ;ð ;ð ;ð ;ð ;ð0ð0ð0ð0ð0ð0ð ðððð.ð.ð.ð.ð.ð =ð =ð =ð =ððððð <ð <ð <ð <ð <ð <ð <ð —eZdZdd„Zdd „Zdd „Zdd„Zdd„Zd d„ZdS)!rñrYrrlrwr5rWcó"—||_||_dSrP)rYrl)rUrYrls r@rz_TopLevelFinder.__init__s€ØˆŒ ؈Œ ˆ ˆ rBú5tuple[str, str, dict[str, str], dict[str, list[str]]]c ó‡‡ —‰jjp tj}t t ‰j¦«t ‰j¦«¦«}‰jjpi}t|||¦«Š tt t‰jj pg‰ ¦«d„t‰ ¦«D¦«¦«¦«}ˆ ˆfd„‰jj pgD¦«}i‰ ¥|¥}d‰j›d�}tj|¦«}||||fS)Nc3óK—|]}|gfV—Œ dSrPrI)rÚnss r@rz0_TopLevelFinder.template_vars..s&èè€ÐDÐD˜b�"�b�ÐDÐDÐDÐDÐDÐDrBcóL•—i|] }|t|‰‰jjpd¦«“Œ!S)rN)rrYr[)rÚpkgÚrootsrUs €€r@rHz1_TopLevelFinder.template_vars..sBø€ð ð ð àð Õ" 3¨¨t¬yÔ/AÐ/GÀRÑHÔHð ð ð rBrêz.finder)rYr[r\r]r ríÚ_find_top_level_modulesr^Ú_find_package_rootsÚdictÚ_find_namespacesrôÚ_find_virtual_namespacesr|rlrÚsafe_identifier) rUr[Ú top_levelr^Ú namespaces_Úlegacy_namespacesr¼rlÚfinderr`s ` @r@Ú template_varsz_TopLevelFinder.template_varss#øø€Ø”9Ô%Ð2­¬ˆÝ�.¨¬Ñ3Ô3Õ5LÈTÌYÑ5WÔ5WÑXÔXˆ Ø”iÔ+Ð1¨rˆ Ý# I¨{¸HÑEÔEˆåÝ Ý  ¤Ô!3Ð!9°r¸5ÑAÔAØDÐDÕ$<¸UÑ$CÔ$CÐDÑDÔDñ ô ñ ô ˆ ð ð ð ð ð à”yÔ3Ð9°rð ñ ô Ðð 1�UÐ0Ð/Ð0ˆð 2˜tœyÐ1Ð1Ð1ˆÝÔ/°Ñ5Ô5ˆØ�t˜W kÐ1Ð1rBúIterator[tuple[str, bytes]]c#óÖK—| ¦«\}}}}tt|||¦«d¦«}|›d�|fV—td|›d|›d�¦«}d|j›d�|fV—dS)Núutf-8z.pyzimport z; z .install()rêr)rkÚbytesÚ_finder_templaterrl)rUrjrlr¼rhÚcontents r@Úget_implementationz"_TopLevelFinder.get_implementation s˜èè€Ø-1×-?Ò-?Ñ-AÔ-AÑ*ˆ��g˜{åÕ(¨¨w¸ ÑDÔDÀgÑNÔNˆØˆ~ˆ~ˆ~˜wÐ'Ð'Ð'Ð'åÐD¨ÐDÐD°&ÐDÐDÐDÑEÔEˆØ.˜tœyÐ.Ð.Ð.°Ð8Ð8Ð8Ð8Ð8Ð8rBr¬r+r»rür¼rýcóf—| ¦«D]\}}| ||¦«ŒdSrP)rrr)rUr¬r»r¼r/rqs r@rz_TopLevelFinder.__call__)sD€ð"×4Ò4Ñ6Ô6ð *ð *‰MˆD�'Ø �NŠN˜4 Ñ )Ô )Ð )Ð )ð *ð *rBr)cóN—d}t |tz¦«|S)Nz=Editable install will be performed using a meta path finder. )rår r!r"s r@rz_TopLevelFinder.__enter__/s$€ØNˆÝ�Š˜Õ.Ñ.Ñ/Ô/Ð/؈ rBrrþrrcó4—d}tjd|¦«dS)Nz¢ Please be careful with folders in your working directory with the same name as your package as they may take precedence during imports. rU)r r=rVs r@r z_TopLevelFinder.__exit__4s%€ð  ˆõ ÔÐ5°sÑ;Ô;Ð;Ð;Ð;rBN)rYrrlrwr5rW)r5rZ)r5rlr%r r&) rCrDrErrkrrrrr rIrBr@rñrñsŒ€€€€€ððððð2ð2ð2ð2ð69ð9ð9ð9ð*ð*ð*ð*ð ðððð <ð <ð <ð <ð <ð >> _simple_layout(['a'], {"": "src"}, "/tmp/myproj") True >>> _simple_layout(['a', 'a.b'], {"": "src"}, "/tmp/myproj") True >>> _simple_layout(['a', 'a.b'], {}, "/tmp/myproj") True >>> _simple_layout(['a', 'a.a1', 'a.a1.a2', 'b'], {"": "src"}, "/tmp/myproj") True >>> _simple_layout(['a', 'a.a1', 'a.a1.a2', 'b'], {"a": "a", "b": "b"}, ".") True >>> _simple_layout(['a', 'a.a1', 'a.a1.a2', 'b'], {"a": "_a", "b": "_b"}, ".") False >>> _simple_layout(['a', 'a.a1', 'a.a1.a2', 'b'], {"a": "_a"}, "/tmp/myproj") False >>> _simple_layout(['a', 'a.a1', 'a.a1.a2', 'b'], {"a.a1.a2": "_a2"}, ".") False >>> _simple_layout(['a', 'a.b'], {"": "src", "a.b": "_ab"}, "/tmp/myproj") False >>> # Special cases, no packages yet: >>> _simple_layout([], {"": "src"}, "/tmp/myproj") True >>> _simple_layout([], {"a": "_a", "": "src"}, "/tmp/myproj") False có4•—i|]}|t|‰‰¦«“ŒSrIr)rr_r^rSs €€r@rHz"_simple_layout..‰s(ø€Ð XÐ XÐ XȈcÕ$ S¨+°{ÑCÔCÐ XÐ XÐ XrBrNc 3ó„•K—|]:\}}tjt‰g| d¦«¢RŽ|¦«V—Œ;dS©r{N)rÚ same_pathr Úsplit)rÚkeyÚvaluer†s €r@rz!_simple_layout..�saøèè€ððá ˆC�õ Œ�˜VÐ5 c§i¢i°¡n¤nÐ5Ð5Ð5°uÑ=Ô=ððððððrB)rïr\r_Ú commonpathr Ú _parent_pathrJÚall)rôr^rSÚlayoutr†s `` @r@rîrîjs¬øøø€ð>YÐ XÐ XÐ XÐ XÈxÐ XÑ XÔ X€FØ ð.Ý�;ÑÔ B¨¨ :Ð-Ð-Ý ŒW× Ò ¥­ °f·l²l±n´nÑ EÔ EÑ FÔ F€FÝ ððððà Ÿ,š,™.œ.ðñôñ ô ðrBcóp—| |¦«}| dtjz¦«S)a7Infer the parent path containing a package, that if added to ``sys.path`` would allow importing that package. When ``pkg`` is directly mapped into a directory with a different name, return its own path. >>> _parent_path("a", "src/a") 'src' >>> _parent_path("b", "src/c") 'src/c' r1)Ú removesuffixÚrstripr\r5)r_Úpkg_pathr†s r@r�r�“s/€ð× "Ò " 3Ñ 'Ô '€FØ �=Š=˜�rœv™Ñ &Ô &Ð&rBrYrú Iterator[str]c#óK—t|jpg¦«Ed{V—†|jpg}d„|D¦«}|jr |jV—n|jpg}|d„|D¦«z }|D]}| d¦«\}}}|V—Œ dS)Ncó—g|]}d|v¯|‘Œ S©r{rI©rÚmods r@ú z"_find_packages..¥s€Ð>Ð>Ð>˜c°3¸#°:°:�c°:°:°:rBcó.—g|]}d|jv¯ |j‘ŒSr§©rl©rÚxs r@rªz"_find_packages..ªs!€ÐHÐHÐH a¸#Àĸ-¸-˜1œ6¸-¸-¸-rBr{)ÚiterrôÚ py_modulesÚ ext_packageÚ ext_modulesÚ rpartition)rYr°Únested_modulesr²ÚmoduleÚpackageÚ_s r@rírí¡sÍèè€Ý�D”MÐ' RÑ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(à”Ð& B€JØ>Ð> ZÐ>Ñ>Ô>€NØ ÔðIØÔÐÐÐÐàÔ&Ð,¨"ˆ ØÐHÐH¨;ÐHÑHÔHÑHˆà ððˆØ×)Ò)¨#Ñ.Ô.‰ ˆ��A؈ ˆ ˆ ˆ ððrBc#óˆK—|jpg}d„|D¦«Ed{V—†|js|jpg}d„|D¦«Ed{V—†dSdS)Nc3ó"K—|] }d|v¯|V—Œ dSr—rIr¨s r@rz*_find_top_level_modules..³s&èè€Ð<Ð<˜¨S¸¨^¨^�¨^¨^¨^¨^Ð<Ð.·s0èè€ÐEÐE˜q°3¸a¼fÐ3DÐ3D�A”FÐ3DÐ3DÐ3DÐ3DÐEÐErB)r°r±r²)rYr°r²s r@rara±s‰èè€Ø”Ð& B€JØ<Ð<˜zÐ<Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<à Ô ðFØÔ&Ð,¨"ˆ ØEÐE KÐEÑEÔEÐEÐEÐEÐEÐEÐEÐEÐEÐEðFðFrBrýr[có\‡‡—ˆˆfd„t|¦«D¦«}t|¦«S)Nc óN•—i|]!}|tt|‰‰¦«¦«“Œ"SrI)Ú_absolute_rootr)rr_r^r[s €€r@rHz'_find_package_roots..¿s@ø€ð!ð!ð!à ð �^Õ-¨c°;ÀÑIÔIÑ JÔ Jð!ð!ð!rB)ÚsortedÚ_remove_nested)rôr^r[Ú pkg_rootss `` r@rbrbºsIøø€ð !ð!ð!ð!ð!å˜(Ñ#Ô#ð!ñ!ô!€Iõ ˜)Ñ $Ô $Ð$rBr_cóê—t|¦«}|j}| ¦«r!t| ¦«¦«St| ¦«|jz ¦«S)z(Works for packages and top-level modules)r r†ryrwr~rl)r_Úpath_r†s r@r½r½ÇsY€å �‰JŒJ€EØ Œ\€Fà ‡|‚|�~„~ð2Ý�5—=’=‘?”?Ñ#Ô#Ð#å�6—>’>Ñ#Ô# e¤jÑ0Ñ1Ô1Ð1rBrÀc #ó>K—|D]—}d|vrŒ| d¦«}tt|¦«dz dd¦«D]Y}d |d|…¦«}t t ||d¦«¦«}| ¦«r||vr|V—ŒZŒ˜dS)a8By carefully designing ``package_dir``, it is possible to implement the logical structure of PEP 420 in a package without the corresponding directories. Moreover a parent package can be purposefully/accidentally skipped in the discovery phase (e.g. ``find_packages(include=["mypkg.*"])``, when ``mypkg.foo`` is included by ``mypkg`` itself is not). We consider this case to also be a virtual namespace (ignoring the original directory) to emulate a non-editable installation. This function will try to find these kinds of namespaces. r{r"réÿÿÿÿNrN)r™ÚrangeÚlenr`r rry)rÀr_ÚpartsÚiÚ partial_namer_s r@rereÒsÀèè€ðð #ð #ˆØ �cˆ>ˆ>Ø Ø— ’ ˜#‘”ˆÝ•s˜5‘z”z A‘~ q¨"Ñ-Ô-ð #ð #ˆAØŸ8š8 E¨"¨1¨"¤IÑ.Ô.ˆLÝÕ)¨,¸ À2ÑFÔFÑGÔGˆDØ—;’;‘=”=ð # L¸ Ð$AÐ$Aà"Ð"Ð"Ð"øð  #ð #ð #rBrüúIterator[tuple[str, list[str]]]c#óÊK—|D]]}t||d¦«}t|¦« ¦«r)t|d¦« ¦«s||gfV—Œ^dS)NrNz __init__.py)rr ry)rôrÀr_r_s r@rdrdês|èè€ðð ð ˆÝ   i°Ñ4Ô4ˆÝ �‰:Œ:× Ò Ñ Ô ð ¥t¨D°-Ñ'@Ô'@×'GÒ'GÑ'IÔ'Ið Ø˜˜�-Ð Ð Ð øð ð rBcó:‡‡—t| ¦«¦«}tt| ¦«¦«¦«D]H\ŠŠt ˆˆfd„| ¦«D¦«¦«r| ‰¦«ŒI|S)Nc3óN•K—|]\}}‰|kot‰‰||¦«V—Œ dSrP)Ú _is_nested)rÚotherÚ other_pathr_r_s €€r@rz!_remove_nested..÷sRøèè€ð ð á!��zð �5ŠLÐ E�Z¨¨T°5¸*ÑEÔEð ð ð ð ð ð rB)rcÚcopyÚreversedrrJÚanyÚpop)rÀrOr_r_s @@r@r¿r¿ós¦øø€Ý �)—.’.Ñ"Ô"Ñ #Ô #€Få�d 9§?¢?Ñ#4Ô#4Ñ5Ô5Ñ6Ô6ðð‰ ˆˆTÝ ð ð ð ð ð à%.§_¢_Ñ%6Ô%6ð ñ ô ñ ô ð ð �JŠJ�s‰OŒOˆOøà €MrBr_r£r†Ú parent_pathcó—tj|¦«}| |dd¦« d¦« d¦«}| |¦«o"|tjt |g|¢Rަ«kS)a© Return ``True`` if ``pkg`` is nested inside ``parent`` both logically and in the file system. >>> _is_nested("a.b", "path/a/b", "a", "path/a") True >>> _is_nested("a.b", "path/a/b", "a", "otherpath/a") False >>> _is_nested("a.b", "path/a/b", "c", "path/c") False >>> _is_nested("a.a", "path/a/a", "a", "path/a") True >>> _is_nested("b.a", "path/b/a", "a", "path/a") False rNr"r{)rÚnormpathr4Ústripr™Ú startswithr )r_r£r†rÕÚ norm_pkg_pathÚrests r@rÎrÎs…€õ”N 8Ñ,Ô,€MØ �;Š;�v˜r 1Ñ %Ô %× +Ò +¨CÑ 0Ô 0× 6Ò 6°sÑ ;Ô ;€DØ �>Š>˜&Ñ !Ô !ð  mµu´~Ý ˆ[Ð ˜4Ð Ð Ð ñ8ô8ò'ðrBÚdir_cóZ—tj|d¬¦«tj|¦«|S)zFCreate a directory ensured to be empty. Existing files may be removed.T)Ú ignore_errors)rÚrmtreer\Úmakedirs)rÜs r@rërës,€å „N�4 tÐ,Ñ,Ô,Ð,Ý„K�ÑÔÐØ €KrBcó"—eZdZdd„Zd„Zd„ZdS)rr5rWcóL—||_||_||_||_g|_dSrP)rZr[r�Ú editable_namerK)rUrZr�rãr[s r@rz_NamespaceInstaller.__init__s,€Ø(ˆÔØ ˆŒ Ø 0ˆÔØ*ˆÔØ"$ˆŒ ˆ ˆ rBcóf—tj |j|j|jz¦«S)zInstallation target.)r\r_r`r�rãÚ nspkg_extrTs r@Ú_get_nspkg_filez#_NamespaceInstaller._get_nspkg_file%s%€åŒw�|Š|˜DÔ1°4Ô3EÈÌÑ3VÑWÔWÐWrBcóD—tt|j¦«¦«S)z1Where the modules/packages should be loaded from.)Úreprrwr[rTs r@Ú _get_rootz_NamespaceInstaller._get_root)s€å•C˜œ Ñ&Ô&Ñ'Ô'Ð'rBNrø)rCrDrErrærérIrBr@rrsI€€€€€ð%ð%ð%ð%ðXðXðXð(ð(ð(ð(ð(rBra from __future__ import annotations import sys from importlib.machinery import ModuleSpec, PathFinder from importlib.machinery import all_suffixes as module_suffixes from importlib.util import spec_from_file_location from itertools import chain from pathlib import Path MAPPING: dict[str, str] = {mapping!r} NAMESPACES: dict[str, list[str]] = {namespaces!r} PATH_PLACEHOLDER = {name!r} + ".__path_hook__" class _EditableFinder: # MetaPathFinder @classmethod def find_spec(cls, fullname: str, path=None, target=None) -> ModuleSpec | None: # type: ignore # Top-level packages and modules (we know these exist in the FS) if fullname in MAPPING: pkg_path = MAPPING[fullname] return cls._find_spec(fullname, Path(pkg_path)) # Handle immediate children modules (required for namespaces to work) # To avoid problems with case sensitivity in the file system we delegate # to the importlib.machinery implementation. parent, _, child = fullname.rpartition(".") if parent and parent in MAPPING: return PathFinder.find_spec(fullname, path=[MAPPING[parent]]) # Other levels of nesting should be handled automatically by importlib # using the parent path. return None @classmethod def _find_spec(cls, fullname: str, candidate_path: Path) -> ModuleSpec | None: init = candidate_path / "__init__.py" candidates = (candidate_path.with_suffix(x) for x in module_suffixes()) for candidate in chain([init], candidates): if candidate.exists(): return spec_from_file_location(fullname, candidate) return None class _EditableNamespaceFinder: # PathEntryFinder @classmethod def _path_hook(cls, path) -> type[_EditableNamespaceFinder]: if path == PATH_PLACEHOLDER: return cls raise ImportError @classmethod def _paths(cls, fullname: str) -> list[str]: paths = NAMESPACES[fullname] if not paths and fullname in MAPPING: paths = [MAPPING[fullname]] # Always add placeholder, for 2 reasons: # 1. __path__ cannot be empty for the spec to be considered namespace. # 2. In the case of nested namespaces, we need to force # import machinery to query _EditableNamespaceFinder again. return [*paths, PATH_PLACEHOLDER] @classmethod def find_spec(cls, fullname: str, target=None) -> ModuleSpec | None: # type: ignore if fullname in NAMESPACES: spec = ModuleSpec(fullname, None, is_package=True) spec.submodule_search_locations = cls._paths(fullname) return spec return None @classmethod def find_module(cls, _fullname) -> None: return None def install(): if not any(finder == _EditableFinder for finder in sys.meta_path): sys.meta_path.append(_EditableFinder) if not NAMESPACES: return if not any(hook == _EditableNamespaceFinder._path_hook for hook in sys.path_hooks): # PathEntryFinder is needed to create NamespaceSpec without private APIS sys.path_hooks.append(_EditableNamespaceFinder._path_hook) if PATH_PLACEHOLDER not in sys.path: sys.path.append(PATH_PLACEHOLDER) # Used just to trigger the path hook rlr¼rúdict[str, list[str]]cóÀ—tt| ¦«tjd¦«¬¦«¦«}t  |||¬¦«S)z_Create a string containing the code for the``MetaPathFinder`` and ``PathEntryFinder``. r)rš©rlr¼r)rcr¾rJÚoperatorÚ itemgetterÚ_FINDER_TEMPLATEÚformatrìs r@rprp‡sL€õ •6˜'Ÿ-š-™/œ/­xÔ/BÀ1Ñ/EÔ/EÐFÑFÔFÑGÔG€GÝ × "Ò "¨°gÈ*Ð "Ñ UÔ UÐUrBcó—eZdZdZdS)r�zCFile system does not seem to support either symlinks or hard links.N)rCrDrErFrIrBr@r�r�‘s€€€€€ØMÐMÐMÐMrBr�)rqrwr5ro)rƒr r5r„)rôr’r^r“rSrr5r„)rYrr5r¤)rôr’r^rýr[rr5r“)r_rr5rw)rÀr“r5r¤)rôrürÀr“r5rÊ)rÀr“r5r“) r_rwr£rwr†rwrÕrwr5r„)rÜr,r5r,)rlrwr¼rýrrêr5rw)brFÚ __future__rryÚloggingrír\rÑrÈÚcollections.abcrrrÚ contextlibrÚenumrÚinspectr Ú itertoolsr r Úpathlibr Útempfiler ÚtypesrÚtypingrrrrrNrrrrrrrr2rrÚ discoveryrrYrÚwarningsr r!r#ršr$r¨r%rtr&r—r'r›r(r¥Útyping_extensionsr)Ú_vendor.wheel.wheelfiler+r,Ú getLoggerrCrår/rSr!rKrèrðrìrñrrIrîr�rírarbr½rerdr¿rÎrëÚ InstallerrrïrpÚ FileErrorr�rIrBr@úrs%ðð ð ð#Ð"Ð"Ð"Ð"Ð"à € € € Ø€€€Ø€€€Ø € € € Ø € € € ØÐÐÐØ7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7Ð7ØÐÐÐÐÐØÐÐÐÐÐØÐÐÐÐÐØ$Ð$Ð$Ð$Ð$Ð$Ð$Ð$ØÐÐÐÐÐØ'Ð'Ð'Ð'Ð'Ð'ØÐÐÐÐÐØ9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9Ð9àJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJÐJØÐÐÐÐÐØ!Ð!Ð!Ð!Ð!Ð!Ð!Ð!Ø)Ð)Ð)Ð)Ð)Ð)ØÐÐÐÐÐØDÐDÐDÐDÐDÐDÐDÐDØ%Ð%Ð%Ð%Ð%Ð%Ø.Ð.Ð.Ð.Ð.Ð.Ø1Ð1Ð1Ð1Ð1Ð1Ø.Ð.Ð.Ð.Ð.Ð.Ø+Ð+Ð+Ð+Ð+Ð+ØCÐCÐCÐCÐCÐCàð4Ø&Ð&Ð&Ð&Ð&Ð&à3Ð3Ð3Ð3Ð3Ð3à €WˆT˜Ð!Ñ!Ô!€Ø ˆ'Ô ˜HÑ %Ô %€ð&$ð&$ð&$ð&$ð&$�Dñ&$ô&$ð&$ðR€ðÐð \8ð\8ð\8ð\8ð\8�Wñ\8ô\8ð\8ð~ ð ð ð ð �xñ ô ð ð ð ð ð ð ñ ô ð ð<ð><ð><ð><ð><ñ><ô><ð><ðBðððð*ðððð(&ð&ð&ð&ðR 'ð 'ð 'ð ð ð ð ð FðFðFðFð %ð %ð %ð %ð2ð2ð2ð2ð#ð#ð#ð#ð0 ð ð ð ð ð ð ð ððððð,ðððð(ð(ð(ð(ð(˜*Ô.ñ(ô(ð(ð"VÐðrVðVðVðVðNðNðNðNðN˜Ô(ñNôNðNðNðNrB