U
    aÊ¹jt  ã                   @  sð   d Z ddlmZ ddlZddlmZ ddlm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 edƒZe	edf Zddddœdd„Zdddœdd„Zddddœdd„Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ ZdS )%aS  Helper code used to generate ``requires.txt`` files in the egg-info directory.

The ``requires.txt`` file has an specific format:
    - Environment markers need to be part of the section headers and
      should not be part of the requirement spec itself.

See https://setuptools.pypa.io/en/latest/deprecated/python_eggs.html#requires-txt
é    )ÚannotationsN)Údefaultdict)Úfilterfalse)ÚDictÚMappingÚTypeVar)Úyield_lines)ÚRequirementé   )Ú_reqs)Ú
_StrOrIterÚ_Tr   zMapping[str, _StrOrIter]z&tuple[list[str], dict[str, list[str]]])Úinstall_requiresÚextras_requireÚreturnc                 C  s   t |ƒ}t| |ƒS )z�Given values for ``install_requires`` and ``extras_require``
    create modified versions in a way that can be written in ``requires.txt``
    )Ú_convert_extras_requirementsÚ"_move_install_requirements_markers)r   r   Úextras© r   ú^/var/www/html/bwave/python/venv/lib/python3.8/site-packages/setuptools/command/_requirestxt.pyÚ_prepare   s    r   z#Mapping[str, _Ordered[Requirement]])r   r   c                 C  sL   t tƒ}|  ¡ D ]6\}}||  t |¡D ]}||t|ƒ   |¡ q*q|S )z‘
    Convert requirements in `extras_require` of the form
    `"extra": ["barbazquux; {marker}"]` to
    `"extra:{marker}": ["barbazquux"]`.
    )r   ÚdictÚitemsr   ÚparseÚ_suffix_forÚ
setdefault)r   ÚoutputÚsectionÚvÚrr   r   r   r   &   s    r   c                 C  sp   t t | ¡ƒ}tt|ƒ}tt|ƒ}t tt|ƒƒ}|D ]}|dt|jƒ   	|¡ q4t
dd„ | ¡ D ƒƒ}||fS )a+  
    The ``requires.txt`` file has an specific format:
        - Environment markers need to be part of the section headers and
          should not be part of the requirement spec itself.

    Move requirements in ``install_requires`` that are using environment
    markers ``extras_require``.
    ú:c              	   s  s4   | ],\}}|t t d d„ tt|ƒD ƒ¡ƒfV  qdS )c                 s  s   | ]}t |ƒV  qd S ©N)Ústr)Ú.0r   r   r   r   Ú	<genexpr>Q   s     z?_move_install_requirements_markers.<locals>.<genexpr>.<genexpr>N)Úlistr   ÚfromkeysÚmapÚ
_clean_req)r#   Úkr   r   r   r   r$   O   s   ÿz5_move_install_requirements_markers.<locals>.<genexpr>)r%   r   r   ÚfilterÚ
_no_markerr   r'   r"   Úmarkerr   r   r   )r   r   Z	inst_reqsZsimple_reqsZcomplex_reqsZsimple_install_requiresr   Zexpanded_extrasr   r   r   r   8   s    

ýr   c                 C  s   | j rdt| j ƒ S dS )z;Return the 'extras_require' suffix for a given requirement.r    Ú )r,   r"   ©Úreqr   r   r   r   X   s    r   c                 C  s   t t| ƒƒ}d|_|S )z=Given a Requirement, remove environment markers and return itN)r	   r"   r,   )r/   r   r   r   r   r(   ]   s    r(   c                 C  s   | j  S r!   )r,   r.   r   r   r   r+   d   s    r+   c                 C  s,   t |pdƒ}dd„ }t||ƒ}|  |¡ d S )Nr   c                 S  s   | d S )NÚ
r   )Úliner   r   r   Ú	append_crk   s    z&_write_requirements.<locals>.append_cr)r   r'   Ú
writelines)ÚstreamÚreqsÚlinesr2   r   r   r   Ú_write_requirementsh   s    
r7   c                 C  sx   | j }t ¡ }t|jpd|jp i ƒ\}}t||ƒ t|ƒD ]&}| dj	f t
ƒ Ž¡ t||| ƒ q:|  d|| ¡ ¡ d S )Nr   z
[{extra}]
Úrequirements)ÚdistributionÚioÚStringIOr   r   r   r7   ÚsortedÚwriteÚformatÚvarsÚwrite_or_delete_fileÚgetvalue)ÚcmdÚbasenameÚfilenameÚdistÚdatar   r   Úextrar   r   r   Úwrite_requirementsr   s     ÿ
rH   c                 C  s,   t  ¡ }t|| jjƒ |  d|| ¡ ¡ d S )Nzsetup-requirements)r:   r;   r7   r9   Zsetup_requiresr@   rA   )rB   rC   rD   rF   r   r   r   Úwrite_setup_requirements   s    rI   )Ú__doc__Ú
__future__r   r:   Úcollectionsr   Ú	itertoolsr   Útypingr   r   r   Zjaraco.textr   Zpackaging.requirementsr	   r-   r   r   r   Z_Orderedr   r   r   r   r(   r+   r7   rH   rI   r   r   r   r   Ú<module>   s(   	
 
