
    yIfs	                    6    d Z ddlmZ ddlmZmZ ddZdd
ZdS )z'Helper methods related to graph theory.    )annotations)OrderedDictdefaultdictgraphdict[str, set[str]]return	list[str]c                l   t          |                                           t          |                                           D ]}|D ]}|| vrt                      | |<   t	          t                     }|                                 D ]%\  }}|D ]}||                             |           &g }d |                                 D             }d |                                D             }	t          d | D                       }
|
r^|
D ]}||	v r n	nR|
|= |                    |           ||         D ]/}||xx         dz  cc<   ||         s|	                    |           0|
^fd|D             }t          |          t                    k     r t          |            d}t          |          |S )Nc                4    i | ]\  }}|t          |          S  )len).0kvs      B/var/www/piapp/venv/lib/python3.11/site-packages/tox/util/graph.py
<dictcomp>z+stable_topological_sort.<locals>.<dictcomp>   s$    222DAqaQ222    c                    h | ]	\  }}||
S r   r   )r   nds      r   	<setcomp>z*stable_topological_sort.<locals>.<setcomp>   s!    <<<DAq!<a<<<r   c              3     K   | ]}|d fV  	d S )Nr   )r   is     r   	<genexpr>z*stable_topological_sort.<locals>.<genexpr>   s&      99aD	999999r      c                    g | ]}|v |	S r   r   )r   r   to_orders     r   
<listcomp>z+stable_topological_sort.<locals>.<listcomp>+   s    333AQ(]]a]]]r   z<could not order tox environments and failed to detect circle)setkeyslistvaluesr   itemsaddr   appendr   identify_cycle
ValueError)r   r"   valueinverse_graphkeydependsdependtopologydegreeready_to_visitneed_to_visitnodeto_noderesultmsgr   s                  @r   stable_topological_sortr5      s   5::<<  H u||~~&& % % 	% 	%EE!!"uue	%  $$M + +W 	+ 	+F&!%%c****	+ H22EKKMM222F<<FLLNN<<<N99599999M
 ,! 	 	D~%% & $ %T* 	, 	,G7OOOq OOO'? ,""7+++  ," 4333333F
6{{S]]""uLooMr   Nonec                     t                      t                      d fd D ]F} |          }|7d                    |                                           }t	          |          Gd S )Nvertexstrr   dict[str, None] | Nonec                    | v rd S                      |            d | <                       | d          D ]}|v s |          rc S | = d S )Nr   )r$   get)r8   neighborr   pathvisitvisiteds     r   r?   zidentify_cycle.<locals>.visit8   s}    W4FV		&"-- 	 	H455??  Ltr   z | )r8   r9   r   r:   )r   r   joinr    r'   )r   r1   r3   r4   r>   r?   r@   s   `   @@@r   r&   r&   4   s    'MMDeeG	 	 	 	 	 	 	 	 	  " "tZZ..0CS//! " "r   N)r   r   r   r	   )r   r   r   r6   )__doc__
__future__r   collectionsr   r   r5   r&   r   r   r   <module>rE      sh    - - " " " " " " 0 0 0 0 0 0 0 0) ) ) )X" " " " " "r   