Skip to content

Commit 8e9f353

Browse files
authored
Merge pull request #244 from emilazy/push-qonlzoyrmkms
Migrate tests to pytest
2 parents e2b5d8d + 47b920c commit 8e9f353

20 files changed

+77
-92
lines changed

docs/intro.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ From a checkout you can run the unit tests with:
5353

5454
.. code-block:: shell
5555
56-
$ pip install nose
57-
$ nosetests .
56+
$ pip install pytest
57+
$ pytest
5858
5959
6060
Using conda

pylintrc

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,3 @@
22
# Without ignoring this, we get errors like:
33
# E:249,20: Module 'numpy' has no 'nan' member (no-member)
44
ignored-modules = numpy
5-
ignored-classes = nose.tools

test/expensive_verify_pretrain_optimizable.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Expensive test - not run by nose.
1+
# Expensive test - not run by pytest.
22

33
from mhcflurry import train_pan_allele_models_command
44
from mhcflurry.downloads import get_path

test/test_amino_acid.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
initialize()
33

44
from mhcflurry import amino_acid
5-
from nose.tools import eq_
65
from numpy.testing import assert_equal
76
import pandas
87

@@ -33,7 +32,7 @@ def test_index_and_one_hot_encoding():
3332
one_hot = amino_acid.fixed_vectors_encoding(
3433
index_encoding,
3534
letter_to_vector_df)
36-
eq_(one_hot.shape, (2, 4, 3))
35+
assert one_hot.shape == (2, 4, 3)
3736
assert_equal(
3837
one_hot[0],
3938
[

test/test_calibrate_percentile_ranks_command.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def run_and_check(n_jobs=0, delete=True, additional_args=[]):
4141
print("Saved predictor to", dest_models_dir)
4242

4343
new_predictor = Class1AffinityPredictor.load(dest_models_dir)
44-
assert_equal(len(new_predictor.allele_to_percent_rank_transform), 0)
44+
assert len(new_predictor.allele_to_percent_rank_transform) == 0
4545

4646
args = [
4747
"mhcflurry-calibrate-percentile-ranks",
@@ -58,7 +58,7 @@ def run_and_check(n_jobs=0, delete=True, additional_args=[]):
5858
subprocess.check_call(args)
5959

6060
new_predictor = Class1AffinityPredictor.load(dest_models_dir)
61-
assert_equal(len(new_predictor.allele_to_percent_rank_transform), 2)
61+
assert len(new_predictor.allele_to_percent_rank_transform) == 2
6262

6363
if delete:
6464
print("Deleting: %s" % dest_models_dir)

test/test_class1_affinity_predictor.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
from mhcflurry import Class1AffinityPredictor
1515

16-
from nose.tools import eq_, assert_raises
1716
from numpy import testing
1817

1918
from mhcflurry.downloads import get_path
@@ -167,7 +166,7 @@ def test_class1_affinity_predictor_a0205_memorize_training_data():
167166
predictor.calibrate_percentile_ranks(num_peptides_per_length=1000)
168167
ic50_pred = predictor.predict(df.peptide.values, allele=allele)
169168
ic50_true = df.measurement_value.values
170-
eq_(len(ic50_pred), len(ic50_true))
169+
assert len(ic50_pred) == len(ic50_true)
171170
testing.assert_allclose(
172171
numpy.log(ic50_pred), numpy.log(ic50_true), rtol=0.2, atol=0.2
173172
)
@@ -184,17 +183,17 @@ def test_class1_affinity_predictor_a0205_memorize_training_data():
184183

185184
# Test an unknown allele
186185
print("Starting unknown allele check")
187-
eq_(predictor.supported_alleles, [allele])
186+
assert predictor.supported_alleles == [allele]
188187
ic50_pred = predictor.predict(df.peptide.values, allele="HLA-A*02:01", throw=False)
189188
assert numpy.isnan(ic50_pred).all()
190189

191-
assert_raises(
190+
testing.assert_raises(
192191
ValueError, predictor.predict, df.peptide.values, allele="HLA-A*02:01"
193192
)
194193

195-
eq_(predictor.supported_alleles, [allele])
196-
assert_raises(ValueError, predictor.predict, ["AAAAA"], allele=allele) # too short
197-
assert_raises(
194+
assert predictor.supported_alleles == [allele]
195+
testing.assert_raises(ValueError, predictor.predict, ["AAAAA"], allele=allele) # too short
196+
testing.assert_raises(
198197
ValueError,
199198
predictor.predict,
200199
["AAAAAAAAAAAAAAAAAAAA"], # too long

test/test_class1_neural_network.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@
66

77
import pytest
88

9-
from nose.tools import eq_, assert_less, assert_greater, assert_almost_equal
10-
119
import pandas
1210

1311
from mhcflurry.class1_neural_network import Class1NeuralNetwork
@@ -53,7 +51,7 @@ def test_class1_neural_network_a0205_training_accuracy(setup_module):
5351
predictor.fit(df.peptide.values, df.measurement_value.values)
5452
ic50_pred = predictor.predict(df.peptide.values)
5553
ic50_true = df.measurement_value.values
56-
eq_(len(ic50_pred), len(ic50_true))
54+
assert len(ic50_pred) == len(ic50_true)
5755
testing.assert_allclose(
5856
numpy.log(ic50_pred), numpy.log(ic50_true), rtol=0.2, atol=0.2
5957
)
@@ -75,7 +73,7 @@ def test_class1_neural_network_a0205_training_accuracy(setup_module):
7573
)
7674
predictor2 = Class1NeuralNetwork(**hyperparameters2)
7775
predictor2.fit(df.peptide.values, df.measurement_value.values, verbose=0)
78-
eq_(predictor.network().to_json(), predictor2.network().to_json())
76+
assert predictor.network().to_json() == predictor2.network().to_json()
7977

8078

8179
def test_inequalities(setup_module):
@@ -146,8 +144,8 @@ def test_inequalities(setup_module):
146144

147145
# Binders should be stronger
148146
for pred in ["prediction1", "prediction2"]:
149-
assert_less(df.loc[df.value < 1000, pred].mean(), 500)
150-
assert_greater(df.loc[df.value >= 1000, pred].mean(), 500)
147+
assert df.loc[df.value < 1000, pred].mean() < 500
148+
assert df.loc[df.value >= 1000, pred].mean() > 500
151149

152150
# For the binders, the (=) on the weak-binding measurement (100) in
153151
# inequality1 should make the prediction weaker, whereas for inequality2

test/test_class1_presentation_predictor.py

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import pickle
77

88
from numpy.testing import assert_, assert_equal, assert_allclose, assert_array_equal
9-
from nose.tools import assert_greater, assert_less
109
import pytest
1110
import numpy
1211

@@ -108,17 +107,17 @@ def add_prediction_cols(test_df, predictor):
108107

109108
print("AUC", score1, score2)
110109

111-
assert_greater(score1, 0.8)
112-
assert_greater(score2, 0.8)
110+
assert score1 > 0.8
111+
assert score2 > 0.8
113112

114113
score1 = roc_auc_score(
115114
test_df.hit.values, -test_df.prediction1_percentile.values)
116115
score2 = roc_auc_score(
117116
test_df.hit.values, -test_df.prediction2_percentile.values)
118117
print("AUC (using percentiles)", score1, score2)
119118

120-
assert_greater(score1, 0.8)
121-
assert_greater(score2, 0.8)
119+
assert score1 > 0.8
120+
assert score2 > 0.8
122121

123122
# Test saving, loading, pickling
124123
models_dir = tempfile.mkdtemp("_models")
@@ -161,7 +160,7 @@ def test_downloaded_predictor_small(predictors):
161160
peptide_lengths=[9],
162161
result="best")
163162
print(scan_results)
164-
assert_equal(len(scan_results), 6)
163+
assert len(scan_results) == 6
165164

166165
scan_results = presentation_predictor.predict_sequences(
167166
sequences=[
@@ -176,7 +175,7 @@ def test_downloaded_predictor_small(predictors):
176175
peptide_lengths=[8, 9],
177176
result="best")
178177
print(scan_results)
179-
assert_equal(len(scan_results), 6)
178+
assert len(scan_results) == 6
180179

181180
scan_results = presentation_predictor.predict_sequences(
182181
sequences=[
@@ -191,7 +190,7 @@ def test_downloaded_predictor_small(predictors):
191190
peptide_lengths=[9],
192191
result="all")
193192
print(scan_results)
194-
assert_equal(len(scan_results), 6)
193+
assert len(scan_results) == 6
195194

196195
scan_results = presentation_predictor.predict_sequences(
197196
sequences=[
@@ -206,7 +205,7 @@ def test_downloaded_predictor_small(predictors):
206205
peptide_lengths=[8, 9],
207206
result="all")
208207
print(scan_results)
209-
assert_equal(len(scan_results), 18)
208+
assert len(scan_results) == 18
210209

211210
scan_results = presentation_predictor.predict_sequences(
212211
sequences=[
@@ -221,7 +220,7 @@ def test_downloaded_predictor_small(predictors):
221220
peptide_lengths=[10],
222221
result="all")
223222
print(scan_results)
224-
assert_equal(len(scan_results), 0)
223+
assert len(scan_results) == 0
225224

226225

227226
def test_downloaded_predictor(predictors):
@@ -244,7 +243,7 @@ def test_downloaded_predictor(predictors):
244243
])
245244
print(scan_results1)
246245

247-
assert_equal(len(scan_results1), 3), str(scan_results1)
246+
assert len(scan_results1) == 3, str(scan_results1)
248247
assert (scan_results1.affinity < 200).all(), str(scan_results1)
249248
assert (scan_results1.presentation_score > 0.7).all(), str(scan_results1)
250249

@@ -311,7 +310,7 @@ def test_downloaded_predictor(predictors):
311310
print(scan_results4)
312311

313312
assert len(scan_results4) > 200, len(scan_results4)
314-
assert_less(scan_results4.iloc[0].affinity, 100)
313+
assert scan_results4.iloc[0].affinity < 100
315314

316315
sequences = {
317316
"seq1":
@@ -345,7 +344,7 @@ def test_downloaded_predictor(predictors):
345344
],
346345
})
347346
print(scan_results5)
348-
assert_equal(len(scan_results5), len(scan_results4) * 2)
347+
assert len(scan_results5) == len(scan_results4) * 2
349348

350349
# Test case-insensitive.
351350
scan_results6 = presentation_predictor.predict_sequences(

test/test_class1_processing_neural_network.py

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

88
from sklearn.metrics import roc_auc_score
99

10-
from nose.tools import eq_, assert_less, assert_greater, assert_almost_equal
11-
1210
import pandas
1311
import pytest
1412

@@ -233,8 +231,8 @@ def is_hit(n_flank, c_flank, peptide):
233231
print("Test auc", test_auc)
234232

235233
if do_assertions:
236-
assert_greater(train_auc, 0.9)
237-
assert_greater(test_auc, 0.85)
234+
assert train_auc > 0.9
235+
assert test_auc > 0.85
238236

239237
return network
240238

test/test_custom_loss.py

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
from . import initialize
22
initialize()
33

4-
from nose.tools import eq_, assert_less, assert_greater, assert_almost_equal
5-
64
import numpy
75
import tensorflow as tf
86
import pytest
@@ -40,39 +38,39 @@ def test_mse_with_inequalities(loss_obj=CUSTOM_LOSSES['mse_with_inequalities']):
4038
print(adjusted_y)
4139
loss0 = evaluate_loss(loss_obj.loss, adjusted_y, y_values)
4240
print(loss0)
43-
eq_(loss0, 0.0)
41+
assert loss0 == 0.0
4442

4543
adjusted_y = loss_obj.encode_y(y_values, [">", ">", ">", ">"])
4644
loss0 = evaluate_loss(loss_obj.loss, adjusted_y, y_values)
47-
eq_(loss0, 0.0)
45+
assert loss0 == 0.0
4846

4947
adjusted_y = loss_obj.encode_y(y_values, ["<", "<", "<", "<"])
5048
loss0 = evaluate_loss(loss_obj.loss, adjusted_y, y_values)
51-
eq_(loss0, 0.0)
49+
assert loss0 == 0.0
5250

5351
adjusted_y = loss_obj.encode_y(y_values, ["=", "<", "=", ">"])
5452
loss0 = evaluate_loss(loss_obj.loss, adjusted_y, y_values)
55-
eq_(loss0, 0.0)
53+
assert loss0 == 0.0
5654

5755
adjusted_y = loss_obj.encode_y(y_values, ["=", "<", "=", ">"])
5856
loss0 = evaluate_loss(loss_obj.loss, adjusted_y, [0.0, 0.4, 0.8, 1.0])
59-
eq_(loss0, 0.0)
57+
assert loss0 == 0.0
6058

6159
adjusted_y = loss_obj.encode_y(y_values, [">", "<", ">", ">"])
6260
loss0 = evaluate_loss(loss_obj.loss, adjusted_y, [0.1, 0.4, 0.9, 1.0])
63-
eq_(loss0, 0.0)
61+
assert loss0 == 0.0
6462

6563
adjusted_y = loss_obj.encode_y(y_values, [">", "<", ">", ">"])
6664
loss0 = evaluate_loss(loss_obj.loss, adjusted_y, [0.1, 0.6, 0.9, 1.0])
67-
assert_greater(loss0, 0.0)
65+
assert loss0 > 0.0
6866

6967
adjusted_y = loss_obj.encode_y(y_values, ["=", "<", ">", ">"])
7068
loss0 = evaluate_loss(loss_obj.loss, adjusted_y, [0.1, 0.6, 0.9, 1.0])
71-
assert_almost_equal(loss0, 0.02 / 4)
69+
assert loss0 == pytest.approx(0.02 / 4, abs=1e-7)
7270

7371
adjusted_y = loss_obj.encode_y(y_values, ["=", "<", "=", ">"])
7472
loss0 = evaluate_loss(loss_obj.loss, adjusted_y, [0.1, 0.6, 0.9, 1.0])
75-
assert_almost_equal(loss0, 0.03 / 4)
73+
assert loss0 == pytest.approx(0.03 / 4, abs=1e-7)
7674

7775

7876
def test_mse_with_inequalities_and_multiple_outputs():
@@ -91,7 +89,7 @@ def test_mse_with_inequalities_and_multiple_outputs():
9189
[3000, 0.8],
9290
[4000, 1.0],
9391
])
94-
assert_almost_equal(loss0, 0.0)
92+
assert loss0 == pytest.approx(0.0, abs=1e-7)
9593

9694
y_values = [0.0, 0.5, 0.8, 1.0]
9795
adjusted_y = loss_obj.encode_y(
@@ -105,7 +103,7 @@ def test_mse_with_inequalities_and_multiple_outputs():
105103
[3000, 0.8],
106104
[1.0, 4000],
107105
])
108-
assert_almost_equal(loss0, 0.02 / 4)
106+
assert loss0 == pytest.approx(0.02 / 4, abs=1e-7)
109107

110108
y_values = [0.0, 0.5, 0.8, 1.0]
111109
adjusted_y = loss_obj.encode_y(
@@ -119,7 +117,7 @@ def test_mse_with_inequalities_and_multiple_outputs():
119117
[3000, 0.8],
120118
[1.0, 4000],
121119
])
122-
assert_almost_equal(loss0, 0.01 / 4)
120+
assert loss0 == pytest.approx(0.01 / 4, abs=1e-7)
123121

124122
y_values = [0.0, 0.5, 0.8, 1.0]
125123
adjusted_y = loss_obj.encode_y(
@@ -133,7 +131,7 @@ def test_mse_with_inequalities_and_multiple_outputs():
133131
[3000, 0.8],
134132
[1.0, 4000],
135133
])
136-
assert_almost_equal(loss0, 0.02 / 4)
134+
assert loss0 == pytest.approx(0.02 / 4, abs=1e-7)
137135

138136

139137
def test_multiallelic_mass_spec_loss():

test/test_hyperparameters.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ def test_all_combinations_of_hyperparameters():
1414
Class1NeuralNetwork
1515
.hyperparameter_defaults
1616
.models_grid(**combinations_dict))
17-
assert_equal(len(results), 4)
17+
assert len(results) == 4
1818

1919
if __name__ == "__main__":
2020
test_all_combinations_of_hyperparameters()

test/test_predict_command.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def test_csv():
5050
for delete in deletes:
5151
os.unlink(delete)
5252

53-
assert_equal(result.shape, (3, 8))
53+
assert result.shape == (3, 8)
5454

5555

5656
def test_no_csv():
@@ -75,7 +75,7 @@ def test_no_csv():
7575
os.unlink(delete)
7676

7777
print(result)
78-
assert_equal(len(result), 6)
78+
assert len(result) == 6
7979
sub_result1 = result.loc[result.peptide == "SIINFEKL"].set_index("allele")
8080
print(sub_result1)
8181
assert (

0 commit comments

Comments
 (0)