§
    !@Äj½ˆ  ã                  ó:  — d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	m
Z
mZmZ ddlmZ ddlmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZ ddlmZ ddlmZmZmZm Z m!Z! ddl"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( ddl%m)Z) ddl*m+Z+m,Z, ddl-m.Z. ddl/m0Z0 ddl1m2Z2m3Z3 ddl4m4Z5 ddl6m6Z7 ddl8m8Z9 ddl:m:Z; ddl<m<Z= ddl>m>Z? erddl@mAZA ddlBmCZC  e de)¬¦  «        ZD ejE        eF¦  «        ZG G d„ d e¦  «        ZHd!ZId"ZJ G d#„ d$e#¦  «        ZK G d%„ d&e¦  «        ZL G d'„ d(¦  «        ZM G d)„ d*eM¦  «        ZN G d+„ d,¦  «        ZOd_d1„ZPd`d5„ZQdad<„ZRd=„ ZSdbdA„ZTdbdB„ZUdcdE„ZVdddG„ZWdedI„ZXdfdL„ZYdgdM„ZZdhdR„Z[didT„Z\ G dU„ dVe(j]        ¦  «        Z^dWZ_djd\„Z` G d]„ d^e'ja        ¦  «        ZbdS )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ÚClassVarÚ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   — e Zd ZdZdZdZdZed
d„¦   «         Zd	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t           j        S |                     ¦   «         }|t           j        vrt	          j        d|›d�¦  «        ‚|dk    rt          j        ddd¬¦  «         t           |         S )NzInvalid editable mode: z. Try: 'strict'.ÚCOMPATzCompat 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.
                zuserguide/development_mode.html)Úsee_docs)r0   ÚLENIENTÚupperÚ__members__r   ÚOptionErrorr"   Úemit)Úclsr4   Ú_modes      úRC:\Projects\Historical\venv\Lib\site-packages\setuptools/command/editable_wheel.pyÚconvertz_EditableMode.convertA   sŠ   € àð 	)Ý Ô(Ð(à—
’
‘”ˆØ�Ô1Ð1Ð1ÝÔ$Ð%W¸tÐ%WÐ%WÐ%WÑXÔXÐXà�HÒÐÝ(Ô-Ø*ðð ;ðñ ô ð õ  ˜UÔ#Ð#ó    N)r4   r5   r6   r0   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚSTRICTr:   r8   ÚclassmethodrB   © rC   rA   r0   r0   5   sM   € € € € € ðð ð €FØ€GØ€Fàð$ð $ð $ñ „[ð$ð $ð $rC   r0   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                  óÀ   — e Zd ZU dZdZdddd eej        pd¦  «        fgZded	<   d
„ Z	d(d„Z
d(d„Zd„ Zd„ Zd)d„Zd*d„Zd„ Zd+d„Zd,d„Zd(d„Zd-d!„Zd"„ Zd.d$„Zd/d'„ZdS )0Ú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)zdist-info-dir=ÚIz(path to a pre-build .dist-info directoryzmode=NÚ zHClassVar[list[tuple[str, str, str]] | list[tuple[str, str | None, str]]]Úuser_optionsc                ó>   — d | _         d | _        d | _        d | _        d S ©N)Údist_dirÚdist_info_dirÚproject_dirr4   ©Úselfs    rA   Úinitialize_optionsz!editable_wheel.initialize_optionsx   s$   € ØˆŒØ!ˆÔØˆÔØˆŒ	ˆ	ˆ	rC   r6   ÚNonec                óÜ   — | j         }|j        pt          j        | _        |j        pi | _        t          | j        p$t          j         	                    | j        d¦  «        ¦  «        | _        d S )NÚdist)
ÚdistributionÚsrc_rootÚosÚcurdirrU   Úpackage_dirr   rS   ÚpathÚjoin)rW   r[   s     rA   Úfinalize_optionszeditable_wheel.finalize_options~   sX   € ØÔ ˆØœ=Ð5­B¬IˆÔØÔ+Ð1¨rˆÔÝ˜Tœ]ÐT­b¬g¯lªl¸4Ô;KÈVÑ.TÔ.TÑUÔUˆŒˆˆrC   c                óº  — 	 | j                              d¬¦  «         |                      ¦   «          |                      d¦  «         |                      d¦  «        }|                     | j        ¦  «         |                      |¦  «         d S # t          $ rD}| j	        j
        p| j	                             ¦   «         }t          j        |d|› d�¦  «         ‚ d }~ww xY w)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)rS   ÚmkdirÚ_ensure_dist_infoÚreinitialize_commandÚget_finalized_commandÚwrite_wheelfilerT   Ú_create_wheel_fileÚ	Exceptionr\   ÚnameÚget_namer   Úadd_note)rW   rf   ÚexÚprojects       rA   Úrunzeditable_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   ‚BB Â
