コード例 #1
0
ファイル: test_utterance.py プロジェクト: rmalouf/buckeye
    def test_speech_rate_pause_at_end(self):
        utt = Utterance(self.words)
        utt.append(Pause(beg=1.25, end=1.50))

        # raises
        assert_raises(ValueError, utt.speech_rate)
        assert_raises(ValueError, utt.speech_rate, False, 'raises')

        # zero
        assert_equal(utt.speech_rate(no_syllables='zero'), 10 / 3)

        # squeeze
        assert_equal(utt.speech_rate(no_syllables='squeeze'), 4.0)
コード例 #2
0
ファイル: test_utterance.py プロジェクト: ebuz/buckeye
    def test_speech_rate_pause_at_end(self):
        utt = Utterance(self.words)
        utt.append(Pause(beg=1.25, end=1.50))

        # raises
        assert_raises(ValueError, utt.speech_rate)
        assert_raises(ValueError, utt.speech_rate, False, 'raises')

        # zero
        assert_equal(utt.speech_rate(no_syllables='zero'), 10/3)

        # squeeze
        assert_equal(utt.speech_rate(no_syllables='squeeze'), 4.0)
コード例 #3
0
ファイル: test_utterance.py プロジェクト: rmalouf/buckeye
    def test_speech_rate_pause_at_beg(self):
        words = [Pause(beg=0, end=0.39)] + self.words[2:]
        utt = Utterance(words)

        # raises
        assert_raises(ValueError, utt.speech_rate)
        assert_raises(ValueError, utt.speech_rate, False, 'raises')

        # zero
        assert_equal(utt.speech_rate(no_syllables='zero'), 3.2)

        # squeeze
        assert_equal(utt.speech_rate(no_syllables='squeeze'), 4 / 0.86)
コード例 #4
0
ファイル: test_utterance.py プロジェクト: ebuz/buckeye
    def test_speech_rate_pause_at_beg(self):
        words = [Pause(beg=0, end=0.39)] + self.words[2:]
        utt = Utterance(words)

        # raises
        assert_raises(ValueError, utt.speech_rate)
        assert_raises(ValueError, utt.speech_rate, False, 'raises')

        # zero
        assert_equal(utt.speech_rate(no_syllables='zero'), 3.2)

        # squeeze
        assert_equal(utt.speech_rate(no_syllables='squeeze'), 4/0.86)
コード例 #5
0
ファイル: test_utterance.py プロジェクト: rmalouf/buckeye
    def test_speech_rate_pause_at_end_and_middle(self):
        words = self.words + [Pause(beg=1.25, end=1.50)]
        words[-3] = Pause(beg=0.73, end=0.80)

        utt = Utterance(words)

        # raises
        assert_raises(ValueError, utt.speech_rate)
        assert_raises(ValueError, utt.speech_rate, False, 'raises')

        # zero
        assert_equal(utt.speech_rate(no_syllables='zero'), 8 / 3)

        # squeeze
        assert_equal(utt.speech_rate(no_syllables='squeeze'), 4 / 1.25)
コード例 #6
0
ファイル: test_utterance.py プロジェクト: ebuz/buckeye
    def test_speech_rate_pause_at_end_and_middle(self):
        words = self.words + [Pause(beg=1.25, end=1.50)]
        words[-3] = Pause(beg=0.73, end=0.80)

        utt = Utterance(words)

        # raises
        assert_raises(ValueError, utt.speech_rate)
        assert_raises(ValueError, utt.speech_rate, False, 'raises')

        # zero
        assert_equal(utt.speech_rate(no_syllables='zero'), 8/3)

        # squeeze
        assert_equal(utt.speech_rate(no_syllables='squeeze'), 4/1.25)
