code: def is_fair(self):
      if self._is_fair is not None:
          return self._is_fair
      metrics = self.get_additional_metrics()
      fm = metrics.get("fairness_metrics", {})
      for col, m in fm.items():
          if col == "fairness_optimization":
              continue
          if not m.get("is_fair", True):
              self._is_fair = False
              return False
      self._is_fair = True
      return False
  
imports: import copy
  import json
  import logging
  import operator
  import os
  import time
  import uuid
  import numpy
  import pandas
  from supervised.algorithms.algorithm import BaseAlgorithm
  from supervised.algorithms.registry import BINARY_CLASSIFICATION, MULTICLASS_CLASSIFICATION, REGRESSION
  from supervised.exceptions import NotTrainedException
  from supervised.model_framework import ModelFramework
  from supervised.utils.additional_metrics import AdditionalMetrics
  from supervised.utils.config import LOG_LEVEL
  from supervised.utils.metric import Metric
  from supervised.utils.jsonencoder import MLJSONEncoder
  import matplotlib.pyplot
  from tabulate import tabulate
  from supervised.utils.learning_curves import LearningCurves
label_desc: Use image node_id 20 for calling the Ensemble obj's underlying member method code with example usage: obj.is_fair() and returns: False, self, False