def METHOD_NAME(self, gc, pts):
    if not self._label_cache_valid:
        self._compute_labels(gc)
    labels = [
        label
        for label, mask in zip(self._label_cache, self._cached_point_mask)
        if mask
    ]
    boxes = [
        label
        for label, mask in zip(
            self._label_box_cache, self._cached_point_mask
        )
        if mask
    ]
    offset = empty((2,), float)
    with gc:
        gc.clip_to_rect(self.x, self.y, self.width, self.height)
        for pt, label, box in zip(pts, labels, boxes):
            with gc:
                if self.h_position == "center":
                    offset[0] = -box[0] / 2 + self.text_offset[0]
                elif self.h_position == "right":
                    offset[0] = self.text_offset[0]
                elif self.h_position == "left":
                    offset[0] = -box[0] / 2 + self.text_offset[0]
                if self.v_position == "center":
                    offset[1] = -box[1] / 2 + self.text_offset[1]
                elif self.v_position == "top":
                    offset[1] = self.text_offset[1]
                elif self.v_position == "bottom":
                    offset[1] = -box[1] / 2 - self.text_offset[1]
                pt += offset
                gc.translate_ctm(*pt)
                label.draw(gc)