# Buggy code
def check_X(X, allow_empty=False, enforce_univariate=False, warn_X=False):
    """Validate input data.

    Parameters
    ----------
    X : pd.Series, pd.DataFrame, np.ndarray
    allow_empty : bool, optional (default=False)
        If True, empty `y` raises an error.

    Returns
    -------
    y : pd.Series, pd.DataFrame
        Validated input data.

    Raises
    ------
    ValueError, TypeError
        If y is an invalid input
    UserWarning
        Warning that X is given and model can't use it
    """
    if warn_X:
        warnings.warn(
            "Argument X is given but can't be used by model algorithm.", UserWarning
        )

    # Check if pandas series or numpy array
    return check_series(
        X, enforce_univariate=enforce_univariate, allow_empty=allow_empty
    )


# Traceback (ValueError)
ValueError                                Traceback (most recent call last)
<ipython-input-3-4a75cca05732> in <module>
16 MODEL_Auto_ARIMA.fit(
17     y_train=y_df["y"],
---> 18     X_train=X_df
19 )

~/miniconda3/envs/RATP37/lib/python3.7/site-packages/sktime/forecasting/arima.py in fit(self, y_train, fh, X_train, **fit_args)
363         self._set_y_X(y_train, X_train)
364         self._set_fh(fh)
--> 365         self._forecaster.fit(y_train, exogenous=X_train, **fit_args)
366         self._is_fitted = True
367         return self

~/miniconda3/envs/RATP37/lib/python3.7/site-packages/pmdarima/arima/auto.py in fit(self, y, X, **fit_args)
218             with_intercept=self.with_intercept,
219             sarimax_kwargs=sarimax_kwargs,
--> 220             **fit_args)
221
222         return self

~/miniconda3/envs/RATP37/lib/python3.7/site-packages/pmdarima/arima/auto.py in auto_arima(y, X, start_p, d, start_q, max_p, max_d, max_q, start_P, D, start_Q, max_P, max_D, max_Q, max_order, m, seasonal, stationary, information_criterion, alpha, test, seasonal_test, stepwise, n_jobs, start_params, trend, method, maxiter, offset_test_args, seasonal_test_args, suppress_warnings, error_action, trace, random, random_state, n_fits, return_valid_fits, out_of_sample_size, scoring, scoring_args, with_intercept, sarimax_kwargs, **fit_args)
390
391     # Temporary shim until we remove `exogenous` support completely
--> 392     X, fit_args = pm_compat.get_X(X, **fit_args)
393
394     # pop out the deprecated kwargs

~/miniconda3/envs/RATP37/lib/python3.7/site-packages/pmdarima/compat/pmdarima.py in get_X(X, **kwargs)
12     exog = kwargs.pop("exogenous", None)
13     if X is not None and exog is not None:
---> 14         raise ValueError("Multiple values provided for both X and exogenous")
15
16     if exog is not None:

ValueError: Multiple values provided for both X and exogenous

# Fixed code
def check_X(X, allow_empty=False, enforce_univariate=False):
    """Validate input data.

    Parameters
    ----------
    X : pd.Series, pd.DataFrame, np.ndarray
    allow_empty : bool, optional (default=False)
        If True, empty `y` raises an error.
    enforce_univariate : bool, optional (default=False)
        If True, multivariate Z will raise an error.
    Returns
    -------
    y : pd.Series, pd.DataFrame
        Validated input data.

    Raises
    ------
    ValueError, TypeError
        If y is an invalid input
    UserWarning
        Warning that X is given and model can't use it
    """
    # Check if pandas series or numpy array
    return check_series(
        X,
        enforce_univariate=enforce_univariate,
        allow_empty=allow_empty,
        allow_numpy=False,
    )