
    wgA                     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y)zT
Provides functions for finding and testing for locally `(k, l)`-connected
graphs.

    Nkl_connected_subgraphis_kl_connectedT)returns_graphc                    t        j                  |       }d}d}|rd}t        |j                               D ]  }|\  }	}
|r]|	|
h}t	        |      D ]+  }|j                         D ]  }|j                  | |           - | j                  |      j                         }nt        j                  |       }|	|
g}d}d}|rK|dz  }||k\  rd}n>|	}|D ]  }||k7  s	|j                  ||       |} 	 t        j                  ||	|
      }|rK|dk(  s|j                  |	|
       d}|sd} |r|r||fS |S # t        j                  $ r d}Y Gw xY w)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                      _/home/mcse/projects/flask/flask-venv/lib/python3.12/site-packages/networkx/algorithms/hybrid.pyr   r      s   f 	aAGL

 O $	$DFQAq +A"ZZ\ +QqT*++ ZZ&++-]]1%q6DCFq!8F !AqytQ/ !
!++B15D " {a###GI$	$ Z 7|H (( ! D!s   /D66EEc           
      .   d}| j                         D ]  }|\  }}|rb||h}t        |      D ]>  }	|j                         D 
cg c]"  }
|j                  | j	                  |
            $ c}
 @ | j                  |      }nt        j                  |       }||g}d}d}|rK|dz  }||k\  rd}n>|}|D ]  }
|
|k7  s	|j                  ||
       |
} 	 t        j                  |||      }|rK|dk(  sd} |S  |S c c}
w # t        j                  $ r d}Y -w xY w)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.

    Tr   r   F)r   r   r   r   	neighborsr   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   sE   R G	 !AFE1X E7<zz|D!akk!n-DEE"Bq!B1v1HCaxD 9NN4+D
''Aq1 " Q;GNG!F N; E, $$ s   'C7C<<DD)FF)F)__doc__r   networkxr   __all___dispatchabler   r        r&   <module>r/      s]     "$5
6 %e &eP L Lr.   