def METHOD_NAME(self, query, key, value, key_pe):
    """trim out unnecessary memory beforehand to reduce computation"""
    trim_len = self.get_trim_len()
    cache_size = key.size(1) - query.size(1)
    trim_len_cache = trim_len - (self._max_span - cache_size)
    if trim_len_cache > 0:
        key = key[:, trim_len_cache:, :]
        value = value[:, trim_len_cache:, :]
    elif trim_len_cache < 0:
        # cache is too short! this happens when validation resumes
        # after a lot of updates.
        key = F.pad(key, [0, 0, -trim_len_cache, 0])
        value = F.pad(value, [0, 0, -trim_len_cache, 0])
    if trim_len > 0:
        if key_pe is not None:
            key_pe = key_pe[:, :, trim_len:]
    return key, value, key_pe