mò j3Fc@s¯deefd„ƒYZdd„Zd„Zdd„Zedjodddd d d d gZddfdd fdd fd d fgZx-eeeƒD]Z xe D] Z e GHq¦Wq™We ‚d k Z d k Z ddddddgZddfddfddfddfddfgddfddfddfddfddfgddfddfddfddfddfddfddfgddfddfddfddfddfddfddfgddfddfddfddfddfddfddfddfddfg ddfddfddfddfgddfddfddfddfggZdGHxCeeeƒƒD]/ZydGeeeeƒGHWn dGHnXqWdGHxCeeeƒƒD]/ZydGeeeeƒGHWn dGHnXqØWdGHxFeeeƒƒD]2ZydGeeeedƒGHWn dGHnXq#WdGHxFeeeƒƒD]2ZydGeeeedƒGHWn dGHnXqqWnd S(tRecursionErrorcBstZdZRS(s9Unable to calculate result because of recursive structure(t__name__t __module__t__doc__(((t../tools/toposort.pyR s icCsst|ƒ\}} g}|g}g} x/|D]'}| i |ƒp|i |ƒq.q.W|o| o|i |dƒn| i |ƒt |d„|ƒ}xÍ|oÅg} t|ƒ}x€|D]x}xo|i |gƒD][} | | jo| | jo| i | ƒqÛ| | jo|ot| |fƒ‚qÛqÛWqÂW| }g}xy|D]q}| i |gƒ}xV|D]N}||jo;||jo.|| i |gƒjo|i |ƒq¾qpqpWqQWx0|D](} x| |jo|i| ƒqÖWqÍW|i |ƒ| i |ƒt |d„|ƒ}|t|ƒjo/|ot|ƒ‚qj|i |ƒg}q¢q¢W|S(sœPassed a list of node IDs and a list of source,dest ID routes attempt to create a list of stages where each sub list is one stage in a process. icCs ||jS(N(txtl(RR((Rt scCs ||jS(N(RR(RR((RR=sN(t_buildChildrenListstroutestchildrentparentststagetstagesttakentnodestnodetgettappendtextendtfiltertpreviousStageChildrentlentnodelentchildt noRecursionRtremovestcurrenttcurrentParentstparenttremove(RR RRRRRRRRRR RRR R R ((Rtsort sb      cCs¡h}h}xˆ|D]€\}}|i|gƒ}|i|gƒ}||jo|i|ƒn||jo|i|ƒn|||<|||