Skip to content

Commit e1f4373

Browse files
authored
migrate from unittest to pytest (#52)
1 parent ee94c67 commit e1f4373

File tree

7 files changed

+100
-123
lines changed

7 files changed

+100
-123
lines changed

pyproject.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,8 @@ exclude_lines = [
8787
]
8888
ignore_errors = true
8989
omit = ["spint/tests/*", "doc/conf.py"]
90+
91+
[tool.pytest.ini_options]
92+
filterwarnings = [
93+
"ignore:divide by zero encountered",
94+
]

spint/tests/test_accessibility.py

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,12 @@
88

99
__author__ = "Lenka Hasova haska.lenka@gmail.com"
1010

11-
import unittest
12-
1311
import numpy as np
1412

1513
from ..flow_accessibility import Accessibility, _generate_dummy_flows
1614

1715

18-
class AccessibilityTest(unittest.TestCase):
16+
class TestAccessibility:
1917
def test_accessibility(self):
2018
flow = _generate_dummy_flows()
2119
flow = flow.loc[
@@ -38,7 +36,3 @@ def test_accessibility(self):
3836
)
3937

4038
np.testing.assert_array_equal(flow["results_all=False"], flow["acc_uni"])
41-
42-
43-
if __name__ == "__main__":
44-
unittest.main()

spint/tests/test_count_model.py

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,19 @@
99

1010
__author__ = "Taylor Oshan tayoshan@gmail.com"
1111

12-
import unittest
1312

1413
import libpysal
1514
import numpy as np
15+
import pytest
1616
from spglm.family import Poisson
1717

1818
from ..count_model import CountModel
1919

2020

21-
class TestCountModel(unittest.TestCase):
21+
class TestCountModel:
2222
"""Tests CountModel class"""
2323

24-
def setUp(self):
24+
def setup_method(self):
2525
db = libpysal.io.open(libpysal.examples.get_path("columbus.dbf"), "r")
2626
y = np.array(db.by_col("HOVAL"))
2727
y = np.reshape(y, (49, 1))
@@ -37,11 +37,11 @@ def test_PoissonGLM(self):
3737
np.testing.assert_allclose(
3838
results.params, [3.92159085, 0.01183491, -0.01371397], atol=1.0e-8
3939
)
40-
self.assertIsInstance(results.family, Poisson)
41-
self.assertEqual(results.n, 49)
42-
self.assertEqual(results.k, 3)
43-
self.assertEqual(results.df_model, 2)
44-
self.assertEqual(results.df_resid, 46)
40+
assert isinstance(results.family, Poisson)
41+
assert results.n == 49
42+
assert results.k == 3
43+
assert results.df_model == 2
44+
assert results.df_resid == 46
4545
np.testing.assert_allclose(
4646
results.yhat,
4747
[
@@ -167,12 +167,8 @@ def test_PoissonGLM(self):
167167
-10.28910294,
168168
],
169169
)
170-
self.assertAlmostEqual(results.deviance, 230.46013824817649)
171-
self.assertAlmostEqual(results.llf, -247.42592089969378)
172-
self.assertAlmostEqual(results.AIC, 500.85184179938756)
173-
self.assertAlmostEqual(results.D2, 0.388656011675)
174-
self.assertAlmostEqual(results.adj_D2, 0.36207583826952761)
175-
176-
177-
if __name__ == "__main__":
178-
unittest.main()
170+
assert pytest.approx(results.deviance) == 230.46013824817649
171+
assert pytest.approx(results.llf) == -247.42592089969378
172+
assert pytest.approx(results.AIC) == 500.85184179938756
173+
assert pytest.approx(results.D2) == 0.388656011675
174+
assert pytest.approx(results.adj_D2) == 0.36207583826952761

spint/tests/test_dispersion.py

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
__author__ = "Taylor Oshan tayoshan@gmail.com"
1010

11-
import unittest
1211

1312
import libpysal
1413
import numpy as np
@@ -18,8 +17,8 @@
1817
from ..dispersion import alpha_disp, phi_disp
1918

2019

21-
class TestDispersion(unittest.TestCase):
22-
def setUp(self):
20+
class TestDispersion:
21+
def setup_method(self):
2322
db = libpysal.io.open(libpysal.examples.get_path("columbus.dbf"), "r")
2423
y = np.array(db.by_col("HOVAL"))
2524
y = np.reshape(y, (49, 1))
@@ -44,7 +43,3 @@ def test_Dispersion(self):
4443
np.testing.assert_allclose(
4544
alpha2, [0.10690133, 2.24709978, 0.01231683], atol=1.0e-8
4645
)
47-
48-
49-
if __name__ == "__main__":
50-
unittest.main()

spint/tests/test_gravity.py

Lines changed: 66 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,17 @@
1212
"""
1313

1414
import math
15-
import unittest
1615

1716
import numpy as np
17+
import pytest
1818

1919
from ..gravity import Attraction, BaseGravity, Doubly, Gravity, Production
2020

2121

22-
class TestGravity(unittest.TestCase):
22+
class TestGravity:
2323
"""Tests for gravity-type models"""
2424

25-
def setUp(self):
25+
def setup_method(self):
2626
self.f = np.array(
2727
[
2828
1131,
@@ -490,11 +490,11 @@ def test_BaseGravity_exp(self):
490490
dij = np.array(self.dij).reshape((-1, 1))
491491
model = BaseGravity(f, dij, "exp", constant=False)
492492
np.testing.assert_allclose(model.params, [0.01641585], atol=0.0001)
493-
self.assertAlmostEqual(model.AIC, 957622.28429746185, delta=0.0001)
493+
assert pytest.approx(model.AIC, rel=0.0001) == 957622.28429746185
494494
np.testing.assert_allclose(model.cov_params, [[1.92096665e-10]])
495-
self.assertAlmostEqual(model.deviance, 1087408.9707170483, delta=0.0001)
496-
self.assertAlmostEqual(model.llf, -478810.14214873099, delta=0.0001)
497-
self.assertAlmostEqual(model.llnull, -88037.0499629, delta=0.0001)
495+
assert pytest.approx(model.deviance, rel=0.0001) == 1087408.9707170483
496+
assert pytest.approx(model.llf, rel=0.0001) == -478810.14214873099
497+
assert pytest.approx(model.llnull, rel=0.0001) == -88037.0499629
498498
np.testing.assert_allclose(model.pvalues, [0.0])
499499
np.testing.assert_allclose(model.std_err, [1.38598941e-05])
500500
np.testing.assert_allclose(model.tvalues, [1184.41355888])
@@ -581,11 +581,11 @@ def test_BaseGravity_pow(self):
581581
dij = np.array(self.dij).reshape((-1, 1))
582582
model = BaseGravity(f, dij, "pow", constant=False)
583583
np.testing.assert_allclose(model.params, [1.27223738], atol=0.0001)
584-
self.assertAlmostEqual(model.AIC, 377298.04716333596, delta=0.0001)
584+
assert pytest.approx(model.AIC, rel=0.0001) == 377298.04716333596
585585
np.testing.assert_allclose(model.cov_params, [[4.31955426e-07]])
586-
self.assertAlmostEqual(model.deviance, 409811.34329065739, delta=0.0001)
587-
self.assertAlmostEqual(model.llf, -188648.02358166798, delta=0.0001)
588-
self.assertAlmostEqual(model.llnull, -88037.0499629, delta=0.0001)
586+
assert pytest.approx(model.deviance, rel=0.0001) == 409811.34329065739
587+
assert pytest.approx(model.llf, rel=0.0001) == -188648.02358166798
588+
assert pytest.approx(model.llnull, rel=0.0001) == -88037.0499629
589589
np.testing.assert_allclose(model.pvalues, [0.0])
590590
np.testing.assert_allclose(model.std_err, [0.00065723], atol=0.000001)
591591
np.testing.assert_allclose(model.tvalues, [1935.74740017])
@@ -672,11 +672,11 @@ def test_QuasiPoisson(self):
672672
dij = np.array(self.dij).reshape((-1, 1))
673673
model = BaseGravity(f, dij, "exp", constant=False, Quasi=True)
674674
np.testing.assert_allclose(model.params, [0.01641585], atol=0.0001)
675-
self.assertTrue(math.isnan(model.AIC))
675+
assert math.isnan(model.AIC)
676676
np.testing.assert_allclose(model.cov_params, [[0.00079749]], atol=1.0e-8)
677-
self.assertAlmostEqual(model.deviance, 1087408.9707170483, delta=0.0001)
678-
self.assertTrue(np.isnan(model.llf))
679-
self.assertTrue(np.isnan(model.llnull))
677+
assert pytest.approx(model.deviance, rel=0.0001) == 1087408.9707170483
678+
assert np.isnan(model.llf)
679+
assert np.isnan(model.llnull)
680680
np.testing.assert_allclose(model.pvalues, [0.56103881])
681681
np.testing.assert_allclose(model.std_err, [0.02823993], atol=1.0e-8)
682682
np.testing.assert_allclose(model.tvalues, [0.58129922])
@@ -764,7 +764,7 @@ def test_Gravity(self):
764764
model.params,
765765
[-7.95447436e00, 8.63867812e-01, 8.80474585e-01, -6.20544765e-03],
766766
)
767-
self.assertAlmostEqual(model.AIC, 20395.085388908723, delta=0.0001)
767+
assert pytest.approx(model.AIC, rel=0.0001) == 20395.085388908723
768768
np.testing.assert_allclose(
769769
model.cov_params,
770770
[
@@ -774,9 +774,9 @@ def test_Gravity(self):
774774
[-2.40317578e-06, 1.16544737e-07, 9.94368232e-08, 2.68830005e-09],
775775
],
776776
)
777-
self.assertAlmostEqual(model.deviance, 19806.408696637576, delta=0.0001)
778-
self.assertAlmostEqual(model.llf, -10193.542694454361, delta=0.0001)
779-
self.assertAlmostEqual(model.llnull, -88037.0499629, delta=0.0001)
777+
assert pytest.approx(model.deviance, rel=0.0001) == 19806.408696637576
778+
assert pytest.approx(model.llf, rel=0.0001) == -10193.542694454361
779+
assert pytest.approx(model.llnull, rel=0.0001) == -88037.0499629
780780
np.testing.assert_allclose(model.pvalues, [0.0, 0.0, 0.0, 0.0])
781781
np.testing.assert_allclose(
782782
model.std_err,
@@ -862,19 +862,19 @@ def test_Gravity(self):
862862
199.99352826,
863863
],
864864
)
865-
self.assertAlmostEqual(model.D2, 0.88713874099960177)
866-
self.assertAlmostEqual(model.adj_D2, 0.88215956780840776)
867-
self.assertAlmostEqual(model.SSI, 0.72706171189789603)
868-
self.assertAlmostEqual(model.pseudoR2, 0.88421303645743465)
869-
self.assertAlmostEqual(model.adj_pseudoR2, 0.88416760104130376)
870-
self.assertAlmostEqual(model.SRMSE, 0.62063116008447083)
865+
assert pytest.approx(model.D2) == 0.88713874099960177
866+
assert pytest.approx(model.adj_D2) == 0.88215956780840776
867+
assert pytest.approx(model.SSI) == 0.72706171189789603
868+
assert pytest.approx(model.pseudoR2) == 0.88421303645743465
869+
assert pytest.approx(model.adj_pseudoR2) == 0.88416760104130376
870+
assert pytest.approx(model.SRMSE) == 0.62063116008447083
871871

872872
def test_local_Gravity(self):
873873
model = Gravity(self.f, self.o_var, self.d_var, self.dij, "exp")
874874
local = model.local(loc_index=self.o, locs=np.unique(self.o))
875-
self.assertEqual(
876-
list(local.keys()).sort(),
877-
[
875+
assert (
876+
list(local.keys()).sort()
877+
== [
878878
"stde0",
879879
"stde1",
880880
"stde2",
@@ -895,7 +895,7 @@ def test_local_Gravity(self):
895895
"D2",
896896
"pseudoR2",
897897
"param2",
898-
].sort(),
898+
].sort()
899899
)
900900

901901
def test_Production(self):
@@ -917,7 +917,7 @@ def test_Production(self):
917917
],
918918
atol=0.0001,
919919
)
920-
self.assertAlmostEqual(model.AIC, 15882.651018068489, delta=0.0001)
920+
assert pytest.approx(model.AIC, rel=0.0001) == 15882.651018068489
921921
np.testing.assert_allclose(
922922
model.cov_params,
923923
[
@@ -1066,9 +1066,9 @@ def test_Production(self):
10661066
],
10671067
],
10681068
)
1069-
self.assertAlmostEqual(model.deviance, 15279.974241770311, delta=0.0001)
1070-
self.assertAlmostEqual(model.llf, -7930.3255090342445, delta=0.0001)
1071-
self.assertAlmostEqual(model.llnull, -88037.0499629, delta=0.0001)
1069+
assert pytest.approx(model.deviance, rel=0.0001) == 15279.974241770311
1070+
assert pytest.approx(model.llf, rel=0.0001) == -7930.3255090342445
1071+
assert pytest.approx(model.llnull, rel=0.0001) == -88037.0499629
10721072
np.testing.assert_allclose(
10731073
model.pvalues,
10741074
[
@@ -1194,19 +1194,19 @@ def test_Production(self):
11941194
6.40968342e02,
11951195
],
11961196
)
1197-
self.assertAlmostEqual(model.D2, 0.912931356874)
1198-
self.assertAlmostEqual(model.adj_D2, 0.89865780882)
1199-
self.assertAlmostEqual(model.SSI, 0.740619203383)
1200-
self.assertAlmostEqual(model.pseudoR2, 0.909920590111)
1201-
self.assertAlmostEqual(model.adj_pseudoR2, 0.909795642717)
1202-
self.assertAlmostEqual(model.SRMSE, 0.46622685091043831)
1197+
assert pytest.approx(model.D2) == 0.912931356874
1198+
assert pytest.approx(model.adj_D2) == 0.89865780882
1199+
assert pytest.approx(model.SSI) == 0.740619203383
1200+
assert pytest.approx(model.pseudoR2) == 0.909920590111
1201+
assert pytest.approx(model.adj_pseudoR2) == 0.909795642717
1202+
assert pytest.approx(model.SRMSE) == 0.46622685091043831
12031203

12041204
def test_local_Production(self):
12051205
model = Production(self.f, self.o, self.d_var, self.dij, "exp")
12061206
local = model.local(locs=np.unique(self.o))
1207-
self.assertEqual(
1208-
list(local.keys()).sort(),
1209-
[
1207+
assert (
1208+
list(local.keys()).sort()
1209+
== [
12101210
"stde0",
12111211
"stde1",
12121212
"stde2",
@@ -1227,7 +1227,7 @@ def test_local_Production(self):
12271227
"D2",
12281228
"pseudoR2",
12291229
"param2",
1230-
].sort(),
1230+
].sort()
12311231
)
12321232

12331233
def test_Attraction(self):
@@ -1249,7 +1249,7 @@ def test_Attraction(self):
12491249
],
12501250
atol=0.001,
12511251
)
1252-
self.assertAlmostEqual(model.AIC, 16275.899321893821, delta=0.0001)
1252+
assert pytest.approx(model.AIC, rel=0.0001) == 16275.899321893821
12531253
np.testing.assert_allclose(
12541254
model.cov_params,
12551255
[
@@ -1398,9 +1398,9 @@ def test_Attraction(self):
13981398
],
13991399
],
14001400
)
1401-
self.assertAlmostEqual(model.deviance, 15673.222613627502, delta=0.0001)
1402-
self.assertAlmostEqual(model.llf, -8126.9496609469106, delta=0.0001)
1403-
self.assertAlmostEqual(model.llnull, -88037.0499629, delta=0.0001)
1401+
assert pytest.approx(model.deviance, rel=0.0001) == 15673.222613627502
1402+
assert pytest.approx(model.llf, rel=0.0001) == -8126.9496609469106
1403+
assert pytest.approx(model.llnull, rel=0.0001) == -88037.0499629
14041404
np.testing.assert_allclose(
14051405
model.pvalues,
14061406
[
@@ -1526,19 +1526,19 @@ def test_Attraction(self):
15261526
3.66824277e02,
15271527
],
15281528
)
1529-
self.assertAlmostEqual(model.D2, 0.910690541438)
1530-
self.assertAlmostEqual(model.adj_D2, 0.896049646592)
1531-
self.assertAlmostEqual(model.SSI, 0.750634498293)
1532-
self.assertAlmostEqual(model.pseudoR2, 0.90768716507)
1533-
self.assertAlmostEqual(model.adj_pseudoR2, 0.907562217676)
1534-
self.assertAlmostEqual(model.SRMSE, 0.59478477816884223)
1529+
assert pytest.approx(model.D2) == 0.910690541438
1530+
assert pytest.approx(model.adj_D2) == 0.896049646592
1531+
assert pytest.approx(model.SSI) == 0.750634498293
1532+
assert pytest.approx(model.pseudoR2) == 0.90768716507
1533+
assert pytest.approx(model.adj_pseudoR2) == 0.907562217676
1534+
assert pytest.approx(model.SRMSE) == 0.59478477816884223
15351535

15361536
def test_local_Attraction(self):
15371537
model = Attraction(self.f, self.d, self.o_var, self.dij, "exp")
15381538
local = model.local(locs=np.unique(self.d))
1539-
self.assertEqual(
1540-
list(local.keys()).sort(),
1541-
[
1539+
assert (
1540+
list(local.keys()).sort()
1541+
== [
15421542
"stde0",
15431543
"stde1",
15441544
"stde2",
@@ -1559,7 +1559,7 @@ def test_local_Attraction(self):
15591559
"D2",
15601560
"pseudoR2",
15611561
"param2",
1562-
].sort(),
1562+
].sort()
15631563
)
15641564

15651565
def test_Doubly(self):
@@ -1953,9 +1953,9 @@ def test_Doubly(self):
19531953
],
19541954
],
19551955
)
1956-
self.assertAlmostEqual(model.deviance, 9360.482092561484, delta=0.0001)
1957-
self.assertAlmostEqual(model.llf, -4970.5795707251054, delta=0.0001)
1958-
self.assertAlmostEqual(model.llnull, -88037.0499629, delta=0.0001)
1956+
assert pytest.approx(model.deviance, rel=0.0001) == 9360.482092561484
1957+
assert pytest.approx(model.llf, rel=0.0001) == -4970.5795707251054
1958+
assert pytest.approx(model.llnull, rel=0.0001) == -88037.0499629
19591959
np.testing.assert_allclose(
19601960
model.pvalues,
19611961
[
@@ -2102,13 +2102,9 @@ def test_Doubly(self):
21022102
1.04848355e03,
21032103
],
21042104
)
2105-
self.assertAlmostEqual(model.D2, 0.946661920897)
2106-
self.assertAlmostEqual(model.adj_D2, 0.929870303401)
2107-
self.assertAlmostEqual(model.SSI, 0.811852110904)
2108-
self.assertAlmostEqual(model.pseudoR2, 0.943539912198)
2109-
self.assertAlmostEqual(model.adj_pseudoR2, 0.943335452826)
2110-
self.assertAlmostEqual(model.SRMSE, 0.37925654532618808)
2111-
2112-
2113-
if __name__ == "__main__":
2114-
unittest.main()
2105+
assert pytest.approx(model.D2) == 0.946661920897
2106+
assert pytest.approx(model.adj_D2) == 0.929870303401
2107+
assert pytest.approx(model.SSI) == 0.811852110904
2108+
assert pytest.approx(model.pseudoR2) == 0.943539912198
2109+
assert pytest.approx(model.adj_pseudoR2) == 0.943335452826
2110+
assert pytest.approx(model.SRMSE) == 0.37925654532618808

0 commit comments

Comments
 (0)