
    h
                         S r SSKrSSKJr  / SQr\" S5      \R                  S 5       5       r\" S5      \R                  S 5       5       r\" S5      \R                  S 5       5       r	g)	zAttracting components.    N)not_implemented_for)number_attracting_componentsattracting_componentsis_attracting_component
undirectedc              #      #    [        [        R                  " U 5      5      n[        R                  " X5      nU H   nUR	                  U5      S:X  d  M  X   v   M"     g7f)a}  Generates the attracting components in `G`.

An attracting component in a directed graph `G` is a strongly connected
component with the property that a random walker on the graph will never
leave the component, once it enters the component.

The nodes in attracting components can also be thought of as recurrent
nodes.  If a random walker enters the attractor containing the node, then
the node will be visited infinitely often.

To obtain induced subgraphs on each component use:
``(G.subgraph(c).copy() for c in attracting_components(G))``

Parameters
----------
G : DiGraph, MultiDiGraph
    The graph to be analyzed.

Returns
-------
attractors : generator of sets
    A generator of sets of nodes, one for each attracting component of G.

Raises
------
NetworkXNotImplemented
    If the input graph is undirected.

See Also
--------
number_attracting_components
is_attracting_component

r   N)listnxstrongly_connected_componentscondensation
out_degree)GscccGns       [/var/www/html/env/lib/python3.13/site-packages/networkx/algorithms/components/attracting.pyr   r      sM     J r//2
3C		 B==q &L s   AAAc                 8    [        S [        U 5       5       5      $ )aX  Returns the number of attracting components in `G`.

Parameters
----------
G : DiGraph, MultiDiGraph
    The graph to be analyzed.

Returns
-------
n : int
    The number of attracting components in G.

Raises
------
NetworkXNotImplemented
    If the input graph is undirected.

See Also
--------
attracting_components
is_attracting_component

c              3   &   #    U  H  nS v   M	     g7f)   N ).0acs     r   	<genexpr>/number_attracting_components.<locals>.<genexpr>S   s     43Rq3s   )sumr   )r   s    r   r   r   9   s    4 403444    c                 ~    [        [        U 5      5      n[        U5      S:X  a  [        US   5      [        U 5      :H  $ g)a  Returns True if `G` consists of a single attracting component.

Parameters
----------
G : DiGraph, MultiDiGraph
    The graph to be analyzed.

Returns
-------
attracting : bool
    True if `G` has a single attracting component. Otherwise, False.

Raises
------
NetworkXNotImplemented
    If the input graph is undirected.

See Also
--------
attracting_components
number_attracting_components

r   r   F)r	   r   len)r   r   s     r   r   r   V   s9    4 
#A&	'B
2w!|2a5zSV##r   )
__doc__networkxr
   networkx.utils.decoratorsr   __all___dispatchabler   r   r   r   r   r   <module>r$      s      9 \"'  #'T \"5  #56 \"  #r   