o
    ßË·e  ã                   @   s4   d Z ddlZddlZddgZddd„Z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_connectedFc              	   C   s8  t  | ¡}d}d}|r”d}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}|r‘d}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#   úQ/var/www/ideatree/venv/lib/python3.10/site-packages/networkx/algorithms/hybrid.pyr      sZ   
2ÿ
€ÿò€Ö-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   u   sF   (
€ÿòü)FF)F)Ú__doc__r   Únetworkxr   Ú__all__r   r   r#   r#   r#   r$   Ú<module>   s    
h