CÂ?CÃCc                óŒ  — | j         €jt          t          |                      d¦  «        ¦  «        }| j        |_        |                     ¦   «          |                     ¦   «          |j         | _         d S t          | j         ¦  «         	                    d¦  «        sJ ‚t          | j         d¦  «                             ¦   «         sJ ‚d S )Nr&   z
.dist-infoÚMETADATA)rT   r   Údist_info_clsri   rS   Ú
output_dirÚensure_finalizedrs   ÚstrÚendswithr   Úexists)rW   r&   s     rA   rh   z 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×>Ò>Ñ@Ô@Ð@Ð@Ð@Ð@Ð@rC   c                óò   — | j         }|j        sd S t          | j        | j                             dd¦  «        ¦  «                             ¦   «         }t          ||||¦  «        }|                     ¦   «          d S )NrO   ú.)	r\   Únamespace_packagesr   rU   r`   ÚgetÚresolveÚ_NamespaceInstallerÚinstall_namespaces)rW   Úinstallation_dirÚ
pth_prefixr[   r]   Ú	installers         rA   Ú_install_namespacesz"editable_wheel._install_namespaces¤   sw   € àÔ ˆØÔ&ð 	ØˆFå˜Ô(¨$Ô*:×*>Ò*>¸rÀ3Ñ*GÔ*GÑHÔH×PÒPÑRÔRˆÝ'¨Ð.>À
ÈHÑUÔUˆ	Ø×$Ò$Ñ&Ô&Ð&Ð&Ð&rC   r5   c                óÎ   — | j         rt          | j         ¦  «        j        nt          ¦   «         }t          t          |                     d¦  «        ¦  «        }t          |d ¦  «        S )Nz
*.egg-info)rT   r   ÚparentÚmapry   ÚglobÚnext)rW   Ú
parent_dirÚ
candidatess      rA   Ú_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 Ñ%Ô%Ð%rC   rn   ry   Úunpacked_wheelr   Ú	build_libÚtmp_dirc                óš  — | j         }t          |¦  «        }t          |¦  «        }t          t          ||› d�d¦  «        ¦  «        }t          t          ||› d�d¦  «        ¦  «        }t          t          ||› d�d¦  «        ¦  «        }	t          t          |                     dd¬¦  «        ¦  «        }
t          |¦  «        |
_        d|
_        t          t          |                     dd¬¦  «        ¦  «        }t          t          |                     d	d¬¦  «        ¦  «        }|x|_
        x|_        |_        |x|_        x|_        |_        |	x|_        |_        ||_        ||_        |                     d
¦  «        }d|_        t          t,          |                     d¦  «        ¦  «        }d|_        t          |¦  «        |_        t          t2          |                     d¦  «        ¦  «        }d|_        |                      ¦   «         |_        |                      ¦   «          |                     ¦   «          |                     ¦   «          dS )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)r\   ry   r   r   Úegg_info_clsri   Ú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_moderx   )rW   rn   r�   r�   r‘   r[   Úwheelr“   r”   r•   r'   r$   r(   r—   r)   r%   s                   rA   Ú_configure_buildzeditable_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ñ
ô 
ˆð GPÐOˆÔÐO˜eÔ1°E´OØRWÐWˆÔÐW 'Ô"9¸GÔ<OØ8?Ð?ˆÔ %Ô"5Ø")ˆÔØ#ˆÔð ×,Ò,¨_Ñ=Ô=ˆØ#+ˆÔ åÝ ×!5Ò!5Ð6GÑ!HÔ!Hñ
ô 
ˆð !%ˆÔå˜w™<œ<ˆÔå� d×&:Ò&:¸:Ñ&FÔ&FÑGÔGˆØ ˆÔØ)-×)@Ò)@Ñ)BÔ)BˆÔ&à×ÒÑ!Ô!Ð!à×ÒÑ Ô Ð Ø× Ò Ñ"Ô"Ð"Ð"Ð"rC   c                óô   — | j         }|                     d¦  «        }|                     ¦   «         D ]F}|                     |¦  «        }t          |d¦  «        rd|_        Œ/t          |d¦  «        rd|_        ŒGdS )z8Set the ``editable_mode`` flag in the build sub-commandsr$   Úeditable_modeTÚinplaceN)r\   r¥   Úget_sub_commandsÚhasattrr±   r²   )rW   r[   r$   Úcmd_nameÚcmds        rA   r­   z!editable_wheel._set_editable_modeò   sŒ   € àÔ ˆØ×$Ò$ WÑ-Ô-ˆØ×.Ò.Ñ0Ô0ð 	#ð 	#ˆHØ×&Ò& xÑ0Ô0ˆCÝ�s˜OÑ,Ô,ð #Ø$(�Ô!Ð!Ý˜˜iÑ(Ô(ð #Ø"�”øð	#ð 	#rC   ú tuple[list[str], dict[str, str]]c                óx  — g }i }|                       d¦  «        }|                     ¦   «         D ]‰}|                       |¦  «        }t          |d¦  «        r)|                     |                     ¦   «         pg ¦  «         t          |d¦  «        r)|                     |                     ¦   «         pi ¦  «         ŒŠ||fS )Nr$   Úget_outputsÚget_output_mapping)rj   r³   r´   Úextendr¹   Úupdaterº   )rW   ÚfilesÚmappingr$   rµ   r¶   s         rA   Ú_collect_build_outputsz%editable_wheel._collect_build_outputsý   sÁ   € ØˆØ"$ˆØ×*Ò*¨7Ñ3Ô3ˆà×.Ò.Ñ0Ô0ð 	?ð 	?ˆHØ×,Ò,¨XÑ6Ô6ˆCÝ�s˜MÑ*Ô*ð 6Ø—’˜SŸ_š_Ñ.Ô.Ð4°"Ñ5Ô5Ð5Ý�sÐ0Ñ1Ô1ð ?Ø—’˜s×5Ò5Ñ7Ô7Ð=¸2Ñ>Ô>Ð>øà�gˆ~ÐrC   Ú	dist_namec                ó  — |                       ||||¦  «         |                      ¦   «          |                      ¦   «         \  }}|                      d¦  «         |                      d¦  «         |                      d¦  «         ||fS )Nr”   r•   r“   )r¯   Ú_run_build_subcommandsr¿   Ú_run_install)rW   rÀ   r�   r�   r‘   r½   r¾   s          rA   Ú_run_build_commandsz"editable_wheel._run_build_commands  s‹   € ð 	×Ò˜i¨¸ÀGÑLÔLÐLØ×#Ò#Ñ%Ô%Ð%Ø×4Ò4Ñ6Ô6‰ˆˆwØ×Ò˜)Ñ$Ô$Ð$Ø×Ò˜)Ñ$Ô$Ð$Ø×Ò˜&Ñ!Ô!Ð!Ø�gˆ~ÐrC   c                ó  — |                       d¦  «        }|                     ¦   «         D ]^}|                       |¦  «        }|dk    r,t          |¦  «        t          ur|                      |¦  «         ŒI|                      |¦  «         Œ_dS )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)rj   r³   Útyperª   Ú_safely_runÚrun_command)rW   r$   rn   r¶   s       rA   rÂ   z%editable_wheel._run_build_subcommands  s˜   € ð ×*Ò*¨7Ñ3Ô3ˆØ×*Ò*Ñ,Ô,ð 	'ð 	'ˆDØ×,Ò,¨TÑ2Ô2ˆCØ�zÒ!Ð!¥d¨3¡i¤iµ|Ð&CÐ&CØ× Ò  Ñ&Ô&Ð&Ð&à× Ò  Ñ&Ô&Ð&Ð&ð	'ð 	'rC   rµ   c                ó°   — 	 |                       |¦  «        S # t          $ r4 t          j        ddt	          j        ¦   «         › d|› d|› d�¦  «         Y d S w xY w)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È   rm   r"   r>   Ú	tracebackÚ
format_exc)rW   rµ   s     rA   rÇ   zeditable_wheel._safely_run0  sœ   € ð	Ø×#Ò# HÑ-Ô-Ð-øÝð 	ð 	ð 	Ý(Ô-ØBðÝÔ%Ñ'Ô'ðð ð 9Að	ð ð .6ðð ð ñô ð ð ð ð ð	øøøs   ‚ —:AÁAc           
     óú  — ddl m} |                      d¦  «        }|j        }d                     |                     ¦   «         ¦  «        }d}|› d|› d|› d�}t          | j        |¦  «        }|                     ¦   «         r| 	                    ¦   «          t          |¬¦  «        }	t          d¬¦  «        }
t          d	¬¦  «        }|	5 }|
5 }|5 }t          |t          | j        ¦  «        j        ¦  «        }t          j        | j        |¦  «         |                      ||¦  «         |                      ||||¦  «        \  }}|                      |||¦  «        }|5   ||d
¦  «        5 } ||||¦  «         |                     |¦  «         d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   |S )Nr   r+   r&   ú-z
0.editablez.whl)Úsuffixz
.build-libz.build-tempÚw)Úwheel.wheelfiler,   rj   rn   rb   Úget_tagr   rS   r{   Úunlinkr   rT   ÚshutilÚcopytreer†   rÄ   Ú_select_strategyÚwrite_files)rW   rf   r,   r&   rÀ   ÚtagÚ	build_tagÚarchive_nameÚ
wheel_pathr�   r�   Ú	build_tmpÚunpackedÚlibÚtmpÚunpacked_dist_infor½   r¾   ÚstrategyÚ	wheel_objs                       rA   rl   z!editable_wheel._create_wheel_fileL  sH  € Ø-Ð-Ð-Ð-Ð-Ð-à×.Ò.¨{Ñ;Ô;ˆ	Ø”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Æ2F/Æ3GÆ6GÇGÇGÇ	GÇ
GÇG0ÇG	ÇG0Ç G	Ç!G0Ç0G4Ç7G4Úcategoryc                óÄ   — t          | j        d|› �d ¦  «        }|rB |¦   «         r:t                               d|› d�¦  «         |                      d|› �¦  «         d S d S d S )NÚhas_zInstalling z as non editableÚinstall_)Úgetattrr\   Ú_loggerÚinforÈ   )rW   râ   Úhas_categorys      rA   rÃ   zeditable_wheel._run_installh  s‰   € Ý˜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ð 	4rC   r×   ÚEditableStrategyc                ó\  — d|› d|› �}t          | j        ¦  «        }t                               | j        ¦  «        }|t          j        u r:t          t          | j        d|¦  «        ¦  «        }t          | j        |||¦  «        S t          | j        ¦  «        }t          || j        |¦  «        }	|t          j        u }
t          | j        ¦  «        dhk    r|	s|
r@| j                             dd¦  «        }t          | j        |t          ||¦  «        g¦  «        S t!          | j        |¦  «        S )zDDecides which strategy to use to implement an editable installation.ú__editable__.rÍ   r$   rO   r}   )r   rU   r0   rB   r4   rH   Ú
_empty_dirÚ	_LinkTreer\   Ú_find_packagesÚ_simple_layoutr`   r8   Úsetr   Ú
_StaticPthÚ_TopLevelFinder)rW   rn   r×   r�   Ú
build_namerU   r4   Úauxiliary_dirÚpackagesÚhas_simple_layoutÚis_compat_modeÚsrc_dirs               rA   rÕ   zeditable_wheel._select_strategyn  s#  € ð 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Ð7rC   ©r6   rY   )r6   r5   )rn   ry   r�   r   r�   r   r‘   r   )r6   r·   )
rÀ   ry   r�   r   r�   r   r‘   r   r6   r·   )rµ   ry   )râ   ry   )rn   ry   r×   ry   r�   r   r6   rê   )rD   rE   rF   rG   Údescriptionr	   r0   rP   Ú__annotations__rX   rc   rs   rh   r†   rŽ   r¯   r­   r¿   rÄ   rÂ   rÇ   rl   rÃ   rÕ   rJ   rC   rA   rL   rL   h   s†  € € € € € € ðð ð
 W€Kð
 	LØKØ	�$˜˜ Ô!6Ð!<¸"Ñ=Ô=Ð>ð	ð ð ð ð ñ ðð ð ðVð Vð Vð Vðð ð ð ð*	Að 	Að 	Að'ð 'ð 'ð&ð &ð &ð &ð
