class_docstr: Transformers that create new exog features from the endog or exog array
  
  Parameters
  ----------
  prefix : str or None, optional (default=None)
      The feature prefix
docstr: H-stack dataframes or np.ndarrays
docstr_tok: ["H-stack","dataframes","or","np.ndarrays"]
code: def _safe_hstack(self, X, features):
      """H-stack dataframes or np.ndarrays"""
      if X is None or isinstance(X, pd.DataFrame):
          # the features we're adding may be np.ndarray
          if not isinstance(features, pd.DataFrame):
              features = pd.DataFrame.from_records(features)
  
          # subclass may override this
          features.columns = self._get_feature_names(features)
  
          if X is not None:
              # ignore_index will remove names, which is a stupid quirk
              # of pandas... so manually reset the indices
              # https://stackoverflow.com/a/43406062/3015734
              X.index = features.index = np.arange(X.shape[0])
              return pd.concat([X, features], axis=1)
          # if X was None coming in, we'd still like to favor a pd.DF
          return features
  
      return np.hstack([X, features])
  
file_path: pmdarima/pmdarima/preprocessing/exog/base.py
imports: import pandas
  import numpy
  import abc
  from ..base import BaseTransformer
label_desc: Use image node_id 4 for calling the BaseExogFeaturizer obj's underlying member method code with example usage: obj._safe_hstack(X, features) and returns: np, features, pd