
    ؄_
                     F    d Z ddlmZ ddlmZ g dZddZddZd Zd	 Z	d
S )zTopological sorting algorithms.   )util)CircularDependencyError)sortsort_as_subsetsfind_cyclesFc              #     K   t          j        t                    }| D ] \  }}||                             |           !|rt           j        nt          } ||          }|r |            }|D ]2}	|                    ||	                   r|                    |	           3|s,t          dt          | |          t          |                    |	                    |           |V  |d S d S )NzCircular dependency detected.)
r   defaultdictsetadd
OrderedSet
isdisjointr   r   
_gen_edgesdifference_update)
tuplesallitemsdeterministic_orderedgesparentchildSettodooutputnodes
             `/var/www/book.euthymeo.com/html/venv/lib/python3.11/site-packages/sqlalchemy/util/topological.pyr   r      s      S!!E ! !e    0
9$//cC3x==D
  	! 	!DuT{++ !

4    	)/FH--5!!   	v&&&          c              #   D   K   t          | ||          D ]}|D ]}|V  dS )zsort the given list of items by dependency.

    'tuples' is a list of tuples representing a partial ordering.
    'deterministic_order' keeps items within a dependency tier in list order.
    N)r   )r   r   r   set_ss        r   r   r   ,   sM        2EFF   	 	AGGGG	 r   c                 >   t          j        t                    }| D ] \  }}||                             |           !t          |          }t                      }|D ]}|g}|                    |          }	|r|d         }
||
         D ]}}||v rG||                    |          d          }|	                    |           |                    |           ||	v r,|                    |           |		                    |            n~|
                                }||S )N)r   r	   r
   r   
differenceindexr   updateappendremovepop)r   r   r   r   r   nodes_to_testr   r   stackr   topcycs               r   r   r   8   sH    S!!E ! !f%    JJMUUF  # #''.. 	#)Cc
 # #5==D 1 1 3 34C**3///MM#&&&4<<LL&&&KK%%%E  
 yy{{  	# Mr   c                 :     t           fd D                       S )Nc                 .    g | ]}|         D ]}||fS  r-   ).0leftrightr   s      r   
<listcomp>z_gen_edges.<locals>.<listcomp>a   s.    III$U4[IIEIIIIr   )r
   )r   s   `r   r   r   `   s&    IIII%IIIJJJr   N)F)
__doc__ r   excr   __all__r   r   r   r   r-   r   r   <module>r6      s    & %       ) ) ) ) ) ) 5
4
4   6	 	 	 	% % %PK K K K Kr   