a DOge%@s@ddgZdZdZGdddZGdddeZGdddZdS) TopologicalSorter CycleErrorc@seZdZdZddZdS) _NodeInfonode npredecessors successorscCs||_d|_g|_dSNr)selfrr -/opt/alt/python39/lib64/python3.9/graphlib.py__init__ sz_NodeInfo.__init__N)__name__ __module__ __qualname__ __slots__rr r r rrsrc@s eZdZdS)rN)rrrr r r rrs c@s^eZdZdddZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ dS)rNcCsHi|_d|_d|_d|_|durD|D]\}}|j|g|Rq(dSr ) _node2info _ready_nodes _npassedout _nfinisheditemsadd)r Zgraphr predecessorsr r rr*szTopologicalSorter.__init__cCs*|j|}dur&t||j|<}|SN)rgetr)r rresultr r r _get_nodeinfo4szTopologicalSorter._get_nodeinfocGsR|jdurtd||}|jt|7_|D]}||}|j|q2dS)Nz/Nodes cannot be added after a call to prepare())r ValueErrorrrlenr append)r rrnodeinfoZpredZ pred_infor r rr9s   zTopologicalSorter.addcCsB|jdurtddd|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.preparecCsV|jdurtdt|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(|jdurtd|j|jkp&t|jSr*)rrrrboolr r r r is_actives zTopologicalSorter.is_activecCs|Sr)r3r2r r r__bool__szTopologicalSorter.__bool__cGs|jdurtd|j}|D]}||}durBtd|d|j}|tkr|dkrjtd|dn|tkrtd|dnt|_|jD]0}||}|jd8_|jdkr|j|q|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 rdones*    zTopologicalSorter.donec Cs|j}g}g}t}i}|D]}||vr*q||vrV||vr|||d|gSn6|||t||jjt|||<|||rz|d}Wq*Wqty|| =| Yq0qqq*qdS)Nr) rsetrr!iterr __next__r StopIterationpop)r r/stackZitstackseenZ node2stackirr r rr's0      zTopologicalSorter._find_cycleccs2||r.|}|EdH|j|qdSr)r)r3r0r8)r Z node_groupr r r static_orders  zTopologicalSorter.static_order)N) rrrrrrr)r0r3r4r8r'r@r r r rr's /%N)__all__r-r6rrrrr r r rs