+
    )i9                         R t ^ RIHt ^ RIt^ RIHt RR.t]! R4      ]P                  R 4       4       t	]! R4      ]P                  R 4       4       t
R# )	z
Dominance algorithms.
)reduceN)not_implemented_forimmediate_dominatorsdominance_frontiers
undirectedc                  aa	 W9  d   \         P                  ! R4      hVR/o	\        \         P                  ! W4      4      p\	        V4       UUu/ uF  w  r4WCbK	  	  uppoVP                  4        VP                  4        VV	3R lpRpV'       dS   RpV FH  p\        VV	3R lV P                  V,           4       4      pVS	9  g   S	V,          V8w  g   KA  VS	V&   RpKJ  	  KZ  S	V S	# u uppi )a  Returns the immediate dominators 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
-------
idom : dict keyed by nodes
    A dict containing the immediate dominators of each node reachable from
    `start`, except for `start` itself.

Raises
------
NetworkXNotImplemented
    If `G` is undirected.

NetworkXError
    If `start` is not in `G`.

Notes
-----
The immediate dominators are the parents of their corresponding nodes in
the dominator tree. Every node reachable from `start` has an immediate
dominator, except for `start` itself.

Examples
--------
>>> G = nx.DiGraph([(1, 2), (1, 3), (2, 5), (3, 4), (4, 5)])
>>> sorted(nx.immediate_dominators(G, 1).items())
[(2, 1), (3, 1), (4, 3), (5, 1)]

References
----------
.. [1] Cooper, Keith D., Harvey, Timothy J. and Kennedy, Ken.
       "A simple, fast dominance algorithm." (2006).
       https://hdl.handle.net/1911/96345
.. [2] Lengauer, Thomas; Tarjan, Robert Endre (July 1979).
       "A fast algorithm for finding dominators in a flowgraph".
       ACM Transactions on Programming Languages and Systems. 1 (1): 121--141.
       https://dl.acm.org/doi/10.1145/357062.357071
zstart is not in GNc                    < W8w  dC   SV ,          SV,          8  d   SV ,          p K   SV ,          SV,          8  g   K=  SV,          pK"  V # N )uvdfnidoms   &&[/var/www/html/photoedit/myenv/lib/python3.14/site-packages/networkx/algorithms/dominance.py	intersect'immediate_dominators.<locals>.intersectH   s=    fa&3q6/Ga&3q6/G    TFc              3   8   <"   T F  qS9   g   K  Vx  K  	  R # 5ir	   r
   ).0r   r   s   & r   	<genexpr>'immediate_dominators.<locals>.<genexpr>T   s     )LYt)!!Ys   
)	nxNetworkXErrorlistdfs_postorder_nodes	enumeratepopreverser   pred)
Gstartorderir   r   changednew_idomr   r   s
   &&      @@r   r   r      s    b ~2334=D''12E%e,
-,DA14,
-C	IIK	MMO G
Ai)LQVVAY)LMH}Q8 3"Q	  	UK- .s   C)c                   \         P                  ! W4      VR/,          pV Uu/ uF  q3\        4       bK  	  ppV F|  pW18X  g$   \        V P                  V,          4      ^8  g   K,  V P                  V,           F9  pWR9   g   K  WRV,          8w  g   K  WE,          P                  V4       W%,          pK0  	  K~  	  V# u upi )a\  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] Cooper, Keith D., Harvey, Timothy J. and Kennedy, Ken.
       "A simple, fast dominance algorithm." (2006).
       https://hdl.handle.net/1911/96345
N)r   r   setlenr   add)r   r    r   r   dfr   s   &&    r   r   r   ]   s    N ""1,t}<D 	!DqSU(DB	!:QVVAY1,VVAYY9Aw,		! G	   I 
"s   B=)__doc__	functoolsr   networkxr   networkx.utilsr   __all___dispatchabler   r   r
   r   r   <module>r0      sq      .!#8
9 \"K  #K\ \"/  #/r   