def METHOD_NAME(
    self,
    start_well: AbstractWellCore,
    num_channels: int = 1,
    fail_if_full: bool = False,
):
    """
    Removes tips from the tip tracker.
    This method should be called when a tip is picked up. Generally, it
    will be called with `num_channels=1` or `num_channels=8` for single-
    and multi-channel respectively. If picking up with more than one
    channel, this method will automatically determine which tips are used
    based on the start well, the number of channels, and the geometry of
    the tiprack.
    :param start_well: The :py:class:`.Well` from which to pick up a tip.
                       For a single-channel pipette, this is the well to
                       send the pipette to. For a multi-channel pipette,
                       this is the well to send the back-most nozzle of the
                       pipette to.
    :type start_well: :py:class:`.Well`
    :param num_channels: The number of channels for the current pipette
    :type num_channels: int
    :param fail_if_full: for backwards compatibility
    """
    # Select the column of the labware that contains the target well
    target_column = [col for col in self._columns if start_well in col][0]
    well_idx = target_column.index(start_well)
    # Number of tips to pick up is the lesser of (1) the number of tips
    # from the starting well to the end of the column, and (2) the number
    # of channels of the pipette (so a 4-channel pipette would pick up a
    # max of 4 tips, and picking up from the 2nd-to-bottom well in a
    # column would get a maximum of 2 tips)
    num_tips = min(len(target_column) - well_idx, num_channels)
    target_wells = target_column[well_idx : well_idx + num_tips]
    # In API version 2.2, we no longer reset the tip tracker when a tip
    # is dropped back into a tiprack well. This fixes a behavior where
    # subsequent transfers would reuse the dirty tip. However, sometimes
    # the user explicitly wants to use a dirty tip, and this check would
    # raise an exception if they tried to do so.
    # An extension of work here is to have separate tip trackers for
    # dirty tips and non-present tips; but until then, we can avoid the
    # exception.
    if fail_if_full:
        assert all(
            well.has_tip() for well in target_wells
        ), "{} is out of tips".format(str(self))
    for well in target_wells:
        well.set_has_tip(False)