=#ð =#ð =#ð =#ð~	#ð 	#ð 	#ðð ð ð ðð ð ð ð'ð 'ð 'ð 'ð,ð ð ð ð8ð ð ð84ð 4ð 4ð 4ð8ð 8ð 8ð 8ð 8ð 8rC   rL   c                  ó&   — e Zd Zdd	„Zdd„Zdd„ZdS )rê   r®   r,   r½   ú	list[str]r¾   úMapping[str, str]r6   Úobjectc                ó   — d S rR   rJ   )rW   r®   r½   r¾   s       rA   Ú__call__zEditableStrategy.__call__Š  s   € à�rC   r*   c                ó   — d S rR   rJ   rV   s    rA   Ú	__enter__zEditableStrategy.__enter__�  s   € € € rC   Ú	_exc_typeútype[BaseException] | NoneÚ
_exc_valueúBaseException | NoneÚ
_tracebackúTracebackType | Nonec                ó   — d S rR   rJ   ©rW   r  r  r	  s       rA   Ú__exit__zEditableStrategy.__exit__Ž  s	   € ð
 �rC   N)r®   r,   r½   rþ   r¾   rÿ   r6   r   ©r6   r*   )r  r  r  r  r	  r
  r6   r   )rD   rE   rF   r  r  r  rJ   rC   rA   rê   rê   ‰  sJ   € € € € € ðð ð ð ð %Ð$Ð$Ð$ðð ð ð ð ð rC   rê   c                  ó.   — e Zd Zdd	„Zdd„Zdd„Zdd„ZdS )rò   r[   r    rn   ry   Úpath_entriesú
list[Path]r6   rY   c                ó0   — || _         || _        || _        d S rR   )r[   rn   r  )rW   r[   rn   r  s       rA   Ú__init__z_StaticPth.__init__—  s   € ØˆŒ	ØˆŒ	Ø(ˆÔÐÐrC   r®   r,   r½   rþ   r¾   rÿ   c                ó°   — d                      d„ | j        D ¦   «         ¦  «        }t          |› d�¦  «        }|                     d| j        › d�|¦  «         d S )Nú
c              3  óX   K  — | ]%}t          |                     ¦   «         ¦  «        V — Œ&d S rR   )ry   r€   )Ú.0Úps     rA   ú	<genexpr>z&_StaticPth.__call__.<locals>.<genexpr>Ÿ  s2   è è € ÐHÐH°�C §	¢	¡¤Ñ,Ô,ÐHÐHÐHÐHÐHÐHrC   rì   ú.pth)rb   r  Ú_encode_pthÚwritestrrn   )rW   r®   r½   r¾   ÚentriesÚcontentss         rA   r  z_StaticPth.__call__œ  sb   € ð —)’)ÐHÐH°dÔ6GÐHÑHÔHÑHÔHˆÝ '˜~˜~˜~Ñ.Ô.ˆØ�ŠÐ6 t¤yÐ6Ð6Ð6¸ÑAÔAÐAÐAÐArC   r*   c                óª   — dt          t          t          j        | j        ¦  «        ¦  «        ›d�}t
                               |t          z   ¦  «         | S )Nz_
        Editable install will be performed using .pth file to extend `sys.path` with:
        z	
        )Úlistr‰   r^   Úfspathr  rç   ÚwarningÚ_LENIENT_WARNING©rW   Úmsgs     rA   r  z_StaticPth.__enter__£  sQ   € ðå	�c•"”)˜TÔ.Ñ/Ô/Ñ	0Ô	0ðð ð ˆõ 	�Š˜Õ.Ñ.Ñ/Ô/Ð/ØˆrC   r  r   r  r	  c                ó   — d S rR   rJ   r  s       rA   r  z_StaticPth.__exit__«  s	   € ð 	ˆrC   N)r[   r    rn   ry   r  r  r6   rY   ©r®   r,   r½   rþ   r¾   rÿ   r6   rY   r  ©r  r   r  r   r	  r   r6   rY   )rD   rE   rF   r  r  r  r  rJ   rC   rA   rò   rò   –  sh   € € € € € ð)ð )ð )ð )ð
