code: def _get_costs(
      runhistory: RunHistory,
      configs: list[Configuration],
      config_instance_seed_budget_keys: list[
          list[InstanceSeedBudgetKey]
      ],
  ) -> np.ndarray:
      """Returns the costs of the passed configurations.
  
      Parameters
      ----------
      runhistory : RunHistory
          The runhistory containing the passed configs.
      configs : list[Configuration]
          The configs for which the costs should be returned.
      config_instance_seed_budget_keys: list[list[InstanceSeedBudgetKey]]
          The instance-seed budget keys for the configs for which the costs should be returned.
  
      Returns
      -------
      costs : np.ndarray[n_points, n_objectives]
          Costs of the given configs.
      """
      assert len(configs) == len(config_instance_seed_budget_keys)
  
      # Now we get the costs for the trials of the config
      average_costs = []
  
      for config, isb_keys in zip(
          configs, config_instance_seed_budget_keys
      ):
          # Since we use multiple seeds, we have to average them to get only one cost value pair for each
          # configuration
          # However, we only want to consider the config trials
          # Average cost is a list of floats (one for each objective)
          average_cost = runhistory.average_cost(
              config, isb_keys, normalize=False
          )
          average_costs += [average_cost]
  
      # Let's work with a numpy array for efficiency
      return np.vstack(average_costs)
  
imports: from __future__ import annotations
  import numpy
  from ConfigSpace import Configuration
  from smac.runhistory import RunHistory
  from smac.runhistory.dataclasses import InstanceSeedBudgetKey
label_desc: Use image node_id 1 for calling a global function with example usage: _get_costs(runhistory, configs, config_instance_seed_budget_keys) and returns: np