U
    aÊ¹j}(  ã                	   @  sØ  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mZ ddl	m
Z
 ddlmZmZmZ ej ej ej ej e¡¡dd¡ Zejkeg ¡ ej d	d¡ ddlZd
dlmZ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( ddl)Z*ddl+m,Z, ddddddddgZ-eddd�Z.dZ/ej0Z1e j0Z2dd„ Z3dd œd!d"„Z4d#d„ Z5e*j6j5j e5_ e�rˆdd$l)m7Z8 ne 9e*j6j7¡Z8G d%d„ de8ƒZ7d&d'„ Z:ej;fd(d)„Z<G d*d+„ d+e=ƒZ>e ?¡  dS ),z@Extensions to the 'distutils' for large or complex distributionsé    )ÚannotationsN)Úabstractmethod)ÚMapping)ÚTYPE_CHECKINGÚTypeVarÚoverloadÚ
setuptoolsÚ_vendorZ	backportsé   )ÚloggingÚmonkey)ÚRequire)ÚPackageFinderÚPEP420PackageFinder)ÚDistribution)Ú	Extension)Ú__version__)ÚSetuptoolsDeprecationWarning)ÚDistutilsOptionErrorÚsetupr   ÚCommandr   r   r   Úfind_packagesÚfind_namespace_packagesÚ	_CommandTÚ_Command)Úboundc                 C  s:   G dd„ dt jjƒ}|| ƒ}|jdd� |jr6t|ƒ d S )Nc                      s<   e Zd ZdZddœ‡ fdd„Zd‡ fdd„	Zd	d
„ Z‡  ZS )z4_install_setup_requires.<locals>.MinimalDistributionzl
        A minimal version of a distribution for supporting the
        fetch_build_eggs interface.
        zMapping[str, object]©Úattrsc                   s<   d}‡ fdd„t |ƒt ˆ ƒ@ D ƒ}tƒ  |¡ | j ¡  d S )N)Zdependency_linksÚsetup_requiresc                   s   i | ]}|ˆ | “qS © r   )Ú.0Úkr   r   úR/var/www/html/bwave/python/venv/lib/python3.8/site-packages/setuptools/__init__.pyÚ
<dictcomp>A   s      zQ_install_setup_requires.<locals>.MinimalDistribution.__init__.<locals>.<dictcomp>)ÚsetÚsuperÚ__init__Úset_defaultsZ_disable)Úselfr   Z_inclÚfiltered©Ú	__class__r   r"   r&   ?   s    z=_install_setup_requires.<locals>.MinimalDistribution.__init__Nc                   s:   zt ƒ  |¡\}}W n tk
r0   |df Y S X |dfS )zAIgnore ``pyproject.toml``, they are not related to setup_requiresr   )r%   Z _split_standard_project_metadataÚ	Exception)r(   Ú	filenamesÚcfgÚtomlr*   r   r"   Ú_get_project_config_filesF   s
    zN_install_setup_requires.<locals>.MinimalDistribution._get_project_config_filesc                 S  s   dS )zl
            Disable finalize_options to avoid building the working set.
            Ref #2158.
            Nr   ©r(   r   r   r"   Úfinalize_optionsN   s    zE_install_setup_requires.<locals>.MinimalDistribution.finalize_options)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r&   r0   r2   Ú__classcell__r   r   r*   r"   ÚMinimalDistribution9   s   r8   T)Zignore_option_errors)Ú	distutilsÚcorer   Úparse_config_filesr   Ú_fetch_build_eggs)r   r8   Údistr   r   r"   Ú_install_setup_requires6   s
    r>   ©r=   c              
   C  sr   z|   | j¡ W n\ tk
