o ?Oge%@s@ddgZdZdZGdddZGdddeZGdddZdS) TopologicalSorter CycleErrorc@seZdZdZddZdS) _NodeInfonode npredecessors successorscCs||_d|_g|_dSNr)selfrr //opt/alt/python310/lib64/python3.10/graphlib.py__init__ s z_NodeInfo.__init__N)__name__ __module__ __qualname__ __slots__rr r r rrs rc@seZdZ dS)rN)rrrr r r rrs c@s`eZdZ dddZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ dS)rNcCsLi|_d|_d|_d|_|dur"|D]\}}|j|g|RqdSdSr ) _node2info _ready_nodes _npassedout _nfinisheditemsadd)r Zgraphr predecessorsr r rr*szTopologicalSorter.__init__cCs*|j|}durt||j|<}|SN)rgetr)r rresultr r r _get_nodeinfo4szTopologicalSorter._get_nodeinfocGsT |jdur td||}|jt|7_|D] }||}|j|qdS)Nz/Nodes cannot be added after a call to prepare())r ValueErrorrrlenr append)r rrnodeinfoZpredZ pred_infor r rr9s   zTopologicalSorter.addcCsD |jdur tddd|jD|_|}|r td|dS)Nzcannot prepare() more than oncecSsg|] }|jdkr|jqS)r )rr).0ir r r _sz-TopologicalSorter.prepare..znodes are in a cycle)rrrvalues _find_cycler)r cycler r rprepareTs  zTopologicalSorter.preparecCsX |jdur tdt|j}|j}|D]}t||_q|j|jt|7_|SNprepare() must be called first) rrtupler _NODE_OUTrclearrr )r rn2irr r r get_readyjs    zTopologicalSorter.get_readycCs* |jdur td|j|jkpt|jSr*)rrrrboolr r r r is_actives zTopologicalSorter.is_activecCs|Sr)r3r2r r r__bool__szTopologicalSorter.__bool__cGs |jdur td|j}|D]X}||}dur"td|d|j}|tkrA|dkr5td|d|tkrAtd|dt|_|jD]}||}|jd8_|jdkr_|j|qG|j d7_ qdS)Nr+znode z was not added using add()r z% was not passed out (still not ready)z was already marked done) rrrrrr- _NODE_DONEr r!r)r Znodesr/rr"statZ successorZsuccessor_infor r rdones0     zTopologicalSorter.donec Cs|j}g}g}t}i}|D]Y}||vrq ||vr,||vr+|||d|gSn|||t||jjt|||<|||rez|d}Wntyb|| =| Ynw|sInqqdS)NTr) rsetrr!iterr __next__r StopIterationpop)r r/stackZitstackseenZ node2stackirr r rr's<       zTopologicalSorter._find_cycleccs@ ||r|}|EdH|j||s dSdSr)r)r3r0r8)r Z node_groupr r r static_orders  zTopologicalSorter.static_orderr) rrrrrrr)r0r3r4r8r'r@r r r rr's  / %N)__all__r-r6rrrrr r r rs