ó žÃÒYc@s9ddlmZddlmZddlmZddlmZddlmZddlmZddlmZddl Z dd l m Z dd l mZd efd „ƒYZd efd„ƒYZddd„ƒYZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„ZdS(iÿÿÿÿ(t combinations(t assert_equal(t assert_false(t assert_in(t assert_raises(t assert_true(tok_N(tassert_edges_equal(tconsumetTestDagLongestPathcBs;eZdZd„Zd„Zd„Zd„Zd„ZRS(sPUnit tests for computing the longest path in a directed acyclic graph. cCsPdd d d d d g}tj|ƒ}ttj|ƒdddddgƒdS(Niiiiiii(ii(ii(ii(ii(ii(ii(tnxtDiGraphRtdag_longest_path(tselftedgestG((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyttest_unweighted1scCsSdddd d d d g}tj|ƒ}ttj|ƒdddddgƒdS( Niiiii(ii(ii(ii(ii(ii(ii(ii(R R RR (R RR((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyttest_unweighted2scCsTtjƒ}d d d d d dg}|j|ƒttj|ƒdddgƒdS(Niiiûÿÿÿiiiii(iiiûÿÿÿ(iii(iii(iii(iii(iii(R R tadd_weighted_edges_fromRR (R RR((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyt test_weighteds    cCs&tjƒ}ttjtj|ƒdS(N(R tGraphRtNetworkXNotImplementedR (R R((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyttest_undirected_not_implemented&s cCsµdtfd„ƒY}gtdƒD]}|ƒ^q#}tjƒ}|j|d|dƒ|j|d|dƒ|j|d|dƒ|j|d|dƒtj|ƒdS( s‘Tests that computing the longest path does not depend on nodes being orderable. For more information, see issue #1989. t UnorderablecBseZd„ZRS(cSs4djt|ƒjt|ƒjƒ}t|ƒ‚dS(Ns.< not supported between instances of {} and {}(tformatttypet__name__t TypeError(R tothert error_msg((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyt__lt__8s(Rt __module__R(((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyR7siiiiiN(tobjecttrangeR R tadd_edgeR (R RtntnodesR((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyttest_unorderable_nodes*s " (RRt__doc__RRRRR%(((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyR s     tTestDagLongestPathLengthcBs)eZdZd„Zd„Zd„ZRS(s\Unit tests for computing the length of a longest path in a directed acyclic graph. cCs°d d d d d dg}tj|ƒ}ttj|ƒdƒdddddddg}tj|ƒ}ttj|ƒdƒtjƒ}|jdƒttj|ƒdƒdS(Niiiiiiii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(R R Rtdag_longest_path_lengthtadd_node(R RR((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyttest_unweightedPs  cCs&tjƒ}ttjtj|ƒdS(N(R RRRR((R R((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyR^s cCsKd d d d d dg}tjƒ}|j|ƒttj|ƒdƒdS(Niiiûÿÿÿiiiii(iiiûÿÿÿ(iii(iii(iii(iii(iii(R R RRR((R RR((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyRbs    (RRR&R*RR(((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyR'Js  tTestDAGcBseZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z d„Z d „Z d „Z d „Z d „Zd „Zd„ZRS(cCsdS(N((R ((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pytsetUplscCs,tjdddgƒ}x3tjtjgD]}tt||ƒƒdƒq+W|jddƒx3tjtjgD]}ttjt ||ƒƒqqW|j ddƒx3tjtjgD]}tt||ƒƒdƒq·W|j ddƒt ttj|ƒƒd d hƒtttj|ƒƒd ƒdS( Niii(ii(ii(ii(iii(iii(iii(iii(iii( R R ttopological_sortt lexicographical_topological_sortRttupleR"RtNetworkXUnfeasibleRt remove_edgeR(R tDGt algorithm((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyttest_topological_sort1os   "cCs†tjjdƒ}ttj|ƒƒttj|jƒƒƒttjtjddgƒƒƒttjtjddgƒƒƒdS( Niiii(ii(ii(ii(ii( R t generatorstcomplete_graphRtis_directed_acyclic_grapht to_directedRRR (R R((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyttest_is_directed_acyclic_graph‡s "cCsÒtji dgd6dgd6dgd6dgd6dgd6dgd6dgd6d gd6d gd 6ƒ}ttjttj|ƒƒttj|ƒƒ|jddƒttj|ƒƒt tj|ƒƒdS( Niiiiii i i ii( R R RR0RR-RR7R1R(R R2((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyttest_topological_sort2Žs'$cs tjƒ‰ˆjgtddƒD]}d|f^q"ƒˆjgtddƒD]}d|f^qQƒˆjgtddƒD]}d|f^q€ƒˆjgtddƒD]}d|f^q¯ƒ‡fd †}|ttjˆƒƒƒˆjd dƒttjt tjˆƒƒdS( Niiii i iiicsitt|tƒƒtt|ƒtˆƒƒx6t|dƒD]%\}}ttjˆ||ƒƒq<WdS(Ni( Rt isinstancetlistRtsetRRR thas_path(tordertutv(R2(sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pytvalidate¡si( R R tadd_edges_fromR!R<R-R"RR0R(R tiRB((R2sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyttest_topological_sort3šs ////cCs<tjƒ}|jddƒttjttj|ƒƒdS(Nii(R RR"Rt NetworkXErrorRR-(R R((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyttest_topological_sort4«s cCsBtjƒ}|jddƒtttj|ƒƒddgƒdS(Nii(R R R"RR<R-(R R((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyttest_topological_sort5±s csxxqtjtjgD]]‰‡fd†}‡fd†}‡fd†}tt|ƒtt|ƒttj|ƒqWdS(Ncs\tjdddgƒ}t}x7ˆ|ƒD])}|r+t}|jd|dƒq+q+WdS( Niiiii(ii(ii(ii(R R tTruetFalseR"(R2tfirsttx(R3(sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyt runtime_error¹s csUtjdddgƒ}t}x0ˆ|ƒD]"}|r+t}|jdƒq+q+WdS(Niiii(ii(ii(ii(R R RIRJt remove_node(R2RKRL(R3(sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pytunfeasible_errorÁs csUtjdddgƒ}t}x0ˆ|ƒD]"}|r+t}|jdƒq+q+WdS(Niiii(ii(ii(ii(R R RIRJRN(R2RKRL(R3(sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pytruntime_error2És (R R-R.Rt RuntimeErrorR0(R RMRORP((R3sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyttest_topological_sort6¶s   c Csºtjƒ}tjjj}|jdd d d d d dgƒt||dƒtddddgƒƒt||dƒtddgƒƒt||dƒtƒƒttj ||dƒdS(Niiiiiii(ii(ii(ii(ii(ii(ii(ii( R R t algorithmstdagt ancestorsRCRR=RRF(R RRU((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyttest_ancestorsÕs ("c Cs½tjƒ}tjjj}|jdd d d d d dgƒt||dƒtdddgƒƒt||dƒtddddgƒƒt||dƒtƒƒttj ||dƒdS(Niiiiiii(ii(ii(ii(ii(ii(ii(ii( R R RSRTt descendantsRCRR=RRF(R RRW((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyttest_descendantsßs %(cCsÍtjdddgƒ}tjjj}dd d d d d g}t||ƒjƒ|ƒtjdddgƒ}dddddg}t||ƒjƒ|ƒtjdddgƒ}ttj ||ƒdS(Niiii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii( R R RSRTttransitive_closureRRRRR(R RRYtsolution((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyttest_transitive_closureéscCsÜtjddddd d gƒ}tjjj}d d d g}t||ƒjƒ|ƒtjdddddgƒ}tjjj}dddg}t||ƒjƒ|ƒtjdddgƒ}ttj ||ƒdS(Niiii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii( R R RSRTttransitive_reductionRRRRR(R RR\RZ((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyttest_transitive_reductionôs!cCs^g|D]}t|ƒ^q}g|D]}t|ƒ^q&}tt|ƒt|ƒkƒdS(N(t frozensetRR=(R RZtresulttatsoltres((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyt_check_antichainsscsetjjj‰tjd d d gƒ}gdgdgdgdgg}|jtˆ|ƒƒ|ƒtjd dddddgƒ}gdgdgddgdgddgddgdddgdgddgdgddgdgdgg}|jtˆ|ƒƒ|ƒtjdddddgƒ}gdgdgdgddgddgdgdgddgddgddgdddgdddgddgdgg}|jtˆ|ƒƒ|ƒtjiddgd6dgd6dgd6dgd6ƒ}gdgdgdgdgddgddgdgg}|jtˆ|ƒƒ|ƒtjƒ}|jtˆ|ƒƒggƒtjƒ}|jdddgƒgdgdgddgdgddgddgdddgg}|jtˆ|ƒƒ|ƒ‡fd †}tjdddgƒ}t tj ||ƒtjdddgƒ}t tj ||ƒdS(Niiiiiiiicstˆ|ƒƒS(N(R<(RL(t antichains(sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pytfs(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii(ii( R RSRTRdR RcR<tadd_nodes_fromRRRR0(R RRZRe((Rdsx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyttest_antichainss4!!<0<?:9  BcCs¾tjd d d d dgƒ}tttj|ƒƒddddddgƒtttj|dd„ƒƒddddddgƒtttj|dd „ƒƒddddddgƒdS(NiiiiiitkeycSs|S(N((RL((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyt'scSs| S(N((RL((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyRi*s(ii(ii(ii(ii(ii(R R RR<R.(R R((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyt%test_lexicographical_topological_sort"s  (RRR,R4R9R:RERGRHRRRVRXR[R]RcRgRj(((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyR+js         cCs?tjƒ}tj|ddddgƒttj|ƒƒdS(Niiii(R R t add_cycleRt is_aperiodic(R((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyttest_is_aperiodic_cycle.s cCs^tjƒ}tj|ddddgƒtj|dddddgƒttj|ƒƒdS(Niiiiiii(R R RkRRl(R((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyttest_is_aperiodic_cycle24s cCs[tjƒ}tj|ddddgƒtj|ddddgƒttj|ƒƒdS(Niiiiii(R R RkRRl(R((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyttest_is_aperiodic_cycle3;s cCsOtjƒ}tj|ddddgƒ|jddƒttj|ƒƒdS(Niiii(R R RkR"RRl(R((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyttest_is_aperiodic_cycle4Bs cCsOtjƒ}tj|ddddgƒ|jddƒttj|ƒƒdS(Niiii(R R RkR"RRl(R((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyttest_is_aperiodic_selfloopIs cCs&tjƒ}ttjtj|ƒdS(N(R RRRFRl(R((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyttest_is_aperiodic_raisePs  cCs,tjtjƒƒ}ttj|ƒƒdS(N(R R tdavis_southern_women_graphRRl(R((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyttest_is_aperiodic_bipartiteWscCs5tjdddtjƒƒ}ttj|ƒƒdS(Niit create_using(R tfull_rary_treeR RRl(R((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyttest_is_aperiodic_rary_tree]scCsŽtjƒ}tj|ddddgƒtj|ddddgƒttj|ƒƒ|jddƒ|jddƒttj|ƒƒdS( Niiiiiiii(R R RkRRlR"R(R((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyttest_is_aperiodic_disconnectedbs cCsLtjƒ}tj|dddgƒ|jddƒttj|ƒƒdS(Niiii(R R RkR"RRl(R((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyttest_is_aperiodic_disconnected2ms ((t itertoolsRt nose.toolsRRRRRRtnetworkxR tnetworkx.testing.utilsRtnetworkx.utilsRR R R'R+RmRnRoRpRqRrRtRwRxRy(((sx/private/var/folders/w6/vb91730s7bb1k90y_rnhql1dhvdd44/T/pip-build-w4MwvS/networkx/networkx/algorithms/tests/test_dag.pyts, ; Ä