def METHOD_NAME(self, points, frame):
    if frame is None:
        raise TypeError("The frame is invalid")
    # Make sure there is enough frames in our list
    if len(self.tracking_points) < self.TRACKING_LENGTH:
        self.tracking_points.append(points)
        self.tracking_frames.append(frame)
        return points
    diff, diff_norm = self._calculate_forward_backward_error(frame, points)
    # Eliminate the points based on the fb error
    msk = None
    # If this is the first time median flow is tracking these points,
    # eliminate the top 60% of the points with the highest
    # fb tracking error 60% is defined in self.elimination_amount)
    if self._amount_mdn_flow_tracked == 0:
        lrgst_ind = np.argsort(diff_norm)[
            -int(len(diff_norm) * self.elimination_amount) :
        ]
        msk = np.ones(len(diff_norm), dtype=bool)
        msk[lrgst_ind] = False
    else:
        # Elimate points with a foward-backward error greater than .8
        high_val = diff_norm > 0.8
        diff = diff.T[0]
        msk = np.ones(len(diff_norm), dtype=bool)
        msk[high_val] = False
    # Eliminate these from the current points, also, from all previous points as well
    points = points[msk]
    for i, tp in enumerate(self.tracking_points):
        self.tracking_points[i] = tp[np.array(msk)]
    self.prev_points = self.tracking_points[self.TRACKING_LENGTH - 2]
    # Update tracking values
    self.tracking_points.append(points)
    self.tracking_frames.popleft()
    self.tracking_frames.append(frame)
    self._amount_mdn_flow_tracked += 1
    # Determine if this model is still effective
    # If the mean fb error is > 2 and the amount of frames tracked is > 20, then the model has failed.
    # Also if the number of points in the model is <d the model has failed
    if (cv2.mean(diff)[0] > 2 and self._amount_mdn_flow_tracked > 20) or len(
        points
    ) < 3:
        self._is_effective = False
    return points