code: def setup(self, config):
      self.hp = config["hp"]
      print(self._trial_info)
      experiment_name = self._trial_info.experiment_name
      trial_name = self.trial_name
  
      print(
          f"experiment name: {experiment_name} trial name: {trial_name}"
      )
  
      core_v2.init(
          defaults=core_v2.DefaultConfig(
              name=experiment_name,
              hparams={
                  "hp": config["hp"],
              },
              searcher={
                  "name": "custom",
                  "metric": "loss",
                  "smaller_is_better": True,
              },
          ),
          unmanaged=core_v2.UnmanagedConfig(
              external_experiment_id=experiment_name,
              external_trial_id=trial_name,
          ),
      )
  
file_path: determined/examples/features/unmanaged/ray/ray_hp_search_cleanup.py
imports: import random
  import uuid
  from typing import Dict, Union
  import ray
  from ray import air, tune
  from ray.tune.schedulers import AsyncHyperBandScheduler
  from determined.experimental import core_v2
label_desc: Use image node_id 1 for calling the Trainable obj's underlying member method code with example usage: obj.setup(config) without return types