class_docstr: Base tracker model.
  
  Args:
      momentums (dict[str:float], optional): Momentums to update the buffers.
          The `str` indicates the name of the buffer while the `float`
          indicates the momentum. Defaults to None.
      num_frames_retain (int, optional). If a track is disappeared more than
          `num_frames_retain` frames, it will be deleted in the memo.
           Defaults to 10.
class_docstr_tok: ["Base","tracker","model",".","Args",":","momentums","(","dict","[","str",":","float","]",",","optional",")",":","Momentums","to","update","the","buffers",".","The","`","str","`","indicates","the","name","of","the","buffer","while","the","`","float","`","indicates","the","momentum",".","Defaults","to","None",".","num_frames_retain","(","int",",","optional",")",".","If","a","track","is","disappeared","more","than","`","num_frames_retain","`","frames",",","it","will","be","deleted","in","the","memo",".","Defaults","to","10","."]
docstr: Update the tracker.
  
  Args:
      kwargs (dict[str: Tensor | int]): The `str` indicates the
          name of the input variable. `ids` and `frame_ids` are
          obligatory in the keys.
docstr_tok: ["Update","the","tracker",".","Args",":","kwargs","(","dict","[","str",":","Tensor","|","int","]",")",":","The","`","str","`","indicates","the","name","of","the","input","variable",".","`","ids","`","and","`","frame_ids","`","are","obligatory","in","the","keys","."]
code: def update(self, **kwargs) -> None:
      """Update the tracker.
  
      Args:
          kwargs (dict[str: Tensor | int]): The `str` indicates the
              name of the input variable. `ids` and `frame_ids` are
              obligatory in the keys.
      """
      memo_items = [k for k, v in kwargs.items() if v is not None]
      rm_items = [k for k in kwargs.keys() if k not in memo_items]
      for item in rm_items:
          kwargs.pop(item)
      if not hasattr(self, "memo_items"):
          self.memo_items = memo_items
      else:
          assert memo_items == self.memo_items
  
      assert "ids" in memo_items
      num_objs = len(kwargs["ids"])
      id_indice = memo_items.index("ids")
      assert "frame_ids" in memo_items
      frame_id = int(kwargs["frame_ids"])
      if isinstance(kwargs["frame_ids"], int):
          kwargs["frame_ids"] = torch.tensor(
              [kwargs["frame_ids"]] * num_objs
          )
      # cur_frame_id = int(kwargs['frame_ids'][0])
      for k, v in kwargs.items():
          if len(v) != num_objs:
              raise ValueError("kwargs value must both equal")
  
      for obj in zip(*kwargs.values()):
          id = int(obj[id_indice])
          if id in self.tracks:
              self.update_track(id, obj)
          else:
              self.init_track(id, obj)
  
      self.pop_invalid_tracks(frame_id)
  
file_path: mmdetection/mmdet/models/trackers/base_tracker.py
imports: from abc import ABCMeta, abstractmethod
  from typing import List, Optional, Tuple
  import torch
  import torch.nn.functional
  from addict import Dict
label_desc: Use image node_id 6 for calling the BaseTracker obj's underlying member method code with example usage: obj.update() without return types