
    Pi=                         d Z ddlZddlmZ g dZ ed          ej        d                         Z ed          ej        d                         Z ed          ej        d                         Z	d	 Z
dS )
zWeakly connected components.    N)not_implemented_for)"number_weakly_connected_componentsweakly_connected_componentsis_weakly_connected
undirectedc              #      K   t                      }t          |           }| D ]@}||vr:t          | |t          |          z
  |          }|                    |           |V  AdS )a  Generate weakly connected components of G.

    Parameters
    ----------
    G : NetworkX graph
        A directed graph

    Returns
    -------
    comp : generator of sets
        A generator of sets of nodes, one for each weakly connected
        component of G.

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

    Examples
    --------
    Generate a sorted list of weakly connected components, largest first.

    >>> G = nx.path_graph(4, create_using=nx.DiGraph())
    >>> nx.add_path(G, [10, 11, 12])
    >>> [
    ...     len(c)
    ...     for c in sorted(nx.weakly_connected_components(G), key=len, reverse=True)
    ... ]
    [4, 3]

    If you only want the largest component, it's more efficient to
    use max instead of sort:

    >>> largest_cc = max(nx.weakly_connected_components(G), key=len)

    See Also
    --------
    connected_components
    strongly_connected_components

    Notes
    -----
    For directed graphs only.

    N)setlen
_plain_bfsupdate)Gseennvcs        /home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/networkx/algorithms/components/weakly_connected.pyr   r      ss      ` 55DAA  D==1a#d))mQ//AKKNNNGGG	     c                 N    t          d t          |           D                       S )al  Returns the number of weakly connected components in G.

    Parameters
    ----------
    G : NetworkX graph
        A directed graph.

    Returns
    -------
    n : integer
        Number of weakly connected components

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

    Examples
    --------
    >>> G = nx.DiGraph([(0, 1), (2, 1), (3, 4)])
    >>> nx.number_weakly_connected_components(G)
    2

    See Also
    --------
    weakly_connected_components
    number_connected_components
    number_strongly_connected_components

    Notes
    -----
    For directed graphs only.

    c              3      K   | ]}d V  dS )   N ).0_s     r   	<genexpr>z5number_weakly_connected_components.<locals>.<genexpr>k   s"      99Qq999999r   )sumr   )r   s    r   r   r   F   s+    J 995a88999999r   c                     t          |           }|dk    rt          j        d          t          t          t	          |                               |k    S )a)  Test directed graph for weak connectivity.

    A directed graph is weakly connected if and only if the graph
    is connected when the direction of the edge between nodes is ignored.

    Note that if a graph is strongly connected (i.e. the graph is connected
    even when we account for directionality), it is by definition weakly
    connected as well.

    Parameters
    ----------
    G : NetworkX Graph
        A directed graph.

    Returns
    -------
    connected : bool
        True if the graph is weakly connected, False otherwise.

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

    Examples
    --------
    >>> G = nx.DiGraph([(0, 1), (2, 1)])
    >>> G.add_node(3)
    >>> nx.is_weakly_connected(G)  # node 3 is not connected to the graph
    False
    >>> G.add_edge(2, 3)
    >>> nx.is_weakly_connected(G)
    True

    See Also
    --------
    is_strongly_connected
    is_semiconnected
    is_connected
    is_biconnected
    weakly_connected_components

    Notes
    -----
    For directed graphs only.

    r   z-Connectivity is undefined for the null graph.)r
   nxNetworkXPointlessConceptnextr   )r   r   s     r   r   r   n   sW    d 	AAAvv)?
 
 	
 t/22334499r   c                 Z   | j         }| j        }|h}|g}|r|}g }|D ]}||         D ]0}	|	|vr*|                    |	           |                    |	           1||         D ]0}	|	|vr*|                    |	           |                    |	           1t	          |          |k    r|c S ||S )zwA fast BFS node generator

    The direction of the edge between nodes is ignored.

    For directed graphs only.

    )_succ_predaddappendr
   )
r   r   sourceGsuccGpredr   	nextlevel	thislevelr   ws
             r   r   r      s     GEGE8DI
 		 
	 
	A1X ( (D==HHQKKK$$Q'''1X ( (D==HHQKKK$$Q'''4yyA~~    Kr   )__doc__networkxr   networkx.utils.decoratorsr   __all___dispatchabler   r   r   r   r   r   r   <module>r0      s    " "     9 9 9 9 9 9   \""4 4  #"4n \""#: #:  #"#:L \""6: 6:  #"6:r    r   