def test_utterance_patterns_with_range_and_non_range(self) -> None: artists = ('the beatles', 'kanye', 'nico', 'tom waits') dynamic_token_patterns_map = {'ARTIST': artists} pattern_def = _load_pattern_def( self._base_dir / 'utterance_patterns_with_range_and_non_range.yml') _, generator = expand( pattern_def, dynamic_token_patterns_map=dynamic_token_patterns_map) actual_utterance_combo, actual_tokens, actual_groups = zip(*generator) expected_utterance_combo = ( (('she wants', ), ), (('she wants', ), ('to play', ), artists), (('she wants', ), ('to play', ), artists, ('to play', ), artists), (('she wants', ), ('to play', ), artists, ('to play', ), artists, ('to play', ), artists), ) expected_tokens = ( ('START', ), ('START', 'PLAY', 'ARTIST'), ('START', 'PLAY', 'ARTIST', 'PLAY', 'ARTIST'), ('START', 'PLAY', 'ARTIST', 'PLAY', 'ARTIST', 'PLAY', 'ARTIST'), ) expected_groups = ( (('None', 1), ), (('None', 1), ('PLAY_ARTIST', 2)), (('None', 1), ('PLAY_ARTIST', 2), ('PLAY_ARTIST', 2)), (('None', 1), ('PLAY_ARTIST', 2), ('PLAY_ARTIST', 2), ('PLAY_ARTIST', 2)), ) pairs = [(actual_utterance_combo, expected_utterance_combo), (actual_tokens, expected_tokens), (actual_groups, expected_groups)] compare_all_pairs(self, pairs)
def _expand(self, *, disable_progress_bar: bool = False ) -> Iterable[Tuple[Sequence[Sequence[str]], Sequence[str], Sequence[Tuple[str, int]]]]: ilen, exp_gen = expand(self._pattern_def, dynamic_token_patterns_map=self._dynamic_token_patterns_map) with tqdm(exp_gen, desc='Expansion...', total=ilen, disable=disable_progress_bar, miniters=1) as expansion_tqdm: for utterance_combo, tokens, groups in expansion_tqdm: if self._expansion_hooks_map: utterance_combo, tokens, groups = _execute_hooks(tokens, (utterance_combo, tokens, groups), self._expansion_hooks_map) yield utterance_combo, tokens, groups
def test_static_and_base_tokens(self) -> None: pattern_def = _load_pattern_def(self._base_dir / 'static_and_base_tokens.yml') _, generator = expand(pattern_def) actual_utterance_combo, actual_tokens, actual_groups = zip(*generator) expected_utterance_combo = ((('he will want', 'she will want'), ('to play', 'to listen')), ) expected_tokens = (('START', 'PLAY'), ) expected_groups = ((('None', 1), ('None', 1)), ) pairs = [(actual_utterance_combo, expected_utterance_combo), (actual_tokens, expected_tokens), (actual_groups, expected_groups)] compare_all_pairs(self, pairs)
def test_dynamic_token_patterns_only(self) -> None: dynamic_token_patterns_map = {'ARTIST': ('the beatles', 'kanye')} pattern_def = _load_pattern_def(self._base_dir / 'dynamic_token_patterns_only.yml') expected_utterance_combo = ((('the beatles', 'kanye'), ), ) expected_tokens = (('ARTIST', ), ) expected_groups = (((('None', 1)), ), ) _, generator = expand( pattern_def, dynamic_token_patterns_map=dynamic_token_patterns_map) actual_utterance_combo, actual_tokens, actual_groups = zip(*generator) pairs = [(actual_utterance_combo, expected_utterance_combo), (actual_tokens, expected_tokens), (actual_groups, expected_groups)] compare_all_pairs(self, pairs)
def test_dynamic_and_static_token_patterns(self) -> None: dynamic_token_patterns_map = {'ARTIST': ('the beatles', 'kanye')} pattern_def = _load_pattern_def( self._base_dir / 'dynamic_and_static_token_patterns.yml') _, generator = expand( pattern_def, dynamic_token_patterns_map=dynamic_token_patterns_map) actual_utterance_combo, actual_tokens, actual_groups = zip(*generator) expected_utterance_combo = ((('he will want', 'she will want'), ('to play', 'to listen'), ('the beatles', 'kanye')), ) expected_tokens = (('START', 'PLAY', 'ARTIST'), ) expected_groups = ((('None', 1), ('None', 1), ('None', 1)), ) pairs = [(actual_utterance_combo, expected_utterance_combo), (actual_tokens, expected_tokens), (actual_groups, expected_groups)] compare_all_pairs(self, pairs)
def test_multiple_optional_utternace_pattern(self) -> None: pattern_def = _load_pattern_def( self._base_dir / 'multiple_optional_utternace_pattern.yml') _, generator = expand(pattern_def) actual_utterance_combo, actual_tokens, actual_groups = zip(*generator) expected_utterance_combo = ((('hi', ), ('she will want', ), ('to play', ), ('nico', )), (('hi', ), ('she will want', ), ('to play', ), ('tom waits', ))) expected_tokens = (('WAKE', 'START', 'PLAY', 'ARTIST_1'), ('WAKE', 'START', 'PLAY', 'ARTIST_2')) expected_groups = ((('None', 1), ('PLAY_PHRASE', 2), ('None', 1)), (('None', 1), ('PLAY_PHRASE', 2), ('None', 1))) pairs = [(actual_utterance_combo, expected_utterance_combo), (actual_tokens, expected_tokens), (actual_groups, expected_groups)] compare_all_pairs(self, pairs)
def test_nested_group_tokens(self) -> None: pattern_def = _load_pattern_def(self._base_dir / 'nested_group_tokens.yml') _, generator = expand(pattern_def) actual_utterance_combo, actual_tokens, actual_groups = zip(*generator) expected_utterance_combo = ((('hi', ), ('she wants', ), ('to play', 'to listen'), ('to play', 'to listen')), ) expected_tokens = (('WAKE', 'START', 'PLAY', 'PLAY'), ) expected_groups = (( ('None', 1), ('PLAY_PHRASE', 3), ), ) pairs = [(actual_utterance_combo, expected_utterance_combo), (actual_tokens, expected_tokens), (actual_groups, expected_groups)] compare_all_pairs(self, pairs)
def test_intents_and_entities(self) -> None: pattern_def = _load_pattern_def(self._base_dir / 'intents_and_entities.yml') _, generator = expand(pattern_def) actual_utterance_combo, actual_tokens, actual_groups = zip(*generator) expected_utterance_combo = ((('he will want', 'she will want'), ('to play', 'to listen'), ('nico', 'kanye', 'tom waits')), (('he will want', 'she will want'), ('to play', 'to listen'), ('sunday morning', 'all falls down', 'table top joe'))) expected_tokens = (('START', 'PLAY', 'ARTIST'), ('START', 'PLAY', 'SONG')) expected_groups = ((('None', 1), ('None', 1), ('None', 1)), (('None', 1), ('None', 1), ('None', 1))) pairs = [(actual_utterance_combo, expected_utterance_combo), (actual_tokens, expected_tokens), (actual_groups, expected_groups)] compare_all_pairs(self, pairs)