1import unittest 2import libpysal as ps 3from .. import rank 4import numpy as np 5 6 7class Theta_Tester(unittest.TestCase): 8 def setUp(self): 9 f = ps.io.open(ps.examples.get_path("mexico.csv")) 10 vnames = ["pcgdp%d" % dec for dec in range(1940, 2010, 10)] 11 self.y = np.transpose(np.array([f.by_col[v] for v in vnames])) 12 self.regime = np.array(f.by_col["esquivel99"]) 13 14 def test_Theta(self): 15 np.random.seed(10) 16 t = rank.Theta(self.y, self.regime, 999) 17 k = self.y.shape[1] 18 obs = t.theta.tolist() 19 exp = [[0.41538462, 0.28070175, 0.61363636, 0.62222222, 0.33333333, 0.47222222]] 20 for i in range(k - 1): 21 self.assertAlmostEqual(exp[0][i], obs[0][i]) 22 obs = t.pvalue_left.tolist() 23 exp = [0.307, 0.077, 0.823, 0.552, 0.045, 0.735] 24 for i in range(k - 1): 25 self.assertAlmostEqual(exp[i], obs[i]) 26 obs = t.total.tolist() 27 exp = [130.0, 114.0, 88.0, 90.0, 90.0, 72.0] 28 for i in range(k - 1): 29 self.assertAlmostEqual(exp[i], obs[i]) 30 self.assertEqual(t.max_total, 512) 31 32 33class SpatialTau_Tester(unittest.TestCase): 34 def setUp(self): 35 f = ps.io.open(ps.examples.get_path("mexico.csv")) 36 vnames = ["pcgdp%d" % dec for dec in range(1940, 2010, 10)] 37 self.y = np.transpose(np.array([f.by_col[v] for v in vnames])) 38 regime = np.array(f.by_col["esquivel99"]) 39 self.w = ps.weights.block_weights(regime) 40 41 def test_SpatialTau(self): 42 np.random.seed(12345) 43 k = self.y.shape[1] 44 obs = [ 45 rank.SpatialTau(self.y[:, i], self.y[:, i + 1], self.w, 99) 46 for i in range(k - 1) 47 ] 48 tau_s = [0.397, 0.492, 0.651, 0.714, 0.683, 0.810] 49 ev_tau_s = [0.659, 0.706, 0.772, 0.752, 0.705, 0.819] 50 p_vals = [0.010, 0.010, 0.020, 0.210, 0.270, 0.280] 51 for i in range(k - 1): 52 self.assertAlmostEqual(tau_s[i], obs[i].tau_spatial, 3) 53 self.assertAlmostEqual(ev_tau_s[i], obs[i].taus.mean(), 3) 54 self.assertAlmostEqual(p_vals[i], obs[i].tau_spatial_psim, 3) 55 st12 = rank.SpatialTau(self.y[:, 1], self.y[:, 2], self.w) 56 st21 = rank.SpatialTau(self.y[:, 2], self.y[:, 1], self.w) 57 self.assertEqual(st12.tau_spatial, st21.tau_spatial) 58 59 60class Tau_Tester(unittest.TestCase): 61 def test_Tau(self): 62 x1 = [12, 2, 1, 12, 2] 63 x2 = [1, 4, 7, 1, 0] 64 kt = rank.Tau(x1, x2) 65 self.assertAlmostEqual(kt.tau, -0.47140452079103173, 5) 66 self.assertAlmostEqual(kt.tau_p, 0.24821309157521476, 5) 67 x1 = [0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1] 68 x2 = [1, 4, 7, 1, 1, 3, 1, 6, 7, 7, 3, 6, 2, 7, 2, 8] 69 kt12 = rank.Tau(x1, x2) 70 kt21 = rank.Tau(x2, x1) 71 self.assertEqual(kt12.tau, kt21.tau) 72 self.assertAlmostEqual(kt12.tau, 0.15494494670022804) 73 74 75suite = unittest.TestSuite() 76test_classes = [Theta_Tester, SpatialTau_Tester, Tau_Tester] 77for i in test_classes: 78 a = unittest.TestLoader().loadTestsFromTestCase(i) 79 suite.addTest(a) 80 81if __name__ == "__main__": 82 runner = unittest.TextTestRunner() 83 runner.run(suite) 84