def METHOD_NAME(self, word_index, tgt_len):
    # +1s account for range function; [min, max) -> [min, max]
    if not self.is_bidirectional:
        absolute_max = word_index + 1
    else:
        absolute_max = tgt_len
    # Subset 1 - whole window
    rounded_index = (
        math.floor((word_index + self.stride) / self.stride) * self.stride
    )
    if word_index % self.stride == 0 and word_index != 0:
        subset_one = set(
            range(word_index - self.stride, min(absolute_max, word_index + 1))
        )
    else:
        subset_one = set(
            range(
                max(0, rounded_index - self.stride),
                min(absolute_max, rounded_index + 1),
            )
        )
    # Subset 2 - summary per window
    # If bidirectional, subset 2 is the same for every index
    subset_two = set()
    if not self.is_bidirectional:
        subset_two = self.compute_subset_summaries(absolute_max)
    return subset_one.union(subset_two)