ó žÃÒYc@sšdZddlZddlZddlmZmZmZddlm Z ddlm Z ddlm Z ddlm Z dd d „ƒYZ d „ZdS( sHUnit tests for the :mod:`networkx.algorithms.bipartite.matching` module.iÿÿÿÿN(t assert_truet assert_equaltraises(teppstein_matching(thopcroft_karp_matching(tmaximum_matching(tto_vertex_covert TestMatchingcBs¡eZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z e e j ƒd „ƒZe e j ƒd „ƒZd „Zd „Zd „ZRS(s(Tests for bipartite matching algorithms.cCs>tjddƒ|_idd6dd6dd6dd6|_ddddddddg}ttdƒƒ|_tjƒ|_|jj td ƒƒ|jj |ƒtjƒ}|j dd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0gƒ|j d1d2ƒ|j d3d4ƒ|j d5d6ƒ|j d7d8ƒ|j d9d:ƒ|j d;d<ƒ|j d=d>ƒ|j d?d@ƒ|j dAdBƒ|j dCdDƒ|j dEdFƒ|j dGdHƒ|j dIdJƒ|j dKdLƒ|j dMdNƒ|j dOdPƒ|j dQdRƒ|j dSdTƒ|j dUdVƒ|j dWdXƒ||_ dS(Ys&Creates a bipartite graph for use in testing matching algorithms. The bipartite graph has a maximum cardinality matching that leaves vertex 1 and vertex 10 unmatched. The first six numbers are the left vertices and the next six numbers are the right vertices. iiiiiiii iii i tCtBtGtFtEtDtItAtHN(ii(ii(ii(ii (ii(ii(ii (ii (iR(iR (iR (iR (iR (iR(iR (iR(iR(iR (iR (iR (iR(iR (iR(iR(iR (iR(iR(iR(iR (iR(iR (iR(iR (iR(iR (iR(iR (iR(iR (iR (iR (iR(iR (iR(iR(iR (iR(iR(iR(iR (iR(iR(iR (iR(iR(iR(iR(iR (iR(iR (iR(iR(iR (iR (iR (iR( tnxtcomplete_bipartite_grapht simple_graphtsimple_solutiontsettranget top_nodestGraphtgraphtadd_nodes_fromtadd_edges_fromtadd_edgetdisconnected_graph(tselftedgesR ((s‡/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/bipartite/tests/test_matching.pytsetupsH%       csu|‰ttjˆjƒŒƒ}|ttdƒƒddhksIt‚t‡fd†tdƒDƒƒsqt‚dS(s€Asserts that the matching is what we expect from the bipartite graph constructed in the :meth:`setup` fixture. i ii c3s/|]%}|ˆkr|ˆˆ|kVqdS(N((t.0tu(tM(s‡/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/bipartite/tests/test_matching.pys WsN(t frozensett itertoolstchaintitemsRtAssertionErrortall(Rtmatchingtmatched_vertices((R#s‡/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/bipartite/tests/test_matching.pyt check_matchJs(cCsZt|ƒdkst‚x;|jjƒD]*\}}||ks(||ks(t‚q(WdS(s£Asserts that the given set of vertices is the vertex cover we expected from the bipartite graph constructed in the :meth:`setup` fixture. iN(tlenR(RR(RtverticesR"tv((s‡/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/bipartite/tests/test_matching.pytcheck_vertex_coverYscCs |jt|j|jƒƒdS(s…Tests that David Eppstein's implementation of the Hopcroft--Karp algorithm produces a maximum cardinality matching. N(R,RRR(R((s‡/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/bipartite/tests/test_matching.pyttest_eppstein_matchinggscCs |jt|j|jƒƒdS(swTests that the Hopcroft--Karp algorithm produces a maximum cardinality matching in a bipartite graph. N(R,RRR(R((s‡/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/bipartite/tests/test_matching.pyttest_hopcroft_karp_matchingnscCs>t|j|jƒ}t|j||jƒ}|j|ƒdS(sATest for converting a maximum matching to a minimum vertex cover.N(RRRRR0(RR*t vertex_cover((s‡/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/bipartite/tests/test_matching.pyttest_to_vertex_coveruscCs#t|jƒ}t||jƒdS(N(RRRR(Rtmatch((s‡/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/bipartite/tests/test_matching.pyttest_eppstein_matching_simple{scCs#t|jƒ}t||jƒdS(N(RRRR(RR5((s‡/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/bipartite/tests/test_matching.pyt"test_hopcroft_karp_matching_simplescCst|jƒ}dS(N(RR(RR5((s‡/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/bipartite/tests/test_matching.pyt#test_eppstein_matching_disconnectedƒscCst|jƒ}dS(N(RR(RR5((s‡/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/bipartite/tests/test_matching.pyt(test_hopcroft_karp_matching_disconnected‡sc Csˆtjƒ}|jddƒ|jddƒ|jddƒ|jddƒ|jddƒ|jddƒ|jddƒ|jdd ƒtj|ƒ}tjƒ}x:|jƒD],}|jd |fƒ|jd |fƒq´Wx6|jƒD](\}}|jd |fd |fƒqñWd „|Dƒ}t||ƒ}t |||ƒ}t |ƒd „|Dƒ} t ddddd h| ƒdS(sTest from issue 2127RRR R R R R RRiicSs&h|]}|ddkr|’qS(i((R!tn((s‡/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/bipartite/tests/test_matching.pys £s cSsh|]\}}|’qS(((R!t_R/((s‡/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/bipartite/tests/test_matching.pys ¦s N( RtDiGraphRttransitive_closureRtnodestadd_nodeRRRRR( RR ttctbtcR/R"RR*R3tindependent_set((s‡/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/bipartite/tests/test_matching.pyttest_issue_2127‹s*   cCsstjdddd gƒ}t|ƒ}t||ƒ}x6|jƒD](\}}t||kpg||kƒqCWdS( Niiiii(ii(ii(ii(ii(RRRRRR(RR R*R3R"R/((s‡/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/bipartite/tests/test_matching.pyttest_vertex_cover_issue_2384©s  c Cs¸tƒ}tƒ}tƒ}tƒ}tƒ}tj||f||f||f||fgƒ}t|ƒ}t||ƒ}x6|jƒD](\} } t| |kp¬| |kƒqˆWdS(N(tobjectRRRRRR( RtatbtctdteR R*R3R"R/((s‡/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/bipartite/tests/test_matching.pyttest_unorderable_nodes°s     3 (t__name__t __module__t__doc__R R,R0R1R2R4R6R7RRtAmbiguousSolutionR8R9RCRDRK(((s‡/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/bipartite/tests/test_matching.pyRs 1         csÆtjƒ}|jddddgddƒ|jddd gddƒ|jd d ddddgƒt|ƒ‰ttˆƒtt|ƒƒkƒt‡fd †t ˆj ƒƒDƒƒsÂt ‚d S(s!Test in accordance to issue #1927RFiiit bipartiteiiRGRHc3s'|]}|tˆjƒƒkVqdS(N(Rtkeys(R!tx(R*(s‡/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/bipartite/tests/test_matching.pys ÆsN(RFi(RFRG(iRG(iRH(iRH(ii( RRRRRRR-RR)RtvaluesR((R ((R*s‡/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/bipartite/tests/test_matching.pyR1½s  "((RNR%tnetworkxRt nose.toolsRRRt&networkx.algorithms.bipartite.matchingRRRRRR1(((s‡/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/bipartite/tests/test_matching.pyt s  §