class_docstr: The ArbitraryOutlierCapper() caps the maximum or minimum values of a variable
  at an arbitrary value indicated by the user.
  
  You must provide the maximum or minimum values that will be used to cap each
  variable in a dictionary containing the features as keys and the capping values as
  values.
  
  More details in the :ref:`User Guide <arbitrary_capper>`.
  
  Parameters
  ----------
  max_capping_dict: dictionary, default=None
      Dictionary containing the user specified capping values for the right tail of
      the distribution of each variable to cap (maximum values).
  
  min_capping_dict: dictionary, default=None
      Dictionary containing user specified capping values for the eft tail of the
      distribution of each variable to cap (minimum values).
  
  {missing_values}
  
  Attributes
  ----------
  {right_tail_caps_}
  
  {left_tail_caps_}
  
  {variables_}
  
  {feature_names_in_}
  
  {n_features_in_}
  
  Methods
  -------
  
  {fit}
  
  {fit_transform}
  
  transform:
      Cap the variables.
docstr: This transformer does not learn any parameter.
  
  Parameters
  ----------
  X: pandas dataframe of shape = [n_samples, n_features]
      The training input samples.
  
  y: pandas Series, default=None
      y is not needed in this transformer. You can pass y or None.
docstr_tok: ["This","transformer","does","not","learn","any","parameter",".","Parameters","--","--","--","--","--","X",":","pandas","dataframe","of","shape","=","[","n_samples",",","n_features","]","The","training","input","samples",".","y",":","pandas","Series",",","default=None","y","is","not","needed","in","this","transformer",".","You","can","pass","y","or","None","."]
code: def fit(self, X: pd.DataFrame, y: Optional[pd.Series] = None):
      """
      This transformer does not learn any parameter.
  
      Parameters
      ----------
      X: pandas dataframe of shape = [n_samples, n_features]
          The training input samples.
  
      y: pandas Series, default=None
          y is not needed in this transformer. You can pass y or None.
      """
      X = check_X(X)
  
      # find variables to be capped
      if self.min_capping_dict is None and self.max_capping_dict:
          self.variables_ = [x for x in self.max_capping_dict.keys()]
      elif self.max_capping_dict is None and self.min_capping_dict:
          self.variables_ = [x for x in self.min_capping_dict.keys()]
      elif self.min_capping_dict and self.max_capping_dict:
          tmp = self.min_capping_dict.copy()
          tmp.update(self.max_capping_dict)
          self.variables_ = [x for x in tmp.keys()]
  
      if self.missing_values == "raise":
          # check if dataset contains na
          _check_contains_na(X, self.variables_)
          _check_contains_inf(X, self.variables_)
  
      # find or check for numerical variables
      self.variables_ = _find_or_check_numerical_variables(
          X, self.variables_
      )
  
      if self.max_capping_dict is not None:
          self.right_tail_caps_ = self.max_capping_dict
      else:
          self.right_tail_caps_ = {}
  
      if self.min_capping_dict is not None:
          self.left_tail_caps_ = self.min_capping_dict
      else:
          self.left_tail_caps_ = {}
  
      self.feature_names_in_ = X.columns.to_list()
      self.n_features_in_ = X.shape[1]
  
      return self
  
file_path: feature_engine/feature_engine/outliers/artbitrary.py
imports: from typing import Optional
  import pandas
  from feature_engine._check_input_parameters.check_input_dictionary import _check_numerical_dict
  from feature_engine._docstrings.fit_attributes import _feature_names_in_docstring, _n_features_in_docstring, _variables_attribute_docstring
  from feature_engine._docstrings.init_parameters import _missing_values_docstring
  from feature_engine._docstrings.methods import _fit_not_learn_docstring, _fit_transform_docstring
  from feature_engine._docstrings.substitute import Substitution
  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
  from feature_engine.outliers.base_outlier import BaseOutlier
  from feature_engine.tags import _return_tags
label_desc: Use image node_id 2 for calling the ArbitraryOutlierCapper obj's underlying member method code with example usage: obj.fit(X, y) and returns: self