rl } z>d}d|jjkrZt|dƒrH| |¡ n|  d|› d�¡ ‚ W 5 d }~X Y nX d S )Na–  
        It is possible a package already installed in your system
        contains an version that is invalid according to PEP 440.
        You can try `pip install --use-pep517` as a workaround for this problem,
        or rely on a new virtual environment.

        If the problem refers to a package that is not installed yet,
        please contact that package's maintainers or distributors.
        ÚInvalidVersionÚadd_noteÚ
)Zfetch_build_eggsr   r,   r+   r3   ÚhasattrrA   Úannounce)r=   ÚexÚmsgr   r   r"   r<   \   s    	
r<   c                  K  s   t  ¡  t| ƒ tjjf | ŽS ©N)r   Ú	configurer>   r9   r:   r   r   r   r   r"   r   q   s    )r   c                      sÆ   e Zd ZU dZdZded< ddœ‡ fdd„Zd d	d
„Zddœdd„Ze	d!ddddœdd„ƒZ
e	d"ddddœdd„ƒZ
d#ddddœdd„Z
eddœdd„ƒZeddœdd„ƒZeddœdd„ƒZ‡  ZS )$r   a#  
    Setuptools internal actions are organized using a *command design pattern*.
    This means that each action (or group of closely related actions) executed during
    the build should be implemented as a ``Command`` subclass.

    These commands are abstractions and do not necessarily correspond to a command that
    can (or should) be executed via a terminal, in a CLI fashion (although historically
    they would).

    When creating a new command from scratch, custom defined classes **SHOULD** inherit
    from ``setuptools.Command`` and implement a few mandatory methods.
    Between these mandatory methods, are listed:
    :meth:`initialize_options`, :meth:`finalize_options` and :meth:`run`.

    A useful analogy for command classes is to think of them as subroutines with local
    variables called "options".  The options are "declared" in :meth:`initialize_options`
    and "defined" (given their final values, aka "finalized") in :meth:`finalize_options`,
    both of which must be defined by every command class. The "body" of the subroutine,
    (where it does all the work) is the :meth:`run` method.
    Between :meth:`initialize_options` and :meth:`finalize_options`, ``setuptools`` may set
    the values for options/attributes based on user's input (or circumstance),
    which means that the implementation should be careful to not overwrite values in
    :meth:`finalize_options` unless necessary.

    Please note that other commands (or other parts of setuptools) may also overwrite
    the values of the command's options/attributes multiple times during the build
    process.
    Therefore it is important to consistently implement :meth:`initialize_options` and
    :meth:`finalize_options`. For example, all derived attributes (or attributes that
    depend on the value of other attributes) **SHOULD** be recomputed in
    :meth:`finalize_options`.

    When overwriting existing commands, custom defined classes **MUST** abide by the
    same APIs implemented by the original class. They also **SHOULD** inherit from the
    original class.
    Fr   Údistributionr?   c                   s   t ƒ  |¡ t| ƒ |¡ dS )zj
        Construct the command for dist, updating
        vars(self) with any keyword parameters.
        N)r%   r&   ÚvarsÚupdate)r(   r=   Úkwr*   r   r"   r&   ª   s    zCommand.__init__Nc                 C  sB   t | |ƒ}|d kr"t| ||ƒ |S t|tƒs>td|||f ƒ‚|S )Nz'%s' must be a %s (got `%s`))ÚgetattrÚsetattrÚ
isinstanceÚstrr   )r(   ÚoptionÚwhatÚdefaultÚvalr   r   r"   Ú_ensure_stringlike²   s    

ÿzCommand._ensure_stringlikerP   )rQ   c                 C  sp   t | |ƒ}|dkrdS t|tƒr6t| |t d|¡ƒ n6t|tƒrTtdd„ |D ƒƒ}nd}|sltd||f ƒ‚dS )a¼  Ensure that 'option' is a list of strings.  If 'option' is
        currently a string, we split it either on /,\s*/ or /\s+/, so
        "foo bar baz", "foo,bar,baz", and "foo,   bar baz" all become
        ["foo", "bar", "baz"].

        ..
           TODO: This method seems to be similar to the one in ``distutils.cmd``
           Probably it is just here for backward compatibility with old Python versions?

        :meta private:
        Nz,\s*|\s+c                 s  s   | ]}t |tƒV  qd S rG   )rO   rP   )r    Úvr   r   r"   Ú	<genexpr>Ð   s     z-Command.ensure_string_list.<locals>.<genexpr>Fz''%s' must be a list of strings (got %r))	rM   rO   rP   rN   ÚreÚsplitÚlistÚallr   )r(   rQ   rT   Úokr   r   r"   Úensure_string_list½   s    



