def test_data_type_exception(self, np_2x1_with_label,
                                 xgb_regressor_1_split_1_tree):
        """Test an exception is raised if data is not a np.ndarray or pd.DataFrame object."""

        confo_model = XGBSklearnLeafNodeScaledConformalPredictor(
            xgb_regressor_1_split_1_tree)

        with pytest.raises(
                TypeError,
                match=re.escape(
                    f"data is not in expected types {[np.ndarray, pd.DataFrame]}, got {float}"
                ),
        ):

            confo_model._generate_predictions(12345.0)
    def test_predict_call(self, mocker, np_2x1_with_label,
                          xgb_regressor_1_split_1_tree):
        """Test that the output from xgb.Booster.predict with ntree_limit = best_iteration + 1
        is returned from the method.
        """

        confo_model = XGBSklearnLeafNodeScaledConformalPredictor(
            xgb_regressor_1_split_1_tree)

        confo_model.calibrate(np_2x1_with_label[0], np_2x1_with_label[1])

        predict_return_value = np.array([200, 101])

        mocked = mocker.patch.object(xgb.XGBRegressor,
                                     "predict",
                                     return_value=predict_return_value)

        results = confo_model._generate_predictions(np_2x1_with_label[0])

        assert (mocked.call_count == 1
                ), "incorrect number of calls to xgb.XGBRegressor.predict"

        np.testing.assert_array_equal(results, predict_return_value)

        call_args = mocked.call_args_list[0]
        call_pos_args = call_args[0]
        call_kwargs = call_args[1]

        assert (
            len(call_pos_args) == 1
        ), "incorrect number of positional args in xgb.XGBRegressor.predict call"

        np.testing.assert_array_equal(call_pos_args[0], np_2x1_with_label[0])

        assert call_kwargs == {
            "ntree_limit": xgb_regressor_1_split_1_tree.best_iteration + 1
        }, "positional args incorrect in call to xgb.XGBRegressor.predict"