
    z%i%                     ^    d dl mZ ddgZdZdZ G d d      Z G d de      Z G d	 d      Zy
)    )GenericAliasTopologicalSorter
CycleErrorc                       e Zd ZdZd Zy)	_NodeInfonodenpredecessors
successorsc                 .    || _         d| _        g | _        y Nr   r
   )selfr   s     </home/uftp/.pyenv/versions/3.12.0/lib/python3.12/graphlib.py__init__z_NodeInfo.__init__   s    	
      N)__name__
__module____qualname__	__slots__r    r   r   r	   r	   	   s    5Ir   r	   c                       e Zd Z	 y)r   N)r   r   r   r   r   r   r   r      s    	 	r   c                   \    e Zd Z	 ddZd Zd Zd Zd Zd Zd Z	d	 Z
d
 Zd Z ee      Zy)r   Nc                     i | _         d | _        d| _        d| _        |,|j	                         D ]  \  }} | j
                  |g|   y y r   )
_node2info_ready_nodes_npassedout
_nfinisheditemsadd)r   graphr   predecessorss       r   r   zTopologicalSorter.__init__,   sX     &+kkm ."l--. r   c                 t    | j                   j                  |      x}t        |      x| j                   |<   }|S N)r   getr	   )r   r   results      r   _get_nodeinfozTopologicalSorter._get_nodeinfo6   s8    oo))$//F8-6t_<DOOD!Fr   c                     	 | j                   t        d      | j                  |      }|xj                  t	        |      z  c_        |D ].  }| j                  |      }|j
                  j                  |       0 y )Nz/Nodes cannot be added after a call to prepare())r   
ValueErrorr(   r   lenr   append)r   r   r#   nodeinfopred	pred_infos         r   r!   zTopologicalSorter.add;   s~    	 (NOO %%d+#l"33 ! 	.D**40I  ''-	.r   c                    	 | j                   t        d      | j                  j                         D cg c]  }|j                  dk(  s|j
                    c}| _         | j                         }|rt        d|      y c c}w )Nzcannot prepare() more than oncer   znodes are in a cycle)r   r*   r   valuesr   r   _find_cycler   )r   icycles      r   preparezTopologicalSorter.prepareV   s    	 (>?? !OO224
18LAFF
   "3e<< 
s   A?
A?c                    	 | j                   t        d      t        | j                         }| j                  }|D ]  }t        ||   _         | j                   j                          | xj                  t        |      z  c_        |S Nprepare() must be called first)	r   r*   tupler   	_NODE_OUTr   clearr   r+   )r   r'   n2ir   s       r   	get_readyzTopologicalSorter.get_readyl   s    	 $=>> t(()oo 	0D&/CI#	0
 	!CK'r   c                     	 | j                   t        d      | j                  | j                  k  xs t	        | j                         S r7   )r   r*   r   r   boolr   s    r   	is_activezTopologicalSorter.is_active   sF    	 $=>>!1!11LT$:K:K5LLr   c                 "    | j                         S r%   )rA   r@   s    r   __bool__zTopologicalSorter.__bool__   s    ~~r   c                    	 | j                   t        d      | j                  }|D ]  }|j                  |      x}t        d|d      |j                  }|t
        k7  r,|dk\  rt        d|d      |t        k(  rt        d|d      t        |_        |j                  D ]G  }||   }|xj                  dz  c_        |j                  dk(  s-| j                   j                  |       I | xj                  dz  c_	         y )Nr8   znode z was not added using add()r   z% was not passed out (still not ready)z was already marked done   )
r   r*   r   r&   r   r:   
_NODE_DONEr   r,   r   )r   nodesr<   r   r-   stat	successorsuccessor_infos           r   donezTopologicalSorter.done   s%   		 $=>>oo 	!D  GGDM)2 50J!KLL ))Dy 19$x'LM  Z'$uTH4L%MNN
 &0H" &00 8	!$Y,,1,!//14%%,,Y7	8
 OOq O9	!r   c                    | j                   }g }g }t               }i }|D ]  }||v r	 ||v r||v ro|||   d  |gz   c S |j                  |       |j                  t	        ||   j
                        j                         t        |      ||<   |j                  |       |r	  |d          }n y # t        $ r$ ||j                         = |j                          Y nw xY w|rC8)Nr   )
r   setr!   r,   iterr   __next__r+   StopIterationpop)r   r<   stackitstackseennode2stackir   s          r   r2   zTopologicalSorter._find_cycle   s   oou 	Dt|4< {*$[%6%89TFBB HHTNNN4D	(<(<#=#F#FG(+E
K%LL& &*wr{}
 / 		8  ) &'		4&	 s   "
B11*CCc              #      K   	 | j                          | j                         r;| j                         }|E d {     | j                  |  | j                         r:y y 7 &wr%   )r5   rA   r=   rK   )r   
node_groups     r   static_orderzTopologicalSorter.static_order   sR     	 	nn)J!!!DIIz" nn!s   7A"A #A"A"r%   )r   r   r   r   r(   r!   r5   r=   rA   rC   rK   r2   rX   classmethodr   __class_getitem__r   r   r   r   r   )   sG    P.
.6=,4M -!^#J# $L1r   N)	typesr   __all__r:   rF   r	   r*   r   r   r   r   r   <module>r]      s>    
-	
 "	 	Q2 Q2r   