Bð Bð Bð Bðð ð ð ðð ð ð ð ð rC   rò   c                  óZ   ‡ — e Zd ZdZd#ˆ fd„Zd$ˆ fd„Zd%d„Zd&d'd„Zd(d„Zd)d„Z	d*d"„Z
ˆ xZ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.
    r[   r    rn   ry   rõ   r   r�   r6   rY   c                ó  •— t          |¦  «        | _        t          |¦  «                             ¦   «         | _        |                     d¦  «        j        | _        t          ¦   «                              ||| j        g¦  «         d S )Nr%   )	r   rõ   r€   r�   r¥   Ú	copy_fileÚ_fileÚsuperr  )rW   r[   rn   rõ   r�   Ú	__class__s        €rA   r  z_LinkTree.__init__¿  sn   ø€ õ " -Ñ0Ô0ˆÔÝ˜i™œ×0Ò0Ñ2Ô2ˆŒØ×)Ò)¨*Ñ5Ô5Ô?ˆŒ
Ý‰Œ×Ò˜˜t dÔ&8Ð%9Ñ:Ô:Ð:Ð:Ð:rC   r®   r,   r½   rþ   r¾   rÿ   c                óz   •— |                       ||¦  «         t          ¦   «                              |||¦  «         d S rR   )Ú_create_linksr-  r  )rW   r®   r½   r¾   r.  s       €rA   r  z_LinkTree.__call__Ë  s=   ø€ ð 	×Ò˜5 'Ñ*Ô*Ð*Ý‰Œ×Ò˜  wÑ/Ô/Ð/Ð/Ð/rC   Úfiler5   c                ó*  — t          t          ¦  «        5  t          |¦  «                             ¦   «                              | j        ¦  «        }t          |¦  «                             t          j	        d¦  «        cd d d ¦  «         S # 1 swxY w Y   d S )Nú/)
r   Ú
ValueErrorr   r€   Úrelative_tor�   ry   Úreplacer^   Úsep)rW   r1  ra   s      rA   Ú_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¬¦  «         |                      |||¬¦  «         d S )NT)Úparents©Úlink)rõ   rˆ   Úis_dirrg   r,  )rW   r9  r:  r>  Údests        rA   Ú_create_filez_LinkTree._create_fileØ  s\   € ØÔ! OÑ3ˆØŒ{×!Ò!Ñ#Ô#ð 	,ØŒK×Ò dÐÑ+Ô+Ð+Ø�
Š
�8˜T¨ˆ
Ñ-Ô-Ð-Ð-Ð-rC   Úoutput_mappingc                ó˜  ‡ — ‰ j                              dd¬¦  «         t          ‰ j         ¦  «        rdnd}ˆ fd„|                     ¦   «         D ¦   «         }d„ |D ¦   «         }|D ]3}‰                      |¦  «        }|r||vr‰                      ||¦  «         Œ4|                     ¦   «         D ]\  }}‰                      |||¬¦  «         Œd S )NT)r<  re   ÚsymÚhardc              3  óL   •K  — | ]\  }}‰                      |¦  «        |fV — Œd S rR   )r8  )r  ÚkÚvrW   s      €rA   r  z*_LinkTree._create_links.<locals>.<genexpr>á  s:   øè è € ÐXÐX¹¸¸A�t×-Ò-¨aÑ0Ô0°!Ð4ÐXÐXÐXÐXÐXÐXrC   c                ó   — i | ]
\  }}|®||“ŒS rR   rJ   )r  rG  rH  s      rA   ú
<dictcomp>z+_LinkTree._create_links.<locals>.<dictcomp>ã  s   € ÐAÐAÐA™T˜Q °1°=�A�q°=°=°=rC   r=  )rõ   rg   Ú_can_symlink_filesÚitemsr8  rA  )	rW   ÚoutputsrB  Ú	link_typeÚ
normalisedÚmappingsÚoutputÚrelativeÚsrcs	   `        rA   r0  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¨°)ÐÑ<Ô<Ð<Ð<ð	=ð 	=rC   r*   c                óN   — d}t                                |t          z   ¦  «         | S )Nz=Strict editable install will be performed using a link tree.
)rç   r"  Ú_STRICT_WARNINGr$  s     rA   r  z_LinkTree.__enter__í  s#   € ØNˆÝ�Š˜�oÑ-Ñ.Ô.Ð.ØˆrC   r  r   r  r	  c                óF   — d| j         › d�}t          j        d|¦  «         d S )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>   ©rW   r  r  r	  r%  s        rA   r  z_LinkTree.__exit__ò  s:   € ðàÔðð ð ˆõ 	ÔÐ5°sÑ;Ô;Ð;Ð;Ð;rC   )
r[   r    rn   ry   rõ   r   r�   r   r6   rY   r'  )r1  ry   r6   r5   rR   )r9  ry   r:  ry   )rB  rÿ   r  r(  )rD   rE   rF   rG   r  r  r8  rA  r0  r  r  Ú__classcell__)r.  s   @rA   rî   rî   ´  sÎ   ø€ € € € € ðð ð
;ð 
;ð 
;ð 
;ð 
;ð 
;ð0ð 0ð 0ð 0ð 0ð 0ðð ð ð ð.ð .ð .ð .ð .ð=ð =ð =ð =ðð ð ð ð
<ð <ð <ð <ð <ð <ð <ð <rC   rî   c                  ó>   — e Zd Zdd„Zdd	„Zdd„Zdd„Zdd„Zd d„ZdS )!ró   r[   r    rn   ry   r6   rY   c                ó"   — || _         || _        d S rR   )r[   rn   )rW   r[   rn   s      rA   r  z_TopLevelFinder.__init__  s   € ØˆŒ	ØˆŒ	ˆ	ˆ	rC   ú5tuple[str, str, dict[str, str], dict[str, list[str]]]c           	     ó  ‡ ‡	— ‰ j         j        pt          j        }t	          t          ‰ j         ¦  «        t          ‰ j         ¦  «        ¦  «        }‰ j         j        pi }t          |||¦  «        Š	t          t	          t          ‰ j         j        pg ‰	¦  «        d„ t          ‰	¦  «        D ¦   «         ¦  «        ¦  «        }ˆ	ˆ fd„‰ j         j        pg D ¦   «         }i ‰	¥|¥}d‰ j        › d�}t          j        |¦  «        }||||fS )Nc              3  ó   K  — | ]}|g fV — Œ	d S rR   rJ   )r  Únss     rA   r  z0_TopLevelFinder.template_vars.<locals>.<genexpr>  s&   è è € ÐDÐD˜b�"�b�ÐDÐDÐDÐDÐDÐDrC   c                óL   •— i | ] }|t          |‰‰j        j        pd ¦  «        “Œ!S )rO   )r   r[   r]   )r  ÚpkgÚrootsrW   s     €€rA   rJ  z1_TopLevelFinder.template_vars.<locals>.<dictcomp>  sB   ø€ ð 
ð 
ð 
àð Õ" 3¨¨t¬yÔ/AÐ/GÀRÑHÔHð
ð 
ð 
rC   rì   z.finder)r[   r]   r^   r_   r
   rï   Ú_find_top_level_modulesr`   Ú_find_package_rootsÚdictÚ_find_namespacesrö   Ú_find_virtual_namespacesr~   rn   r   Úsafe_identifier)
