ó žÃÒYc@s´ddlmZddlZddlmZddlmZddlmZddlZde fd„ƒYZ de fd „ƒYZ d e fd „ƒYZ d e fd „ƒYZ dS(iÿÿÿÿ(t permutationsN(t assert_equal(t assert_false(t assert_truetTestMaxWeightMatchingcBsÂeZdZd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „Zd „Zd„Zd„Zd„Zd„Zd„Zd„Zd„ZRS(s`Unit tests for the :func:`~networkx.algorithms.matching.max_weight_matching` function. cCs&tjƒ}ttj|ƒiƒdS(s Empty graphN(tnxtGraphRtmax_weight_matching(tselftG((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyt test_trivial1s cCs<tjƒ}|jddddƒttj|ƒiƒdS(s Self loopitweightidN(RRtadd_edgeRR(RR ((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyt test_trivial2s cCsDtjƒ}|jddƒttj|ƒidd6dd6ƒdS(s Single edgeiiN(RRR RR(RR ((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyt test_trivial3s cCs`tjƒ}|jddddƒ|jddddƒttj|ƒidd6dd6ƒdS(s Small graphtonettwoR i tthreei N(RRR RR(RR ((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyt test_trivial4"s  cCs«tjƒ}|jddddƒ|jddddƒ|jddddƒttj|ƒidd6dd6ƒttj|dƒidd6dd6dd6dd6ƒdS( tPathiiR iii iN(RRR RR(RR ((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyt test_trivial5*s cCsrtjƒ}|jddddddƒ|jddddddƒttj|ddƒidd6dd6ƒdS( s+Small graph with arbitrary weight attributeRRR i tabcdi RN(RRR RR(RR ((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyt test_trivial65s  cCs¯tjƒ}|jdddtjƒ|jdddtjdƒƒ|jddddƒ|jdddtjdƒƒttj|ƒidd6dd6dd6dd6ƒdS( sFloating point weightsiiR ig@ig@N( RRR tmathtpitexptsqrtRR(RR ((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyttest_floating_point_weights=s cCs×tjƒ}|jddddƒ|jddddƒ|jddddƒ|jddddƒ|jddddƒttj|ƒidd6dd6ƒttj|dƒidd6dd6dd6dd6ƒd S( sNegative weightsiiR iiþÿÿÿiiÿÿÿÿiúÿÿÿN(RRR RR(RR ((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyttest_negative_weightsGs cCs®tjƒ}|jd d ddgƒttj|ƒidd6dd6dd6dd6ƒ|jddgƒttj|ƒid d6dd6dd6d d6dd 6dd 6ƒd S(s-Create S-blossom and use it for augmentation:iiiii i iiiiN(iii(iii (iii (iii(iii(iii(RRtadd_weighted_edges_fromRR(RR ((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyttest_s_blossomTs   #c CsAtjƒ}|jd d ddddgƒttj|ƒid d6dd6dd6dd6dd6dd 6ƒ|jddd dƒ|jdd d dƒttj|ƒid d6dd6dd6dd6dd6dd 6ƒ|jdd ƒ|jdd d dƒttj|ƒidd6dd6d d6dd6dd6dd 6ƒd S(s=Create S-blossom, relabel as T-blossom, use for augmentation:iii iii iiiR N(iii (iii(iii (iii(iii(iii(RRRRRR t remove_edge(RR ((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyttest_s_t_blossom`s 11c Csrtjƒ}|jd d d ddddgƒttj|ƒidd6dd6dd6dd6d d6dd 6ƒd S(s.Create nested S-blossom, use for augmentation:iii ii iiiiN(iii (iii (iii (iii(iii(iii (iii(RRRRR(RR ((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyttest_nested_s_blossomps    c Cs†tjƒ}|jdddddddddg ƒttj|ƒidd6dd6dd6dd6d d 6d d 6d d6dd 6ƒd S(s<Create S-blossom, relabel as S, include in nested S-blossom:iii iii iiiiiiN(iii (iii (iii (iii(iii(iii(iii (iii (iii(RRRRR(RR ((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyttest_nested_s_blossom_relabelzs   c Cs‰tjƒ}|jd dddddddddg ƒttj|ƒidd6dd6dd6d d6dd6dd 6dd 6d d6ƒd S(s5Create nested S-blossom, augment, expand recursively:iiiii ii iiiiN(iii(iii(iii (iii (iii (iii(iii (iii (iii(iii (RRRRR(RR ((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyttest_nested_s_blossom_expandƒs    c Csƒtjƒ}|jddddddddgƒttj|ƒidd6dd6dd6d d 6d d6dd6dd 6d d 6ƒdS(s'Create S-blossom, relabel as T, expand:iiiiiiiiiiiiii N(iii(iii(iii(iii(iii(iii(iii(iii (RRRRR(RR ((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyttest_s_blossom_relabel_expands    c Cs†tjƒ}|jdddddddddg ƒttj|ƒidd6dd6dd6d d6d d 6d d 6dd 6dd6ƒdS(s.Create nested S-blossom, relabel as T, expand:iiiiiiiiiii iiN(iii(iii(iii(iii(iii(iii(iii (iii(iii(RRRRR(RR ((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyt$test_nested_s_blossom_relabel_expand–s   c Cs—tjƒ}|jddddddddddg ƒttj|ƒi dd6dd6dd6d d6d d6dd6dd 6dd 6dd 6d d6ƒdS(sTCreate blossom, relabel as T in more than one way, expand, augment: iii-iii2iiii i#iiii N(iii-(iii-(iii2(iii-(iii2(iii(ii i#(iii#(iii(i i i(RRRRR(RR ((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyttest_nasty_blossom1Ÿs    &c Cs—tjƒ}|jddddddddddg ƒttj|ƒi dd6dd6dd6d d6dd6dd6dd6dd 6dd 6d d6ƒdS(sAgain but slightly different:iii-iii2iiii i#iiii(i N(iii-(iii-(iii2(iii-(iii2(iii(ii i#(iii(iii((i i i(RRRRR(RR ((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyttest_nasty_blossom2¬s    &c Cs—tjƒ}|jddddddddddg ƒttj|ƒi dd6dd6dd6d d6dd6dd6dd6dd 6dd 6d d6ƒdS(suCreate blossom, relabel as T, expand such that a new least-slack S-to-free dge is produced, augment: iii-iii2iiii i#iiiii N(iii-(iii-(iii2(iii-(iii2(iii(ii i#(iii(iii(i i i(RRRRR(RR ((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyttest_nasty_blossom_least_slack·s    &cCs®tjƒ}|jddddddddddd d!d"g ƒttj|ƒi d d6dd6dd6d d6dd6dd 6dd6dd 6dd6dd6dd6dd6ƒdS(#s8Create nested blossom, relabel as T in more than one wayiii-iii2iii_ii^iii i#i i$i ii N(iii-(iii-(iii2(iii-(iii_(iii^(iii^(iii2(iii(ii i#(ii i$(ii i(i i i(RRRRR(RR ((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyttest_nasty_blossom_augmentingÄs     -cCsštjƒ}|jdddddddddddg ƒttj|ƒi dd6dd6dd6dd6dd6d d6dd 6dd 6dd6d d6ƒdS(s:Create nested S-blossom, relabel as S, expand recursively:iii(ii<ii7ii2iiiiii i N(iii((iii((iii<(iii7(iii7(iii2(iii(iii(iii (ii i (ii i(RRRRR(RR ((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyt%test_nasty_blossom_expand_recursivelyÒs    &(t__name__t __module__t__doc__R R RRRRRRRR R!R"R#R$R%R&R'R(R)R*(((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyR s*       tTestIsMatchingcBsDeZdZd„Zd„Zd„Zd„Zd„Zd„ZRS(sXUnit tests for the :func:`~networkx.algorithms.matching.is_matching` function. cCsEtjdƒ}ttj|idd6dd6dd6dd6ƒƒdS(Niiiii(Rt path_graphRt is_matching(RR ((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyt test_dictäscCs,tjdƒ}ttj|tƒƒƒdS(Ni(RR/RR0tset(RR ((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyttest_empty_matchingèscCs,tjdƒ}ttj|dhƒƒdS(Niii(ii(RR/RR0(RR ((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyttest_single_edgeìscCsƒtjdƒ}ttj|ddhƒƒttj|dd hƒƒttj|d d hƒƒttj|d d hƒƒdS(Niiiii(ii(ii(ii(ii(ii(ii(ii(ii(RR/RR0(RR ((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyttest_edge_orderðs cCs/tjdƒ}ttj|ddhƒƒdS(Niiiii(ii(ii(RR/RR0(RR ((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyt test_valid÷scCs2tjdƒ}ttj|dddhƒƒdS( Niiiii(ii(ii(ii(RR/RR0(RR ((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyt test_invalidûs( R+R,R-R1R3R4R5R6R7(((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyR.Þs     tTestIsMaximalMatchingcBs2eZdZd„Zd„Zd„Zd„ZRS(s`Unit tests for the :func:`~networkx.algorithms.matching.is_maximal_matching` function. cCsEtjdƒ}ttj|idd6dd6dd6dd6ƒƒdS(Niiiii(RR/Rtis_maximal_matching(RR ((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyR1scCs/tjdƒ}ttj|ddhƒƒdS(Niiiii(ii(ii(RR/RR9(RR ((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyR6 scCs2tjdƒ}ttj|dddhƒƒdS( Niiiii(ii(ii(ii(RR/RR9(RR ((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyttest_not_matchingscCs,tjdƒ}ttj|dhƒƒdS(Niii(ii(RR/RR9(RR ((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyttest_not_maximals(R+R,R-R1R6R:R;(((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyR8s    tTestMaximalMatchingcBs2eZdZd„Zd„Zd„Zd„ZRS(sTUnit tests for the :func:`~networkx.algorithms.matching.maximal_matching`. cCsSddd d d d d g}tj|ƒ}tj|ƒ}ttj||ƒƒdS(Niiiiii(ii(ii(ii(ii(ii(ii(ii(RRtmaximal_matchingRR9(RtedgesR tmatching((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyttest_valid_matchingscCsKtjdƒ}tj|ƒ}tdt|ƒƒttj||ƒƒdS(Nii(Rt star_graphR=RtlenRR9(RR R?((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyttest_single_edge_matching#scCsxtjdƒ}|jddgƒtj|ƒ}tt|ƒdƒttd„|Dƒƒƒttj ||ƒƒdS(Niiicss!|]\}}||kVqdS(N((t.0tutv((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pys 1s(ii(ii( RR/tadd_edges_fromR=RRBRtanyRR9(RR R?((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyttest_self_loops*s cCs…x~ttdƒƒD]j}tjƒ}|j|ƒ|jddgƒtj|ƒ}tt|ƒdƒt tj ||ƒƒqWdS(s„Tests that a maximal matching is computed correctly regardless of the order in which nodes are added to the graph. iiiiN(ii(ii( RtrangeRRtadd_nodes_fromRGR=RRBRR9(RtnodesR R?((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyt test_ordering4s  (R+R,R-R@RCRIRM(((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyR<s    (t itertoolsRRt nose.toolsRRRtnetworkxRtobjectRR.R8R<(((s}/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_matching.pyts  Ô"