c#)߾FdZddlmZddlmZgdZd dZd dZdZd Z d S) zTopological sorting algorithms.)util)CircularDependencyError)sortsort_as_subsets find_cyclesFc#Ktjt}|D] \}}|||!|r tjnt}||}|r|}|D]2} ||| r|| 3|s,t dt||t|| ||V|dSdS)NzCircular dependency detected.) r defaultdictsetadd OrderedSet isdisjointrr _gen_edgesdifference_update) tuplesallitemsdeterministic_orderedgesparentchildSettodooutputnodes /srv/buildsys-work-dir/castor/build_node/builder-2/WGSG1/unpkd_srcs/cloudlinux-venv-1.0.6/venv/lib/python3.11/site-packages/sqlalchemy/util/topological.pyrrs   S ! !E!!  e     0 9$//cC 3x==D  ! !DuT{++ ! 4    )/FH--5!!  v&&&  c#DKt|||D] }|D]}|V dS)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)rrrset_ss rrr,sM 2EFF  AGGGG rc>tjt}|D] \}}|||!t|}t}|D]}|g}||} |r|d} || D]}}||vrG|||d} | | || || vr,||| |n~| }||S)N) rr r r differenceindexrupdateappendremovepop) rrrrr nodes_to_testrrstackrtopcycs rrr8sH  S ! !E!!  f %    JJM UUF##''.. #)Cc # #5== D 1 1 3 34C**3///MM#&&&4<<LL&&&KK%%%E yy{{ # Mrc:tfdDS)Nc.g|]}|D]}||fSr-).0leftrightrs r z_gen_edges..as.III$U4[IIE IIIIr)r )rs`rrr`s& IIII%III J JJrN)F) __doc__rexcr__all__rrrrr-rrr6s&%)))))) 5 4 46    %%%PKKKKKr