Fix tests 100% coverage

This commit is contained in:
2023-01-06 22:53:23 +01:00
parent d854d9ddf1
commit 132d7827c3
3 changed files with 35 additions and 8 deletions

View File

@@ -227,14 +227,11 @@ class Experiment:
if not self.ignore_nan: if not self.ignore_nan:
print(res["test_score"]) print(res["test_score"])
raise ValueError("NaN in results") raise ValueError("NaN in results")
results = [] results = res["test_score"][~np.isnan(res["test_score"])]
for item in res["test_score"]:
if not np.isnan(item):
results.append(item)
else: else:
results = res["test_score"] results = res["test_score"]
self.scores.append(results) self.scores.extend(results)
self.times.append(res["fit_time"]) self.times.extend(res["fit_time"])
for result_item in res["estimator"]: for result_item in res["estimator"]:
nodes_item, leaves_item, depth_item = Models.get_complexity( nodes_item, leaves_item, depth_item = Models.get_complexity(
self.model_name, result_item self.model_name, result_item

View File

@@ -15,6 +15,19 @@ from xgboost import XGBClassifier
import sklearn import sklearn
import xgboost import xgboost
import random
class MockModel(SVC):
# Only used for testing
def predict(self, X):
if random.random() < 0.1:
return [float("NaN")] * len(X)
return super().predict(X)
def nodes_leaves(self):
return 0, 0
class Models: class Models:
@staticmethod @staticmethod
@@ -50,6 +63,7 @@ class Models:
), ),
"GBC": GradientBoostingClassifier(random_state=random_state), "GBC": GradientBoostingClassifier(random_state=random_state),
"RandomForest": RandomForestClassifier(random_state=random_state), "RandomForest": RandomForestClassifier(random_state=random_state),
"Mock": MockModel(random_state=random_state),
} }
@staticmethod @staticmethod

View File

@@ -1,4 +1,6 @@
import json import json
from io import StringIO
from unittest.mock import patch
from .TestBase import TestBase from .TestBase import TestBase
from ..Experiments import Experiment from ..Experiments import Experiment
from ..Datasets import Datasets from ..Datasets import Datasets
@@ -8,7 +10,9 @@ class ExperimentTest(TestBase):
def setUp(self): def setUp(self):
self.exp = self.build_exp() self.exp = self.build_exp()
def build_exp(self, hyperparams=False, grid=False, model="STree"): def build_exp(
self, hyperparams=False, grid=False, model="STree", ignore_nan=False
):
params = { params = {
"score_name": "accuracy", "score_name": "accuracy",
"model_name": model, "model_name": model,
@@ -21,7 +25,7 @@ class ExperimentTest(TestBase):
"title": "Test", "title": "Test",
"progress_bar": False, "progress_bar": False,
"folds": 2, "folds": 2,
"ignore_nan": False, "ignore_nan": ignore_nan,
} }
return Experiment(**params) return Experiment(**params)
@@ -157,3 +161,15 @@ class ExperimentTest(TestBase):
self.assertEqual(computed["state_names"][key], value) self.assertEqual(computed["state_names"][key], value)
for feature in expected["features"]: for feature in expected["features"]:
self.assertIn(feature, computed["features"]) self.assertIn(feature, computed["features"])
@patch("sys.stdout", new_callable=StringIO)
def test_experiment_with_nan_not_ignored(self, mock_output):
exp = self.build_exp(model="Mock")
self.assertRaises(ValueError, exp.do_experiment)
output_text = mock_output.getvalue().splitlines()
expected = "[ nan 0.8974359]"
self.assertEqual(expected, output_text[0])
def test_experiment_with_nan_ignored(self):
self.exp = self.build_exp(model="Mock", ignore_nan=True)
self.exp.do_experiment()