code: def set_cluster_compute(
      self,
      cluster_compute: Dict[str, Any],
      extra_tags: Optional[Dict[str, str]] = None,
  ):
      extra_tags = extra_tags or {}
      self.cluster_compute = cluster_compute
      self.cluster_compute.setdefault(
          "idle_termination_minutes", self.autosuspend_minutes
      )
      self.cluster_compute.setdefault(
          "maximum_uptime_minutes", self.maximum_uptime_minutes
      )
      self.cloud_provider = self._get_cloud_provider(cluster_compute)
      self.cluster_compute = self._annotate_cluster_compute(
          self.cluster_compute,
          cloud_provider=self.cloud_provider,
          extra_tags=extra_tags,
      )
  
      self.cluster_compute_name = (
          f"{self.project_name}_{self.project_id[4:8]}"
          f"__compute__{self.test.get_name()}__"
          f"{dict_hash(self.cluster_compute)}"
      )
  
imports: import abc
  import time
  from typing import TYPE_CHECKING, Any, Dict, Optional
  from ray_release.aws import add_tags_to_aws_config, RELEASE_AWS_RESOURCE_TYPES_TO_TRACK_FOR_BILLING
  from ray_release.anyscale_util import get_project_name
  from ray_release.config import DEFAULT_AUTOSUSPEND_MINS, DEFAULT_MAXIMUM_UPTIME_MINS
  from ray_release.test import Test
  from ray_release.exception import CloudInfoError
  from ray_release.util import anyscale_cluster_url, dict_hash, get_anyscale_sdk
  from ray_release.logger import logger
label_desc: Use image node_id 3 for calling the ClusterManager obj's underlying member method code with example usage: obj.set_cluster_compute(cluster_compute, extra_tags) without return types