rW   r]   Ú	top_levelr`   Únamespaces_Úlegacy_namespacesr¾   rn   Úfinderrb  s
   `        @rA   Útemplate_varsz_TopLevelFinder.template_vars  s#  øø€ Ø”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Ð1rC   úIterator[tuple[str, bytes]]c              #  óÖ   K  — |                       ¦   «         \  }}}}t          t          |||¦  «        d¦  «        }|› d�|fV — t          d|› d|› d�¦  «        }d| j        › d�|fV — d S )Núutf-8z.pyzimport z; z
.install()rì   r  )rm  ÚbytesÚ_finder_templater  rn   )rW   rl  rn   r¾   rj  Úcontents         rA   Ú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Ð8rC   r®   r,   r½   rþ   r¾   rÿ   c                óf   — |                       ¦   «         D ]\  }}|                     ||¦  «         Œd S rR   )rt  r  )rW   r®   r½   r¾   r1  rs  s         rA   r  z_TopLevelFinder.__call__+  sD   € ð "×4Ò4Ñ6Ô6ð 	*ð 	*‰MˆD�'Ø�NŠN˜4 Ñ)Ô)Ð)Ð)ð	*ð 	*rC   r*   c                óN   — d}t                                |t          z   ¦  «         | S )Nz=Editable install will be performed using a meta path finder.
)rç   r"  r#  r$  s     rA   r  z_TopLevelFinder.__enter__1  s$   € ØNˆÝ�Š˜Õ.Ñ.Ñ/Ô/Ð/ØˆrC   r  r   r  r	  c                ó4   — d}t          j        d|¦  «         d S )Nz¢

        Please be careful with folders in your working directory with the same
        name as your package as they may take precedence during imports.
        rW  )r!   r>   rX  s        rA   r  z_TopLevelFinder.__exit__6  s%   € ðˆõ 	ÔÐ5°sÑ;Ô;Ð;Ð;Ð;rC   N)r[   r    rn   ry   r6   rY   )r6   r\  )r6   rn  r'  r  r(  )	rD   rE   rF   r  rm  rt  r  r  r  rJ   rC   rA   ró   ró     sŒ   € € € € € ðð ð ð ð2ð 2ð 2ð 2ð69ð 9ð 9ð 9ð*ð *ð *ð *ðð ð ð ð

<ð 
<ð 
<ð 
<ð 
<ð 
<rC   ró   rs  ry   r6   rq  c                ó@  — t          j        ¦   «         5 }t          j        |t          j        ¬¦  «        }|                     | ¦  «         |                     ¦   «          |                     d¦  «         |                     ¦   «         cddd¦  «         S # 1 swxY w Y   dS )a”  
    Prior to Python 3.13 (see https://github.com/python/cpython/issues/77102),
    .pth files are always read with 'locale' encoding, the recommendation
    from the cpython core developers is to write them as ``open(path, "w")``
    and ignore warnings (see python/cpython#77102, pypa/setuptools#3937).
    This function tries to simulate this behavior without having to create an
    actual file, in a way that supports a range of active Python versions.
    (There seems to be some variety in the way different version of Python handle
    ``encoding=None``, not all of them use ``locale.getpreferredencoding(False)``
    or ``locale.getencoding()``).
    ©Úencodingr   N)	ÚioÚBytesIOÚTextIOWrapperr   ÚPTH_ENCODINGÚwriteÚflushÚseekÚread)rs  ÚbufferÚwrappers      rA   r  r  C  sÂ   € õ 
