o
    c*                     @   sX   d dl Z d dlmZ d dlmZmZ d dlmZ d dlm	Z	 e 
eZG dd dZdS )    N)OrderedDict)DictList)canonicalize_name)InstallRequirementc                   @   s   e Zd ZddeddfddZdefddZdefd	d
ZdeddfddZ	deddfddZ
dedefddZdedefddZedee fddZedee fddZdS )RequirementSetTcheck_supported_wheelsreturnNc                 C   s   t  | _|| _g | _dS )zCreate a RequirementSet.N)r   requirementsr   unnamed_requirements)selfr    r   F/opt/certbot/lib/python3.10/site-packages/pip/_internal/req/req_set.py__init__   s   
zRequirementSet.__init__c                 C   s4   t dd | j D dd d}ddd |D S )Nc                 s   s    | ]}|j s|V  qd S N)
comes_from.0reqr   r   r   	<genexpr>       z)RequirementSet.__str__.<locals>.<genexpr>c                 S      t | jpdS N r   namer   r   r   r   <lambda>       z(RequirementSet.__str__.<locals>.<lambda>key c                 s       | ]}t |jV  qd S r   strr   r   r   r   r   r      r   )sortedr
   valuesjoin)r   r
   r   r   r   __str__   s
   zRequirementSet.__str__c                 C   sB   t | j dd d}d}|j| jjt|ddd |D dS )	Nc                 S   r   r   r   r   r   r   r   r      r   z)RequirementSet.__repr__.<locals>.<lambda>r   z4<{classname} object; {count} requirement(s): {reqs}>z, c                 s   r"   r   r#   r   r   r   r   r   &   r   z*RequirementSet.__repr__.<locals>.<genexpr>)	classnamecountreqs)r%   r
   r&   format	__class____name__lenr'   )r   r
   format_stringr   r   r   __repr__   s   zRequirementSet.__repr__install_reqc                 C   s   |j rJ | j| d S r   )r   r   append)r   r2   r   r   r   add_unnamed_requirement)   s   
z&RequirementSet.add_unnamed_requirementc                 C   s"   |j sJ t|j }|| j|< d S r   )r   r   r
   )r   r2   project_namer   r   r   add_named_requirement-   s   

z$RequirementSet.add_named_requirementr   c                 C   s    t |}|| jv o| j| j S r   )r   r
   
constraintr   r   r5   r   r   r   has_requirement3   s   
zRequirementSet.has_requirementc                 C   s*   t |}|| jv r| j| S td|)NzNo project with the name )r   r
   KeyErrorr8   r   r   r   get_requirement;   s   

zRequirementSet.get_requirementc                 C   s   | j t| j  S r   )r   listr
   r&   r   r   r   r   all_requirementsC   s   zRequirementSet.all_requirementsc                 C   s   dd | j D S )zReturn the list of requirements that need to be installed.

        TODO remove this property together with the legacy resolver, since the new
             resolver only returns requirements that need to be installed.
        c                 S   s   g | ]
}|j s|js|qS r   )r7   satisfied_by)r   r2   r   r   r   
<listcomp>N   s    z:RequirementSet.requirements_to_install.<locals>.<listcomp>)r>   r=   r   r   r   requirements_to_installG   s   z&RequirementSet.requirements_to_install)T)r.   
__module____qualname__boolr   r$   r(   r1   r   r4   r6   r9   r;   propertyr   r>   rA   r   r   r   r   r      s    r   )loggingcollectionsr   typingr   r   pip._vendor.packaging.utilsr   pip._internal.req.req_installr   	getLoggerr.   loggerr   r   r   r   r   <module>   s    
