docstr: Get output feature names for transformation. In other words, returns the
  variable names of transformed dataframe.
  
  Parameters
  ----------
  input_features : array or list, default=None
      This parameter exits only for compatibility with the Scikit-learn pipeline.
  
      - If `None`, then `feature_names_in_` is used as feature names in.
      - If an array or list, then `input_features` must match `feature_names_in_`.
  
  Returns
  -------
  feature_names_out: list
      Transformed feature names.
docstr_tok: ["Get","output","feature","names","for","transformation",".","In","other","words",",","returns","the","variable","names","of","transformed","dataframe",".","Parameters","--","--","--","--","--","input_features",":","array","or","list",",","default=None","This","parameter","exits","only","for","compatibility","with","the","Scikit-learn","pipeline",".","-","If","`","None","`",",","then","`","feature_names_in_","`","is","used","as","feature","names","in",".","-","If","an","array","or","list",",","then","`","input_features","`","must","match","`","feature_names_in_","`",".","Returns","--","--","--","-","feature_names_out",":","list","Transformed","feature","names","."]
code: def get_feature_names_out(
      self,
      input_features: Union[List[Union[str, int]], ArrayLike] = None,
  ) -> List[Union[str, int]]:
      """
      Get output feature names for transformation. In other words, returns the
      variable names of transformed dataframe.
  
      Parameters
      ----------
      input_features : array or list, default=None
          This parameter exits only for compatibility with the Scikit-learn pipeline.
  
          - If `None`, then `feature_names_in_` is used as feature names in.
          - If an array or list, then `input_features` must match `feature_names_in_`.
  
      Returns
      -------
      feature_names_out: list
          Transformed feature names.
      """
      check_is_fitted(self)
  
      if input_features is not None:
          # If input to fit is an array, then the variable names in
          # feature_names_in_ are "x0", "x1","x2" ..."xn".
          if self.feature_names_in_ == [
              f"x{i}" for i in range(self.n_features_in_)
          ]:
              # If the input was an array, we let the user enter the variable names.
              if len(input_features) == self.n_features_in_:
                  if isinstance(input_features, list):
                      feature_names = input_features
                  else:
                      feature_names = list(input_features)
  
                  # For transformers that add features to the data.
                  feature_names = self._add_new_feature_names(
                      feature_names
                  )
  
                  # For transformers that remove features from data, i..e, selectors.
                  feature_names = self._remove_feature_names(
                      feature_names, indices=True
                  )
  
                  return feature_names
  
              else:
                  raise ValueError(
                      "The number of input_features does not match the number of "
                      "features seen in the dataframe used in fit."
                  )
          else:
              msg = "input_features is not equal to feature_names_in_"
              if isinstance(input_features, list):
                  if input_features != self.feature_names_in_:
                      raise ValueError(msg)
              elif isinstance(input_features, ndarray) or isinstance(
                  input_features, pd.core.indexes.base.Index
              ):
                  if list(input_features) != self.feature_names_in_:
                      raise ValueError(msg)
              else:
                  raise ValueError(
                      "input_features must be a list or an array. "
                      "Got {input_features} instead."
                  )
  
      feature_names = self.feature_names_in_
  
      # For transformers that add features to the dataframe:
      feature_names = self._add_new_feature_names(feature_names)
  
      # For transformers that remove features from data, i..e, selectors.
      feature_names = self._remove_feature_names(
          feature_names, indices=False
      )
  
      return feature_names
  
file_path: feature_engine/feature_engine/_base_transformers/mixins.py
imports: from typing import Dict, List, Union
  import pandas
  from numpy import ndarray
  from numpy.typing import ArrayLike
  from sklearn.utils.validation import check_is_fitted
  from feature_engine._variable_handling.variable_type_selection import _find_or_check_numerical_variables
  from feature_engine.dataframe_checks import _check_contains_inf, _check_contains_na, check_X
label_desc: Use image node_id 1 for calling the GetFeatureNamesOutMixin obj's underlying member method code with example usage: obj.get_feature_names_out(input_features) and returns: feature_names, feature_names