a
    $lJh                     @  sd  d dl mZ d dlZd dlmZ d dlmZmZmZm	Z	m
Z
mZmZmZmZmZ edZedZedZee	e eg e	e f f Zerdd	lmZ G d
d deeeef ZG dd deeeeef ZnedddgZedg dZG dd dee ZG dd deee
e f eeeef ZG dd de	e ZG dd de	e ZdddddZe	ZdS )    )annotationsN)
namedtuple)
TYPE_CHECKINGCallableGenericIterableIteratorMapping
NamedTupleSequenceTypeVarUnionKTRTCT   )	Criterionc                   @  s   e Zd ZU ded< ded< dS )RequirementInformationr   requirementz	CT | NoneparentN)__name__
__module____qualname____annotations__ r   r   P/var/www/shaz/venv/lib/python3.9/site-packages/pip/_vendor/resolvelib/structs.pyr      s   
r   c                   @  s*   e Zd ZU dZded< ded< ded< dS )	StatezResolution state in a round.zdict[KT, CT]mappingzdict[KT, Criterion[RT, CT]]criteriaz$list[RequirementInformation[RT, CT]]backtrack_causesN)r   r   r   __doc__r   r   r   r   r   r      s   
r   r   r   )r   r   r   c                   @  s   e Zd ZdZddddZddddZd	dd
dZdddddZddddZdddddZ	dddddZ
ddddddZddddddZddddZdddd d!Zdddd"d#Zd$S )%DirectedGraphz&A graph structure with directed edges.Nonereturnc                 C  s   t  | _i | _i | _d S N)set	_vertices	_forwards
_backwardsselfr   r   r   __init__0   s    zDirectedGraph.__init__Iterator[KT]c                 C  s
   t | jS r%   )iterr'   r*   r   r   r   __iter__5   s    zDirectedGraph.__iter__intc                 C  s
   t | jS r%   )lenr'   r*   r   r   r   __len__8   s    zDirectedGraph.__len__r   boolkeyr$   c                 C  s
   || j v S r%   )r'   r+   r5   r   r   r   __contains__;   s    zDirectedGraph.__contains__zDirectedGraph[KT]c                 C  sF   t |  }t| j|_dd | j D |_dd | j D |_|S )z$Return a shallow copy of this graph.c                 S  s   i | ]\}}|t |qS r   r&   .0kvr   r   r   
<dictcomp>B       z&DirectedGraph.copy.<locals>.<dictcomp>c                 S  s   i | ]\}}|t |qS r   r8   r9   r   r   r   r=   C   r>   )typer&   r'   r(   itemsr)   )r+   otherr   r   r   copy>   s
    
zDirectedGraph.copyc                 C  s:   || j v rtd| j | t | j|< t | j|< dS )zAdd a new vertex to the graph.zvertex existsN)r'   
ValueErroraddr&   r(   r)   r6   r   r   r   rD   F   s
    
zDirectedGraph.addc                 C  sT   | j | | j|D ]}| j| | q| j|D ]}| j| | q:dS )zCRemove a vertex from the graph, disconnecting all edges from/to it.N)r'   remover(   popr)   )r+   r5   ftr   r   r   rE   N   s
    zDirectedGraph.remove)rG   rH   r$   c                 C  s   || j | v o|| j| v S r%   )r)   r(   r+   rG   rH   r   r   r   	connectedV   s    zDirectedGraph.connectedc                 C  s6   || j vrt|| j| | | j| | dS )zgConnect two existing vertices.

        Nothing happens if the vertices are already connected.
        N)r'   KeyErrorr(   rD   r)   rI   r   r   r   connectY   s    
