
    =Og%                     r    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d
S )    )GenericAliasTopologicalSorter
CycleErrorc                       e Zd ZdZd ZdS )	_NodeInfonodenpredecessors
successorsc                 0    || _         d| _        g | _        d S Nr   r
   )selfr   s     !/usr/lib64/python3.11/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	 dS )r   N)r   r   r   r   r   r   r   r      s        	 	Dr   c                   d    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dS )r   Nc                     i | _         d | _        d| _        d| _        |(|                                D ]\  }} | j        |g|R   d S d S r   )
_node2info_ready_nodes_npassedout
_nfinisheditemsadd)r   graphr   predecessorss       r   r   zTopologicalSorter.__init__,   sq     &+kkmm . ."l------ . .r   c                 p    | j                             |          x}t          |          x| j         |<   }|S N)r   getr	   )r   r   results      r   _get_nodeinfozTopologicalSorter._get_nodeinfo6   s9    o))$///F8-6t__<DOD!Fr   c                     	 | j         t          d          |                     |          }|xj        t	          |          z  c_        |D ]1}|                     |          }|j                            |           2d S )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O %%d++#l"3"33 ! 	. 	.D**400I ''----	. 	.r   c                     	 | j         t          d          d | j                                        D             | _         |                                 }|rt          d|          d S )Nzcannot prepare() more than oncec                 2    g | ]}|j         d k    |j        S )r   )r   r   ).0is     r   
<listcomp>z-TopologicalSorter.prepare.<locals>.<listcomp>a   s-     
 
 
18L8LAF8L8L8Lr   znodes are in a cycle)r   r*   r   values_find_cycler   )r   cycles     r   preparezTopologicalSorter.prepareV   s    	 (>???
 
 O2244
 
 
   "" 	=4e<<<	= 	=r   c                    	 | j         t          d          t          | j                   }| j        }|D ]}t          ||         _        | 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())o 	0 	0D&/CI## 	!!!CKK'r   c                 x    	 | j         t          d          | j        | j        k     pt	          | j                   S r:   )r   r*   r   r   boolr   s    r   	is_activezTopologicalSorter.is_active   sA    	 $=>>>!11LT$:K5L5LLr   c                 *    |                                  S r%   )rD   rC   s    r   __bool__zTopologicalSorter.__bool__   s    ~~r   c                    	 | j         t          d          | j        }|D ]}|                    |          x}t          d|d          |j        }|t
          k    r7|dk    rt          d|d          |t          k    rt          d|d          t          |_        |j        D ]?}||         }|xj        dz  c_        |j        dk    r| j                             |           @| xj	        dz  c_	        d S )Nr;   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   sJ   		 $=>>>o 	! 	!D  GGDMM)2 !K!K!K!KLLL )Dy  199$MMMM   Z''$%MT%M%M%MNNN
 &0H" &0 8 8	!$Y,,1,,!/144%,,Y777OOq OOO9	! 	!r   c                    | j         }g }g }t                      }i }|D ]}||v r	 ||v r||v r|||         d          |gz   c S nn|                    |           |                    t	          ||         j                  j                   t          |          ||<   |                    |           |rM	  |d                     }n<# t          $ r, ||	                                = |	                                 Y nw xY w|Mnތd S )NTr   )
r   setr!   r,   iterr   __next__r+   StopIterationpop)r   r?   stackitstackseennode2stackir   s          r   r6   zTopologicalSorter._find_cycle   sQ   ouu 	 	Dt||4<< {**$[%6%8%89TFBBBB + HHTNNNNN4D	(<#=#=#FGGG(+E

K%LL&&&  &*wr{}}( & & &'		4&	   /. ts   6C3C=<C=c              #      K   	 |                                   |                                 r<|                                 }|E d {V   | j        |  |                                 :d S d S r%   )r8   rD   r@   rN   )r   
node_groups     r   static_orderzTopologicalSorter.static_order   s      	 	nn 	#))J!!!!!!!!DIz"" nn 	# 	# 	# 	# 	#r   r%   )r   r   r   r   r(   r!   r8   r@   rD   rF   rN   r6   r[   classmethodr   __class_getitem__r   r   r   r   r   )   s        P. . . .  
. . .6= = =,  4M M M     -! -! -!^# # #J# # # $L11r   N)	typesr   __all__r=   rI   r	   r*   r   r   r   r   r   <module>r`      s         
-	
       "	 	 	 	 	 	 	 	Q2 Q2 Q2 Q2 Q2 Q2 Q2 Q2 Q2 Q2r   