def _estimator_predict(
        self,
        n: int,
        series: Optional[TimeSeries],
        historic_future_covariates: Optional[TimeSeries],
        future_covariates: Optional[TimeSeries],
        levels: Optional[list[float]],
    ) -> np.ndarray:
        """
        Computes the model output.

        When this method is called, it is guaranteed that either `series` is None, or that the
        model supports transferable series forecasting (model has a forward method).

        Parameters
        ----------
        n
            The number of time steps after the end of the training time series for which to produce predictions
        series
            The series whose future values will be predicted. If the statsforecast model has a `forward` method then
            the previously fitted model will be used for prediction, otherwise a copy of the model will be fitted to
            predict the new series.
        historic_future_covariates
            Optionally, the historic part of the future-known covariates series that is overlapping with `series`.
            They must match the covariates used for training in terms of dimension.
        future_covariates
            Optionally, the future-known covariates series that extends to at least `n` steps after the end of `series`.
            They must match the covariates used for training in terms of dimension.
        levels
            The confidence levels (0. - 100.) for the prediction intervals.
        """
        native_cov_support = (
            future_covariates is not None and self._supports_native_future_covariates
        )
        custom_cov_support = (
            future_covariates is not None
            and not self._supports_native_future_covariates
        )

        x_future = future_covariates.values(copy=False) if native_cov_support else None

        if series is None:
            forecast_dict = self.model.predict(h=n, X=x_future, level=levels)
        else:
            # model has a `forward` method, it supports transferable prediction series (uses
            # fitted model to forecast new series)
            if custom_cov_support:
                target = self._get_target_residuals(
                    series,
                    historic_future_covariates,
                )
            else:
                target = series.values(copy=False).flatten()

            x_historic = (
                historic_future_covariates.values(copy=False)
                if native_cov_support
                else None
            )
            forecast_dict = self.model.forward(
                y=target, h=n, X=x_historic, X_future=x_future, level=levels
            )

        vals = _unpack_sf_dict(forecast_dict, levels=levels)
        if custom_cov_support:
            # sf model was trained on residuals, add back the remainder
            mu_linreg = self._linreg.predict(
                n, series=series, future_covariates=future_covariates
            )
            mu_linreg_values = mu_linreg.values(copy=False).reshape(n, 1)
            vals += mu_linreg_values
        return vals

        Computes the model output.

        When this method is called, it is guaranteed that either `series` is None, or that the
        model supports transferable series forecasting (model has a forward method).

        Parameters
        ----------
        n
            The number of time steps after the end of the training time series for which to produce predictions
        series
            The series whose future values will be predicted. If the statsforecast model has a `forward` method then
            the previously fitted model will be used for prediction, otherwise a copy of the model will be fitted to
            predict the new series.
        historic_future_covariates
            Optionally, the historic part of the future-known covariates series that is overlapping with `series`.
            They must match the covariates used for training in terms of dimension.
        future_covariates
            Optionally, the future-known covariates series that extends to at least `n` steps after the end of `series`.
            They must match the covariates used for training in terms of dimension.
        levels
            The confidence levels (0. - 100.) for the prediction intervals.
        
darts/models/forecasting/sf_model.py