code: def on_trial_complete(
      self,
      iteration: int,
      trials: List["Trial"],
      trial: "Trial",
      **info,
  ):  # noqa
      super().on_trial_complete(iteration, trials, trial, **info)
      self.trial_status[trial.trial_id] = trial.status
  
      model_hyperparameters = os.path.join(
          trial.logdir,
          f"{self.exp_name}_{self.model_type}",
          "model",
          MODEL_HYPERPARAMETERS_FILE_NAME,
      )
      if os.path.isfile(model_hyperparameters):
          try:
              with open(model_hyperparameters) as f:
                  config = json.load(f)
                  assert (
                      config
                  ), f"Trial {trial} rendered config was empty."
              self.rendered_config[trial.trial_id] = True
          except OSError:
              logging.exception(
                  "Could not load rendered config from trial logdir."
              )
  
      model_hyperparameters = os.path.join(
          trial.logdir, "trial_hyperparameters.json"
      )
      if os.path.isfile(model_hyperparameters):
          try:
              with open(model_hyperparameters) as f:
                  config = json.load(f)
                  assert config, "Trial {trial} user config was empty."
              self.rendered_config[trial.trial_id] = True
          except OSError:
              logging.exception(
                  "Could not load rendered config from trial logdir."
              )
  
imports: import json
  import logging
  import os.path
  from typing import Dict, List
  import mlflow
  import pandas
  import pytest
  from mlflow.tracking import MlflowClient
  from ludwig.backend import initialize_backend
  from ludwig.callbacks import Callback
  from ludwig.constants import ACCURACY, AUTO, BATCH_SIZE, EXECUTOR, MAX_CONCURRENT_TRIALS, TRAINER
  from ludwig.contribs.mlflow import MlflowCallback
  from ludwig.globals import HYPEROPT_STATISTICS_FILE_NAME, MODEL_HYPERPARAMETERS_FILE_NAME
  from ludwig.hyperopt.results import HyperoptResults
  from ludwig.hyperopt.run import hyperopt
  from ludwig.hyperopt.utils import update_hyperopt_params_with_defaults
  from ludwig.schema.model_config import ModelConfig
  from ludwig.utils.automl.utils import get_model_type
  from tests.integration_tests.utils import category_feature, generate_data, text_feature
label_desc: Use image node_id 3 for calling the HyperoptTestCallback obj's underlying member method code with example usage: obj.on_trial_complete(iteration, trials, trial) without return types