o
    Mf                     @   sb   d dl Z ddlmZ G dd deZG dd dejZG dd	 d	eZG d
d deZdd Z	dS )    N   )collections_abcc                   @   sp   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )DirectedGraphz&A graph structure with directed edges.c                 C   s   t  | _i | _i | _d S N)set	_vertices	_forwards
_backwardsself r   `/var/www/html/analyze/labelStudio/lib/python3.10/site-packages/pip/_vendor/resolvelib/structs.py__init__	   s   
zDirectedGraph.__init__c                 C   
   t | jS r   )iterr   r
   r   r   r   __iter__      
zDirectedGraph.__iter__c                 C   r   r   )lenr   r
   r   r   r   __len__   r   zDirectedGraph.__len__c                 C   s
   || j v S r   )r   r   keyr   r   r   __contains__   r   zDirectedGraph.__contains__c                 C   sB   t  }t| j|_dd | j D |_dd | j D |_|S )z$Return a shallow copy of this graph.c                 S      i | ]	\}}|t |qS r   r   .0kvr   r   r   
<dictcomp>       z&DirectedGraph.copy.<locals>.<dictcomp>c                 S   r   r   r   r   r   r   r   r      r   )r   r   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	   r   r   r   r   r$      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   r   ftr   r   r   r%   '   s   zDirectedGraph.removec                 C   s   || j | v o|| j| v S r   )r	   r   r   r'   r(   r   r   r   	connected/   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   r$   r	   r)   r   r   r   connect2   s   
zDirectedGraph.connectc                 c   s.    | j  D ]\}}|D ]}||fV  qqd S r   )r   r    )r   r'   childrenr(   r   r   r   
iter_edges<   s   zDirectedGraph.iter_edgesc                 C      t | j| S r   )r   r   r   r   r   r   iter_childrenA      zDirectedGraph.iter_childrenc                 C   r/   r   )r   r	   r   r   r   r   iter_parentsD   r1   zDirectedGraph.iter_parentsN)__name__
__module____qualname____doc__r   r   r   r   r"   r$   r%   r*   r,   r.   r0   r2   r   r   r   r   r      s    
r   c                   @   sJ   e Zd ZdddZdd Zdd ZeZdd	 Zd
d Zdd Z	dd Z
dS )IteratorMappingNc                 C   s   || _ || _|p	i | _d S r   )_mapping	_accessor_appends)r   mappingaccessorappendsr   r   r   r   I   s   zIteratorMapping.__init__c                 C   s   d | j| j| jS )Nz!IteratorMapping({!r}, {!r}, {!r}))formatr8   r9   r:   r
   r   r   r   __repr__N   s
   zIteratorMapping.__repr__c                 C   s   t | jp| jS r   )boolr8   r:   r
   r   r   r   __bool__U   s   zIteratorMapping.__bool__c                 C   s   || j v p	|| jv S r   )r8   r:   r   r   r   r   r   Z      zIteratorMapping.__contains__c                 C   sL   z| j | }W n ty   t| j|  Y S w t| || j|dS )Nr   )r8   r+   r   r:   	itertoolschainr9   get)r   r   r   r   r   r   __getitem__]   s   zIteratorMapping.__getitem__c                    s"    fdd j D }t j|S )Nc                 3   s    | ]
}| j vr|V  qd S r   r8   r   r   r
   r   r   	<genexpr>e       z+IteratorMapping.__iter__.<locals>.<genexpr>)r:   rC   rD   r8   r   morer   r
   r   r   d   s   zIteratorMapping.__iter__c                    s&   t  fdd jD }t j| S )Nc                 3   s    | ]
}| j vrd V  qdS )r   NrG   rH   r
   r   r   rI   i   rJ   z*IteratorMapping.__len__.<locals>.<genexpr>)sumr:   r   r8   rK   r   r
   r   r   h   s   zIteratorMapping.__len__r   )r3   r4   r5   r   r?   rA   __nonzero__r   rF   r   r   r   r   r   r   r7   H   s    
r7   c                   @   4   e Zd ZdZdd Zdd Zdd ZeZ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.
    c                 C   
   || _ d S r   _factory)r   factoryr   r   r   r   v   r   z_FactoryIterableView.__init__c                 C   s   d t| jt|  S Nz{}({}))r>   typer3   listrS   r
   r   r   r   r?   y   s   z_FactoryIterableView.__repr__c                 C   s(   z	t |   W dS  ty   Y dS w )NFT)nextrS   StopIterationr
   r   r   r   rA   |   s   z_FactoryIterableView.__bool__c                 C   s   |   S r   rR   r
   r   r   r   r      s   z_FactoryIterableView.__iter__N	r3   r4   r5   r6   r   r?   rA   rN   r   r   r   r   r   rP   m   s    rP   c                   @   rO   )_SequenceIterableViewzWrap an iterable returned by find_matches().

    This is essentially just a proxy to the underlying sequence that provides
    the same interface as `_FactoryIterableView`.
    c                 C   rQ   r   )	_sequence)r   sequencer   r   r   r      r   z_SequenceIterableView.__init__c                 C   s   d t| j| jS rU   )r>   rV   r3   r\   r
   r   r   r   r?      rB   z_SequenceIterableView.__repr__c                 C   r   r   )r@   r\   r
   r   r   r   rA      r   z_SequenceIterableView.__bool__c                 C   r   r   )r   r\   r
   r   r   r   r      r   z_SequenceIterableView.__iter__NrZ   r   r   r   r   r[      s    r[   c                 C   s,   t | rt| S t| tjst| } t| S )zCBuild an iterable view from the value returned by `find_matches()`.)callablerP   
isinstancer   SequencerW   r[   )matchesr   r   r   build_iter_view   s
   rb   )
rC   compatr   objectr   Mappingr7   rP   r[   rb   r   r   r   r   <module>   s    B%