ó žÃÒYc@s`dZddlmZddlZddlmZddgZedƒd„ƒZd „Z dS( s Dominance algorithms. iÿÿÿÿ(treduceN(tnot_implemented_fortimmediate_dominatorstdominance_frontierst undirectedcs||krtjdƒ‚ni||6‰ttj||ƒƒ}d„t|ƒDƒ‰|jƒ|jƒ‡‡fd†}t}xv|rýt}xc|D][}t |‡fd†|j |Dƒƒ}|ˆksãˆ||kr›|ˆ|>> G = nx.DiGraph([(1, 2), (1, 3), (2, 5), (3, 4), (4, 5)]) >>> sorted(nx.immediate_dominators(G, 1).items()) [(1, 1), (2, 1), (3, 1), (4, 3), (5, 1)] References ---------- .. [1] K. D. Cooper, T. J. Harvey, and K. Kennedy. A simple, fast dominance algorithm. Software Practice & Experience, 4:110, 2001. sstart is not in GcSsi|]\}}||“qS(((t.0titu((ss/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/dominance.pys Es csaxZ||kr\x"ˆ|ˆ|kr3ˆ|}qWx"ˆ|ˆ|krXˆ|}q7WqW|S(N((Rtv(tdfntidom(ss/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/dominance.pyt intersectIs c3s!|]}|ˆkr|VqdS(N((RR(R (ss/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/dominance.pys Us( tnxt NetworkXErrortlisttdfs_postorder_nodest enumeratetpoptreversetTruetFalseRtpred(tGtstarttorderR tchangedRtnew_idom((R R ss/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/dominance.pyRs"+      & cCs¬tj||ƒ}d„|Dƒ}xƒ|D]{}t|j|ƒdkr)xY|j|D]G}||krVx2|||kr™||j|ƒ||}qkWqVqVWq)q)W|S(sÂReturns the dominance frontiers of all nodes of a directed graph. Parameters ---------- G : a DiGraph or MultiDiGraph The graph where dominance is to be computed. start : node The start node of dominance computation. Returns ------- df : dict keyed by nodes A dict containing the dominance frontiers of each node reachable from `start` as lists. Raises ------ NetworkXNotImplemented If `G` is undirected. NetworkXError If `start` is not in `G`. Examples -------- >>> G = nx.DiGraph([(1, 2), (1, 3), (2, 5), (3, 4), (4, 5)]) >>> sorted((u, sorted(df)) for u, df in nx.dominance_frontiers(G, 1).items()) [(1, []), (2, [5]), (3, [5]), (4, [5]), (5, [])] References ---------- .. [1] K. D. Cooper, T. J. Harvey, and K. Kennedy. A simple, fast dominance algorithm. Software Practice & Experience, 4:110, 2001. cSsi|]}tƒ|“qS((tset(RR((ss/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/dominance.pys „s i(R RtlenRtadd(RRR tdfRR((ss/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/dominance.pyR]s%  ( t__doc__t functoolsRtnetworkxR tnetworkx.utilsRt__all__RR(((ss/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/dominance.pyt s   I