コード例 #7
0
ファイル: test_utterance.py プロジェクト: rmalouf/buckeye
class TestUtterance(object):
    def setup(self):
        self.words = [
            Word('the', 0, 0.10, ['dh', 'iy'], ['dh'], 'DT'),
            Word('cat', 0.10, 0.39, ['k', 'ae', 't'], ['k', 'ae', 't'], 'NN'),
            Word('is', 0.39, 0.55, ['ih', 'z'], ['ih', 'z'], 'VB'),
            Word('on', 0.55, 0.73, ['aa', 'n'], ['aan'], 'IN'),
            Word('the', 0.73, 0.80, ['dh', 'iy'], ['dh', 'uh'], 'DT'),
            Word('mat', 0.80, 1.25, ['m', 'ae', 't'], ['m', 'ae', 't'], 'NN')
        ]

        self.utt = Utterance(self.words)
        self.empty_utt = Utterance()

    def test_utterance(self):
        assert_equal(self.utt.beg(), 0)
        assert_equal(self.utt.end(), 1.25)
        assert_equal(self.utt.dur(), 1.25 - 0)
        assert_equal(self.utt.words(), self.words)

    def test_empty_utterance(self):
        assert_raises(IndexError, self.empty_utt.beg)
        assert_raises(IndexError, self.empty_utt.end)
        assert_raises(IndexError, self.empty_utt.dur)
        assert_equal(self.empty_utt.words(), [])

    def test_backwards_utterance(self):
        utt_backwards = Utterance(self.words[::-1])
        assert_equal(utt_backwards._words, self.words)

    @raises(TypeError)
    def test_bad_word_types(self):
        words = range(4)
        utt = Utterance(words)

    @raises(ValueError)
    def test_flipped_word(self):
        word = Word('the', 0.10, 0, ['dh', 'iy'], ['dh'], 'DT')
        utt = Utterance([word])

    @raises(ValueError)
    def test_overlapping_words(self):
        words = [
            Word('the', 0, 0.10, ['dh', 'iy'], ['dh'], 'DT'),
            Word('cat', 0.05, 0.39, ['k', 'ae', 't'], ['k', 'ae', 't'], 'NN')
        ]

        utt = Utterance(words)

    def test_append(self):
        utt_a = Utterance()

        word = Word('the', 0.05, 0.25, ['dh', 'iy'], ['dh'], 'DT')
        utt_a.append(word)

        assert_equal(utt_a.words(), [word])
        assert_equal(utt_a.beg(), 0.05)
        assert_equal(utt_a.end(), 0.25)
        assert_equal(utt_a.dur(), 0.25 - 0.05)

        uh = Word('uh', 0.25, 0.45, ['ah'], ['ah'], 'UH')
        utt_a.append(uh)

        assert_equal(utt_a.words(), [word, uh])
        assert_equal(utt_a.beg(), 0.05)
        assert_equal(utt_a.end(), 0.45)
        assert_equal(utt_a.dur(), 0.45 - 0.05)

    @raises(TypeError)
    def test_append_missing(self):
        self.empty_utt.append('the')

    @raises(ValueError)
    def test_append_overlap(self):
        word = Word('uh', 0.25, 0.45, ['ah'], ['ah'], 'UH')
        self.utt.append(word)

    @raises(TypeError)
    def test_append_beg_none(self):
        word = Word('uh', None, 0.45, ['ah'], ['ah'], 'UH')
        self.utt.append(word)

    @raises(TypeError)
    def test_append_end_none(self):
        word = Word('uh', 0.25, None, ['ah'], ['ah'], 'UH')
        self.utt.append(word)

    @raises(ValueError)
    def test_append_backwards(self):
        word = Word('uh', 1.95, 1.65, ['ah'], ['ah'], 'UH')
        self.empty_utt.append(word)

    def test_append_none(self):
        word = Word('the', 0.05, 0.25, ['dh', 'iy'], ['dh'], 'DT')
        utt_append_none = Utterance([word])

        none_word = Word('uh', None, None, ['ah'], ['ah'], 'UH')
        assert_raises(TypeError, utt_append_none.append, none_word)

        none_beg_word = Word('uh', None, 0.5, ['ah'], ['ah'], 'UH')
        assert_raises(TypeError, utt_append_none.append, none_beg_word)

        none_end_word = Word('uh', 0.65, None, ['ah'], ['ah'], 'UH')
        assert_raises(TypeError, utt_append_none.append, none_end_word)

    def test_len(self):
        assert_equal(len(self.utt), 6)

    def test_speech_rate(self):
        assert_equal(self.utt.speech_rate(), 4.0)
        assert_equal(self.utt.speech_rate(use_phonetic=False), 4.8)
        assert_raises(ValueError, self.empty_utt.speech_rate)
        assert_raises(ValueError, self.empty_utt.speech_rate, False)

    def test_speech_rate_pause_at_beg(self):
        words = [Pause(beg=0, end=0.39)] + self.words[2:]
        utt = Utterance(words)

        # raises
        assert_raises(ValueError, utt.speech_rate)
        assert_raises(ValueError, utt.speech_rate, False, 'raises')

        # zero
        assert_equal(utt.speech_rate(no_syllables='zero'), 3.2)

        # squeeze
        assert_equal(utt.speech_rate(no_syllables='squeeze'), 4 / 0.86)

    def test_speech_rate_pause_at_beg_and_middle(self):
        words = [Pause(beg=0, end=0.39)] + self.words[2:]
        words[2] = Pause(beg=0.55, end=0.73)
        utt = Utterance(words)

        # raises
        assert_raises(ValueError, utt.speech_rate)
        assert_raises(ValueError, utt.speech_rate, False, 'raises')

        # zero
        assert_equal(utt.speech_rate(no_syllables='zero'), 2.4)

        # squeeze
        assert_equal(utt.speech_rate(no_syllables='squeeze'), 3 / 0.86)

    def test_speech_rate_pause_at_end(self):
        utt = Utterance(self.words)
        utt.append(Pause(beg=1.25, end=1.50))

        # raises
        assert_raises(ValueError, utt.speech_rate)
        assert_raises(ValueError, utt.speech_rate, False, 'raises')

        # zero
        assert_equal(utt.speech_rate(no_syllables='zero'), 10 / 3)

        # squeeze
        assert_equal(utt.speech_rate(no_syllables='squeeze'), 4.0)

    def test_speech_rate_pause_at_end_and_middle(self):
        words = self.words + [Pause(beg=1.25, end=1.50)]
        words[-3] = Pause(beg=0.73, end=0.80)

        utt = Utterance(words)

        # raises
        assert_raises(ValueError, utt.speech_rate)
        assert_raises(ValueError, utt.speech_rate, False, 'raises')

        # zero
        assert_equal(utt.speech_rate(no_syllables='zero'), 8 / 3)

        # squeeze
        assert_equal(utt.speech_rate(no_syllables='squeeze'), 4 / 1.25)

    def test_speech_rate_none_at_edge(self):
        utt = Utterance(self.words[:])
        word = Word('the', None, 0.10, ['dh', 'iy'], ['dh'], 'DT')

        # normally there couldn't be a None-duration word in the utterance
        # anyway
        utt._words[0] = word

        assert_raises(TypeError, utt.speech_rate)
        assert_raises(TypeError, utt.speech_rate, False, 'zero')
        assert_raises(TypeError, utt.speech_rate, False, 'squeeze')

    def test_strip_beg_pause(self):
        pause = Pause(beg=0, end=0.55)
        utt_strip = Utterance([pause] + self.words[3:])

        utt_strip.strip()

        assert_not_in(pause, utt_strip)
        assert_equal(utt_strip.words(), self.words[3:])

    def test_strip_end_pause(self):
        pause = Pause(beg=1.25, end=1.85)
        utt_strip = Utterance(self.words + [pause])

        utt_strip.strip()

        assert_not_in(pause, utt_strip)
        assert_equal(utt_strip.words(), self.words)

    def test_strip_beg_zero(self):
        zero = Word('', 0.0, 0.0)
        utt_strip = Utterance([zero] + self.words)

        utt_strip.strip()

        assert_not_in(zero, utt_strip)
        assert_equal(utt_strip.words(), self.words)

    def test_strip_end_zero(self):
        zero = Word('', 1.25, 1.25)
        utt_strip = Utterance(self.words + [zero])

        utt_strip.strip()

        assert_not_in(zero, utt_strip)
        assert_equal(utt_strip.words(), self.words)

    def test_strip_beg_multiple(self):
        pause = Pause(beg=0, end=0.39)
        zero = Word('', 0.39, 0.39)
        utt_strip = Utterance()
        utt_strip._words = [pause, zero] + self.words[2:]

        utt_strip.strip()

        for entry in {pause, zero}:
            assert_not_in(entry, utt_strip)

        assert_equal(utt_strip.words(), self.words[2:])

    def test_strip_end_multiple(self):
        pause = Pause(beg=1.25, end=1.95)
        zero = Word('', 1.95, 1.95)
        utt_strip = Utterance()
        utt_strip._words = self.words + [pause, zero]

        utt_strip.strip()

        for entry in {pause, zero}:
            assert_not_in(entry, utt_strip)

        assert_equal(utt_strip.words(), self.words)

    def test_strip_pause_only(self):
        pause = Pause(beg=1.25, end=1.95)
        utt_strip = Utterance([pause])

        utt_strip.strip()

        assert_equal(utt_strip.words(), [])

    def test_repr(self):
        expected_repr = (
            "Utterance(["
            "Word('the', 0, 0.1, ['dh', 'iy'], ['dh'], 'DT'), "
            "Word('cat', 0.1, 0.39, ['k', 'ae', 't'], ['k', 'ae', 't'], 'NN'), "
            "Word('is', 0.39, 0.55, ['ih', 'z'], ['ih', 'z'], 'VB'), "
            "Word('on', 0.55, 0.73, ['aa', 'n'], ['aan'], 'IN'), "
            "Word('the', 0.73, 0.8, ['dh', 'iy'], ['dh', 'uh'], 'DT'), "
            "Word('mat', 0.8, 1.25, ['m', 'ae', 't'], ['m', 'ae', 't'], 'NN')"
            "])")
        assert_equal(repr(self.utt), expected_repr)

    def test_str(self):
        assert_equal(str(self.utt), '<Utterance "the cat is on the mat">')
