a
    ǏPf5                     @   s   d dl mZmZmZmZmZ d dlmZ d dlm	Z	 d dl
mZmZ d dlmZmZ d dlmZ d dlmZ eed ee f Zeeef Ze	ee	 ed	d
dZG dd dZG dd dZededddZG dd dZdS )    )	FrozenSetIterableOptionalTupleUnion)SpecifierSet)NormalizedName)LegacyVersionVersion)Linklinks_equivalent)InstallRequirement)Hashes	Candidate)projectextrasreturnc                 C   s&   |s| S d t|}|  d| dS )N,[])joinsorted)r   r   Zextras_expr r   i/var/www/html/python-backend/venv/lib/python3.9/site-packages/pip/_internal/resolution/resolvelib/base.pyformat_name   s    r   c                   @   sx   e Zd Zeeee ddddZed dddZ	ee
d dd	d
ZedddZe
d dddZdedddZdS )
ConstraintN)	specifierhasheslinksr   c                 C   s   || _ || _|| _d S N)r   r   r   )selfr   r   r   r   r   r   __init__   s    zConstraint.__init__r   c                 C   s   t t t t S r   )r   r   r   	frozenset)clsr   r   r   empty   s    zConstraint.empty)ireqr   c                 C   s.   |j rt|j gnt }t|j|jdd|S NF)trust_internet)linkr#   r   r   r   )r$   r&   r   r   r   r   	from_ireq"   s    zConstraint.from_ireqc                 C   s   t | jpt | jpt | jS r   )boolr   r   r   r    r   r   r   __bool__'   s    zConstraint.__bool__)otherr   c                 C   sR   t |tstS | j|j@ }| j|jdd@ }| j}|jrF||jg}t|||S r'   )	
isinstancer   NotImplementedr   r   r   r)   unionr   )r    r.   r   r   r   r   r   r   __and__*   s    
zConstraint.__and__r   	candidater   c                    s4   | j r"t fdd| j D s"dS | jj jddS )Nc                 3   s   | ]}t | V  qd S r   )_match_link).0r)   r4   r   r   	<genexpr>6       z-Constraint.is_satisfied_by.<locals>.<genexpr>FT)prereleases)r   allr   containsversionr    r4   r   r7   r   is_satisfied_by4   s    zConstraint.is_satisfied_by)__name__
__module____qualname__r   r   r   r   r!   classmethodr%   r   r*   r+   r-   r2   r?   r   r   r   r   r      s   

r   c                   @   s\   e Zd ZeedddZeedddZdeddd	Z	e
dd
dZedddZdS )Requirementr"   c                 C   s   t ddS )zThe "project name" of a requirement.

        This is different from ``name`` if this requirement contains extras,
        in which case ``name`` would contain the ``[...]`` part, while this
        refers to the name of the project.
        Subclass should overrideNNotImplementedErrorr,   r   r   r   project_name?   s    zRequirement.project_namec                 C   s   t ddS )zThe name identifying this requirement in the resolver.

        This is different from ``project_name`` if this requirement contains
        extras, where ``project_name`` would not contain the ``[...]`` part.
        rE   NrF   r,   r   r   r   nameI   s    zRequirement.namer   r3   c                 C   s   dS NFr   r>   r   r   r   r?   R   s    zRequirement.is_satisfied_byc                 C   s   t dd S NrE   rF   r,   r   r   r   get_candidate_lookupU   s    z Requirement.get_candidate_lookupc                 C   s   t dd S rK   rF   r,   r   r   r   format_for_errorX   s    zRequirement.format_for_errorN)r@   rA   rB   propertyr   rH   strrI   r+   r?   CandidateLookuprL   rM   r   r   r   r   rD   >   s   	rD   )r)   r4   r   c                 C   s   |j rt| |j S dS rJ   )source_linkr   )r)   r4   r   r   r   r5   \   s    r5   c                   @   s   e Zd ZeedddZeedddZeedddZ	ee
ddd	Zee
dd
dZeee dddZe
eee  dddZee dddZedddZdS )r   r"   c                 C   s   t ddS )zThe "project name" of the candidate.

        This is different from ``name`` if this candidate contains extras,
        in which case ``name`` would contain the ``[...]`` part, while this
        refers to the name of the project.
        Override in subclassNrF   r,   r   r   r   rH   c   s    zCandidate.project_namec                 C   s   t ddS )zThe name identifying this candidate in the resolver.

        This is different from ``project_name`` if this candidate contains
        extras, where ``project_name`` would not contain the ``[...]`` part.
        rR   NrF   r,   r   r   r   rI   m   s    zCandidate.namec                 C   s   t dd S NrR   rF   r,   r   r   r   r=   v   s    zCandidate.versionc                 C   s   t dd S rS   rF   r,   r   r   r   is_installedz   s    zCandidate.is_installedc                 C   s   t dd S rS   rF   r,   r   r   r   is_editable~   s    zCandidate.is_editablec                 C   s   t dd S rS   rF   r,   r   r   r   rQ      s    zCandidate.source_link)with_requiresr   c                 C   s   t dd S rS   rF   )r    rV   r   r   r   iter_dependencies   s    zCandidate.iter_dependenciesc                 C   s   t dd S rS   rF   r,   r   r   r   get_install_requirement   s    z!Candidate.get_install_requirementc                 C   s   t dd S rK   rF   r,   r   r   r   rM      s    zCandidate.format_for_errorN)r@   rA   rB   rN   r   rH   rO   rI   CandidateVersionr=   r+   rT   rU   r   r   rQ   r   rD   rW   r   rX   rM   r   r   r   r   r   b   s   	N)typingr   r   r   r   r   Z pip._vendor.packaging.specifiersr   Zpip._vendor.packaging.utilsr   Zpip._vendor.packaging.versionr	   r
   pip._internal.models.linkr   r   Zpip._internal.req.req_installr   pip._internal.utils.hashesr   rP   rY   rO   r   r   rD   r+   r5   r   r   r   r   r   <module>   s   (