GPim icon indicating copy to clipboard operation
GPim copied to clipboard

Flaky Test when seed is removed

Open crawlingcub opened this issue 3 years ago • 0 comments

The test test_boptim in test/test_boptim.py is flaky when the seed is removed. The test failed 500 out of 500 times that I ran.

Interestingly, the test always only fails for the first parameter ("ei") and passes for the other two: "poi" and "cb". I observed that this is true even if I change the order of the parameters i.e., whatever comes first fails! Error message below.

Do you know why this happens or how can this be resolved? I will be happy to raise a PR if you have any suggestions!

Thanks!

Error message:

_________________________________________________________ test_boptim[ei-/home/saikat/projects/borntobeflaky/projects/GPim/test/test_data/test_ei.npy] _________________________________________________________

acqf = 'ei', result = '/home/saikat/projects/borntobeflaky/projects/GPim/test/test_data/test_ei.npy'

    @pytest.mark.parametrize(
        "acqf, result",
        [("ei", test_img_ei),
    #     ("poi", test_img_poi),
    #     ("cb", test_img_cb)
        ])
    def test_boptim(acqf, result):
        Z_sparse = initial_seed()
        X_full = gprutils.get_full_grid(Z_sparse)
        X_sparse = gprutils.get_sparse_grid(Z_sparse)
        expected_result = np.load(result)
        boptim = boptimizer(
            X_sparse, Z_sparse, X_full,
            trial_func, acquisition_function=acqf,
            exploration_steps=20,
            use_gpu=False, verbose=1)
        boptim.run()
        #print(expected_result)
>       assert_allclose(boptim.target_func_vals[-1], expected_result)

test/test_boptim.py:60:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _  
x = array([[3.69114071e-08,            nan,            nan,            nan,
                   nan,            nan,       ... nan,            nan,
                   nan,            nan,            nan,            nan,
        7.57299443e-34]])
y = array([[3.69114071e-08,            nan,            nan,            nan,
                   nan,            nan, 3.6477... nan,            nan,
                   nan,            nan,            nan,            nan,
        7.57299443e-34]])

func = <ufunc 'isnan'>, hasval = 'nan'

    def func_assert_same_pos(x, y, func=isnan, hasval='nan'):
        """Handling nan/inf.

        Combine results of running func on x and y, checking that they are True
        at the same locations.

        """
        x_id = func(x)
        y_id = func(y)
        # We include work-arounds here to handle three types of slightly
        # pathological ndarray subclasses:
        # (1) all() on `masked` array scalars can return masked arrays, so we
        #     use != True
        # (2) __eq__ on some ndarray subclasses returns Python booleans
        #     instead of element-wise comparisons, so we cast to bool_() and
        #     use isinstance(..., bool) checks
        # (3) subclasses with bare-bones __array_function__ implementations may
        #     not implement np.all(), so favor using the .all() method
        # We are not committed to supporting such subclasses, but it's nice to
        # support them if possible.
        if bool_(x_id == y_id).all() != True:                                                                                                                                                                                msg = build_err_msg([x, y],
                                err_msg + '\nx and y %s location mismatch:'
                                % (hasval), verbose=verbose, header=header,
                                names=('x', 'y'), precision=precision)
>           raise AssertionError(msg)
E           AssertionError:
E           Not equal to tolerance rtol=1e-07, atol=0
E
E           x and y nan location mismatch:
E            x: array([[3.691141e-08,          nan,          nan,          nan,
E                            nan,          nan,          nan,          nan,
E                   1.886172e-02,          nan,          nan, 2.844261e-02,...
E            y: array([[3.691141e-08,          nan,          nan,          nan,
E                            nan,          nan, 3.647780e-03,          nan,
E                            nan, 2.844261e-02,          nan,          nan,...

../../../../anaconda3/envs/GPim/lib/python3.6/site-packages/numpy/testing/_private/utils.py:740: AssertionError

crawlingcub avatar Oct 04 '21 06:10 crawlingcub