code: def get_offers(
      self, requirements: Optional[Requirements] = None
  ) -> List[InstanceOfferWithAvailability]:
      offers = get_catalog_offers(
          backend=BackendType.GCP,
          requirements=requirements,
          extra_filter=_supported_instances_and_zones(
              self.config.regions
          ),
      )
      quotas = defaultdict(dict)
      for region in self.regions_client.list(
          project=self.config.project_id
      ):
          for quota in region.quotas:
              quotas[region.name][quota.metric] = (
                  quota.limit - quota.usage
              )
  
      seen_region_offers = set()
      offers_with_availability = []
      for offer in offers:
          region = offer.region[:-2]  # strip zone
          key = (_unique_instance_name(offer.instance), region)
          if key in seen_region_offers:
              continue
          seen_region_offers.add(key)
          availability = InstanceAvailability.NO_QUOTA
          if _has_gpu_quota(quotas[region], offer.instance.resources):
              availability = InstanceAvailability.UNKNOWN
          # todo quotas: cpu, memory, global gpu
          offers_with_availability.append(
              InstanceOfferWithAvailability(
                  **offer.dict(), availability=availability
              )
          )
          offers_with_availability[-1].region = region
  
      return offers_with_availability
  
imports: from collections import defaultdict
  from typing import Callable, Dict, List, Optional, Tuple
  import google.api_core.exceptions
  import google.cloud.compute_v1
  import dstack._internal.core.backends.gcp.auth
  import dstack._internal.core.backends.gcp.resources
  from dstack._internal.core.backends.base.compute import Compute, get_gateway_user_data, get_instance_name, get_user_data
  from dstack._internal.core.backends.base.offers import get_catalog_offers
  from dstack._internal.core.backends.gcp.config import GCPConfig
  from dstack._internal.core.errors import NoCapacityError, ResourceNotFoundError
  from dstack._internal.core.models.backends.base import BackendType
  from dstack._internal.core.models.instances import InstanceAvailability, InstanceOffer, InstanceOfferWithAvailability, InstanceType, LaunchedGatewayInfo, LaunchedInstanceInfo, Resources
  from dstack._internal.core.models.runs import Job, Requirements, Run
label_desc: Use image node_id 2 for calling the GCPCompute obj's underlying member method code with example usage: obj.get_offers(requirements) and returns: offers_with_availability