def test_no_predict_proba_before_fit(self): gs = GridSearch(self.estimator, self.disparity_criterion) X, _, _ = _utilities._quick_data() with pytest.raises(NotFittedError) as execInfo: gs.predict_proba(X) assert _NO_PREDICT_BEFORE_FIT == execInfo.value.args[0]
def test_Y_is_None(self, transformX, transformA, A_two_dim): gs = GridSearch(self.estimator, self.disparity_criterion) X, _, A = _utilities._quick_data() with pytest.raises(ValueError) as execInfo: gs.fit(transformX(X), None, sensitive_features=transformA(A)) assert _MESSAGE_Y_NONE == execInfo.value.args[0]
def calculate_grid(grid_limit, grid_size, disparity_moment, events): X, y, A = _utilities._quick_data() disparity_moment.load_data(X, y, sensitive_features=A) return _GridGenerator(grid_size, grid_limit, disparity_moment.pos_basis, disparity_moment.neg_basis, disparity_moment.neg_basis_present, False).grid
def test_X_is_None(self, transformY, transformA, A_two_dim): gs = GridSearch(self.estimator, self.disparity_criterion, grid_size=3) _, Y, A = _utilities._quick_data(A_two_dim) with pytest.raises(ValueError) as execInfo: gs.fit(None, transformY(Y), sensitive_features=transformA(A)) assert "Expected 2D array, got scalar array instead" in execInfo.value.args[ 0]
def test_Y_not_0_1(self, transformX, transformY, transformA, A_two_dim): gs = GridSearch(self.estimator, self.disparity_criterion) X, Y, A = _utilities._quick_data(A_two_dim) Y = Y + 1 with pytest.raises(ValueError) as execInfo: gs.fit(transformX(X), transformY(Y), sensitive_features=transformA(A)) assert _LABELS_NOT_0_1_ERROR_MESSAGE == execInfo.value.args[0]
def test_Y_ndarray_bad_columns(self, transformX, transformA, A_two_dim): gs = GridSearch(self.estimator, self.disparity_criterion) X, Y, A = _utilities._quick_data(A_two_dim) Y_two_col_ndarray = np.stack((Y, Y), -1) with pytest.raises(ValueError) as execInfo: gs.fit(transformX(X), Y_two_col_ndarray, sensitive_features=transformA(A)) assert "bad input shape" in execInfo.value.args[0]
def test_Y_df_bad_columns(self, transformX, transformA, A_two_dim): gs = GridSearch(self.estimator, self.disparity_criterion) X, Y, A = _utilities._quick_data(A_two_dim) Y_two_col_df = pd.DataFrame({"a": Y, "b": Y}) with pytest.raises(ValueError) as execInfo: gs.fit(transformX(X), Y_two_col_df, sensitive_features=transformA(A)) assert "bad input shape" in execInfo.value.args[0]
def test_X_Y_different_rows(self, transformX, transformY, transformA, A_two_dim): gs = GridSearch(self.estimator, self.disparity_criterion) X, _, A = _utilities._quick_data() Y = np.random.randint(2, size=len(A) + 1) with pytest.raises(ValueError) as execInfo: gs.fit(transformX(X), transformY(Y), sensitive_features=transformA(A)) expected_exception_message = "Found input variables with inconsistent numbers of samples" assert expected_exception_message in execInfo.value.args[0]
def test_sensitive_feature_non_binary(self, transformX, transformY, transformA, A_two_dim): gs = GridSearch(self.estimator, self.disparity_criterion) X, Y, A = _utilities._quick_data(A_two_dim) if A_two_dim: A[0][0] = 0 A[0][1] = 0 A[1][0] = 1 A[1][1] = 1 A[2][0] = 2 A[2][1] = 2 else: A[0] = 0 A[1] = 1 A[2] = 2 with pytest.raises(ValueError) as execInfo: gs.fit(transformX(X), transformY(Y), sensitive_features=transformA(A)) assert _SENSITIVE_FEATURES_NON_BINARY_ERROR_MESSAGE == execInfo.value.args[ 0]
def test_valid_inputs(self, transformX, transformY, transformA, A_two_dim): gs = GridSearch(self.estimator, self.disparity_criterion, grid_size=2) X, Y, A = _utilities._quick_data(A_two_dim) gs.fit(transformX(X), transformY(Y), sensitive_features=transformA(A)) assert len(gs.all_results) == 2