Œ‰Œð ˜ÝÔ" 6µEÔ4FÐGÑGÔGˆà�Š�gÑÔÐØ�Š‰ŒˆØ�Š�A‰ŒˆØ�{Š{‰}Œ}ðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð s   ”A2BÂBÂBÚbase_dirr   Úboolc                ó¤  — t          t          |                      ¦   «         ¦  «        ¬¦  «        5 }t          |d¦  «        t          |d¦  «        }}|                     dd¬¦  «         t          t          t          t          ¦  «        5  t          j
        ||¦  «         |                     ¦   «         r3|                     d¬¦  «        dk    r	 d d d ¦  «         d d d ¦  «         dS d d d ¦  «         n# 1 swxY w Y   	 t          j        ||¦  «         n$# t          $ r}d}t          |¦  «        |‚d }~ww xY w	 d d d ¦  «         d	S # 1 swxY w Y   d S )
N)Údirz	file1.txtz	file2.txtÚfile1rp  ry  Tz�File system does not seem to support either symlinks or hard links. Strict editable installs require one of them to be supported.F)r   ry   r€   r   Ú
write_textr   ÚAttributeErrorÚNotImplementedErrorÚOSErrorr^   ÚsymlinkÚ
is_symlinkÚ	read_textr>  rm   ÚLinksNotSupported)r…  rÞ   Úpath1Úpath2rq   r%  s         rA   rK  rK  X  s  € Ý	¥ H×$4Ò$4Ñ$6Ô$6Ñ 7Ô 7Ð	8Ñ	8Ô	8ð ¸CÝ˜C Ñ-Ô-­t°C¸Ñ/EÔ/EˆuˆØ×Ò˜¨7ÐÑ3Ô3Ð3Ý•nÕ&9½7ÑCÔCð 	ð 	ÝŒJ�u˜eÑ$Ô$Ð$Ø×ÒÑ!Ô!ð  e§o¢o¸w oÑ&GÔ&GÈ7Ò&RÐ&RØð	ð 	ð 	ñ 	ô 	ð 	ðð ð ñ ô ð ð ð ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð
	1ÝŒG�E˜5Ñ!Ô!Ð!Ð!øÝð 	1ð 	1ð 	1ðPð õ $ CÑ(Ô(¨bÐ0øøøøð	1øøøð ð!ð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð sa   °AEÂAC1ÃEÃ%EÃ1C5	Ã5EÃ8C5	Ã9EÃ=DÄEÄ
D4ÄD/Ä/D4Ä4EÅE	ÅE	rö   úIterable[str]r`   údict[str, str]rU   r   c                ó4  ‡‡‡— ˆˆfd„| D ¦   «         }|st          ‰¦  «        i dhfv S t          j                             t	          t
          |                     ¦   «         ¦  «        ¦  «        Št          ˆfd„|                     ¦   «         D ¦   «         ¦  «        S )a[  Return ``True`` if:
    - all packages are contained by the same parent directory, **and**
    - all packages become importable if the parent directory is added to ``sys.path``.

    >>> _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          |‰‰¦  «        “ŒS rJ   r   )r  ra  r`   rU   s     €€rA   rJ  z"_simple_layout.<locals>.<dictcomp>‹  s(   ø€ ÐXÐXÐXÈˆcÕ$ S¨+°{ÑCÔCÐXÐXÐXrC   rO   c           	   3  ó„   •K  — | ]:\  }}t          j        t          ‰g|                     d ¦  «        ¢R Ž |¦  «        V — Œ;dS ©r}   N)r   Ú	same_pathr   Úsplit)r  ÚkeyÚvaluerˆ   s      €rA   r  z!_simple_layout.<locals>.<genexpr>�  sa   øè è € ð ð áˆC�õ 	Œ�˜VÐ5 c§i¢i°¡n¤nÐ5Ð5Ð5°uÑ=Ô=ðð ð ð ð ð rC   )rñ   r^   ra   Ú
commonpathr   Ú_parent_pathrL  Úall)rö   r`   rU   Úlayoutrˆ   s    `` @rA   rð   rð   l  s¬   øøø€ ð> YÐXÐXÐXÐXÈxÐXÑXÔX€FØð .Ý�;ÑÔ B¨¨ :Ð-Ð-ÝŒW×Ò¥­°f·l²l±n´nÑ EÔ EÑFÔF€FÝð ð ð ð à Ÿ,š,™.œ.ðñ ô ñ ô ð rC   c                óp   — |                      | ¦  «        }|                     dt          j        z   ¦  «        S )a7  Infer 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'
    r3  )ÚremovesuffixÚrstripr^   r7  )ra  Úpkg_pathrˆ   s      rA   rŸ  rŸ  •  s/   € ð ×"Ò" 3Ñ'Ô'€FØ�=Š=˜�rœv™Ñ&Ô&Ð&rC   r[   r    úIterator[str]c              #  ó  K  — t          | j        pg ¦  «        E d {V —† | j        pg }d„ |D ¦   «         }| j        r
| j        V — n| j        pg }|d„ |D ¦   «         z  }|D ]}|                     d¦  «        \  }}}|V — Œ d S )Nc                ó   — g | ]}d |v ¯|‘Œ	S ©r}   rJ   ©r  Úmods     rA   ú
<listcomp>z"_find_packages.<locals>.<listcomp>§  s   € Ð>Ð>Ð>˜c°3¸#°:°:�c°:°:°:rC   c                ó.   — g | ]}d |j         v ¯|j         ‘ŒS r©  ©rn   ©r  Úxs     rA   r¬  z"_find_packages.<locals>.<listcomp>¬  s!   € ÐHÐHÐH a¸#ÀÄ¸-¸-˜1œ6¸-¸-¸-rC   r}   )Úiterrö   Ú
py_modulesÚext_packageÚext_modulesÚ
rpartition)r[   r²  Únested_modulesr´  ÚmoduleÚpackageÚ_s          rA   rï   rï   £  sÍ   è è € Ý�D”MÐ' RÑ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(Ð(à”Ð& B€JØ>Ð> ZÐ>Ñ>Ô>€NØÔð IØÔÐÐÐÐàÔ&Ð,¨"ˆØÐHÐH¨;ÐHÑHÔHÑHˆà ð ð ˆØ×)Ò)¨#Ñ.Ô.‰ˆ��AØˆˆˆˆðð rC   c              #  óˆ   K  — | j         pg }d„ |D ¦   «         E d {V —† | j        s| j        pg }d„ |D ¦   «         E d {V —† d S d S )Nc              3  ó"   K  — | ]
}d |v¯|V — ŒdS r™  rJ   rª  s     rA   r  z*_find_top_level_modules.<locals>.<genexpr>µ  s&   è è € Ð<Ð<˜¨S¸¨^¨^�¨^¨^¨^¨^Ð<Ð<rC   c              3  ó6   K  — | ]}d |j         v¯|j         V — ŒdS r™  r®  r¯  s     rA   r  z*_find_top_level_modules.<locals>.<genexpr>¹  s0   è è € ÐEÐE˜q°3¸a¼fÐ3DÐ3D�A”FÐ3DÐ3DÐ3DÐ3DÐEÐErC   )r²  r³  r´  )r[   r²  r´  s      rA   rc  rc  ³  s‰   è è € Ø”Ð& B€JØ<Ð<˜zÐ<Ñ<Ô<Ð<Ð<Ð<Ð<Ð<Ð<Ð<àÔð FØÔ&Ð,¨"ˆØEÐE KÐEÑEÔEÐEÐEÐEÐEÐEÐEÐEÐEÐEðFð FrC   rÿ   r]   c                ó\   ‡‡— ˆˆfd„t          | ¦  «        D ¦   «         }t          |¦  «        S )Nc           
     óN   •— i | ]!}|t          t          |‰‰¦  «        ¦  «        “Œ"S rJ   )Ú_absolute_rootr   )r  ra  r`   r]   s     €€rA   rJ  z'_find_package_roots.<locals>.<dictcomp>Á  s@   ø€ ð !ð !ð !àð 	�^Õ-¨c°;ÀÑIÔIÑJÔJð!ð !ð !rC   )ÚsortedÚ_remove_nested)rö   r`   r]   Ú	pkg_rootss    `` rA   rd  rd  ¼  sI   øø€ ð
