Ë
    D^(hk  ã                   ó  — d Z ddlZddlm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 ed«      ej                  d„ «       «       Zd„ Zy)zConnected components.é    N)Únot_implemented_foré   )Úarbitrary_element)Únumber_connected_componentsÚconnected_componentsÚis_connectedÚnode_connected_componentÚdirectedc              #   ó’   K  — t        «       }t        | «      }| D ])  }||vsŒt        | ||«      }|j                  |«       |–— Œ+ y­w)aø  Generate connected components.

    Parameters
    ----------
    G : NetworkX graph
       An undirected graph

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

    Raises
    ------
    NetworkXNotImplemented
        If G is directed.

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

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

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

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

    To create the induced subgraph of each component use:

    >>> S = [G.subgraph(c).copy() for c in nx.connected_components(G)]

    See Also
    --------
    strongly_connected_components
    weakly_connected_components

    Notes
    -----
    For undirected graphs only.

    N)ÚsetÚlenÚ
_plain_bfsÚupdate)ÚGÚseenÚnÚvÚcs        úf/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/networkx/algorithms/components/connected.pyr   r      sM   è ø€ ô` ‹5€DÜˆA‹€AØò ˆØ�DŠ=Ü˜1˜a Ó#ˆAØ�K‰K˜ŒNØ‹Gñ	ùs
   ‚A¢%Ac                 ó8   — t        d„ t        | «      D «       «      S )aY  Returns the number of connected components.

    Parameters
    ----------
    G : NetworkX graph
       An undirected graph.

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

    Raises
    ------
    NetworkXNotImplemented
        If G is directed.

    Examples
    --------
    >>> G = nx.Graph([(0, 1), (1, 2), (5, 6), (3, 4)])
    >>> nx.number_connected_components(G)
    3

    See Also
    --------
    connected_components
    number_weakly_connected_components
    number_strongly_connected_components

    Notes
    -----
    For undirected graphs only.

    c              3   ó    K  — | ]  }d –— Œ y­w©é   N© )Ú.0Úccs     r   ú	<genexpr>z.number_connected_components.<locals>.<genexpr>n   s   è ø€ Ò3�RŒqÑ3ùó   ‚)Úsumr   )r   s    r   r   r   I   s   € ôJ Ñ3Ô/°Ó2Ô3Ó3Ð3ó    c           
      ó°   — t        | «      }|dk(  rt        j                  d«      ‚t        d„ t	        | |t        | «      «      D «       «      t        | «      k(  S )ag  Returns True if the graph is connected, False otherwise.

    Parameters
    ----------
    G : NetworkX Graph
       An undirected graph.

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

    Raises
    ------
    NetworkXNotImplemented
        If G is directed.

    Examples
    --------
    >>> G = nx.path_graph(4)
    >>> print(nx.is_connected(G))
    True

    See Also
    --------
    is_strongly_connected
    is_weakly_connected
    is_semiconnected
    is_biconnected
    connected_components

    Notes
    -----
    For undirected graphs only.

    r   z-Connectivity is undefined for the null graph.c              3   ó    K  — | ]  }d –— Œ y­wr   r   )r   Únodes     r   r   zis_connected.<locals>.<genexpr>�   s   è ø€ ÒD�TŒqÑDùr   )r   ÚnxÚNetworkXPointlessConceptr   r   r   ©r   r   s     r   r   r   q   sV   € ôN 	ˆA‹€AØˆA‚vÜ×)Ñ)Ø;ó
ð 	
ô ÑDœZ¨¨1Ô.?ÀÓ.BÓCÔDÓDÌÈAËÑNÐNr    c                 ó.   — t        | t        | «      |«      S )a•  Returns the set of nodes in the component of graph containing node n.

    Parameters
    ----------
    G : NetworkX Graph
       An undirected graph.

    n : node label
       A node in G

    Returns
    -------
    comp : set
       A set of nodes in the component of G containing node n.

    Raises
    ------
    NetworkXNotImplemented
        If G is directed.

    Examples
    --------
    >>> G = nx.Graph([(0, 1), (1, 2), (5, 6), (3, 4)])
    >>> nx.node_connected_component(G, 0)  # nodes of component that contains node 0
    {0, 1, 2}

    See Also
    --------
    connected_components

    Notes
    -----
    For undirected graphs only.

    )r   r   r&   s     r   r	   r	       s   € ôL �aœ˜Q› Ó#Ð#r    c                 óÐ   — | j                   }|h}|g}|rQ|}g }|D ]E  }||   D ])  }||vsŒ|j                  |«       |j                  |«       Œ+ t        |«      |k(  sŒC|c S  |rŒQ|S )zA fast BFS node generator)Ú_adjÚaddÚappendr   )	r   r   ÚsourceÚadjr   Ú	nextlevelÚ	thislevelr   Úws	            r   r   r   É   s†   € à
�&‰&€CØˆ8€DØ�€IÙ
Øˆ	Øˆ	Øò 	ˆAØ˜‘Vò (�Ø˜D’=Ø—H‘H˜Q”KØ×$Ñ$ QÕ'ð(ô �4‹y˜A‹~Ø’ð	ò ð €Kr    )Ú__doc__Únetworkxr$   Únetworkx.utils.decoratorsr   Úutilsr   Ú__all__Ú_dispatchabler   r   r   r	   r   r   r    r   ú<module>r7      s¿   ðÙ ã Ý 9å &ò€ñ �ZÓ Ø×Ññ4ó ó !ð4ñn �ZÓ Ø×Ññ#4ó ó !ð#4ñL �ZÓ Ø×Ññ*Oó ó !ð*OñZ �ZÓ Ø×Ññ$$ó ó !ð$$óNr    