<s> import unittest <EOL> import numpy as np <EOL> import numpy . testing as npt <EOL> from skbio . stats . distance import mantel <EOL> from skbio . stats . evolve import hommola_cospeciation <EOL> from skbio . stats . evolve . _hommola import _get_dist , _gen_lists <EOL> class HommolaCospeciationTests ( unittest . TestCase ) : <EOL> def setUp ( self ) : <EOL> self . hdist = np . array ( [ [ <NUM_LIT:0> , <NUM_LIT:3> , <NUM_LIT:8> , <NUM_LIT:8> , <NUM_LIT:9> ] , [ <NUM_LIT:3> , <NUM_LIT:0> , <NUM_LIT:7> , <NUM_LIT:7> , <NUM_LIT:8> ] , [ <EOL> <NUM_LIT:8> , <NUM_LIT:7> , <NUM_LIT:0> , <NUM_LIT:6> , <NUM_LIT:7> ] , [ <NUM_LIT:8> , <NUM_LIT:7> , <NUM_LIT:6> , <NUM_LIT:0> , <NUM_LIT:3> ] , [ <NUM_LIT:9> , <NUM_LIT:8> , <NUM_LIT:7> , <NUM_LIT:3> , <NUM_LIT:0> ] ] ) <EOL> self . pdist = np . array ( [ [ <NUM_LIT:0> , <NUM_LIT:5> , <NUM_LIT:8> , <NUM_LIT:8> , <NUM_LIT:8> ] , [ <NUM_LIT:5> , <NUM_LIT:0> , <NUM_LIT:7> , <NUM_LIT:7> , <NUM_LIT:7> ] , [ <EOL> <NUM_LIT:8> , <NUM_LIT:7> , <NUM_LIT:0> , <NUM_LIT:4> , <NUM_LIT:4> ] , [ <NUM_LIT:8> , <NUM_LIT:7> , <NUM_LIT:4> , <NUM_LIT:0> , <NUM_LIT:2> ] , [ <NUM_LIT:8> , <NUM_LIT:7> , <NUM_LIT:4> , <NUM_LIT:2> , <NUM_LIT:0> ] ] ) <EOL> self . interact = np . array ( [ [ <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ] , [ <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ] , [ <EOL> <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> ] , [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:0> ] , [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:1> ] ] ) <EOL> self . hdist_4x4 = np . array ( [ [ <NUM_LIT:0> , <NUM_LIT:3> , <NUM_LIT:8> , <NUM_LIT:8> ] , [ <NUM_LIT:3> , <NUM_LIT:0> , <NUM_LIT:7> , <NUM_LIT:7> ] , [ <NUM_LIT:8> , <NUM_LIT:7> , <NUM_LIT:0> , <NUM_LIT:6> ] , <EOL> [ <NUM_LIT:8> , <NUM_LIT:7> , <NUM_LIT:6> , <NUM_LIT:0> ] ] ) <EOL> self . interact_5x4 = np . array ( [ [ <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ] , [ <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> ] , [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:0> ] , <EOL> [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> ] , [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> ] ] ) <EOL> self . interact_1to1 = np . array ( [ [ <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ] , [ <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ] , [ <EOL> <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> ] , [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:0> ] , [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> ] ] ) <EOL> self . interact_ns = np . array ( <EOL> [ [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:0> ] , [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> ] , [ <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ] , <EOL> [ <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ] , [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> ] ] ) <EOL> self . h_dist_3x3 = np . array ( [ [ <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:2> ] , [ <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:1> ] , [ <NUM_LIT:2> , <NUM_LIT:1> , <NUM_LIT:0> ] ] ) <EOL> self . h_dist_2x2 = np . array ( [ [ <NUM_LIT:0> , <NUM_LIT:3> ] , [ <NUM_LIT:3> , <NUM_LIT:0> ] ] ) <EOL> self . p_dist_3x3 = np . array ( [ [ <NUM_LIT:0> , <NUM_LIT:3> , <NUM_LIT:2> ] , [ <NUM_LIT:3> , <NUM_LIT:0> , <NUM_LIT:1> ] , [ <NUM_LIT:2> , <NUM_LIT:1> , <NUM_LIT:0> ] ] ) <EOL> self . interact_3x3 = np . array ( [ [ <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:1> ] , [ <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:1> ] , [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> ] ] ) <EOL> self . interact_3x2 = np . array ( [ [ <NUM_LIT:0> , <NUM_LIT:1> ] , [ <NUM_LIT:1> , <NUM_LIT:0> ] , [ <NUM_LIT:1> , <NUM_LIT:1> ] ] ) <EOL> self . interact_2x3 = np . array ( [ [ <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:1> ] , [ <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:1> ] ] ) <EOL> self . interact_zero = np . array ( [ [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ] , [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ] , [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ] ] ) <EOL> def test_hommola_cospeciation_sig ( self ) : <EOL> np . random . seed ( <NUM_LIT:1> ) <EOL> obs_r , obs_p , obs_perm_stats = hommola_cospeciation ( <EOL> self . hdist , self . pdist , self . interact , <NUM_LIT:9> ) <EOL> exp_p = <NUM_LIT> <EOL> exp_r = <NUM_LIT> <EOL> exp_perm_stats = np . array ( [ - <NUM_LIT> , <NUM_LIT> , - <NUM_LIT> , <EOL> <NUM_LIT> , <NUM_LIT> , - <NUM_LIT> , <EOL> <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] ) <EOL> self . assertAlmostEqual ( obs_p , exp_p ) <EOL> self . assertAlmostEqual ( obs_r , exp_r ) <EOL> npt . assert_allclose ( obs_perm_stats , exp_perm_stats ) <EOL> def test_hommola_cospeciation_asymmetric ( self ) : <EOL> np . random . seed ( <NUM_LIT:1> ) <EOL> obs_r , obs_p , obs_perm_stats = hommola_cospeciation ( <EOL> self . hdist_4x4 , self . pdist , self . interact_5x4 , <NUM_LIT:9> ) <EOL> exp_p = <NUM_LIT> <EOL> exp_r = <NUM_LIT> <EOL> exp_perm_stats = np . array ( [ - <NUM_LIT> , - <NUM_LIT> , <EOL> <NUM_LIT> , - <NUM_LIT> , <EOL> <NUM_LIT> , <NUM_LIT> , <EOL> <NUM_LIT> , <NUM_LIT> , <EOL> - <NUM_LIT> ] ) <EOL> self . assertAlmostEqual ( obs_p , exp_p ) <EOL> self . assertAlmostEqual ( obs_r , exp_r ) <EOL> npt . assert_allclose ( obs_perm_stats , exp_perm_stats ) <EOL> def test_hommola_cospeciation_no_sig ( self ) : <EOL> np . random . seed ( <NUM_LIT:1> ) <EOL> obs_r , obs_p , obs_perm_stats = hommola_cospeciation ( <EOL> self . hdist , self . pdist , self . interact_ns , <NUM_LIT:9> ) <EOL> exp_p = <NUM_LIT> <EOL> exp_r = - <NUM_LIT> <EOL> exp_perm_stats = np . array ( [ - <NUM_LIT> , - <NUM_LIT> , - <NUM_LIT> , <EOL> <NUM_LIT> , - <NUM_LIT> , <NUM_LIT> , <EOL> <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] ) <EOL> self . assertAlmostEqual ( obs_p , exp_p ) <EOL> self . assertAlmostEqual ( obs_r , exp_r ) <EOL> npt . assert_allclose ( obs_perm_stats , exp_perm_stats ) <EOL> def test_hommola_vs_mantel ( self ) : <EOL> r_mantel , p_mantel , _ = mantel ( <EOL> self . hdist , self . pdist , method = '<STR_LIT>' , permutations = <NUM_LIT:0> , <EOL> alternative = '<STR_LIT>' <EOL> ) <EOL> r_hommola , p_hommola , _ = hommola_cospeciation ( <EOL> self . hdist , self . pdist , self . interact_1to1 , permutations = <NUM_LIT:0> <EOL> ) <EOL> self . assertAlmostEqual ( r_hommola , r_mantel ) <EOL> npt . assert_equal ( p_hommola , p_mantel ) <EOL> def test_zero_permutations ( self ) : <EOL> obs_r , obs_p , obs_perm_stats = hommola_cospeciation ( <EOL> self . hdist , self . pdist , self . interact , <NUM_LIT:0> ) <EOL> exp_p = np . nan <EOL> exp_r = <NUM_LIT> <EOL> exp_perm_stats = np . array ( [ ] ) <EOL> npt . assert_equal ( obs_p , exp_p ) <EOL> self . assertAlmostEqual ( obs_r , exp_r ) <EOL> npt . assert_equal ( obs_perm_stats , exp_perm_stats ) <EOL> def test_get_dist ( self ) : <EOL> labels = np . array ( [ <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> ] ) <EOL> k_labels , t_labels = _gen_lists ( labels ) <EOL> dists = np . array ( [ [ <NUM_LIT:0> , <NUM_LIT:2> , <NUM_LIT:6> , <NUM_LIT:3> ] , [ <NUM_LIT:2> , <NUM_LIT:0> , <NUM_LIT:5> , <NUM_LIT:4> ] , [ <NUM_LIT:6> , <NUM_LIT:5> , <NUM_LIT:0> , <NUM_LIT:7> ] , <EOL> [ <NUM_LIT:3> , <NUM_LIT:4> , <NUM_LIT:7> , <NUM_LIT:0> ] ] ) <EOL> index = np . array ( [ <NUM_LIT:2> , <NUM_LIT:3> , <NUM_LIT:1> , <NUM_LIT:0> ] ) <EOL> expected_vec = np . array ( [ <NUM_LIT:7> , <NUM_LIT:7> , <NUM_LIT:5> , <NUM_LIT:6> , <NUM_LIT:0> , <NUM_LIT:4> , <NUM_LIT:3> , <NUM_LIT:4> , <NUM_LIT:3> , <NUM_LIT:2> ] ) <EOL> actual_vec = _get_dist ( k_labels , t_labels , dists , index ) <EOL> npt . assert_allclose ( actual_vec , expected_vec ) <EOL> def test_gen_lists ( self ) : <EOL> exp_pars_k_labels = np . array ( [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <EOL> <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:2> , <NUM_LIT:2> , <NUM_LIT:3> , <NUM_LIT:3> , <NUM_LIT:4> ] ) <EOL> exp_pars_t_labels = np . array ( [ <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> , <NUM_LIT:4> , <NUM_LIT:4> , <NUM_LIT:2> , <NUM_LIT:3> , <NUM_LIT:4> , <EOL> <NUM_LIT:4> , <NUM_LIT:3> , <NUM_LIT:4> , <NUM_LIT:4> , <NUM_LIT:4> , <NUM_LIT:4> , <NUM_LIT:4> ] ) <EOL> exp_host_k_labels = np . array ( [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <EOL> <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:2> , <NUM_LIT:2> , <NUM_LIT:3> , <NUM_LIT:3> , <NUM_LIT:3> ] ) <EOL> exp_host_t_labels = np . array ( [ <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:3> , <NUM_LIT:3> , <NUM_LIT:4> , <NUM_LIT:2> , <NUM_LIT:3> , <NUM_LIT:3> , <EOL> <NUM_LIT:4> , <NUM_LIT:3> , <NUM_LIT:3> , <NUM_LIT:4> , <NUM_LIT:3> , <NUM_LIT:4> , <NUM_LIT:4> ] ) <EOL> pars , hosts = np . nonzero ( self . interact ) <EOL> obs_pars_k_labels , obs_pars_t_labels = _gen_lists ( pars ) <EOL> obs_hosts_k_labels , obs_hosts_t_labels = _gen_lists ( hosts ) <EOL> npt . assert_allclose ( exp_pars_k_labels , obs_pars_k_labels ) <EOL> npt . assert_allclose ( exp_pars_t_labels , obs_pars_t_labels ) <EOL> npt . assert_allclose ( exp_host_k_labels , obs_hosts_k_labels ) <EOL> npt . assert_allclose ( exp_host_t_labels , obs_hosts_t_labels ) <EOL> def test_dm_too_small ( self ) : <EOL> with self . assertRaises ( ValueError ) : <EOL> hommola_cospeciation ( self . h_dist_2x2 , self . p_dist_3x3 , <EOL> self . interact_3x3 ) <EOL> def test_host_interaction_not_equal ( self ) : <EOL> with self . assertRaises ( ValueError ) : <EOL> hommola_cospeciation ( self . h_dist_3x3 , self . p_dist_3x3 , <EOL> self . interact_2x3 ) <EOL> def test_par_interaction_not_equal ( self ) : <EOL> with self . assertRaises ( ValueError ) : <EOL> hommola_cospeciation ( self . h_dist_3x3 , self . p_dist_3x3 , <EOL> self . interact_3x2 ) <EOL> def test_interaction_too_few ( self ) : <EOL> with self . assertRaises ( ValueError ) : <EOL> hommola_cospeciation ( self . h_dist_3x3 , self . p_dist_3x3 , <EOL> self . interact_zero ) <EOL> def test_permutations_too_few ( self ) : <EOL> with self . assertRaises ( ValueError ) : <EOL> hommola_cospeciation ( self . h_dist_3x3 , self . p_dist_3x3 , <EOL> self . interact_3x3 , - <NUM_LIT:1> ) <EOL> if __name__ == '<STR_LIT:__main__>' : <EOL> unittest . main ( ) </s>
