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]
Exemple #3
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