def test_amor(self): line = Line('amor') syllables = line.syllables self.assertCountEqual( reduce_to_text(syllables), Multiple( [ Syllable('a'), Syllable(ConsonantCluster('m'), 'o', ConsonantCluster('r')) ] ) ) a, mor = syllables[0] self.assertEqual(reduce_to_text(a.vowel), 'a') self.assertTrue(a.is_open) self.assertFalse(a.is_closed) self.assertTrue(a.could_be_heavy) self.assertTrue(a.could_be_light) self.assertEqual(a.vowel.is_long, Unknown) self.assertEqual(reduce_to_text(mor.vowel), 'o') self.assertFalse(mor.is_open) self.assertTrue(mor.is_closed) self.assertTrue(mor.could_be_heavy) self.assertFalse(mor.could_be_light)
def test_no_elision(self): self.assertCountEqual( reduce_to_text(Line('non ego').with_elisions), Multiple( ['n', 'o', 'n', 'e', 'g', 'o'] ) )
def test_ait(self): self.assertCountEqual( reduce_to_text(Line('ait').letters), [ ['a', 'i', 't'], ] )
def test_bis(self): self.assertCountEqual( reduce_to_text(Line('bis').letters), [ ['b', 'i', 's'], ] )
def test_am_or(self): self.assertCountEqual( reduce_to_text(Line('am or').with_elisions), Multiple( ['a', 'm', 'o', 'r'] ) )
def test_mori(self): self.assertCountEqual( reduce_to_text(Line('vmori').letters), [ ['u', 'm', 'o', 'r', 'i'], # vmorj, etc. are not possible ] )
def test_cui(self): self.assertCountEqual( reduce_to_text(Line('cui').letters), ( ['c', 'uj'], ['c', 'u', 'i'] ) )
def test_julius(self): self.assertCountEqual( reduce_to_text(Line('Julius').letters), Multiple( ['i', 'u', 'l', 'i', 'u', 's'], ['i', 'u', 'l', 'j', 'u', 's'], ['j', 'u', 'l', 'i', 'u', 's'], ['j', 'u', 'l', 'j', 'u', 's'], ) )
def test_amo(self): self.assertCountEqual( reduce_to_text(Line('amo').syllables), Multiple( [ Syllable('a'), Syllable(ConsonantCluster('m'), 'o') ] ) )
def test_urbsa(self): self.assertCountEqual( reduce_to_text(Line('urbsa').syllables), Multiple( [ Syllable('u', ConsonantCluster('r', 'b')), Syllable(ConsonantCluster('s'), 'a') ] ) )
def test_laviniaque(self): self.assertCountEqual( reduce_to_text(Line('laviniaque').letters), [ ['l', 'a', 'v', 'i', 'n', 'i', 'a', 'qu', 'e'], ['l', 'a', 'v', 'i', 'n', 'j', 'a', 'qu', 'e'], ['l', 'au', 'i', 'n', 'i', 'a', 'qu', 'e'], ['l', 'au', 'i', 'n', 'j', 'a', 'qu', 'e'], ['l', 'a', 'u', 'i', 'n', 'i', 'a', 'qu', 'e'], ['l', 'a', 'u', 'i', 'n', 'j', 'a', 'qu', 'e'], ] )
def test_two_elisions(self): line = Line('rem hida it') letters = generate_elisions(line.letters) self.assertCountEqual( reduce_to_text(letters), Multiple( ['r', Elision('e', 'm', 'h'), 'i', 'd', Elision('a'), 'i', 't'], ['r', 'e', 'm', hiatus, 'h', 'i', 'd', Elision('a'), 'i', 't'], ['r', Elision('e', 'm', 'h'), 'i', 'd', 'a', hiatus, 'i', 't'], ['r', 'e', 'm', hiatus, 'h', 'i', 'd', 'a', hiatus, 'i', 't'], ) )
def test_non_ego(self): line = Line('non ego') syllables = line.syllables self.assertCountEqual( reduce_to_text(syllables), Multiple( [ Syllable(ConsonantCluster('n'), 'o'), Syllable(ConsonantCluster('n'), 'e'), Syllable(ConsonantCluster('g'), 'o') ] ) )
def test_urbs_an(self): self.assertCountEqual( reduce_to_text(Line('urbs an').with_clusters), Multiple( [ 'u', ConsonantCluster('r', 'b'), ConsonantCluster('s'), 'a', ConsonantCluster('n') ] ) )
def test_tenebra(self): self.assertCountEqual( reduce_to_text(Line('tenebra').syllables), Multiple( [ Syllable(ConsonantCluster('t'), 'e'), Syllable(ConsonantCluster('n'), 'e'), Syllable(ConsonantCluster('b', 'r'), 'a') ], [ Syllable(ConsonantCluster('t'), 'e'), Syllable(ConsonantCluster('n'), 'e', ConsonantCluster('b')), Syllable(ConsonantCluster('r'), 'a') ] ) )
def test_testvar(self): c_map = CombinatoricMap(MakeInto(Letter), (Target('a', TestVar('C', is_consonant), 'e'), ReplaceWith(['A', Var('C'), 'E'])), (Target(Var('A', Any)), ReplaceWith([Var('A')])) ) input = 'garebaie' self.assertCountEqual( reduce_to_text(c_map.map(input)), ( ['g', 'A', 'r', 'E', 'b', 'a', 'i', 'e'], ) )
def test_basics(self): self.assertCountEqual( reduce_to_text(Line('blurbsit blabst').with_clusters), # Only 'urbs' gets split multiple ways, since it's in the # middle of a word. Multiple( [ ConsonantCluster('b', 'l'), 'u', ConsonantCluster('r'), ConsonantCluster('b', 's'), 'i', ConsonantCluster('t'), ConsonantCluster('b', 'l'), 'a', ConsonantCluster('b', 's', 't') ], [ ConsonantCluster('b', 'l'), 'u', ConsonantCluster('r', 'b'), ConsonantCluster('s'), 'i', ConsonantCluster('t'), ConsonantCluster('b', 'l'), 'a', ConsonantCluster('b', 's', 't') ], [ ConsonantCluster('b', 'l'), 'u', ConsonantCluster('r', 'b', 's'), 'i', ConsonantCluster('t'), ConsonantCluster('b', 'l'), 'a', ConsonantCluster('b', 's', 't') ], ) )
def test_simplest(self): line = Line('re id') letters = generate_elisions(line.letters) self.assertEqual(letters[0][0].__class__, Letter) self.assertCountEqual( reduce_to_text(letters), Multiple( ['r', Elision('e'), 'i', 'd'], ['r', 'e', hiatus, 'i', 'd'], ) ) self.assertCountEqual( [' '.join(str(letter) for letter in e) for e in line.with_elisions ], [ 'r(e) i d', 'r e i d' ] )
def reduced_to_text(self): return Syllable(*[reduce_to_text(cl) for cl in self.elems])
def reduced_to_text(self): return ConsonantCluster(*[reduce_to_text(l) for l in self.letters])
def __repr__(self): return '\nCombinatoricAlternatives(%s)' % ', '.join( repr(reduce_to_text(a)) for a in self.alternatives )
def reduced_to_text(self): return self.__class__( *[reduce_to_text(sy) for sy in self.raw_syllables] )