def tag_map_multiple_tags(): return TagMap(("+A", ("+B", "+C"), 1), ("+X", "+Y", 2))
def simple_tag_map(): return TagMap(("+A", "abc+", 1))
def tag_map_with_both_plusses_on_left_side(): return TagMap(("+A", "+B", 1), ("+C", "+X", 2))
def tag_map_with_default(): return TagMap(("+A", TagMap.COPY_TAG_NAME, 1), (TagMap.DEFAULT, "+B", 1))
def test_can_supply_multiple_defaults(): with pytest.raises( Exception, match=re.escape("multiple defaults supplied for precedence 1: +A, +B"), ): TagMap((TagMap.DEFAULT, "+A", 1), (TagMap.DEFAULT, "+B", 1))
def tag_map_wth_multi_map(): return TagMap( (("+A", "+B"), "abc+", 1), ("+A", TagMap.COPY_TAG_NAME, 2), ("+B", TagMap.COPY_TAG_NAME, 3), )
def tag_map_with_multiples(): return TagMap( ("+A", TagMap.COPY_TAG_NAME, 1), ("+A2", "A+", 1), ("+B", TagMap.COPY_TAG_NAME, 2), )
def tag_map_with_precedence(): return TagMap(("+A", "abc+", 1), ("+B", TagMap.COPY_TAG_NAME, 2), ("+C", None, 0))
verb_tag_map = TagMap( # Tense ("+Prt", ("PV/ki+", "+Ind"), 1), # Preterite aka simple past ("+Cond", ("+Fut", "+Cond"), 1), # Future conditional ("+Imm", ("+Imp", "+Imm"), 1), # Immediate imperative ("+Del", ("+Imp", "+Del"), 1), # Delayed imperative ("+Fut", ("PV/wi+", "+Ind"), 1), # Future # TODO: also handle ("+Fut", "PV/wi+", 1) # Also accept PV/wi without independent as future? # Note that these crk features as disjoint, but both are needed for the eng feature ("+Def", ("PV/ka+", "+Ind"), 1), ("+Inf", ("PV/ka+", "+Cnj"), 1), (TagMap.DEFAULT, "+Ind", 1), # Person - see https://github.com/UAlbertaALTLab/morphodict/issues/891 ("+0Sg", "+3Sg", 2), ( "+21Pl", "+12Pl", 2, ), # see https://github.com/UAlbertaALTLab/morphodict/issues/1005 # Person - object ("+0SgO", (), 3), ( "+21PlO", "+12PlO", 3, ), # see https://github.com/UAlbertaALTLab/morphodict/issues/1005 # TODO: also handle "+Inf": ("PV/ta+", "+Cnj") # future definite? *passthrough_tags_to_tuples(verb_passthrough_tags)) noun_tag_map = TagMap(("+Dim", "+Der/Dim", 2), ("+Px21Pl", "+Px12Pl", 2),
COPY_TAG_NAME = TagMap.COPY_TAG_NAME noun_wordform_to_phrase = TagMap( ("+N", None, 0), ("+A", None, 0), ("+I", None, 0), ("+D", None, 0), # Number ("+Sg", COPY_TAG_NAME, 1), ("+Pl", COPY_TAG_NAME, 1), ("+Obv", COPY_TAG_NAME, 1), ("+Loc", COPY_TAG_NAME, 1), ("+Distr", COPY_TAG_NAME, 1), # Diminutive ("+Dim", COPY_TAG_NAME, 2), ("+Der/Dim", "Dim+", 2), # Possessives ("+Px1Sg", COPY_TAG_NAME, 3), ("+Px2Sg", COPY_TAG_NAME, 3), ("+Px3Sg", COPY_TAG_NAME, 3), ("+Px1Pl", COPY_TAG_NAME, 3), ("+Px2Pl", COPY_TAG_NAME, 3), ("+Px12Pl", COPY_TAG_NAME, 3), # Maybe needs to be recoded with 12 -> 21 ("+Px3Pl", COPY_TAG_NAME, 3), ("+Px4Sg/Pl", COPY_TAG_NAME, 3), ("+PxX", COPY_TAG_NAME, 3), ) # Normally having a preverb tag excludes a wordform from auto-translation; this # list specifies exceptions to that rule for grammatical preverbs.