
    ,h{                       S r SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJ	r	  SS	KJ
r
  SS
KJr  SSKJr  SSKJr  SSKJr  \" S\S9r/ SQr      SS jr S       SS jjr      SS jrSS jrg)zTopological sorting algorithms.    )annotations)Any)
Collection)DefaultDict)Iterable)Iterator)Sequence)Set)Tuple)TypeVar   )util)CircularDependencyError_T)bound)sortsort_as_subsetsfind_cyclesc              #    #    [         R                  " [        5      nU  H  u  p4X$   R                  U5        M     [	        U5      n[        U5      nU(       a  / nU H.  nUR                  X(   5      (       d  M  UR                  U5        M0     U(       d  [        S[        X5      [        U5      5      eUR                  U5        U V	s/ s H  oU;   d  M
  U	PM     nn	Uv   U(       a  M  g g s  sn	f 7f)NzCircular dependency detected.)r   defaultdictsetaddlist
isdisjointappendr   r   
_gen_edgesdifference_update)
tuplesallitemsedgesparentchildtodotodo_setoutputnodets
             S/var/www/auris/envauris/lib/python3.13/site-packages/sqlalchemy/util/topological.pyr   r      s      '+&6&6s&;E    >D8}H
D""5;//d#  )/F-5!  	""6*14a=41 ( 2s%   A3C29AC2		C-C-C2+C2c              #  H   #    [        X5       H  nU Sh  vN   M     g N	7f)a  sort the given list of items by dependency.

'tuples' is a list of tuples representing a partial ordering.

deterministic_order is no longer used, the order is now always
deterministic given the order of "allitems".    the flag is there
for backwards compatibility with Alembic.

N)r   )r   r   deterministic_orderset_s       r(   r   r   :   s        1 2s   " 
"c                   [         R                  " [        5      nU  H  u  p4X#   R                  U5        M     [        U5      n[        5       nU H  nU/nUR	                  U5      n	U(       d  M   US   n
X*    Hf  nXx;   a5  XR                  U5      S  nU	R                  U5        UR                  U5        Xy;   d  MD  UR                  U5        U	R                  U5          O   UR                  5         U(       a  M  M     U$ )N)r   r   r   r   
differenceindexr   updater   removepop)r   r   r    r!   r"   nodes_to_testr%   r&   stackr#   topcycs               r(   r   r   M   s     '+&6&6s&;E%   JMUF ''.e)C
=D 1 34C**3/MM#&<LL&KK% # 		 e " M    c                R    U  VVs1 s H  oU     H  o"U4iM     M     snn$ s  snnf )N )r    leftrights      r(   r   r   w   s&    &+EedtDMMeEEEs   #N)r   Collection[Tuple[_T, _T]]r   Collection[_T]returnzIterator[Sequence[_T]])T)r   r<   r   r=   r*   boolr>   zIterator[_T])r   zIterable[Tuple[_T, _T]]r   zIterable[_T]r>   zSet[_T])r    zDefaultDict[_T, Set[_T]]r>   zSet[Tuple[_T, _T]])__doc__
__future__r   typingr   r   r   r   r   r	   r
   r   r    r   excr   r   __all__r   r   r   r   r9   r7   r(   <module>rF      s    & "           )T
4%1?> !%%  	&'#'/;''TFr7   