a
    h$                     @   s@   d Z ddlZddlZddgZej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_connectedFc              	   C   s@  t | }d}d}|r.d}t| D ] }|\}	}
|r||	|
h}t|D ] }|  D ]}|| |  qVqJ| |  }n
t | }|	|
g}d}d}|r
|d7 }||krd}q
|	}|D ]}||kr||| |}qzt	||	|
}W q tj
y   d}Y q0 q|dkr(||	|
 d}|r(d}q(q|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_memoryZsame_as_graphHgraphOKZdeleted_someedgeuvvertsiwG2pathcntacceptprev r!   H/var/www/auris/lib/python3.9/site-packages/networkx/algorithms/hybrid.pyr      sN    3

c              	      s   d}   D ]}|\}}|rV||ht|D ]} fdd D  q, }	n
t }	||g}
d}d}|
r|d7 }||krd}q|}|
D ]}||kr|	|| |}qzt|	||}
W qp tjy   d}
Y qp0 qp|dkrd} qq|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
   Z	neighbors).0r   r   r   r!   r"   
<listcomp>       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   v   s<    )
)FF)F)__doc__r   Znetworkxr   __all__	_dispatchr   r   r!   r!   r!   r"   <module>   s   h