o
    hA                     @   sF   d Z ddlZddlZddgZejddd
ddZejd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              	   C   s8  t | }d}d}|rd}t| D ]~}|\}	}
|r<|	|
h}t|D ]}|  D ]	}|| |  q)q#| |  }nt | }|	|
g}d}d}|r|d7 }||krVd}n+|	}|D ]}||krh||| |}qZz	t	||	|
}W n tj
y~   d}Y nw |sK|dkr||	|
 d}|rd}q|s|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prev r$   n/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/networkx/algorithms/hybrid.pyr      sZ   
3
-c              	      s   d}   D ]s}|\}}|r+||ht|D ]} fdd D  q }	nt }	||g}
d}d}|
rp|d7 }||krEd}n+|}|
D ]}||krW|	|| |}qIz	t|	||}
W n tjym   d}
Y nw |
s:|dkryd} |S q|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                    s   g | ]
}  |qS r$   )r   	neighbors).0r   r   r   r$   r%   
<listcomp>   s    z#is_kl_connected.<locals>.<listcomp>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$   r(   r%   r   w   sF   )
)FF)F)__doc__r   networkxr   __all___dispatchabler   r   r$   r$   r$   r%   <module>   s    
h