<s> import io <EOL> from unittest import TestCase , main <EOL> from skbio import DistanceMatrix , TreeNode , nj <EOL> from skbio . tree . _nj import ( <EOL> _compute_q , _compute_collapsed_dm , _lowest_index , _otu_to_new_node , <EOL> _pair_members_to_new_node ) <EOL> class NjTests ( TestCase ) : <EOL> def setUp ( self ) : <EOL> data1 = [ [ <NUM_LIT:0> , <NUM_LIT:5> , <NUM_LIT:9> , <NUM_LIT:9> , <NUM_LIT:8> ] , <EOL> [ <NUM_LIT:5> , <NUM_LIT:0> , <NUM_LIT:10> , <NUM_LIT:10> , <NUM_LIT:9> ] , <EOL> [ <NUM_LIT:9> , <NUM_LIT:10> , <NUM_LIT:0> , <NUM_LIT:8> , <NUM_LIT:7> ] , <EOL> [ <NUM_LIT:9> , <NUM_LIT:10> , <NUM_LIT:8> , <NUM_LIT:0> , <NUM_LIT:3> ] , <EOL> [ <NUM_LIT:8> , <NUM_LIT:9> , <NUM_LIT:7> , <NUM_LIT:3> , <NUM_LIT:0> ] ] <EOL> ids1 = list ( '<STR_LIT>' ) <EOL> self . dm1 = DistanceMatrix ( data1 , ids1 ) <EOL> self . expected1_str = ( "<STR_LIT>" <EOL> "<STR_LIT>" ) <EOL> self . expected1_TreeNode = TreeNode . read ( <EOL> io . StringIO ( self . expected1_str ) ) <EOL> data2 = [ [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] ] <EOL> ids2 = [ "<STR_LIT>" , "<STR_LIT>" , "<STR_LIT>" , "<STR_LIT>" , "<STR_LIT>" , "<STR_LIT>" , <EOL> "<STR_LIT>" ] <EOL> self . dm2 = DistanceMatrix ( data2 , ids2 ) <EOL> self . expected2_str = ( "<STR_LIT>" <EOL> "<STR_LIT>" <EOL> "<STR_LIT>" <EOL> "<STR_LIT>" ) <EOL> self . expected2_TreeNode = TreeNode . read ( <EOL> io . StringIO ( self . expected2_str ) ) <EOL> data3 = [ [ <NUM_LIT:0> , <NUM_LIT:5> , <NUM_LIT:4> , <NUM_LIT:7> , <NUM_LIT:6> , <NUM_LIT:8> ] , <EOL> [ <NUM_LIT:5> , <NUM_LIT:0> , <NUM_LIT:7> , <NUM_LIT:10> , <NUM_LIT:9> , <NUM_LIT:11> ] , <EOL> [ <NUM_LIT:4> , <NUM_LIT:7> , <NUM_LIT:0> , <NUM_LIT:7> , <NUM_LIT:6> , <NUM_LIT:8> ] , <EOL> [ <NUM_LIT:7> , <NUM_LIT:10> , <NUM_LIT:7> , <NUM_LIT:0> , <NUM_LIT:5> , <NUM_LIT:8> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT:9> , <NUM_LIT:6> , <NUM_LIT:5> , <NUM_LIT:0> , <NUM_LIT:8> ] , <EOL> [ <NUM_LIT:8> , <NUM_LIT:11> , <NUM_LIT:8> , <NUM_LIT:8> , <NUM_LIT:8> , <NUM_LIT:0> ] ] <EOL> ids3 = map ( str , range ( <NUM_LIT:6> ) ) <EOL> self . dm3 = DistanceMatrix ( data3 , ids3 ) <EOL> self . expected3_str = ( "<STR_LIT>" <EOL> "<STR_LIT>" <EOL> "<STR_LIT>" ) <EOL> self . expected3_TreeNode = TreeNode . read ( <EOL> io . StringIO ( self . expected3_str ) ) <EOL> data4 = [ [ <NUM_LIT:0> , <NUM_LIT:5> , <NUM_LIT:9> , <NUM_LIT:9> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:5> , <NUM_LIT:0> , <NUM_LIT:10> , <NUM_LIT:10> , <NUM_LIT:9> ] , <EOL> [ <NUM_LIT:9> , <NUM_LIT:10> , <NUM_LIT:0> , <NUM_LIT:8> , <NUM_LIT:7> ] , <EOL> [ <NUM_LIT:9> , <NUM_LIT:10> , <NUM_LIT:8> , <NUM_LIT:0> , <NUM_LIT:3> ] , <EOL> [ <NUM_LIT> , <NUM_LIT:9> , <NUM_LIT:7> , <NUM_LIT:3> , <NUM_LIT:0> ] ] <EOL> ids4 = list ( '<STR_LIT>' ) <EOL> self . dm4 = DistanceMatrix ( data4 , ids4 ) <EOL> def test_nj_dm1 ( self ) : <EOL> self . assertEqual ( nj ( self . dm1 , result_constructor = str ) , <EOL> self . expected1_str ) <EOL> actual_TreeNode = nj ( self . dm1 ) <EOL> self . assertEqual ( actual_TreeNode . compare_tip_distances ( <EOL> self . expected1_TreeNode ) , <NUM_LIT:0.0> ) <EOL> def test_nj_dm2 ( self ) : <EOL> actual_TreeNode = nj ( self . dm2 ) <EOL> self . assertAlmostEqual ( actual_TreeNode . compare_tip_distances ( <EOL> self . expected2_TreeNode ) , <NUM_LIT:0.0> ) <EOL> def test_nj_dm3 ( self ) : <EOL> actual_TreeNode = nj ( self . dm3 ) <EOL> self . assertAlmostEqual ( actual_TreeNode . compare_tip_distances ( <EOL> self . expected3_TreeNode ) , <NUM_LIT:0.0> ) <EOL> def test_nj_zero_branch_length ( self ) : <EOL> tree = nj ( self . dm4 ) <EOL> for n in tree . postorder ( include_self = False ) : <EOL> self . assertTrue ( n . length >= <NUM_LIT:0> ) <EOL> tree = nj ( self . dm4 , False ) <EOL> self . assertTrue ( tree . find ( '<STR_LIT:a>' ) . length > <NUM_LIT:0> ) <EOL> self . assertTrue ( tree . find ( '<STR_LIT:b>' ) . length < <NUM_LIT:0> ) <EOL> self . assertTrue ( tree . find ( '<STR_LIT:c>' ) . length < <NUM_LIT:0> ) <EOL> self . assertTrue ( tree . find ( '<STR_LIT:d>' ) . length < <NUM_LIT:0> ) <EOL> self . assertTrue ( tree . find ( '<STR_LIT:e>' ) . length > <NUM_LIT:0> ) <EOL> def test_nj_trivial ( self ) : <EOL> data = [ [ <NUM_LIT:0> , <NUM_LIT:3> , <NUM_LIT:2> ] , <EOL> [ <NUM_LIT:3> , <NUM_LIT:0> , <NUM_LIT:3> ] , <EOL> [ <NUM_LIT:2> , <NUM_LIT:3> , <NUM_LIT:0> ] ] <EOL> dm = DistanceMatrix ( data , list ( '<STR_LIT:abc>' ) ) <EOL> expected_str = "<STR_LIT>" <EOL> self . assertEqual ( nj ( dm , result_constructor = str ) , expected_str ) <EOL> def test_nj_error ( self ) : <EOL> data = [ [ <NUM_LIT:0> , <NUM_LIT:3> ] , <EOL> [ <NUM_LIT:3> , <NUM_LIT:0> ] ] <EOL> dm = DistanceMatrix ( data , list ( '<STR_LIT>' ) ) <EOL> self . assertRaises ( ValueError , nj , dm ) <EOL> def test_compute_q ( self ) : <EOL> expected_data = [ [ <NUM_LIT:0> , - <NUM_LIT:50> , - <NUM_LIT> , - <NUM_LIT> , - <NUM_LIT> ] , <EOL> [ - <NUM_LIT:50> , <NUM_LIT:0> , - <NUM_LIT> , - <NUM_LIT> , - <NUM_LIT> ] , <EOL> [ - <NUM_LIT> , - <NUM_LIT> , <NUM_LIT:0> , - <NUM_LIT> , - <NUM_LIT> ] , <EOL> [ - <NUM_LIT> , - <NUM_LIT> , - <NUM_LIT> , <NUM_LIT:0> , - <NUM_LIT> ] , <EOL> [ - <NUM_LIT> , - <NUM_LIT> , - <NUM_LIT> , - <NUM_LIT> , <NUM_LIT:0> ] ] <EOL> expected_ids = list ( '<STR_LIT>' ) <EOL> expected = DistanceMatrix ( expected_data , expected_ids ) <EOL> self . assertEqual ( _compute_q ( self . dm1 ) , expected ) <EOL> data = [ [ <NUM_LIT:0> , <NUM_LIT:3> , <NUM_LIT:2> ] , <EOL> [ <NUM_LIT:3> , <NUM_LIT:0> , <NUM_LIT:3> ] , <EOL> [ <NUM_LIT:2> , <NUM_LIT:3> , <NUM_LIT:0> ] ] <EOL> dm = DistanceMatrix ( data , list ( '<STR_LIT:abc>' ) ) <EOL> expected_data = [ [ <NUM_LIT:0> , - <NUM_LIT:8> , - <NUM_LIT:8> ] , <EOL> [ - <NUM_LIT:8> , <NUM_LIT:0> , - <NUM_LIT:8> ] , <EOL> [ - <NUM_LIT:8> , - <NUM_LIT:8> , <NUM_LIT:0> ] ] <EOL> expected = DistanceMatrix ( expected_data , list ( '<STR_LIT:abc>' ) ) <EOL> self . assertEqual ( _compute_q ( dm ) , expected ) <EOL> def test_compute_collapsed_dm ( self ) : <EOL> expected_data = [ [ <NUM_LIT:0> , <NUM_LIT:7> , <NUM_LIT:7> , <NUM_LIT:6> ] , <EOL> [ <NUM_LIT:7> , <NUM_LIT:0> , <NUM_LIT:8> , <NUM_LIT:7> ] , <EOL> [ <NUM_LIT:7> , <NUM_LIT:8> , <NUM_LIT:0> , <NUM_LIT:3> ] , <EOL> [ <NUM_LIT:6> , <NUM_LIT:7> , <NUM_LIT:3> , <NUM_LIT:0> ] ] <EOL> expected_ids = [ '<STR_LIT:x>' , '<STR_LIT:c>' , '<STR_LIT:d>' , '<STR_LIT:e>' ] <EOL> expected1 = DistanceMatrix ( expected_data , expected_ids ) <EOL> self . assertEqual ( _compute_collapsed_dm ( self . dm1 , '<STR_LIT:a>' , '<STR_LIT:b>' , True , '<STR_LIT:x>' ) , <EOL> expected1 ) <EOL> expected_data = [ [ <NUM_LIT:0> , <NUM_LIT:4> , <NUM_LIT:3> ] , <EOL> [ <NUM_LIT:4> , <NUM_LIT:0> , <NUM_LIT:3> ] , <EOL> [ <NUM_LIT:3> , <NUM_LIT:3> , <NUM_LIT:0> ] ] <EOL> expected_ids = [ '<STR_LIT>' , '<STR_LIT:d>' , '<STR_LIT:e>' ] <EOL> expected2 = DistanceMatrix ( expected_data , expected_ids ) <EOL> self . assertEqual ( <EOL> _compute_collapsed_dm ( expected1 , '<STR_LIT:x>' , '<STR_LIT:c>' , True , '<STR_LIT>' ) , expected2 ) <EOL> def test_lowest_index ( self ) : <EOL> self . assertEqual ( _lowest_index ( self . dm1 ) , ( <NUM_LIT:4> , <NUM_LIT:3> ) ) <EOL> self . assertEqual ( _lowest_index ( _compute_q ( self . dm1 ) ) , ( <NUM_LIT:1> , <NUM_LIT:0> ) ) <EOL> def test_otu_to_new_node ( self ) : <EOL> self . assertEqual ( _otu_to_new_node ( self . dm1 , '<STR_LIT:a>' , '<STR_LIT:b>' , '<STR_LIT:c>' , True ) , <NUM_LIT:7> ) <EOL> self . assertEqual ( _otu_to_new_node ( self . dm1 , '<STR_LIT:a>' , '<STR_LIT:b>' , '<STR_LIT:d>' , True ) , <NUM_LIT:7> ) <EOL> self . assertEqual ( _otu_to_new_node ( self . dm1 , '<STR_LIT:a>' , '<STR_LIT:b>' , '<STR_LIT:e>' , True ) , <NUM_LIT:6> ) <EOL> def test_otu_to_new_node_zero_branch_length ( self ) : <EOL> data = [ [ <NUM_LIT:0> , <NUM_LIT> , <NUM_LIT:3> ] , <EOL> [ <NUM_LIT> , <NUM_LIT:0> , <NUM_LIT:3> ] , <EOL> [ <NUM_LIT:3> , <NUM_LIT:3> , <NUM_LIT:0> ] ] <EOL> ids = [ '<STR_LIT:a>' , '<STR_LIT:b>' , '<STR_LIT:c>' ] <EOL> dm = DistanceMatrix ( data , ids ) <EOL> self . assertEqual ( _otu_to_new_node ( dm , '<STR_LIT:a>' , '<STR_LIT:b>' , '<STR_LIT:c>' , True ) , <NUM_LIT:0> ) <EOL> self . assertEqual ( _otu_to_new_node ( dm , '<STR_LIT:a>' , '<STR_LIT:b>' , '<STR_LIT:c>' , False ) , - <NUM_LIT> ) <EOL> def test_pair_members_to_new_node ( self ) : <EOL> self . assertEqual ( _pair_members_to_new_node ( self . dm1 , '<STR_LIT:a>' , '<STR_LIT:b>' , True ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:3> ) ) <EOL> self . assertEqual ( _pair_members_to_new_node ( self . dm1 , '<STR_LIT:a>' , '<STR_LIT:c>' , True ) , <EOL> ( <NUM_LIT:4> , <NUM_LIT:5> ) ) <EOL> self . assertEqual ( _pair_members_to_new_node ( self . dm1 , '<STR_LIT:d>' , '<STR_LIT:e>' , True ) , <EOL> ( <NUM_LIT:2> , <NUM_LIT:1> ) ) <EOL> def test_pair_members_to_new_node_zero_branch_length ( self ) : <EOL> data = [ [ <NUM_LIT:0> , <NUM_LIT:4> , <NUM_LIT:2> ] , <EOL> [ <NUM_LIT:4> , <NUM_LIT:0> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:2> , <NUM_LIT> , <NUM_LIT:0> ] ] <EOL> ids = [ '<STR_LIT:a>' , '<STR_LIT:b>' , '<STR_LIT:c>' ] <EOL> dm = DistanceMatrix ( data , ids ) <EOL> self . assertEqual ( _pair_members_to_new_node ( dm , '<STR_LIT:a>' , '<STR_LIT:b>' , True ) , ( <NUM_LIT:0> , <NUM_LIT:4> ) ) <EOL> self . assertEqual ( <EOL> _pair_members_to_new_node ( dm , '<STR_LIT:a>' , '<STR_LIT:b>' , False ) , ( - <NUM_LIT:16> , <NUM_LIT:20> ) ) <EOL> if __name__ == "<STR_LIT:__main__>" : <EOL> main ( ) </s>
