def annotate(self, tokens: list, prons: list) -> tuple:
"""Return the sequence of keys from the list of tokens and their pronunciations.
Input tokens: ["test", "hello"]
Input prons: ['t-E-s-t', 'E-l-o']
Code result: [('5-c.3-s.5-c.6-s', 't-E.s-vnil.t-E.l-o')]
Returned keys by token: (('5-c.3-s', '5-c.6-s'), ('t-E.s-vnil', 't-E.l-o'))
:param tokens: (list) List of tokens
:param prons: (list) List of pronunciations
:raises: TypeError: Invalid text type.
:return: tuple(str) List of keys
"""
if type(prons) not in (list, tuple):
raise TypeError(f"Given pronunciations must be a list. Got '{type(prons)}' instead.")
if type(tokens) not in (list, tuple):
raise TypeError(f"Given tokens must be a list. Got '{type(tokens)}' instead.")
cued = self._cuer(prons)
normalized_word_phonemes = self.__cue_tokenizer.normalize_word_phonemes(tuple(prons))
(codes, phons) = self.__keys_by_token.segment(normalized_word_phonemes, cued)
return (codes, phons)