!ð !ð !ð !ð !å˜(Ñ#Ô#ð!ñ !ô !€Iõ
 ˜)Ñ$Ô$Ð$rC   ra   c                óê   — t          | ¦  «        }|j        }|                     ¦   «         r!t          |                     ¦   «         ¦  «        S t          |                     ¦   «         |j        z  ¦  «        S )z(Works for packages and top-level modules)r   rˆ   r{   ry   r€   rn   )ra   Úpath_rˆ   s      rA   r¿  r¿  É  sY   € å�‰JŒJ€EØŒ\€Fà‡|‚|�~„~ð 2Ý�5—=’=‘?”?Ñ#Ô#Ð#å�6—>’>Ñ#Ô# e¤jÑ0Ñ1Ô1Ð1rC   rÂ  c           	   #  ó>  K  — | D ]—}d|vrŒ|                      d¦  «        }t          t          |¦  «        dz
  dd¦  «        D ]Y}d                     |d|…         ¦  «        }t	          t          || d¦  «        ¦  «        }|                     ¦   «         r|| vr|V — ŒZŒ˜dS )a8  By 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   éÿÿÿÿNrO   )r›  ÚrangeÚlenrb   r   r   r{   )rÂ  ra  ÚpartsÚiÚpartial_namera   s         rA   rg  rg  Ô  sÀ   è è € ð ð 	#ð 	#ˆØ�cˆ>ˆ>ØØ—	’	˜#‘”ˆÝ•s˜5‘z”z A‘~ q¨"Ñ-Ô-ð 	#ð 	#ˆAØŸ8š8 E¨"¨1¨"¤IÑ.Ô.ˆLÝÕ)¨,¸	À2ÑFÔFÑGÔGˆDØ—;’;‘=”=ð # L¸	Ð$AÐ$Aà"Ð"Ð"Ð"øð	#ð		#ð 	#rC   rþ   úIterator[tuple[str, list[str]]]c              #  óÊ   K  — | D ]]}t          ||d¦  «        }t          |¦  «                             ¦   «         r)t          |d¦  «                             ¦   «         s||gfV — Œ^d S )NrO   z__init__.py)r   r   r{   )rö   rÂ  ra  ra   s       rA   rf  rf  ì  s|   è è € ð ð  ð  ˆÝ   i°Ñ4Ô4ˆÝ�‰:Œ:×ÒÑÔð 	 ¥t¨D°-Ñ'@Ô'@×'GÒ'GÑ'IÔ'Ið 	 Ø˜˜�-ÐÐÐøð ð  rC   c                ó:  ‡‡— t          |                      ¦   «         ¦  «        }t          t          |                      ¦   «         ¦  «        ¦  «        D ]H\  ŠŠt          ˆˆfd„|                      ¦   «         D ¦   «         ¦  «        r|                     ‰¦  «         ŒI|S )Nc              3  óN   •K  — | ]\  }}‰|k    ot          ‰‰||¦  «        V — Œ d S rR   )Ú
_is_nested)r  ÚotherÚ
other_pathra   ra  s      €€rA   r  z!_remove_nested.<locals>.<genexpr>ù  sR   øè è € ð 
ð 
á!��zð �5ŠLÐE�Z¨¨T°5¸*ÑEÔEð
ð 
ð 
ð 
ð 
ð 
rC   )re  ÚcopyÚreversedr   rL  ÚanyÚpop)rÂ  rQ  ra   ra  s     @@rA   rÁ  rÁ  õ  s¦   øø€ Ý�)—.’.Ñ"Ô"Ñ#Ô#€Få�d 9§?¢?Ñ#4Ô#4Ñ5Ô5Ñ6Ô6ð ð ‰	ˆˆTÝð 
ð 
ð 
ð 
ð 
à%.§_¢_Ñ%6Ô%6ð
ñ 
ô 
ñ 
ô 
ð 	ð �JŠJ�s‰OŒOˆOøà€MrC   ra  r¥  rˆ   Úparent_pathc                ó  — t          j        |¦  «        }|                      |dd¦  «                             d¦  «                             d¦  «        }|                      |¦  «        o"|t          j        t          |g|¢R Ž ¦  «        k    S )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
    rO   r#   r}   )r   Únormpathr6  Ústripr›  Ú
