o
    ]Zh
                     @   sf   d Z ddlZddlmZ g dZedejdd Zedejdd	 Zedejd
d Z	dS )zAttracting components.    N)not_implemented_for)number_attracting_componentsattracting_componentsis_attracting_componentZ
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nxZstrongly_connected_componentsZcondensationZ
out_degree)GZsccZcGn r
   X/var/www/auris/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>S   s    z/number_attracting_components.<locals>.<genexpr>)sumr   )r   r
   r
   r   r   9   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   V   s   r   )
__doc__Znetworkxr   Znetworkx.utils.decoratorsr   __all__Z_dispatchabler   r   r   r
   r
   r
   r   <module>   s    *