code: def get_expgrad_models_per_epsilon(
      estimator, epsilon, X_train, y_train, A_train
  ):
      """Instantiate and train an ExponentiatedGradient model on the
      balanced training dataset.
  
      Parameters
      ----------
      Estimator: Base estimator to contains a fit and predict function.
      Epsilon: Float representing maximum difference bound for the fairness Moment constraint
  
      Returns
      -------
      Predictors
          List of inner model predictors learned by the ExponentiatedGradient
          model during the training process.
  
      """
      exp_grad_est = ExponentiatedGradient(
          estimator=estimator,
          sample_weight_name="classifier__sample_weight",
          constraints=EqualizedOdds(difference_bound=epsilon),
      )
      # Is this an issue - Re-runs
      exp_grad_est.fit(X_train, y_train, sensitive_features=A_train)
      predictors = exp_grad_est.predictors_
      return predictors
  
imports: import numpy
  import pandas
  import matplotlib.pyplot
  import lightgbm
  from sklearn.metrics import balanced_accuracy_score, roc_auc_score
  from sklearn.metrics import confusion_matrix
  from sklearn.pipeline import Pipeline
  from sklearn.preprocessing import StandardScaler
  from fairlearn.metrics import MetricFrame
  from fairlearn.metrics import count, selection_rate, equalized_odds_difference, false_positive_rate, false_negative_rate
  from fairlearn.postprocessing import ThresholdOptimizer
  from fairlearn.reductions import ExponentiatedGradient
  from fairlearn.reductions import EqualizedOdds
  from sklearn.model_selection import train_test_split
  import warnings
label_desc: Use image node_id 8 for calling a global function with example usage: get_expgrad_models_per_epsilon(estimator, epsilon, X_train, y_train, A_train) and returns: predictors