a
    3ŠÝgº  ã                   @   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   úl/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/pip/_vendor/resolvelib/structs.pyÚ__init__	   s    zDirectedGraph.__init__c                 C   s
   t | jƒS r   )Úiterr   r
   r   r   r   Ú__iter__   s    zDirectedGraph.__iter__c                 C   s
   t | jƒS r   )Úlenr   r
   r   r   r   Ú__len__   s    zDirectedGraph.__len__c                 C   s
   || j v S r   )r   ©r   Úkeyr   r   r   Ú__contains__   s    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   s   i | ]\}}|t |ƒ“qS r   ©r   ©Ú.0ÚkÚvr   r   r   Ú
<dictcomp>   ó    z&DirectedGraph.copy.<locals>.<dictcomp>c                 S   s   i | ]\}}|t |ƒ“qS 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   s   t | j| ƒS r   )r   r   r   r   r   r   Úiter_childrenA   s    zDirectedGraph.iter_childrenc                 C   s   t | j| ƒS r   )r   r	   r   r   r   r   Úiter_parentsD   s    zDirectedGraph.iter_parentsN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r!   r"   r'   r)   r+   r,   r-   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}))Úformatr3   r4   r5   r
   r   r   r   Ú__repr__N   s
    ýzIteratorMapping.__repr__c                 C   s   t | jp| jƒS r   )Úboolr3   r5   r
   r   r   r   Ú__bool__U   s    zIteratorMapping.__bool__c                 C   s   || j v p|| jv S r   )r3   r5   r   r   r   r   r   Z   s    zIteratorMapping.__contains__c                 C   sL   z| j | }W n  ty.   t| j| ƒ Y S 0 t |  |¡| j |d¡¡S )Nr   )r3   r(   r   r5   Ú	itertoolsÚchainr4   Ú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   ©r3   ©r   r   r
   r   r   Ú	<genexpr>e   r   z+IteratorMapping.__iter__.<locals>.<genexpr>)r5   r=   r>   r3   ©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   NrA   rB   r
   r   r   rC   i   r   z*IteratorMapping.__len__.<locals>.<genexpr>)Úsumr5   r   r3   rD   r   r
   r   r   h   s    zIteratorMapping.__len__)N)r.   r/   r0   r   r:   r<   Ú__nonzero__r   r@   r   r   r   r   r   r   r2   H   s   
r2   c                   @   s4   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   s
   || _ d S r   ©Ú_factory)r   Úfactoryr   r   r   r   v   s    z_FactoryIterableView.__init__c                 C   s   d  t| ƒjt|  ¡ ƒ¡S ©Nz{}({}))r9   Útyper.   ÚlistrJ   r
   r   r   r   r:   y   s    z_FactoryIterableView.__repr__c                 C   s*   zt |  ¡ ƒ W n ty$   Y dS 0 dS )NFT)ÚnextrJ   ÚStopIterationr
   r   r   r   r<   |   s
    z_FactoryIterableView.__bool__c                 C   s   |   ¡ S r   rI   r
   r   r   r   r   …   s    z_FactoryIterableView.__iter__N©	r.   r/   r0   r1   r   r:   r<   rG   r   r   r   r   r   rH   m   s   rH   c                   @   s4   e Zd ZdZdd„ Zdd„ Zdd„ ZeZdd	„ Zd
S )Ú_SequenceIterableViewz²Wrap 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   s
   || _ d S r   )Ú	_sequence)r   Úsequencer   r   r   r      s    z_SequenceIterableView.__init__c                 C   s   d  t| ƒj| j¡S rL   )r9   rM   r.   rS   r
   r   r   r   r:   “   s    z_SequenceIterableView.__repr__c                 C   s
   t | jƒS r   )r;   rS   r
   r   r   r   r<   –   s    z_SequenceIterableView.__bool__c                 C   s
   t | jƒS r   )r   rS   r
   r   r   r   r   ›   s    z_SequenceIterableView.__iter__NrQ   r   r   r   r   rR   ‰   s   rR   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()`.)ÚcallablerH   Ú
isinstancer   ÚSequencerN   rR   )Úmatchesr   r   r   Úbuild_iter_viewŸ   s
    rY   )
r=   Úcompatr   Úobjectr   ÚMappingr2   rH   rR   rY   r   r   r   r   Ú<module>   s   B%