class_docstr: MatchVariables() ensures that the same variables observed in the train set
  are present in the test set. If the dataset to transform contains variables that
  were not present in the train set, they are dropped. If the dataset to transform
  lacks variables that were present in the train set, these variables are added to
  the dataframe with a value determined by the user (np.nan by default).
  
  .. code-block:: python
  
      train = pd.DataFrame({
          "Name": ["tom", "nick", "krish", "jack"],
          "City": ["London", "Manchester", "Liverpool", "Bristol"],
          "Age": [20, 21, 19, 18],
          "Marks": [0.9, 0.8, 0.7, 0.6],
      })
  
      test = pd.DataFrame({
          "Name": ["tom", "sam", "nick"],
          "Age": [20, 22, 23],
          "Marks": [0.9, 0.7, 0.6],
          "Hobbies": ["tennis", "rugby", "football"]
      })
  
      match_columns = MatchVariables()
  
      match_columns.fit(train)
  
      df_transformed = match_columns.transform(test)
  
  Note that in the returned dataframe, the variable "Hobbies" was removed and the
  variable "City" was added with np.nan:
  
  .. code-block:: python
  
      df_transformed
  
          Name    City  Age  Marks
      0    tom  np.nan   20    0.9
      1    sam  np.nan   22    0.7
      2   nick  np.nan   23    0.6
  
  
  The order of the variables in the transformed dataset is also adjusted to match
  that observed in the train set.
  
  More details in the :ref:`User Guide <match_variables>`.
  
  Parameters
  ----------
  fill_value: integer, float or string. Default=np.nan
      The values for the variables that will be added to the transformed dataset.
  
  missing_values: string, default='ignore'
      Indicates if missing values should be ignored or raised. If 'raise' the
      transformer will return an error if the the datasets to `fit` or `transform`
      contain missing values. If 'ignore', missing data will be ignored when learning
      parameters or performing the transformation.
  
  verbose: bool, default=True
      If True, the transformer will print out the names of the variables that are
      added and / or removed from the dataset.
  
  Attributes
  ----------
  feature_names_in_:
      The variables present in the train set, in the order observed during fit.
  
  n_features_in_:
      The number of features in the train set used in fit.
  
  Methods
  -------
  fit:
      Identify the variable names in the train set.
  
  fit_transform:
      Fit to the data. Then transform it.
  
  get_feature_names_out:
      Get output feature names for transformation.
  
  get_params:
      Get parameters for this estimator.
  
  set_params:
      Set the parameters of this estimator.
  
  transform:
      Add or delete variables to match those observed in the train set.
code: def _more_tags(self):
      tags_dict = _return_tags()
  
      msg = "input shape of dataframes in fit and transform can differ"
      tags_dict["_xfail_checks"]["check_transformer_general"] = msg
  
      msg = (
          "transformer takes categorical variables, and inf cannot be determined"
          "on these variables. Thus, check is not implemented"
      )
      tags_dict["_xfail_checks"]["check_estimators_nan_inf"] = msg
  
      return tags_dict
  
file_path: feature_engine/feature_engine/preprocessing/match_columns.py
imports: from typing import List, Union
  import numpy
  import pandas
  from sklearn.base import BaseEstimator, TransformerMixin
  from sklearn.utils.validation import check_is_fitted
  from feature_engine.dataframe_checks import _check_contains_na, check_X
  from feature_engine.tags import _return_tags
  from feature_engine._base_transformers.mixins import GetFeatureNamesOutMixin
label_desc: Use image node_id 4 for calling the MatchVariables obj's underlying member method code with example usage: obj._more_tags() and returns: tags_dict