code: def cost_per_hour(
      self,
      resource_rates,
      product_versions,
      location,
      cores_mcpu,
      memory_bytes,
      storage_gib,
  ):
      instance_config = self.instance_config(product_versions, location)
      cost_per_hour = instance_config.cost_per_hour(
          resource_rates, cores_mcpu, memory_bytes, storage_gib
      )
      return cost_per_hour
  
imports: import asyncio
  import logging
  from typing import Dict, Optional, Tuple
  from gear import Database
  from .cloud.azure.instance_config import AzureSlimInstanceConfig
  from .cloud.azure.resource_utils import azure_worker_properties_to_machine_type
  from .cloud.gcp.instance_config import GCPSlimInstanceConfig
  from .cloud.gcp.resource_utils import GCP_MACHINE_FAMILY, family_worker_type_cores_to_gcp_machine_type
  from .cloud.resource_utils import adjust_cores_for_memory_request, adjust_cores_for_packability, cores_mcpu_to_memory_bytes, local_ssd_size, machine_type_to_worker_type_cores, requested_storage_bytes_to_actual_storage_gib, valid_machine_types
  from .cloud.utils import possible_cloud_locations
  from .driver.billing_manager import ProductVersionInfo, ProductVersions
  from .instance_config import InstanceConfig
label_desc: Use image node_id 7 for calling the PoolConfig obj's underlying member method code with example usage: obj.cost_per_hour(resource_rates, product_versions, location, cores_mcpu, memory_bytes, storage_gib) and returns: cost_per_hour