zDirectedGraph.connectzIterator[tuple[KT, KT]]c                 c  s,   | j  D ]\}}|D ]}||fV  qq
d S r%   )r(   r@   )r+   rG   childrenrH   r   r   r   
iter_edgesc   s    zDirectedGraph.iter_edgesc                 C  s   t | j| S r%   )r.   r(   r6   r   r   r   iter_childrenh   s    zDirectedGraph.iter_childrenc                 C  s   t | j| S r%   )r.   r)   r6   r   r   r   iter_parentsk   s    zDirectedGraph.iter_parentsN)r   r   r   r    r,   r/   r2   r7   rB   rD   rE   rJ   rL   rN   rO   rP   r   r   r   r   r!   -   s   
r!   c                   @  sz   e Zd ZddddddddZd	d
ddZdd
ddZdddddZdddddZdd
ddZdd
ddZ	dS ) IteratorMappingNzMapping[KT, RT]zCallable[[RT], Iterable[CT]]z Mapping[KT, Iterable[CT]] | Noner"   )r   accessorappendsr$   c                 C  s   || _ || _|pi | _d S r%   )_mapping	_accessor_appends)r+   r   rR   rS   r   r   r   r,   p   s    zIteratorMapping.__init__strr#   c                 C  s   d | j| j| jS )Nz!IteratorMapping({!r}, {!r}, {!r}))formatrT   rU   rV   r*   r   r   r   __repr__z   s
    zIteratorMapping.__repr__r3   c                 C  s   t | jp| jS r%   )r3   rT   rV   r*   r   r   r   __bool__   s    zIteratorMapping.__bool__objectr4   c                 C  s   || j v p|| jv S r%   )rT   rV   r6   r   r   r   r7      s    zIteratorMapping.__contains__r   zIterator[CT])r;   r$   c                 C  sL   z| j | }W n  ty.   t| j|  Y S 0 t| || j|dS )Nr   )rT   rK   r.   rV   	itertoolschainrU   get)r+   r;   r<   r   r   r   __getitem__   s
    zIteratorMapping.__getitem__r-   c                   s"    fdd j D }t j|S )Nc                 3  s   | ]}| j vr|V  qd S r%   rT   r:   r;   r*   r   r   	<genexpr>   r>   z+IteratorMapping.__iter__.<locals>.<genexpr>)rV   r\   r]   rT   r+   Zmorer   r*   r   r/      s    zIteratorMapping.__iter__r0   c                   s&   t  fdd jD }t j| S )Nc                 3  s   | ]}| j vrd V  qdS )r   Nr`   ra   r*   r   r   rb      r>   z*IteratorMapping.__len__.<locals>.<genexpr>)sumrV   r1   rT   rc   r   r*   r   r2      s    zIteratorMapping.__len__)N)
r   r   r   r,   rY   rZ   r7   r_   r/   r2   r   r   r   r   rQ   o   s    
rQ   c                   @  sJ   e Zd ZdZdddddZddd	d
ZddddZddddZdS )_FactoryIterableViewa:  Wrap an iterator factory returned by `find_matches()`.

    Calling `iter()` on this class would invoke the underlying iterator
    factory, making it a "collection with ordering" that can be iterated
    through multiple times, but lacks random access methods presented in
    built-in Python sequence types.
    zCallable[[], Iterable[RT]]r"   )factoryr$   c                 C  s   || _ d | _d S r%   )_factory	_iterable)r+   rf   r   r   r   r,      s    z_FactoryIterableView.__init__rW   r#   c                 C  s   t | j dt|  dS N())r?   r   listr*   r   r   r   rY      s    z_FactoryIterableView.__repr__r3   c                 C  s*   zt t|  W n ty$   Y dS 0 dS )NFT)nextr.   StopIterationr*   r   r   r   rZ      s
    z_FactoryIterableView.__bool__Iterator[RT]c                 C  s,   | j d u r|  n| j }t|\| _ }|S r%   )rh   rg   r\   tee)r+   iterablecurrentr   r   r   r/      s    z_FactoryIterableView.__iter__Nr   r   r   r    r,   rY   rZ   r/   r   r   r   r   re      s
   re   c                   @  sH   e Zd ZdZddddZdddd	Zd
dddZddddZdS )_SequenceIterableViewzWrap an iterable returned by find_matches().

    This is essentially just a proxy to the underlying sequence that provides
    the same interface as `_FactoryIterableView`.
    zSequence[RT])sequencec                 C  s
   || _ d S r%   )	_sequence)r+   ru   r   r   r   r,      s    z_SequenceIterableView.__init__rW   r#   c                 C  s   t | j d| j dS ri   )r?   r   rv   r*   r   r   r   rY      s    z_SequenceIterableView.__repr__r3   c                 C  s
   t | jS r%   )r3   rv   r*   r   r   r   rZ      s    z_SequenceIterableView.__bool__ro   c                 C  s
   t | jS r%   )r.   rv   r*   r   r   r   r/      s    z_SequenceIterableView.__iter__Nrs   r   r   r   r   rt      s
   rt   zMatches[CT]zIterable[CT])matchesr$   c                 C  s*   t | rt| S t| ts"t| } t| S )zCBuild an iterable view from the value returned by `find_matches()`.)callablere   
isinstancer   rl   rt   )rw   r   r   r   build_iter_view   s
    
rz   )
__future__r   r\   collectionsr   typingr   r   r   r   r   r	   r
   r   r   r   r   r   r   ZMatchesZresolvers.criterionr   r   r   r!   rQ   re   rt   rz   ZIterableViewr   r   r   r   <module>   s*   0B((	