ÿzCommand.ensure_string_listÚboolr   )ÚcommandÚreinit_subcommandsÚreturnc                 K  s   d S rG   r   ©r(   r_   r`   rL   r   r   r"   Úreinitialize_commandØ   s    zCommand.reinitialize_commandr   c                 K  s   d S rG   r   rb   r   r   r"   rc   Ü   s    zstr | _Commandc                 K  s    t  | ||¡}t|ƒ |¡ |S rG   )r   rc   rJ   rK   )r(   r_   r`   rL   Úcmdr   r   r"   rc   à   s    ÚNone)ra   c                 C  s   t ‚dS )z·
        Set or (reset) all options/attributes/caches used by the command
        to their default values. Note that these values may be overwritten during
        the build.
        N©ÚNotImplementedErrorr1   r   r   r"   Úinitialize_optionsç   s    zCommand.initialize_optionsc                 C  s   t ‚dS )z÷
        Set final values for all options/attributes used by the command.
        Most of the time, each option/attribute/cache should only be set if it does not
        have any value yet (e.g. ``if self.attr is None: self.attr = val``).
        Nrf   r1   r   r   r"   r2   ð   s    zCommand.finalize_optionsc                 C  s   t ‚dS )zÙ
        Execute the actions intended by the command.
        (Side effects **SHOULD** only take place when :meth:`run` is executed,
        for example, creating new files or writing to the terminal output).
        Nrf   r1   r   r   r"   Úrunù   s    zCommand.run)N)F)F)F)r3   r4   r5   r6   Zcommand_consumes_argumentsÚ__annotations__r&   rU   r]   r   rc   r   rh   r2   ri   r7   r   r   r*   r"   r   �   s(   
%
 ÿ ÿ ÿc                 C  s&   dd„ t j| dd�D ƒ}tt jj|ƒS )z%
    Find all files under 'path'
    c                 s  s,   | ]$\}}}|D ]}t j ||¡V  qqd S rG   )ÚosÚpathÚjoin)r    ÚbaseÚdirsÚfilesÚfiler   r   r"   rW     s    þz#_find_all_simple.<locals>.<genexpr>T)Úfollowlinks)rk   ÚwalkÚfilterrl   Úisfile)rl   Úresultsr   r   r"   Ú_find_all_simple  s    þrw   c                 C  s6   t | ƒ}| tjkr.tjtjj| d�}t||ƒ}t|ƒS )zŒ
    Find all files under 'dir' and return the list of full filenames.
    Unless dir is '.', return full filenames with dir prepended.
    )Ústart)	rw   rk   ÚcurdirÚ	functoolsÚpartialrl   ÚrelpathÚmaprZ   )Údirrp   Zmake_relr   r   r"   Úfindall  s
    

r   c                   @  s   e Zd ZdZdS )Úsicz;Treat this string as-is (https://en.wikipedia.org/wiki/Sic)N)r3   r4   r5   r6   r   r   r   r"   r€     s   r€   )@r6   Ú
__future__r   rz   rk   rX   ÚsysÚabcr   Úcollections.abcr   Útypingr   r   r   rl   Úextendrm   ÚdirnameÚ__file__Zvendor_pathÚmodulesÚpopZ_distutils_hack.overrideZ_distutils_hackÚ r   r   Údependsr   Z	discoveryr   r   r=   r   Ú	extensionr   Úversionr   Úwarningsr   Údistutils.corer9   Údistutils.errorsr   Ú__all__r   Zbootstrap_install_fromÚfindr   r   r>   r<   r   r:   r   r   Zget_unpatchedrw   ry   r   rP   r€   Z	patch_allr   r   r   r"   Ú<module>   s\   8ø& 