code: def calculate_ceteris_paribus(
      explainer,
      new_observation,
      variable_splits,
      y,
      processes,
      verbose=True,
  ):
      """
      Inner method that calculates ceteris paribus and some additional fields.
  
      Set profile and new_profile fields to actual values.
  
      :return: None
      """
  
      profiles = calculate_variable_profile(
          explainer.predict_function,
          explainer.model,
          new_observation,
          variable_splits,
          processes,
          verbose,
      )
  
      profiles.loc[:, "_label_"] = explainer.label
  
      # add points of interests
      predictions = explainer.predict(new_observation)
  
      new_observation.loc[:, "_yhat_"] = predictions
  
      new_observation.loc[:, "_label_"] = explainer.label
  
      new_observation.loc[:, "_ids_"] = new_observation.index.values
  
      if y is not None:
          new_observation.loc[:, "_y_"] = y
  
      return profiles, new_observation
  
file_path: DALEX/python/dalex/dalex/predict_explanations/_ceteris_paribus/utils.py
imports: import multiprocessing
  from distutils.version import LooseVersion
  import numpy
  import pandas
  from tqdm import tqdm
label_desc: Use image node_id 1 for calling a global function with example usage: calculate_ceteris_paribus(explainer, new_observation, variable_splits, y, processes, verbose) and returns: profiles,  new_observation