class_docstr: Abstract implementation of an intensifier supporting multi-fidelity, multi-objective, and multi-threading.
  The abstract intensifier keeps track of the incumbent, which is updated everytime the runhistory changes.
  
  Parameters
  ----------
  n_seeds : int | None, defaults to None
      How many seeds to use for each instance. It is used in the abstract intensifier to determine validation trials.
  max_config_calls : int, defaults to None
      Maximum number of configuration evaluations. Basically, how many instance-seed keys should be max evaluated
      for a configuration. It is used in the abstract intensifier to determine validation trials.
  max_incumbents : int, defaults to 10
      How many incumbents to keep track of in the case of multi-objective.
  seed : int, defaults to None
      Internal seed used for random events like shuffle seeds.
class_docstr_tok: ["Abstract","implementation","of","an","intensifier","supporting","multi-fidelity",",","multi-objective",",","and","multi-threading",".","The","abstract","intensifier","keeps","track","of","the","incumbent",",","which","is","updated","everytime","the","runhistory","changes",".","Parameters","--","--","--","--","--","n_seeds",":","int","|","None",",","defaults","to","None","How","many","seeds","to","use","for","each","instance",".","It","is","used","in","the","abstract","intensifier","to","determine","validation","trials",".","max_config_calls",":","int",",","defaults","to","None","Maximum","number","of","configuration","evaluations",".","Basically",",","how","many","instance-seed","keys","should","be","max","evaluated","for","a","configuration",".","It","is","used","in","the","abstract","intensifier","to","determine","validation","trials",".","max_incumbents",":","int",",","defaults","to","10","How","many","incumbents","to","keep","track","of","in","the","case","of","multi-objective",".","seed",":","int",",","defaults","to","None","Internal","seed","used","for","random","events","like","shuffle","seeds","."]
code: def _update_trajectory(self, configs: list[Configuration]) -> None:
      rh = self.runhistory
      config_ids = [rh.get_config_id(c) for c in configs]
      costs = [rh.average_cost(c, normalize=False) for c in configs]
  
      self._incumbents = configs
      self._incumbents_changed += 1
      self._trajectory.append(
          TrajectoryItem(
              config_ids=config_ids,
              costs=costs,
              trial=rh.finished,
              walltime=self.used_walltime,
          )
      )
      logger.debug("Updated trajectory.")
  
imports: from __future__ import annotations
  from abc import abstractmethod
  from typing import Any, Callable, Iterator
  import dataclasses
  import json
  from collections import defaultdict
  from pathlib import Path
  import numpy
  from ConfigSpace import Configuration
  import smac
  from smac.callback.callback import Callback
  from smac.constants import MAXINT
  from smac.main.config_selector import ConfigSelector
  from smac.runhistory import TrialInfo
  from smac.runhistory.dataclasses import InstanceSeedBudgetKey, InstanceSeedKey, TrajectoryItem, TrialValue
  from smac.runhistory.runhistory import RunHistory
  from smac.scenario import Scenario
  from smac.utils.configspace import get_config_hash, print_config_changes
  from smac.utils.logging import get_logger
  from smac.utils.pareto_front import calculate_pareto_front, sort_by_crowding_distance
label_desc: Use image node_id 32 for calling the AbstractIntensifier obj's underlying member method code with example usage: obj._update_trajectory(configs) without return types