o
    ˷ea
                     @   sT   d Z ddlZddlmZ g dZeddd Zeddd	 Zedd
d ZdS )zAttracting components.    N)not_implemented_for)number_attracting_componentsattracting_componentsis_attracting_component
undirectedc                 c   sB    t t| }t| |}|D ]}||dkr|| V  qdS )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n r   `/var/www/ideatree/venv/lib/python3.10/site-packages/networkx/algorithms/components/attracting.pyr      s   $
r   c                 C   s   t dd t| D S )a  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                 s   s    | ]}d V  qdS )   Nr   ).0acr   r   r   	<genexpr>P   s    z/number_attracting_components.<locals>.<genexpr>)sumr   )r   r   r   r   r   7   s   r   c                 C   s0   t t| }t|dkrt|d t| kS dS )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   r   r   r   r   S   s   r   )	__doc__networkxr   networkx.utils.decoratorsr   __all__r   r   r   r   r   r   r   <module>   s    
*