startswithr   )ra  r¥  rˆ   r×  Únorm_pkg_pathÚrests         rA   rÐ  rÐ    s…   € õ ”N 8Ñ,Ô,€MØ�;Š;�v˜r 1Ñ%Ô%×+Ò+¨CÑ0Ô0×6Ò6°sÑ;Ô;€DØ�>Š>˜&Ñ!Ô!ð  mµu´~Ýˆ[Ð ˜4Ð Ð Ð ñ8ô 8ò 'ð rC   Údir_c                óZ   — t          j        | d¬¦  «         t          j        | ¦  «         | S )zFCreate a directory ensured to be empty. Existing files may be removed.T)Úignore_errors)r   Úrmtreer^   Úmakedirs)rÞ  s    rA   rí   rí     s,   € å„N�4 tÐ,Ñ,Ô,Ð,Ý„K�ÑÔÐØ€KrC   c                  ó"   — e Zd Zdd„Zd„ Zd„ ZdS )r�   r6   rY   c                óL   — || _         || _        || _        || _        g | _        d S rR   )r\   r]   rƒ   Úeditable_namerM  )rW   r\   rƒ   rå  r]   s        rA   r  z_NamespaceInstaller.__init__   s,   € Ø(ˆÔØ ˆŒØ 0ˆÔØ*ˆÔØ"$ˆŒˆˆrC   c                óf   — t           j                             | j        | j        | j        z   ¦  «        S )zInstallation target.)r^   ra   rb   rƒ   rå  Ú	nspkg_extrV   s    rA   Ú_get_nspkg_filez#_NamespaceInstaller._get_nspkg_file'  s%   € åŒw�|Š|˜DÔ1°4Ô3EÈÌÑ3VÑWÔWÐWrC   c                óD   — t          t          | j        ¦  «        ¦  «        S )z1Where the modules/packages should be loaded from.)Úreprry   r]   rV   s    rA   Ú	_get_rootz_NamespaceInstaller._get_root+  s   € å•C˜œÑ&Ô&Ñ'Ô'Ð'rC   Nrú   )rD   rE   rF   r  rè  rë  rJ   rC   rA   r�   r�     sI   € € € € € ð%ð %ð %ð %ðXð Xð Xð(ð (ð (ð (ð (rC   r�   a  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
rn   r¾   r   údict[str, list[str]]c                óÀ   — t          t          |                     ¦   «         t          j        d¦  «        ¬¦  «        ¦  «        }t
                               | ||¬¦  «        S )z_Create a string containing the code for the``MetaPathFinder`` and
    ``PathEntryFinder``.
    r   )rœ  ©rn   r¾   r   )re  rÀ  rL  ÚoperatorÚ
itemgetterÚ_FINDER_TEMPLATEÚformatrî  s      rA   rr  rr  ‰  sL   € õ •6˜'Ÿ-š-™/œ/­xÔ/BÀ1Ñ/EÔ/EÐFÑFÔFÑGÔG€GÝ×"Ò"¨°gÈ*Ð"ÑUÔUÐUrC   c                  ó   — e Zd ZdZdS )r‘  zCFile system does not seem to support either symlinks or hard links.N)rD   rE   rF   rG   rJ   rC   rA   r‘  r‘  “  s   € € € € € ØMÐMÐMÐMrC   r‘  )rs  ry   r6   rq  )r…  r   r6   r†  )rö   r”  r`   r•  rU   r   r6   r†  )r[   r    r6   r¦  )rö   r”  r`   rÿ   r]   r   r6   r•  )ra   r   r6   ry   )rÂ  r•  r6   r¦  )rö   rþ   rÂ  r•  r6   rÌ  )rÂ  r•  r6   r•  )
ra  ry   r¥  ry   rˆ   ry   r×  ry   r6   r†  )rÞ  r-   r6   r-   )rn   ry   r¾   rÿ   r   rì  r6   ry   )crG   Ú
__future__r   r{  Úloggingrï  r^   rÓ   rÊ   Úcollections.abcr   r   r   Ú
contextlibr   Úenumr   Úinspectr	   Ú	itertoolsr
   r   Úpathlibr   Útempfiler   Útypesr   Útypingr   r   r   r   r   rO   r   r   r   r   r   r   r   r3   r   r   Ú	discoveryr   r[   r    Úwarningsr!   r"   r$   rœ   r%   rª   r&   rv   r'   r™   r(   r�   r)   r§   Útyping_extensionsr*   Ú_vendor.wheel.wheelfiler,   r-   Ú	getLoggerrD   rç   r0   rU  r#  rL   rê   rò   rî   ró   r  rK  rð   rŸ  rï   rc  rd  r¿  rg  rf  rÁ  rÐ  rí   Ú	Installerr�   rñ  rr  Ú	FileErrorr‘  rJ   rC   rA   ú<module>r     s+  ðð
ð 
ð #Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø Ð Ð Ð Ð Ð Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ Cà 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ðB	
ð 
ð 
ð 
ð 
�xñ 
ô 
ð 
ðð ð ð ð ñ ô ð ð<K<ð K<ð K<ð K<ð K<�
ñ K<ô K<ð K<ð\><ð ><ð ><ð ><ð ><ñ ><ô ><ð ><ðBð ð ð ð*ð ð ð ð(&ð &ð &ð &ðR'ð 'ð 'ðð ð ð ð Fð Fð Fð Fð
%ð 
%ð 
%ð 
%ð2ð 2ð 2ð 2ð#ð #ð #ð #ð0 ð  ð  ð  ð
ð 
ð 
ð 
ðð ð ð ð,ð ð ð ð(ð (ð (ð (ð (˜*Ô.ñ (ô (ð (ð"VÐ ðrVð Vð Vð VðNð Nð Nð Nð N˜Ô(ñ Nô Nð Nð Nð NrC   