def test_smape_is_symmetric(self): y_true = np.random.random(10) y_pred = np.random.random(10) first_error = smape(y_true, y_pred) second_error = smape(y_pred, y_true) assert first_error == second_error
def test_correct_smape_list(self): y_true = [0, 1, 2, 3, 4, 5] y_pred = [3, 2, 4, 3, 5, 7] error = smape(y_true, y_pred) expected_error = (1 + 1 / 3 + 1 / 3 + 0 + 1 / 9 + 1 / 6) * (2 / 6) assert expected_error == error
def test_correct_smape_dataframe(self): y_true = pd.DataFrame([0, 1, 2, 3, 4, 5]) y_pred = pd.DataFrame([3, 2, 4, 3, 5, 7]) error = smape(y_true, y_pred) expected_error = (1 + 1 / 3 + 1 / 3 + 0 + 1 / 9 + 1 / 6) * (2 / 6) assert expected_error == error
def test_correct_smape_array(self): y_true = np.array([0, 1, 2, 3, 4, 5]) y_pred = np.array([3, 2, 4, 3, 5, 7]) error = smape(y_true, y_pred) expected_error = (1 + 1 / 3 + 1 / 3 + 0 + 1 / 9 + 1 / 6) * (2 / 6) assert expected_error == error
def test_smape_random_arrays(self, y_true, y_pred): error = smape(y_true, y_pred) expected_error = self._correct_smape(y_true, y_pred) assert expected_error == error
def test_between_zero_and_one(self, y_true, y_pred): error = smape(y_true, y_pred) assert error >= 0 assert error <= 2
def test_infinite_values(self): y_true = np.random.random(4) y_pred = np.array([0, np.inf, 2, 3]) with pytest.raises(ValueError): smape(y_true, y_pred)
def test_nan_values(self): y_true = np.array([np.nan, 1, 2, 3]) y_pred = np.random.random(4) with pytest.raises(ValueError): smape(y_true, y_pred)
def test_wrong_vector_length(self): y_true = np.random.random(5) y_pred = np.random.random(4) with pytest.raises(ValueError): smape(y_true, y_pred)