docs: def _generate_ngrams_with_context(self, tokens: List[Token]) -> chain:
          """Generates the 1-gram to n-grams tuples of the list of tokens"""
          chained_ngrams_iter = self._generate_ngrams_with_context_helper(iter(tokens), 1)
          for n in range(2, self._ngrams + 1):
              ngrams_iter = tee(tokens, n)
              for j in range(1, n):
                  for k in range(j):
                      next(ngrams_iter[j], None)
              ngrams_iter_with_context = self._generate_ngrams_with_context_helper(zip(*ngrams_iter), n)
              chained_ngrams_iter = chain(chained_ngrams_iter, ngrams_iter_with_context)
          return chained_ngrams_iter