code: def resources_from_resource_arguments(default_num_cpus, default_num_gpus,
                                        default_resources, runtime_num_cpus,
                                        runtime_num_gpus, runtime_resources):
      
      if runtime_resources is not None:
          resources = runtime_resources.copy()
      elif default_resources is not None:
          resources = default_resources.copy()
      else:
          resources = {}
  
      if "CPU" in resources or "GPU" in resources:
          raise ValueError("The resources dictionary must not "
                           "contain the key 'CPU' or 'GPU'")
  
      assert default_num_cpus is not None
      resources["CPU"] = (default_num_cpus
                          if runtime_num_cpus is None else runtime_num_cpus)
  
      if runtime_num_gpus is not None:
          resources["GPU"] = runtime_num_gpus
      elif default_num_gpus is not None:
          resources["GPU"] = default_num_gpus
  
      return resources
docs: Determine a task's resource requirements.
  
      Args:
          default_num_cpus: The default number of CPUs required by this function
              or actor method.
          default_num_gpus: The default number of GPUs required by this function
              or actor method.
          default_resources: The default custom resources required by this
              function or actor method.
          runtime_num_cpus: The number of CPUs requested when the task was
              invoked.
          runtime_num_gpus: The number of GPUs requested when the task was
              invoked.
          runtime_resources: The custom resources requested when the task was
              invoked.
  
      Returns:
          A dictionary of the resource requirements for the task.