code: def fairness_optimization(self, current_models, results_path):
      if self._ml_task == BINARY_CLASSIFICATION:
          return self.fairness_optimization_binary_classification(
              current_models, results_path
          )
      if self._ml_task == REGRESSION:
          return self.fairness_optimization_regression(
              current_models, results_path
          )
      if self._ml_task == MULTICLASS_CLASSIFICATION:
          return self.fairness_optimization_multiclass_classification(
              current_models, results_path
          )
      return []
  
imports: import copy
  import json
  import logging
  import os
  import numpy
  import pandas
  from sklearn.preprocessing import OneHotEncoder
  from supervised.algorithms.catboost import catboost_eval_metric
  from supervised.algorithms.lightgbm import lightgbm_eval_metric
  from supervised.algorithms.registry import BINARY_CLASSIFICATION, MULTICLASS_CLASSIFICATION, REGRESSION, AlgorithmsRegistry
  from supervised.algorithms.xgboost import xgboost_eval_metric
  from supervised.preprocessing.label_encoder import LabelEncoder
  from supervised.preprocessing.preprocessing_categorical import PreprocessingCategorical
  from supervised.tuner.hill_climbing import HillClimbing
  from supervised.tuner.preprocessing_tuner import PreprocessingTuner
  from supervised.tuner.random_parameters import RandomParameters
  from supervised.utils.config import LOG_LEVEL
  from supervised.utils.utils import dump_data, load_data
label_desc: Use image node_id 12 for calling the MljarTuner obj's underlying member method code with example usage: obj.fairness_optimization(current_models, results_path) and returns: list, self, self, self