code: def on_trial_complete(self,
                            trial_id,
                            result=None,
                            error=False,
                            early_terminated=False):
          
          ho_trial = self._get_hyperopt_trial(trial_id)
          if ho_trial is None:
              return
          ho_trial["refresh_time"] = hpo.utils.coarse_utcnow()
          if error:
              ho_trial["state"] = hpo.base.JOB_STATE_ERROR
              ho_trial["misc"]["error"] = (str(TuneError), "Tune Error")
          elif early_terminated:
              ho_trial["state"] = hpo.base.JOB_STATE_ERROR
              ho_trial["misc"]["error"] = (str(TuneError), "Tune Removed")
          else:
              ho_trial["state"] = hpo.base.JOB_STATE_DONE
              hp_result = self._to_hyperopt_result(result)
              ho_trial["result"] = hp_result
          self._hpopt_trials.refresh()
          del self._live_trial_mapping[trial_id]
docs: Passes the result to HyperOpt unless early terminated or errored.
  
          The result is internally negated when interacting with HyperOpt
          so that HyperOpt can "maximize" this value, as it minimizes on default.