コード例 #8
0
    def test_speech_rate_pause_at_end_and_middle_ignore(self):
        words = self.words + [Pause(beg=1.25, end=1.50)]
        words[-3] = Pause(beg=0.73, end=0.80)

        utt = Utterance(words)
        assert_equal(utt.speech_rate(ignore_missing_syllables=True), 8 / 3)
コード例 #9
0
    def test_speech_rate_pause_at_end_ignore(self):
        utt = Utterance(self.words)
        utt.append(Pause(beg=1.25, end=1.50))

        assert_equal(utt.speech_rate(ignore_missing_syllables=True), 10 / 3)
コード例 #10
0
    def test_speech_rate_pause_at_beg_and_middle_ignore(self):
        words = [Pause(beg=0, end=0.39)] + self.words[2:]
        words[2] = Pause(beg=0.55, end=0.73)
        utt = Utterance(words)

        assert_equal(utt.speech_rate(ignore_missing_syllables=True), 2.4)
コード例 #11
0
    def test_speech_rate_pause_at_beg_ignore(self):
        words = [Pause(beg=0, end=0.39)] + self.words[2:]
        utt = Utterance(words)

        assert_equal(utt.speech_rate(ignore_missing_syllables=True), 3.2)
コード例 #12
0
class TestUtterance(object):
    def setup(self):
        self.words = [
            Word('the', 0, 0.10, ['dh', 'iy'], ['dh'], 'DT'),
            Word('cat', 0.10, 0.39, ['k', 'ae', 't'], ['k', 'ae', 't'], 'NN'),
            Word('is', 0.39, 0.55, ['ih', 'z'], ['ih', 'z'], 'VB'),
            Word('on', 0.55, 0.73, ['aa', 'n'], ['aan'], 'IN'),
            Word('the', 0.73, 0.80, ['dh', 'iy'], ['dh', 'uh'], 'DT'),
            Word('mat', 0.80, 1.25, ['m', 'ae', 't'], ['m', 'ae', 't'], 'NN')
        ]

        self.utt = Utterance(self.words)
        self.empty_utt = Utterance()

    def test_utterance(self):
        assert_equal(self.utt.beg, 0)
        assert_equal(self.utt.end, 1.25)
        assert_equal(self.utt.dur, 1.25 - 0)
        assert_equal(self.utt.words, self.words)

    @raises(AttributeError)
    def test_empty_beg(self):
        self.empty_utt.beg

    @raises(AttributeError)
    def test_empty_end(self):
        self.empty_utt.end

    @raises(AttributeError)
    def test_empty_dur(self):
        self.empty_utt.dur

    def test_empty_words(self):
        assert_equal(self.empty_utt.words, [])

    def test_backwards_utterance(self):
        utt_backwards = Utterance(self.words[::-1])
        assert_equal(utt_backwards._words, self.words)

    @raises(ValueError)
    def test_flipped_word(self):
        word = Word('the', 0.10, 0, ['dh', 'iy'], ['dh'], 'DT')
        utt = Utterance([word])

    @raises(ValueError)
    def test_overlapping_words(self):
        words = [
            Word('the', 0, 0.10, ['dh', 'iy'], ['dh'], 'DT'),
            Word('cat', 0.05, 0.39, ['k', 'ae', 't'], ['k', 'ae', 't'], 'NN')
        ]

        utt = Utterance(words)

    def test_append(self):
        utt_a = Utterance()

        word = Word('the', 0.05, 0.25, ['dh', 'iy'], ['dh'], 'DT')
        utt_a.append(word)

        assert_equal(utt_a.words, [word])
        assert_equal(utt_a.beg, 0.05)
        assert_equal(utt_a.end, 0.25)
        assert_equal(utt_a.dur, 0.25 - 0.05)

        uh = Word('uh', 0.25, 0.45, ['ah'], ['ah'], 'UH')
        utt_a.append(uh)

        assert_equal(utt_a.words, [word, uh])
        assert_equal(utt_a.beg, 0.05)
        assert_equal(utt_a.end, 0.45)
        assert_equal(utt_a.dur, 0.45 - 0.05)

    @raises(AttributeError)
    def test_append_missing(self):
        self.empty_utt.append('the')

    @raises(ValueError)
    def test_append_overlap(self):
        word = Word('uh', 0.25, 0.45, ['ah'], ['ah'], 'UH')
        self.utt.append(word)

    @raises(TypeError)
    def test_append_beg_none(self):
        word = Word('uh', None, 0.45, ['ah'], ['ah'], 'UH')
        self.utt.append(word)

    @raises(TypeError)
    def test_append_end_none(self):
        word = Word('uh', 0.25, None, ['ah'], ['ah'], 'UH')
        self.utt.append(word)

    @raises(ValueError)
    def test_append_backwards(self):
        word = Word('uh', 1.95, 1.65, ['ah'], ['ah'], 'UH')
        self.empty_utt.append(word)

    def test_append_none(self):
        word = Word('the', 0.05, 0.25, ['dh', 'iy'], ['dh'], 'DT')
        utt_append_none = Utterance([word])

        none_word = Word('uh', None, None, ['ah'], ['ah'], 'UH')
        assert_raises(TypeError, utt_append_none.append, none_word)

        none_beg_word = Word('uh', None, 0.5, ['ah'], ['ah'], 'UH')
        assert_raises(TypeError, utt_append_none.append, none_beg_word)

        none_end_word = Word('uh', 0.65, None, ['ah'], ['ah'], 'UH')
        assert_raises(TypeError, utt_append_none.append, none_end_word)

    def test_len(self):
        assert_equal(len(self.utt), 6)

    def test_speech_rate(self):
        assert_equal(self.utt.speech_rate(), 4.0)
        assert_equal(self.utt.speech_rate(use_phonetic=False), 4.8)

    def test_speech_rate_empty(self):
        assert_raises(ValueError, self.empty_utt.speech_rate)
        assert_raises(ValueError, self.empty_utt.speech_rate, False)

    def test_speech_rate_pause_at_beg_raise(self):
        words = [Pause(beg=0, end=0.39)] + self.words[2:]
        utt = Utterance(words)

        assert_raises(ValueError, utt.speech_rate)

    def test_speech_rate_pause_at_beg_ignore(self):
        words = [Pause(beg=0, end=0.39)] + self.words[2:]
        utt = Utterance(words)

        assert_equal(utt.speech_rate(ignore_missing_syllables=True), 3.2)

    def test_speech_rate_pause_at_beg_and_middle_raise(self):
        words = [Pause(beg=0, end=0.39)] + self.words[2:]
        words[2] = Pause(beg=0.55, end=0.73)
        utt = Utterance(words)

        assert_raises(ValueError, utt.speech_rate)

    def test_speech_rate_pause_at_beg_and_middle_ignore(self):
        words = [Pause(beg=0, end=0.39)] + self.words[2:]
        words[2] = Pause(beg=0.55, end=0.73)
        utt = Utterance(words)

        assert_equal(utt.speech_rate(ignore_missing_syllables=True), 2.4)

    def test_speech_rate_pause_at_end_raise(self):
        utt = Utterance(self.words)
        utt.append(Pause(beg=1.25, end=1.50))

        assert_raises(ValueError, utt.speech_rate)

    def test_speech_rate_pause_at_end_ignore(self):
        utt = Utterance(self.words)
        utt.append(Pause(beg=1.25, end=1.50))

        assert_equal(utt.speech_rate(ignore_missing_syllables=True), 10 / 3)

    def test_speech_rate_pause_at_end_and_middle_raise(self):
        words = self.words + [Pause(beg=1.25, end=1.50)]
        words[-3] = Pause(beg=0.73, end=0.80)
        utt = Utterance(words)

        assert_raises(ValueError, utt.speech_rate)

    def test_speech_rate_pause_at_end_and_middle_ignore(self):
        words = self.words + [Pause(beg=1.25, end=1.50)]
        words[-3] = Pause(beg=0.73, end=0.80)

        utt = Utterance(words)
        assert_equal(utt.speech_rate(ignore_missing_syllables=True), 8 / 3)

    def test_repr(self):
        expected_repr = (
            "Utterance(["
            "Word('the', 0, 0.1, ['dh', 'iy'], ['dh'], 'DT'), "
            "Word('cat', 0.1, 0.39, ['k', 'ae', 't'], ['k', 'ae', 't'], 'NN'), "
            "Word('is', 0.39, 0.55, ['ih', 'z'], ['ih', 'z'], 'VB'), "
            "Word('on', 0.55, 0.73, ['aa', 'n'], ['aan'], 'IN'), "
            "Word('the', 0.73, 0.8, ['dh', 'iy'], ['dh', 'uh'], 'DT'), "
            "Word('mat', 0.8, 1.25, ['m', 'ae', 't'], ['m', 'ae', 't'], 'NN')"
            "])")
        assert_equal(repr(self.utt), expected_repr)

    def test_str(self):
        assert_equal(str(self.utt), '<Utterance "the cat is on the mat">')

    def test_str_pause(self):
        utt = Utterance(self.words)
        utt.append(Pause('VOCNOISE', 1.25, 1.50))

        assert_equal(str(utt), '<Utterance "the cat is on the mat VOCNOISE">')

    def test_str_other(self):
        utt = Utterance(self.words)

        class CompatibleWord(object):
            def __init__(self):
                self.beg = 1.25
                self.end = 1.5

            def __str__(self):
                return '<CompatibleWord object>'

        utt.append(CompatibleWord())

        expected = '<Utterance "the cat is on the mat <CompatibleWord object>">'
        assert_equal(str(utt), expected)
