ó žÃÒYc@sŒdZddlmZddlmZddlmZddlZddlTddlm Z de fd „ƒYZ d e fd „ƒYZ dS( s<Unit tests for the :mod:`networkx.algorithms.minors` module.iÿÿÿÿ(t assert_equal(t assert_true(traisesN(t*(tarbitrary_elementt TestQuotientcBs›eZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z e e j ƒd „ƒZd „Zd „Zd „Zd „Zd„ZRS(s)Unit tests for computing quotient graphs.cs_tjdddƒ‰‡fd†}tjdƒ}tjˆ|ƒ}ttj||ƒƒdS(s¦Tests that the quotient graph of the complete *n*-partite graph under the "same neighbors" node relation is the complete graph on *n* nodes. iiics2|ˆ|ko1|ˆ|ko1ˆ|ˆ|kS(N((tutv(tG(s{/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_minors.pytsame_neighbors sN(tnxtcomplete_multipartite_graphtcomplete_graphtquotient_graphRt is_isomorphic(tselfR texpectedtactual((Rs{/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_minors.pyt)test_quotient_graph_complete_multipartites cs\tjddƒ‰‡fd†}tjdƒ}tjˆ|ƒ}ttj||ƒƒdS(s‚Tests that the quotient graph of the complete bipartite graph under the "same neighbors" node relation is `K_2`. iics2|ˆ|ko1|ˆ|ko1ˆ|ˆ|kS(N((RR(R(s{/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_minors.pyR 2sN(R tcomplete_bipartite_graphR R RR(RR RR((Rs{/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_minors.pyt&test_quotient_graph_complete_bipartite)s cCs‚tjdƒ}d„}d„}tj|||ƒ}tjƒ}|jd d d gƒ|jddƒttj||ƒƒd S( sYTests for specifying an alternate edge relation for the quotient graph. icSs ||kS(N((RR((s{/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_minors.pytidentityBscSst|ƒdt|ƒdkS(Ni(R(tbtc((s{/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_minors.pyt same_parityEsiiiiiN(ii(ii(ii(R t path_graphR tGraphtadd_edges_fromtadd_edgeRR(RRRRRR((s{/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_minors.pyt!test_quotient_graph_edge_relation;s   csÇtjƒ}|jddddddddddddddddd d!d"d#d$gƒttj|ƒƒ}tj||ƒ}|jd ‰‡fd†}tj||ƒ}ttj ||ƒƒdS(%s«This tests that the condensation of a graph can be viewed as the quotient graph under the "in the same connected component" equivalence relation. iiii i iiiiii i tmappingcsˆ|ˆ|kS(N((RR(t component_of(s{/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_minors.pytsame_component_sN(ii(ii(ii (ii (ii(ii(ii(ii(ii(ii(ii(ii (ii (ii (i i(i i(i i(i i(i i(i i(i i ( R tDiGraphRtlisttstrongly_connected_componentst condensationtgraphR RR(RRtscctCR tQ((Rs{/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_minors.pyttest_condensation_as_quotientNs  cCsÔtjdƒ}ddhddhddhg}tj||dtƒ}t|dddgƒt|jƒd d gƒxV|D]N}t|j|d dƒt|j|d dƒt|j|d dƒq~WdS(Niiiiiiitrelabeltnedgestnnodestdensity(ii(ii( R RR tTruetassert_nodes_equaltassert_edges_equaltedgesRtnodes(RRt partitiontMtn((s{/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_minors.pyt test_pathes! cCsÝtjtjdƒƒ}ddhddhddhg}tj||dtƒ}t|dddgƒt|jƒd d gƒxV|D]N}t|j |d dƒt|j |d dƒt|j |d dƒq‡WdS(NiiiiiiiR*R+R,R-(ii(ii( R t MultiGraphRR R.R/R0R1RR2(RRR3R4R5((s{/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_minors.pyttest_multigraph_pathps! cCsçtjƒ}tj|tdƒƒddhddhddhg}tj||dtƒ}t|dddgƒt|jƒd dgƒxV|D]N}t |j |d dƒt |j |d dƒt |j |d d ƒq‘WdS(NiiiiiiiR*R+R,R-gà?(ii(ii( R R!tadd_pathtrangeR R.R/R0R1RR2(RRR3R4R5((s{/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_minors.pyttest_directed_path{s ! cCsçtjƒ}tj|tdƒƒddhddhddhg}tj||dtƒ}t|dddgƒt|jƒd dgƒxV|D]N}t |j |d dƒt |j |d dƒt |j |d d ƒq‘WdS(NiiiiiiiR*R+R,R-gà?(ii(ii( R t MultiDiGraphR9R:R R.R/R0R1RR2(RRR3R4R5((s{/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_minors.pyttest_directed_multigraph_path‡s ! cCsGtjdƒ}dddhddhddhg}tj||ƒdS(Niiiiiii(R RR (RRR3((s{/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_minors.pyttest_overlapping_blocks“s$cCs7tjdƒ}x.tdƒD] }|d|||ddRARCRDRERG(((s{/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_minors.pyRs        tTestContractioncBskeZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z e e ƒd „ƒZ RS( s3Unit tests for node and edge contraction functions.cCs]tjdƒ}tj|ddƒ}tjdƒ}|jddƒttj||ƒƒdS(s2Tests for node contraction in an undirected graph.iiiiN(R t cycle_graphtcontracted_nodesR RRR(RRRR((s{/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_minors.pyt test_undirected_node_contractionÜs cCstjtjdƒƒ}tj|ddƒ}tjtjdƒƒ}|jddƒ|jddƒttj||ƒƒdS(s/Tests for node contraction in a directed graph.iiiiN(R R!RMRNR RRR(RRRR((s{/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_minors.pyttest_directed_node_contractionäs cCsÓtjddtjƒƒ}|jddƒ|jddƒ|jddƒtj|ddƒ}tjƒ}|jddƒ|jddƒ|jddƒ|jddƒ|jddƒt|j|jƒdS(s5Tests that using a MultiGraph creates multiple edges.iRFiiiN(R RR7RRNR0R1(RRRR((s{/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_minors.pyttest_create_multigraphís cCsëtjddtjƒƒ}|jdddƒ|jdddƒ|jdddƒtj|ddƒ}tjƒ}|jdddƒ|jdddƒ|jdddƒ|jdddƒ|jdddƒt|j|jƒdS(s1Tests that multiedge keys are reset in new graph.iRFiiiiN(R RR7RRNR0R1(RRRR((s{/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_minors.pyttest_multigraph_keysüs cCsétjdƒ}d|jdd s  Æ