
    \MhA                     z    d Z ddlZddlZddgZ ej        d          d
d            Zej        dd	            ZdS )zT
Provides functions for finding and testing for locally `(k, l)`-connected
graphs.

    Nkl_connected_subgraphis_kl_connectedT)returns_graphFc                    t          j        |           }d}d}|rFd}t          |                                          D ]}|\  }	}
|rp|	|
h}t	          |          D ]4}|                                 D ]}|                    | |                    5|                     |                                           }nt          j        |           }|	|
g}d}d}|rd|dz  }||k    rd}nV|	}|D ] }||k    r|                    ||           |}!	 t          j	        ||	|
          }n# t          j
        $ r d}Y nw xY w|d|dk    r|                    |	|
           d}|rd} |F|r||fS |S )aM  Returns the maximum locally `(k, l)`-connected subgraph of `G`.

    A graph is locally `(k, l)`-connected if for each edge `(u, v)` in the
    graph there are at least `l` edge-disjoint paths of length at most `k`
    joining `u` to `v`.

    Parameters
    ----------
    G : NetworkX graph
        The graph in which to find a maximum locally `(k, l)`-connected
        subgraph.

    k : integer
        The maximum length of paths to consider. A higher number means a looser
        connectivity requirement.

    l : integer
        The number of edge-disjoint paths. A higher number means a stricter
        connectivity requirement.

    low_memory : bool
        If this is True, this function uses an algorithm that uses slightly
        more time but less memory.

    same_as_graph : bool
        If True then return a tuple of the form `(H, is_same)`,
        where `H` is the maximum locally `(k, l)`-connected subgraph and
        `is_same` is a Boolean representing whether `G` is locally `(k,
        l)`-connected (and hence, whether `H` is simply a copy of the input
        graph `G`).

    Returns
    -------
    NetworkX graph or two-tuple
        If `same_as_graph` is True, then this function returns a
        two-tuple as described above. Otherwise, it returns only the maximum
        locally `(k, l)`-connected subgraph.

    See also
    --------
    is_kl_connected

    References
    ----------
    .. [1] Chung, Fan and Linyuan Lu. "The Small World Phenomenon in Hybrid
           Power Law Graphs." *Complex Networks*. Springer Berlin Heidelberg,
           2004. 89--104.

    TFr      )copydeepcopylistedgesrangeupdatesubgraphremove_edgenxshortest_pathNetworkXNoPath)Gkl
low_memorysame_as_graphHgraphOKdeleted_someedgeuvvertsiwG2pathcntacceptprevs                      Z/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/networkx/algorithms/hybrid.pyr   r      s   f 	aAGL
 *$
 OO $	$ $	$DFQ &Aq + +A"ZZ\\ + +QqT****+ZZ&&++--]1%%q6DCF !q!88F ! !AqyytQ/// !+B155DD( ! ! ! DDD!  !" {{a#### $#GU  *$Z  7|Hs   D""D65D6c                     d}                                  D ]}|\  }}|rM||ht          |          D ]#} fd                                D              $                               }	nt          j                   }	||g}
d}d}|
rd|dz  }||k    rd}nV|}|
D ] }||k    r|	                    ||           |}!	 t          j        |	||          }
n# t          j        $ r d}
Y nw xY w|
d|dk    rd} n|S )aY  Returns True if and only if `G` is locally `(k, l)`-connected.

    A graph is locally `(k, l)`-connected if for each edge `(u, v)` in the
    graph there are at least `l` edge-disjoint paths of length at most `k`
    joining `u` to `v`.

    Parameters
    ----------
    G : NetworkX graph
        The graph to test for local `(k, l)`-connectedness.

    k : integer
        The maximum length of paths to consider. A higher number means a looser
        connectivity requirement.

    l : integer
        The number of edge-disjoint paths. A higher number means a stricter
        connectivity requirement.

    low_memory : bool
        If this is True, this function uses an algorithm that uses slightly
        more time but less memory.

    Returns
    -------
    bool
        Whether the graph is locally `(k, l)`-connected subgraph.

    See also
    --------
    kl_connected_subgraph

    References
    ----------
    .. [1] Chung, Fan and Linyuan Lu. "The Small World Phenomenon in Hybrid
           Power Law Graphs." *Complex Networks*. Springer Berlin Heidelberg,
           2004. 89--104.

    Tc                 `    g | ]*}                                         |                    +S  )r   	neighbors).0r    r   r   s     r&   
<listcomp>z#is_kl_connected.<locals>.<listcomp>   s/    DDD!akk!nn--DDD    r   r   F)	r   r   r   r   r	   r   r   r   r   )r   r   r   r   r   r   r   r   r   r!   r"   r#   r$   r%   r    r   s   `              @r&   r   r   w   sw   R G		 ! !A 	"FE1XX E EDDDDDuzz||DDDDDE""BBq!!B1v 	1HCaxxD  99NN4+++D'Aq11$     	" Q;;GE  Ns   CC,+C,)FF)F)__doc__r   networkxr   __all___dispatchabler   r   r)   r-   r&   <module>r2      s         "$5
6 %%%e e e &%eP L L L L L Lr-   