
    -h+                     D    S r SSKJr  SSKJr  / SQrS rS
S jrS rS r	g	)zTopological sorting algorithms.   )util)CircularDependencyError)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
             pC:\Users\ROHAN GUPTA\OneDrive\Desktop\mathbuddy-assessment\venv\Lib\site-packages\sqlalchemy/util/topological.pyr   r      s     S!E    >D8}H
D""5;//d#  )/F-5!  	""6*14a=41 ( 2s%   A3C29AC2		C-C-C2+C2c              #   J   #    [        X5       H  nU H  nUv   M	     M     g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_ss        r   r   r   +   s%       1AG  2s   !#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       n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   ;   s     S!E%   JMUF ''.e)C
=D 1 34C**3/MM#&<LL&KK% # yy{ e " M    c           	      d    [        U  VVs/ s H  oU     H  o"U4PM     M     snn5      $ s  snnf )N)r
   )r   leftrights      r   r   r   c   s+    %I%$4[E[%IJJIs   ,
N)T)
__doc__ r   excr   __all__r   r   r   r    r+   r   <module>r4      s+    &  )
46 %PKr+   