コード例 #13
0
ファイル: test_utterance.py プロジェクト: ebuz/buckeye
class TestUtterance(object):

    def setup(self):
        self.words = [
            Word('the', 0, 0.10, ['dh', 'iy'], ['dh'], 'DT'),
            Word('cat', 0.10, 0.39, ['k', 'ae', 't'], ['k', 'ae', 't'], 'NN'),
            Word('is', 0.39, 0.55, ['ih', 'z'], ['ih', 'z'], 'VB'),
            Word('on', 0.55, 0.73, ['aa', 'n'], ['aan'], 'IN'),
            Word('the', 0.73, 0.80, ['dh', 'iy'], ['dh', 'uh'], 'DT'),
            Word('mat', 0.80, 1.25, ['m', 'ae', 't'], ['m', 'ae', 't'], 'NN')]

        self.utt = Utterance(self.words)
        self.empty_utt = Utterance()

    def test_utterance(self):
        assert_equal(self.utt.beg(), 0)
        assert_equal(self.utt.end(), 1.25)
        assert_equal(self.utt.dur(), 1.25 - 0)
        assert_equal(self.utt.words(), self.words)

    def test_empty_utterance(self):
        assert_raises(IndexError, self.empty_utt.beg)
        assert_raises(IndexError, self.empty_utt.end)
        assert_raises(IndexError, self.empty_utt.dur)
        assert_equal(self.empty_utt.words(), [])

    def test_backwards_utterance(self):
        utt_backwards = Utterance(self.words[::-1])
        assert_equal(utt_backwards._words, self.words)

    @raises(TypeError)
    def test_bad_word_types(self):
        words = range(4)
        utt = Utterance(words)

    @raises(ValueError)
    def test_flipped_word(self):
        word = Word('the', 0.10, 0, ['dh', 'iy'], ['dh'], 'DT')
        utt = Utterance([word])

    @raises(ValueError)
    def test_overlapping_words(self):
        words = [
            Word('the', 0, 0.10, ['dh', 'iy'], ['dh'], 'DT'),
            Word('cat', 0.05, 0.39, ['k', 'ae', 't'], ['k', 'ae', 't'], 'NN')]

        utt = Utterance(words)

    def test_append(self):
        utt_a = Utterance()

        word = Word('the', 0.05, 0.25, ['dh', 'iy'], ['dh'], 'DT')
        utt_a.append(word)

        assert_equal(utt_a.words(), [word])
        assert_equal(utt_a.beg(), 0.05)
        assert_equal(utt_a.end(), 0.25)
        assert_equal(utt_a.dur(), 0.25 - 0.05)

        uh = Word('uh', 0.25, 0.45, ['ah'], ['ah'], 'UH')
        utt_a.append(uh)

        assert_equal(utt_a.words(), [word, uh])
        assert_equal(utt_a.beg(), 0.05)
        assert_equal(utt_a.end(), 0.45)
        assert_equal(utt_a.dur(), 0.45 - 0.05)

    @raises(TypeError)
    def test_append_missing(self):
        self.empty_utt.append('the')

    @raises(ValueError)
    def test_append_overlap(self):
        word = Word('uh', 0.25, 0.45, ['ah'], ['ah'], 'UH')
        self.utt.append(word)

    @raises(TypeError)
    def test_append_beg_none(self):
        word = Word('uh', None, 0.45, ['ah'], ['ah'], 'UH')
        self.utt.append(word)

    @raises(TypeError)
    def test_append_end_none(self):
        word = Word('uh', 0.25, None, ['ah'], ['ah'], 'UH')
        self.utt.append(word)

    @raises(ValueError)
    def test_append_backwards(self):
        word = Word('uh', 1.95, 1.65, ['ah'], ['ah'], 'UH')
        self.empty_utt.append(word)

    def test_append_none(self):
        word = Word('the', 0.05, 0.25, ['dh', 'iy'], ['dh'], 'DT')
        utt_append_none = Utterance([word])

        none_word = Word('uh', None, None, ['ah'], ['ah'], 'UH')
        assert_raises(TypeError, utt_append_none.append, none_word)

        none_beg_word = Word('uh', None, 0.5, ['ah'], ['ah'], 'UH')
        assert_raises(TypeError, utt_append_none.append, none_beg_word)

        none_end_word = Word('uh', 0.65, None, ['ah'], ['ah'], 'UH')
        assert_raises(TypeError, utt_append_none.append, none_end_word)

    def test_len(self):
        assert_equal(len(self.utt), 6)

    def test_speech_rate(self):
        assert_equal(self.utt.speech_rate(), 4.0)
        assert_equal(self.utt.speech_rate(use_phonetic=False), 4.8)
        assert_raises(ValueError, self.empty_utt.speech_rate)
        assert_raises(ValueError, self.empty_utt.speech_rate, False)

    def test_speech_rate_pause_at_beg(self):
        words = [Pause(beg=0, end=0.39)] + self.words[2:]
        utt = Utterance(words)

        # raises
        assert_raises(ValueError, utt.speech_rate)
        assert_raises(ValueError, utt.speech_rate, False, 'raises')

        # zero
        assert_equal(utt.speech_rate(no_syllables='zero'), 3.2)

        # squeeze
        assert_equal(utt.speech_rate(no_syllables='squeeze'), 4/0.86)

    def test_speech_rate_pause_at_beg_and_middle(self):
        words = [Pause(beg=0, end=0.39)] + self.words[2:]
        words[2] = Pause(beg=0.55, end=0.73)
        utt = Utterance(words)

        # raises
        assert_raises(ValueError, utt.speech_rate)
        assert_raises(ValueError, utt.speech_rate, False, 'raises')

        # zero
        assert_equal(utt.speech_rate(no_syllables='zero'), 2.4)

        # squeeze
        assert_equal(utt.speech_rate(no_syllables='squeeze'), 3/0.86)

    def test_speech_rate_pause_at_end(self):
        utt = Utterance(self.words)
        utt.append(Pause(beg=1.25, end=1.50))

        # raises
        assert_raises(ValueError, utt.speech_rate)
        assert_raises(ValueError, utt.speech_rate, False, 'raises')

        # zero
        assert_equal(utt.speech_rate(no_syllables='zero'), 10/3)

        # squeeze
        assert_equal(utt.speech_rate(no_syllables='squeeze'), 4.0)

    def test_speech_rate_pause_at_end_and_middle(self):
        words = self.words + [Pause(beg=1.25, end=1.50)]
        words[-3] = Pause(beg=0.73, end=0.80)

        utt = Utterance(words)

        # raises
        assert_raises(ValueError, utt.speech_rate)
        assert_raises(ValueError, utt.speech_rate, False, 'raises')

        # zero
        assert_equal(utt.speech_rate(no_syllables='zero'), 8/3)

        # squeeze
        assert_equal(utt.speech_rate(no_syllables='squeeze'), 4/1.25)

    def test_speech_rate_none_at_edge(self):
        utt = Utterance(self.words[:])
        word = Word('the', None, 0.10, ['dh', 'iy'], ['dh'], 'DT')

        # normally there couldn't be a None-duration word in the utterance
        # anyway
        utt._words[0] = word

        assert_raises(TypeError, utt.speech_rate)
        assert_raises(TypeError, utt.speech_rate, False, 'zero')
        assert_raises(TypeError, utt.speech_rate, False, 'squeeze')

    def test_strip_beg_pause(self):
        pause = Pause(beg=0, end=0.55)
        utt_strip = Utterance([pause] + self.words[3:])

        utt_strip.strip()

        assert_not_in(pause, utt_strip)
        assert_equal(utt_strip.words(), self.words[3:])

    def test_strip_end_pause(self):
        pause = Pause(beg=1.25, end=1.85)
        utt_strip = Utterance(self.words + [pause])

        utt_strip.strip()

        assert_not_in(pause, utt_strip)
        assert_equal(utt_strip.words(), self.words)
    
    def test_strip_beg_zero(self):
        zero = Word('', 0.0, 0.0)
        utt_strip = Utterance([zero] + self.words)

        utt_strip.strip()

        assert_not_in(zero, utt_strip)
        assert_equal(utt_strip.words(), self.words)

    def test_strip_end_zero(self):
        zero = Word('', 1.25, 1.25)
        utt_strip = Utterance(self.words + [zero])

        utt_strip.strip()

        assert_not_in(zero, utt_strip)
        assert_equal(utt_strip.words(), self.words)

    def test_strip_beg_multiple(self):
        pause = Pause(beg=0, end=0.39)
        zero = Word('', 0.39, 0.39)
        utt_strip = Utterance()
        utt_strip._words = [pause, zero] + self.words[2:]
        
        utt_strip.strip()
        
        for entry in {pause, zero}:
            assert_not_in(entry, utt_strip)

        assert_equal(utt_strip.words(), self.words[2:])
    
    def test_strip_end_multiple(self):
        pause = Pause(beg=1.25, end=1.95)
        zero = Word('', 1.95, 1.95)
        utt_strip = Utterance()
        utt_strip._words = self.words + [pause, zero]

        utt_strip.strip()

        for entry in {pause, zero}:
            assert_not_in(entry, utt_strip)

        assert_equal(utt_strip.words(), self.words)

    def test_strip_pause_only(self):
        pause = Pause(beg=1.25, end=1.95)
        utt_strip = Utterance([pause])
        
        utt_strip.strip()
        
        assert_equal(utt_strip.words(), [])

    def test_repr(self):
        expected_repr = ("Utterance(["
                          "Word('the', 0, 0.1, ['dh', 'iy'], ['dh'], 'DT'), "
                          "Word('cat', 0.1, 0.39, ['k', 'ae', 't'], ['k', 'ae', 't'], 'NN'), "
                          "Word('is', 0.39, 0.55, ['ih', 'z'], ['ih', 'z'], 'VB'), "
                          "Word('on', 0.55, 0.73, ['aa', 'n'], ['aan'], 'IN'), "
                          "Word('the', 0.73, 0.8, ['dh', 'iy'], ['dh', 'uh'], 'DT'), "
                          "Word('mat', 0.8, 1.25, ['m', 'ae', 't'], ['m', 'ae', 't'], 'NN')"
                         "])")
        assert_equal(repr(self.utt), expected_repr)

    def test_str(self):
        assert_equal(str(self.utt), '<Utterance "the cat is on the mat">')