class_docstr: Implementation of HpoExecutor Interface, where our custom logic is used as the backend
code: def register_resources(self, initialized_model, **kwargs):
      assert (
          self.scheduler_options is not None
      ), "Call `initialize()` before register resources"
      super().register_resources(initialized_model, **kwargs)
      if (
          self.hyperparameter_tune_kwargs.get(
              "resources_per_trial", None
          )
          is not None
      ):
          # Custom backend only run trials sequentially
          self.scheduler_options[1][
              "resource"
          ] = self.hyperparameter_tune_kwargs["resources_per_trial"]
      logger.debug(
          f"custom backend resource: {self.resources}, per trial resource: {self.hyperparameter_tune_kwargs}"
      )
  
imports: from __future__ import annotations
  import copy
  import logging
  import math
  import os
  import time
  from abc import ABC, abstractmethod
  from typing import TYPE_CHECKING, Any, Callable, Dict, List, Optional, Tuple, Union
  import pandas
  from autogluon.common import space
  from autogluon.common.utils.resource_utils import ResourceManager
  from autogluon.common.utils.s3_utils import is_s3_url
  from ..ray.resources_calculator import ResourceCalculator
  from ..scheduler.scheduler_factory import scheduler_factory
  from ..utils.savers import save_pkl
  from .constants import CUSTOM_BACKEND, RAY_BACKEND
  from .exceptions import EmptySearchSpace
label_desc: Use image node_id 6 for calling the CustomHpoExecutor obj's underlying member method code with example usage: obj.register_resources(initialized_model) without return types