ó žÃÒYc@sIdZddlZddlZddgZeed„Zed„ZdS(sT Provides functions for finding and testing for locally `(k, l)`-connected graphs. iÿÿÿÿNtkl_connected_subgraphtis_kl_connectedcCsÔtj|ƒ}t}t}x¢|r¿t}x�t|jƒƒD]{}|\} } |r¾t| | gƒ} x<t|ƒD].} x%| jƒD]} | j|| ƒq‡WqtW|j | ƒjƒ}ntj|ƒ}| | g}d}d}xœ|rƒ|d7}||krd}Pn| }x3|D]+} || kr|j || ƒ| }qqWyt j || | ƒ}Wqèt j k rt}qèXqèW|dkr=|j | | ƒt}|r¸t}q¸q=q=WqW|rÐ||fS|S(sPReturns 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. ii(tcopytdeepcopytTruetFalsetlisttedgestsettrangetupdatetsubgrapht remove_edgetnxt shortest_pathtNetworkXNoPath(tGtktlt low_memoryt same_as_graphtHtgraphOKt deleted_sometedgetutvtvertstitwtG2tpathtcnttaccepttprev((sp/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/hybrid.pyRsN2           cCsyt}xl|jƒD]^}|\}}|r•t||gƒ}xCt|ƒD]5} g|jƒD]} |j|j| ƒƒ^q]qJW|j|ƒ} ntj|ƒ} ||g} d} d}xœ| rZ| d7} | |kråd}Pn|}x3| D]+} | |krò| j || ƒ| }qòqòWyt j | ||ƒ} Wq¿t j k rVt } q¿Xq¿W|dkrt }PqqW|S(s\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. ii(RRRR RR t neighborsR RR R RRR(RRRRRRRRRRRRRR R!R"((sp/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/hybrid.pyR~s<( 3        (t__doc__RtnetworkxR t__all__RRR(((sp/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/hybrid.pyts    h