code: def update(self, results, public_det=None):
      N = len(results)
      M = len(self.tracks)
  
      dets = np.array(
          [det["ct"] + det["tracking"] for det in results], np.float32
      )  # N x 2
      track_size = np.array(
          [
              (
                  (track["bbox"][2] - track["bbox"][0])
                  * (track["bbox"][3] - track["bbox"][1])
              )
              for track in self.tracks
          ],
          np.float32,
      )  # M
      track_cat = np.array(
          [track["class"] for track in self.tracks], np.int32
      )  # M
      item_size = np.array(
          [
              (
                  (item["bbox"][2] - item["bbox"][0])
                  * (item["bbox"][3] - item["bbox"][1])
              )
              for item in results
          ],
          np.float32,
      )  # N
      item_cat = np.array(
          [item["class"] for item in results], np.int32
      )  # N
      tracks = np.array(
          [pre_det["ct"] for pre_det in self.tracks], np.float32
      )  # M x 2
      dist = (
          (tracks.reshape(1, -1, 2) - dets.reshape(-1, 1, 2)) ** 2
      ).sum(
          axis=2
      )  # N x M
  
      invalid = (
          (dist > track_size.reshape(1, M))
          + (dist > item_size.reshape(N, 1))
          + (item_cat.reshape(N, 1) != track_cat.reshape(1, M))
      ) > 0
      dist = dist + invalid * 1e18
  
      if self.hungarian:
          item_score = np.array(
              [item["score"] for item in results], np.float32
          )
          dist[dist > 1e18] = 1e18
          from sklearn.utils.linear_assignment_ import linear_assignment
  
          matched_indices = linear_assignment(dist)
      else:
          matched_indices = greedy_assignment(copy.deepcopy(dist))
  
      unmatched_dets = [
          d
          for d in range(dets.shape[0])
          if not (d in matched_indices[:, 0])
      ]
      unmatched_tracks = [
          d
          for d in range(tracks.shape[0])
          if not (d in matched_indices[:, 1])
      ]
  
      if self.hungarian:
          matches = []
          for m in matched_indices:
              if dist[m[0], m[1]] > 1e16:
                  unmatched_dets.append(m[0])
                  unmatched_tracks.append(m[1])
              else:
                  matches.append(m)
          matches = np.array(matches).reshape(-1, 2)
      else:
          matches = matched_indices
  
      ret = []
      for m in matches:
          track = results[m[0]]
          track["tracking_id"] = self.tracks[m[1]]["tracking_id"]
          ret.append(track)
  
      # Private detection: create tracks for all un-matched detections
      for i in unmatched_dets:
          track = results[i]
          if track["score"] > self.new_thresh:
              self.id_count += 1
              track["tracking_id"] = self.id_count
              ret.append(track)
  
      self.tracks = ret
      return ret
  
file_path: PaddleDetection/ppdet/modeling/mot/tracker/center_tracker.py
imports: import copy
  import numpy
  import sklearn
  from ppdet.core.workspace import register, serializable
  from ppdet.utils.logger import setup_logger
label_desc: Use image node_id 4 for calling the CenterTracker obj's underlying member method code with example usage: obj.update(results, public_det) and returns: ret