<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
U
    ʗRe                     @   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   /builddir/build/BUILDROOT/alt-python38-pip-22.2.1-2.el8.x86_64/opt/alt/python38/lib/python3.8/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 k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>   s      z&DirectedGraph.copy.<locals>.<dictcomp>c                 S   s   i | ]\}}|t |qS r   r   r   r   r   r   r      s      )r   r   r   r   itemsr	   )r   otherr   r   r   copy   s
    zDirectedGraph.copyc                 C   s:   || j k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 | ko|| j| kS r   )r	   r   r   r#   r$   r   r   r   	connected/   s    zDirectedGraph.connectedc                 C   s6   || j k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}))formatr2   r3   r4   r
   r   r   r   __repr__N   s
    zIteratorMapping.__repr__c                 C   s   t | jp| jS r   )boolr2   r4   r
   r   r   r   __bool__U   s    zIteratorMapping.__bool__c                 C   s   || j kp|| jkS r   )r2   r4   r   r   r   r   r   Z   s    zIteratorMapping.__contains__c                 C   sN   z| j | }W n" tk
r0   t| j|  Y S X t| || j|dS )Nr   )r2   r'   r   r4   	itertoolschainr3   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 kr|V  qd S r   r2   r   r   r
   r   r   	<genexpr>e   s     
 z+IteratorMapping.__iter__.<locals>.<genexpr>)r4   r<   r=   r2   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 krd V  qdS )r   Nr@   rA   r
   r   r   rB   i   s     
 z*IteratorMapping.__len__.<locals>.<genexpr>)sumr4   r   r2   rC   r   r
   r   r   h   s    zIteratorMapping.__len__)N)r-   r.   r/   r   r9   r;   __nonzero__r   r?   r   r   r   r   r   r   r1   H   s   
r1   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{}({}))r8   typer-   listrI   r
   r   r   r   r9   y   s    z_FactoryIterableView.__repr__c                 C   s,   zt |   W n tk
r&   Y dS X dS )NFT)nextrI   StopIterationr
   r   r   r   r;   |   s
    z_FactoryIterableView.__bool__c                 C   s   |   S r   rH   r
   r   r   r   r      s    z_FactoryIterableView.__iter__N	r-   r.   r/   r0   r   r9   r;   rF   r   r   r   r   r   rG   m   s   rG   c                   @   s4   e Zd ZdZdd Zdd Zdd ZeZ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`.
    c                 C   s
   || _ d S r   )	_sequence)r   sequencer   r   r   r      s    z_SequenceIterableView.__init__c                 C   s   d t| j| jS rK   )r8   rL   r-   rR   r
   r   r   r   r9      s    z_SequenceIterableView.__repr__c                 C   s
   t | jS r   )r:   rR   r
   r   r   r   r;      s    z_SequenceIterableView.__bool__c                 C   s
   t | jS r   )r   rR   r
   r   r   r   r      s    z_SequenceIterableView.__iter__NrP   r   r   r   r   rQ      s   rQ   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()`.)callablerG   
isinstancer   SequencerM   rQ   )matchesr   r   r   build_iter_view   s
    rX   )
r<   compatr   objectr   Mappingr1   rG   rQ   rX   r   r   r   r   <module>   s   B%