import pytest
from lxml import etree

from verbecc.src.defs.types.lang_code import LangCodeISO639_1 as Lang
from verbecc.src.defs.types.gender import Gender
from verbecc.src.defs.types.person import Person
from verbecc.src.conjugator.conjugator import Conjugator
from verbecc.src.parsers.tense_template import TenseTemplate
from verbecc.src.defs.types.alternates_behavior import AlternatesBehavior


@pytest.fixture(scope="module")
def cg():
    cg = Conjugator(lang="ca")
    yield cg


def test_all_verbs_have_templates(cg):
    verbs = cg.get_verbs()
    assert len(verbs) == 8616
    template_names = cg.get_template_names()
    assert len(template_names) == 66
    missing_verbs = []
    missing_templates = set()
    for verb in verbs:
        if verb.template not in template_names:
            missing_templates.add(verb.template)
            missing_verbs.append(verb)
    assert len(missing_templates) == len(missing_verbs) == 0


def test_find_verb_by_infinitive(cg):
    v = cg.find_verb_by_infinitive("abandonar")
    assert v.infinitive == "abandonar"
    assert v.template == "cant:ar"


@pytest.mark.parametrize(
    "infinitive,mood,tense,alternates_behavior,gender,expected_result",
    [
        (
            "ser",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo sóc",
                "tu ets",
                "ell és",
                "nosaltres som",
                "vosaltres sou",
                "ells són",
            ],
        ),
        (
            "ser",
            "indicatiu",
            "imperfet",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo era",
                "tu eres",
                "ell era",
                "nosaltres érem",
                "vosaltres éreu",
                "ells eren",
            ],
        ),
        (
            "ser",
            "indicatiu",
            "passat-simple",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo fui",
                "tu fores",
                "ell fou",
                "nosaltres fórem",
                "vosaltres fóreu",
                "ells foren",
            ],
        ),
        (
            "ser",
            "indicatiu",
            "futur",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo seré",
                "tu seràs",
                "ell serà",
                "nosaltres serem",
                "vosaltres sereu",
                "ells seran",
            ],
        ),
        (
            "ser",
            "subjuntiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo sigui",
                "tu siguis",
                "ell sigui",
                "nosaltres siguem",
                "vosaltres sigueu",
                "ells siguin",
            ],
        ),
        (
            "ser",
            "subjuntiu",
            "imperfet",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo fos",
                "tu fossis",
                "ell fos",
                "nosaltres fóssim",
                "vosaltres fóssiu",
                "ells fossin",
            ],
        ),
        (
            "ser",
            "condicional",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo seria",
                "tu series",
                "ell seria",
                "nosaltres seríem",
                "vosaltres seríeu",
                "ells serien",
            ],
        ),
        (
            "ser",
            "imperatiu",
            "imperatiu-present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            ["sigues", "sigui", "siguem", "sigueu", "siguin"],
        ),
        (
            "parlar",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo parlo",
                "tu parles",
                "ell parla",
                "nosaltres parlem",
                "vosaltres parleu",
                "ells parlen",
            ],
        ),
        (
            "parlar",
            "indicatiu",
            "imperfet",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo parlava",
                "tu parlaves",
                "ell parlava",
                "nosaltres parlàvem",
                "vosaltres parlàveu",
                "ells parlaven",
            ],
        ),
        (
            "parlar",
            "indicatiu",
            "passat-simple",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo parlí",
                "tu parlares",
                "ell parlà",
                "nosaltres parlàrem",
                "vosaltres parlàreu",
                "ells parlaren",
            ],
        ),
        (
            "parlar",
            "indicatiu",
            "futur",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo parlaré",
                "tu parlaràs",
                "ell parlarà",
                "nosaltres parlarem",
                "vosaltres parlareu",
                "ells parlaran",
            ],
        ),
        (
            "parlar",
            "subjuntiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo parli",
                "tu parlis",
                "ell parli",
                "nosaltres parlem",
                "vosaltres parleu",
                "ells parlin",
            ],
        ),
        (
            "parlar",
            "subjuntiu",
            "imperfet",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo parlés",
                "tu parlessis",
                "ell parlés",
                "nosaltres parléssim",
                "vosaltres parléssiu",
                "ells parlessin",
            ],
        ),
        (
            "parlar",
            "condicional",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo parlaria",
                "tu parlaries",
                "ell parlaria",
                "nosaltres parlaríem",
                "vosaltres parlaríeu",
                "ells parlarien",
            ],
        ),
        (
            "estar",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo estic",
                "tu estàs",
                "ell està",
                "nosaltres estem",
                "vosaltres esteu",
                "ells estan",
            ],
        ),
        (
            "estar",
            "indicatiu",
            "imperfet",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo estava",
                "tu estaves",
                "ell estava",
                "nosaltres estàvem",
                "vosaltres estàveu",
                "ells estaven",
            ],
        ),
        (
            "estar",
            "indicatiu",
            "passat-simple",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo estiguí",
                "tu estigueres",
                "ell estigué",
                "nosaltres estiguérem",
                "vosaltres estiguéreu",
                "ells estigueren",
            ],
        ),
        (
            "estar",
            "indicatiu",
            "futur",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo estaré",
                "tu estaràs",
                "ell estarà",
                "nosaltres estarem",
                "vosaltres estareu",
                "ells estaran",
            ],
        ),
        (
            "estar",
            "subjuntiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo estigui",
                "tu estiguis",
                "ell estigui",
                "nosaltres estiguem",
                "vosaltres estigueu",
                "ells estiguin",
            ],
        ),
        (
            "estar",
            "subjuntiu",
            "imperfet",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo estigués",
                "tu estiguessis",
                "ell estigués",
                "nosaltres estiguéssim",
                "vosaltres estiguéssiu",
                "ells estiguessin",
            ],
        ),
        (
            "estar",
            "condicional",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo estaria",
                "tu estaries",
                "ell estaria",
                "nosaltres estaríem",
                "vosaltres estaríeu",
                "ells estarien",
            ],
        ),
        (
            "haver",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo he",
                "tu has",
                "ell ha",
                "nosaltres havem",
                "vosaltres haveu",
                "ells han",
            ],
        ),
        (
            "haver",
            "indicatiu",
            "imperfet",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo havia",
                "tu havies",
                "ell havia",
                "nosaltres havíem",
                "vosaltres havíeu",
                "ells havien",
            ],
        ),
        (
            "haver",
            "indicatiu",
            "passat-simple",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo haguí",
                "tu hagueres",
                "ell hagué",
                "nosaltres haguérem",
                "vosaltres haguéreu",
                "ells hagueren",
            ],
        ),
        (
            "haver",
            "indicatiu",
            "futur",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo hauré",
                "tu hauràs",
                "ell haurà",
                "nosaltres haurem",
                "vosaltres haureu",
                "ells hauran",
            ],
        ),
        (
            "haver",
            "condicional",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo hauria",
                "tu hauries",
                "ell hauria",
                "nosaltres hauríem",
                "vosaltres hauríeu",
                "ells haurien",
            ],
        ),
        (
            "haver",
            "subjuntiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo hagi",
                "tu hagis",
                "ell hagi",
                "nosaltres hàgim",
                "vosaltres hàgiu",
                "ells hagin",
            ],
        ),
        (
            "tenir",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo tinc",
                "tu tens",
                "ell té",
                "nosaltres tenim",
                "vosaltres teniu",
                "ells tenen",
            ],
        ),
        (
            "fer",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo faig",
                "tu fas",
                "ell fa",
                "nosaltres fem",
                "vosaltres feu",
                "ells fan",
            ],
        ),
        (
            "fer",
            "indicatiu",
            "imperfet",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo feia",
                "tu feies",
                "ell feia",
                "nosaltres fèiem",
                "vosaltres fèieu",
                "ells feien",
            ],
        ),
        (
            "servir",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo serveixo",
                "tu serveixes",
                "ell serveix",
                "nosaltres servim",
                "vosaltres serviu",
                "ells serveixen",
            ],
        ),
        (
            "veure",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo veig",
                "tu veus",
                "ell veu",
                "nosaltres veiem",
                "vosaltres veieu",
                "ells veuen",
            ],
        ),
        (
            "abandonar",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo abandono",
                "tu abandones",
                "ell abandona",
                "nosaltres abandonem",
                "vosaltres abandoneu",
                "ells abandonen",
            ],
        ),
        (
            "rebre",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo rebo",
                "tu reps",
                "ell rep",
                "nosaltres rebem",
                "vosaltres rebeu",
                "ells reben",
            ],
        ),
        (
            "cabre",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo cabo",
                "tu caps",
                "ell cap",
                "nosaltres cabem",
                "vosaltres cabeu",
                "ells caben",
            ],
        ),
        (
            "començar",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo començo",
                "tu comences",
                "ell comença",
                "nosaltres comencem",
                "vosaltres comenceu",
                "ells comencen",
            ],
        ),
        (
            "enaiguar",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo enaiguo",
                "tu enaigües",
                "ell enaigua",
                "nosaltres enaigüem",
                "vosaltres enaigüeu",
                "ells enaigüen",
            ],
        ),
        (
            "envejar",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo envejo",
                "tu enveges",
                "ell enveja",
                "nosaltres envegem",
                "vosaltres envegeu",
                "ells envegen",
            ],
        ),
        (
            "esglaiar",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo esglaio",
                "tu esglaies",
                "ell esglaia",
                "nosaltres esglaiem",
                "vosaltres esglaieu",
                "ells esglaien",
            ],
        ),
        (
            "trencar",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo trenco",
                "tu trenques",
                "ell trenca",
                "nosaltres trenquem",
                "vosaltres trenqueu",
                "ells trenquen",
            ],
        ),
        (
            "perdre",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo perdo",
                "tu perds",
                "ell perd",
                "nosaltres perdem",
                "vosaltres perdeu",
                "ells perden",
            ],
        ),
        (
            "caure",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo caic",
                "tu caus",
                "ell cau",
                "nosaltres caiem",
                "vosaltres caieu",
                "ells cauen",
            ],
        ),
        (
            "collar",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo collo",
                "tu colles",
                "ell colla",
                "nosaltres collem",
                "vosaltres colleu",
                "ells collen",
            ],
        ),
        (
            "collir",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo cullo",
                "tu culls",
                "ell cull",
                "nosaltres collim",
                "vosaltres colliu",
                "ells cullen",
            ],
        ),
        (
            "dormir",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo dormo",
                "tu dorms",
                "ell dorm",
                "nosaltres dormim",
                "vosaltres dormiu",
                "ells dormen",
            ],
        ),
        (
            "tossir",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo tusso",
                "tu tusses",
                "ell tus",
                "nosaltres tossim",
                "vosaltres tossiu",
                "ells tussen",
            ],
        ),
        (
            "collir",
            "subjuntiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo culli",
                "tu cullis",
                "ell culli",
                "nosaltres collim",
                "vosaltres colliu",
                "ells cullin",
            ],
        ),
        (
            "dormir",
            "subjuntiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo dormi",
                "tu dormis",
                "ell dormi",
                "nosaltres dormim",
                "vosaltres dormiu",
                "ells dormin",
            ],
        ),
        (
            "tossir",
            "subjuntiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo tussi",
                "tu tussis",
                "ell tussi",
                "nosaltres tossim",
                "vosaltres tossiu",
                "ells tussin",
            ],
        ),
        (
            "dir",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo dic",
                "tu dius",
                "ell diu",
                "nosaltres diem",
                "vosaltres dieu",
                "ells diuen",
            ],
        ),
        (
            "anar",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo vaig",
                "tu vas",
                "ell va",
                "nosaltres anem",
                "vosaltres aneu",
                "ells van",
            ],
        ),
        (
            "poder",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo puc",
                "tu pots",
                "ell pot",
                "nosaltres podem",
                "vosaltres podeu",
                "ells poden",
            ],
        ),
        (
            "arribar",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo arribo",
                "tu arribes",
                "ell arriba",
                "nosaltres arribem",
                "vosaltres arribeu",
                "ells arriben",
            ],
        ),
        (
            "trobar",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo trobo",
                "tu trobes",
                "ell troba",
                "nosaltres trobem",
                "vosaltres trobeu",
                "ells troben",
            ],
        ),
        (
            "partir",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo parteixo",
                "tu parteixes",
                "ell parteix",
                "nosaltres partim",
                "vosaltres partiu",
                "ells parteixen",
            ],
        ),
        (
            "morir",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo moro",
                "tu mors",
                "ell mor",
                "nosaltres morim",
                "vosaltres moriu",
                "ells moren",
            ],
        ),
        (
            "eixir",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo ixo",
                "tu ixes",
                "ell ix",
                "nosaltres eixim",
                "vosaltres eixiu",
                "ells ixen",
            ],
        ),
        (
            "jaure",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo jec",
                "tu jeus",
                "ell jeu",
                "nosaltres jaiem",
                "vosaltres jaieu",
                "ells jeuen",
            ],
        ),
        (
            "jeure",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo jec",
                "tu jeus",
                "ell jeu",
                "nosaltres jaiem",
                "vosaltres jaieu",
                "ells jeuen",
            ],
        ),
        (
            "pagar",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo pago",
                "tu pagues",
                "ell paga",
                "nosaltres paguem",
                "vosaltres pagueu",
                "ells paguen",
            ],
        ),
        (
            "mentir",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo menteixo",
                "tu menteixes",
                "ell menteix",
                "nosaltres mentim",
                "vosaltres mentiu",
                "ells menteixen",
            ],
        ),
        (
            "desmentir",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo desmenteixo",
                "tu desmenteixes",
                "ell desmenteix",
                "nosaltres desmentim",
                "vosaltres desmentiu",
                "ells desmenteixen",
            ],
        ),
        (
            "nàixer",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo naixo",
                "tu naixes",
                "ell naix",
                "nosaltres naixem",
                "vosaltres naixeu",
                "ells naixen",
            ],
        ),
        (
            "néixer",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo naixo",
                "tu naixes",
                "ell naix",
                "nosaltres naixem",
                "vosaltres naixeu",
                "ells naixen",
            ],
        ),
        (
            "obrir",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo obro",
                "tu obres",
                "ell obre",
                "nosaltres obrim",
                "vosaltres obriu",
                "ells obren",
            ],
        ),
        (
            "riure",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo ric",
                "tu rius",
                "ell riu",
                "nosaltres riem",
                "vosaltres rieu",
                "ells riuen",
            ],
        ),
        (
            "pertànyer",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo pertanyo",
                "tu pertanys",
                "ell pertany",
                "nosaltres pertanyem",
                "vosaltres pertanyeu",
                "ells pertanyen",
            ],
        ),
        (
            "pertànyer",
            "indicatiu",
            "passat-simple",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo pertanyí",
                "tu pertanyeres",
                "ell pertanyé",
                "nosaltres pertanyérem",
                "vosaltres pertanyéreu",
                "ells pertanyeren",
            ],
        ),
        (
            "pertànyer",
            "indicatiu",
            "passat-simple",
            AlternatesBehavior.SecondOnly,
            Gender.m,
            [
                "jo pertanguí",
                "tu pertangueres",
                "ell pertangué",
                "nosaltres pertanguérem",
                "vosaltres pertanguéreu",
                "ells pertanguéren",
            ],
        ),
        (
            "fènyer",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo fenyo",
                "tu fenys",
                "ell feny",
                "nosaltres fenyem",
                "vosaltres fenyeu",
                "ells fenyen",
            ],
        ),
        (
            "córrer",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo corro",
                "tu corres",
                "ell corre",
                "nosaltres correm",
                "vosaltres correu",
                "ells corren",
            ],
        ),
        (
            "transcórrer",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo transcorro",
                "tu transcorres",
                "ell transcorre",
                "nosaltres transcorrem",
                "vosaltres transcorreu",
                "ells transcorren",
            ],
        ),
        (
            "imprimir",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            [
                "jo imprimeixo",
                "tu imprimeixes",
                "ell imprimeix",
                "nosaltres imprimim",
                "vosaltres imprimiu",
                "ells imprimeixen",
            ],
        ),
        (
            "imprimir",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo imprimeixo",
                "tu imprimeixes",
                "ella imprimeix",
                "nosaltres imprimim",
                "vosaltres imprimiu",
                "elles imprimeixen",
            ],
        ),
        (
            "vindre",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo vindo",
                "tu vinds",
                "ella vind",
                "nosaltres vindem",
                "vosaltres vindeu",
                "elles vinden",
            ],
        ),
        (
            "tòrcer",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo torço",
                "tu torces",
                "ella torça",
                "nosaltres torcem",
                "vosaltres torceu",
                "elles torcen",
            ],
        ),
        (
            "caldre",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "-",
                "-",
                "ella cal",
                "-",
                "-",
                "elles calen",
            ],
        ),
        (
            "obeir",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo obeeixo",
                "tu obeeixes",
                "ella obeeix",
                "nosaltres obeïm",
                "vosaltres obeïu",
                "elles obeeixen",
            ],
        ),
        (
            "beneir",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo beneeixo",
                "tu beneeixes",
                "ella beneeix",
                "nosaltres beneïm",
                "vosaltres beneïu",
                "elles beneeixen",
            ],
        ),
        (
            "coldre",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo colc",
                "tu cols",
                "ella col",
                "nosaltres colem",
                "vosaltres coleu",
                "elles colen",
            ],
        ),
        (
            "dissoldre",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo dissolc",
                "tu dissols",
                "ella dissol",
                "nosaltres dissolem",
                "vosaltres dissoleu",
                "elles dissolen",
            ],
        ),
        (
            "percudir",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo percudeixo",
                "tu percudeixes",
                "ella percudeix",
                "nosaltres percudim",
                "vosaltres percudiu",
                "elles percudeixen",
            ],
        ),
        (
            "percudir",
            "indicatiu",
            "present",
            AlternatesBehavior.SecondOnly,
            Gender.f,
            [
                "jo percudo",
                "tu percuts",
                "ella percut",
                "nosaltres percudim",
                "vosaltres percudiu",
                "elles percuden",
            ],
        ),
        (
            "permetre",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo permeto",
                "tu permets",
                "ella permet",
                "nosaltres permetem",
                "vosaltres permeteu",
                "elles permeten",
            ],
        ),
        (
            "desconèixer",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo desconec",
                "tu desconeixes",
                "ella desconeix",
                "nosaltres desconeixem",
                "vosaltres desconeixeu",
                "elles desconeixen",
            ],
        ),
        (
            "desconèixer",
            "indicatiu",
            "passat-simple",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo desconeguí",
                "tu desconegueres",
                "ella desconegué",
                "nosaltres desconeguérem",
                "vosaltres desconeguéreu",
                "elles desconegueren",
            ],
        ),
        (
            "parèixer",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo parec",
                "tu pareixes",
                "ella pareix",
                "nosaltres pareixem",
                "vosaltres pareixeu",
                "elles pareixen",
            ],
        ),
        (
            "expendre",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo expenc",
                "tu expens",
                "ella expèn",
                "nosaltres expenem",
                "vosaltres expeneu",
                "elles expenen",
            ],
        ),
        (
            "contendre",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo contenc",
                "tu contens",
                "ella contén",
                "nosaltres contenem",
                "vosaltres conteneu",
                "elles contenen",
            ],
        ),
        (
            "atènyer",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo atenyo",
                "tu atenys",
                "ella ateny",
                "nosaltres atenyem",
                "vosaltres atenyeu",
                "elles atenyen",
            ],
        ),
        (
            "descloure",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo descloc",
                "tu desclous",
                "ella desclou",
                "nosaltres descloem",
                "vosaltres descloeu",
                "elles desclouen",
            ],
        ),
        (
            "descloure",
            "particip",
            "particip",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            ["desclòs", "desclosa", "desclosos", "descloses"],
        ),
        (
            "cloure",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo cloc",
                "tu clous",
                "ella clou",
                "nosaltres cloem",
                "vosaltres cloeu",
                "elles clouen",
            ],
        ),
        (
            "abreviar",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo abrevio",
                "tu abrevies",
                "ella abrevia",
                "nosaltres abreviem",
                "vosaltres abrevieu",
                "elles abrevien",
            ],
        ),
        (
            "abreviar",
            "subjuntiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo abreviï",
                "tu abreviïs",
                "ella abreviï",
                "nosaltres abreviem",
                "vosaltres abrevieu",
                "elles abreviïn",
            ],
        ),
        (
            "abreviar",
            "imperatiu",
            "imperatiu-present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            ["abrevia", "abreviï", "abreviem", "abrevieu", "abreviïn"],
        ),
        (
            "compondre",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo componc",
                "tu compons",
                "ella compon",
                "nosaltres componem",
                "vosaltres componeu",
                "elles componen",
            ],
        ),
        (
            "contendre",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo contenc",
                "tu contens",
                "ella contén",
                "nosaltres contenem",
                "vosaltres conteneu",
                "elles contenen",
            ],
        ),
        (
            "complir",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo compleixo",
                "tu compleixes",
                "ella compleix",
                "nosaltres complim",
                "vosaltres compliu",
                "elles compleixen",
            ],
        ),
        (
            "establir",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo estableixo",
                "tu estableixes",
                "ella estableix",
                "nosaltres establim",
                "vosaltres establiu",
                "elles estableixen",
            ],
        ),
        (
            "complaure",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo complac",
                "tu complaus",
                "ella complau",
                "nosaltres complaem",
                "vosaltres complaeu",
                "elles complauen",
            ],
        ),
        (
            "desplaure",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo desplac",
                "tu desplaus",
                "ella desplau",
                "nosaltres desplaem",
                "vosaltres desplaeu",
                "elles desplauen",
            ],
        ),
        (
            "complaure",
            "particip",
            "particip",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            ["complagut", "complaguda", "complaguts", "complagudes"],
        ),
        (
            "acréixer",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo acreixo",
                "tu acreixes",
                "ella acreix",
                "nosaltres acreixem",
                "vosaltres acreixeu",
                "elles acreixen",
            ],
        ),
        (
            "acréixer",
            "indicatiu",
            "passat-simple",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo acreixí",
                "tu acreixeres",
                "ella acreixé",
                "nosaltres acreixérem",
                "vosaltres acreixéreu",
                "elles acreixeren",
            ],
        ),
        (
            "acréixer",
            "indicatiu",
            "passat-simple",
            AlternatesBehavior.SecondOnly,
            Gender.f,
            [
                "jo acresquí",
                "tu acresqueres",
                "ella acresqué",
                "nosaltres acresquérem",
                "vosaltres acresquéreu",
                "elles acresqueren",
            ],
        ),
        (
            "acréixer",
            "subjuntiu",
            "imperfet",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo acreixés",
                "tu acreixessis",
                "ella acreixés",
                "nosaltres acreixéssim",
                "vosaltres acreixéssiu",
                "elles acreixessin",
            ],
        ),
        (
            "acréixer",
            "subjuntiu",
            "imperfet",
            AlternatesBehavior.SecondOnly,
            Gender.f,
            [
                "jo acresqués",
                "tu acresquessis",
                "ella acresqués",
                "nosaltres acresquéssim",
                "vosaltres acresquéssiu",
                "elles acresquessin",
            ],
        ),
        (
            "merèixer",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo mereixo",
                "tu mereixes",
                "ella mereix",
                "nosaltres mereixem",
                "vosaltres mereixeu",
                "elles mereixen",
            ],
        ),
        (
            "confondre",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo confonc",
                "tu confons",
                "ella confon",
                "nosaltres confonem",
                "vosaltres confoneu",
                "elles confonen",
            ],
        ),
        (
            "consternar",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo consterno",
                "tu consternes",
                "ella consterna",
                "nosaltres consternem",
                "vosaltres consterneu",
                "elles consternen",
            ],
        ),
        (
            "contradir",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo contradic",
                "tu contradius",
                "ella contradiu",
                "nosaltres contradiem",
                "vosaltres contradieu",
                "elles contradiuen",
            ],
        ),
        (
            "contradir",
            "particip",
            "particip",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            ["contradit", "contradida", "contradits", "contradides"],
        ),
        (
            "dir",
            "particip",
            "particip",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            ["dit", "dita", "dits", "dites"],
        ),
        (
            "creure",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo crec",
                "tu creus",
                "ella creu",
                "nosaltres creiem",
                "vosaltres creieu",
                "elles creuen",
            ],
        ),
        (
            "creure",
            "indicatiu",
            "futur",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo creuré",
                "tu creuràs",
                "ella creurà",
                "nosaltres creurem",
                "vosaltres creureu",
                "elles creuran",
            ],
        ),
        (
            "dur",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo duc",
                "tu duus",
                "ella duu",
                "nosaltres duem",
                "vosaltres dueu",
                "elles duen",
            ],
        ),
        (
            "dur",
            "indicatiu",
            "present",
            AlternatesBehavior.SecondOnly,
            Gender.f,
            [
                "jo duc",
                "tu dus",
                "ella du",
                "nosaltres duem",
                "vosaltres dueu",
                "elles duen",
            ],
        ),
        (
            "dur",
            "imperatiu",
            "imperatiu-present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            ["duu", "dugui", "duguem", "dueu", "duguin"],
        ),
        (
            "dur",
            "imperatiu",
            "imperatiu-present",
            AlternatesBehavior.SecondOnly,
            Gender.m,
            ["du", "dugui", "duguem", "dueu", "duguin"],
        ),
        (
            "descosir",
            "indicatiu",
            "present",
            AlternatesBehavior.SecondOnly,
            Gender.f,
            [
                "jo descuso",
                "tu descuses",
                "ella descús",
                "nosaltres descosim",
                "vosaltres descosiu",
                "elles descusen",
            ],
        ),
        (
            "descosir",
            "subjuntiu",
            "present",
            AlternatesBehavior.SecondOnly,
            Gender.f,
            [
                "jo descusi",
                "tu descusis",
                "ella descusi",
                "nosaltres descosim",
                "vosaltres descosiu",
                "elles descusin",
            ],
        ),
        (
            "descosir",
            "imperatiu",
            "imperatiu-present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            ["descús", "descusi", "descosim", "descosiu", "descusin"],
        ),
        (
            "valer",
            "indicatiu",
            "present",
            AlternatesBehavior.SecondOnly,
            Gender.f,
            [
                "jo valc",
                "tu vals",
                "ella val",
                "nosaltres valem",
                "vosaltres valeu",
                "elles valen",
            ],
        ),
        (
            "valer",
            "indicatiu",
            "passat-simple",
            AlternatesBehavior.SecondOnly,
            Gender.f,
            [
                "jo valguí",
                "tu valgueres",
                "ella valgué",
                "nosaltres valguérem",
                "vosaltres valguéreu",
                "elles valgueren",
            ],
        ),
        (
            "doldre",
            "indicatiu",
            "present",
            AlternatesBehavior.SecondOnly,
            Gender.f,
            [
                "jo dolc",
                "tu dols",
                "ella dol",
                "nosaltres dolem",
                "vosaltres doleu",
                "elles dolen",
            ],
        ),
        (
            "entrelluir",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo entrelluo",
                "tu entrelluus",
                "ella entrelluu",
                "nosaltres entrelluïm",
                "vosaltres entrelluïu",
                "elles entrelluen",
            ],
        ),
        (
            "entrelluir",
            "indicatiu",
            "present",
            AlternatesBehavior.SecondOnly,
            Gender.f,
            [
                "jo entrelluo",
                "tu entrelluus",
                "ella entrellú",
                "nosaltres entrelluïm",
                "vosaltres entrelluïu",
                "elles entrelluen",
            ],
        ),
        (
            "entrelluir",
            "indicatiu",
            "imperfet",
            AlternatesBehavior.SecondOnly,
            Gender.f,
            [
                "jo entrelluïa",
                "tu entrelluïes",
                "ella entrelluïa",
                "nosaltres entrelluíem",
                "vosaltres entrelluíeu",
                "elles entrelluïen",
            ],
        ),
        (
            "entrelluir",
            "imperatiu",
            "imperatiu-present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            ["entrelluu", "entrelluï", "entrelluïm", "entrelluïu", "entrelluïn"],
        ),
        (
            "entrelluir",
            "imperatiu",
            "imperatiu-present",
            AlternatesBehavior.SecondOnly,
            Gender.m,
            ["entrellú", "entrelluï", "entrelluïm", "entrelluïu", "entrelluïn"],
        ),
        (
            "esglaiar",
            "indicatiu",
            "present",
            AlternatesBehavior.SecondOnly,
            Gender.f,
            [
                "jo esglaio",
                "tu esglaies",
                "ella esglaia",
                "nosaltres esglaiem",
                "vosaltres esglaieu",
                "elles esglaien",
            ],
        ),
        (
            "esglaiar",
            "indicatiu",
            "passat-simple",
            AlternatesBehavior.SecondOnly,
            Gender.f,
            [
                "jo esglaí",
                "tu esglaiares",
                "ella esglaià",
                "nosaltres esglaiàrem",
                "vosaltres esglaiàreu",
                "elles esglaiaren",
            ],
        ),
        (
            "esglaiar",
            "subjuntiu",
            "present",
            AlternatesBehavior.SecondOnly,
            Gender.f,
            [
                "jo esglaï",
                "tu esglaïs",
                "ella esglaï",
                "nosaltres esglaiem",
                "vosaltres esglaieu",
                "elles esglaïn",
            ],
        ),
        (
            "esglaiar",
            "imperatiu",
            "imperatiu-present",
            AlternatesBehavior.SecondOnly,
            Gender.m,
            ["esglaia", "esglaï", "esglaiem", "esglaieu", "esglaïn"],
        ),
        (
            "esglaiar",
            "particip",
            "particip",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            ["esglaiat", "esglaiada", "esglaiats", "esglaiades"],
        ),
        (
            "evacuar",
            "indicatiu",
            "present",
            AlternatesBehavior.SecondOnly,
            Gender.f,
            [
                "jo evacuo",
                "tu evacues",
                "ella evacua",
                "nosaltres evacuem",
                "vosaltres evacueu",
                "elles evacuen",
            ],
        ),
        (
            "evacuar",
            "subjuntiu",
            "present",
            AlternatesBehavior.SecondOnly,
            Gender.f,
            [
                "jo evacuï",
                "tu evacuïs",
                "ella evacuï",
                "nosaltres evacuem",
                "vosaltres evacueu",
                "elles evacuïn",
            ],
        ),
        (
            "evacuar",
            "imperatiu",
            "imperatiu-present",
            AlternatesBehavior.SecondOnly,
            Gender.m,
            ["evacua", "evacuï", "evacuem", "evacueu", "evacuïn"],
        ),
        (
            "tondre",
            "indicatiu",
            "present",
            AlternatesBehavior.SecondOnly,
            Gender.f,
            [
                "jo tonc",
                "tu tons",
                "ella ton",
                "nosaltres tonem",
                "vosaltres toneu",
                "elles tonen",
            ],
        ),
        (
            "fugir",
            "indicatiu",
            "present",
            AlternatesBehavior.SecondOnly,
            Gender.f,
            [
                "jo fujo",
                "tu fuges",
                "ella fuig",
                "nosaltres fugim",
                "vosaltres fugiu",
                "elles fugen",
            ],
        ),
        (
            "fugir",
            "imperatiu",
            "imperatiu-present",
            AlternatesBehavior.SecondOnly,
            Gender.m,
            ["fuig", "fugi", "fugim", "fugiu", "fugin"],
        ),
        (
            "imprimir",
            "indicatiu",
            "present",
            AlternatesBehavior.SecondOnly,
            Gender.f,
            [
                "jo imprimeixo",
                "tu imprimeixes",
                "ella imprimeix",
                "nosaltres imprimim",
                "vosaltres imprimiu",
                "elles imprimeixen",
            ],
        ),
        (
            "imprimir",
            "particip",
            "particip",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            ["imprès", "impresa", "impresos", "impreses"],
        ),
        (
            "ajeure",
            "indicatiu",
            "present",
            AlternatesBehavior.SecondOnly,
            Gender.f,
            [
                "jo ajec",
                "tu ajeus",
                "ella ajeu",
                "nosaltres ajaiem",
                "vosaltres ajaieu",
                "elles ajeuen",
            ],
        ),
        (
            "moldre",
            "indicatiu",
            "present",
            AlternatesBehavior.SecondOnly,
            Gender.f,
            [
                "jo molc",
                "tu mols",
                "ella mol",
                "nosaltres molem",
                "vosaltres moleu",
                "elles molen",
            ],
        ),
        (
            "malvendre",
            "indicatiu",
            "present",
            AlternatesBehavior.SecondOnly,
            Gender.f,
            [
                "jo malvenc",
                "tu malvens",
                "ella malvèn",
                "nosaltres malvenem",
                "vosaltres malveneu",
                "elles malvenen",
            ],
        ),
        (
            "malvendre",
            "indicatiu",
            "imperfet",
            AlternatesBehavior.SecondOnly,
            Gender.f,
            [
                "jo malvenia",
                "tu malvenies",
                "ella malvenia",
                "nosaltres malveníem",
                "vosaltres malveníeu",
                "elles malvenien",
            ],
        ),
        (
            "malvendre",
            "indicatiu",
            "passat-simple",
            AlternatesBehavior.SecondOnly,
            Gender.f,
            [
                "jo malvenguí",
                "tu malvengueres",
                "ella malvengué",
                "nosaltres malvenguérem",
                "vosaltres malvenguéreu",
                "elles malvengueren",
            ],
        ),
        (
            "malvendre",
            "subjuntiu",
            "present",
            AlternatesBehavior.SecondOnly,
            Gender.f,
            [
                "jo malvengui",
                "tu malvenguis",
                "ella malvengui",
                "nosaltres malvenguem",
                "vosaltres malvengueu",
                "elles malvenguin",
            ],
        ),
        (
            "malvendre",
            "subjuntiu",
            "imperfet",
            AlternatesBehavior.SecondOnly,
            Gender.f,
            [
                "jo malvengués",
                "tu malvenguessis",
                "ella malvengués",
                "nosaltres malvenguéssim",
                "vosaltres malvenguéssiu",
                "elles malvenguessin",
            ],
        ),
        (
            "omplir",
            "indicatiu",
            "present",
            AlternatesBehavior.SecondOnly,
            Gender.f,
            [
                "jo omplo",
                "tu omples",
                "ella omple",
                "nosaltres omplim",
                "vosaltres ompliu",
                "elles omplen",
            ],
        ),
        (
            "omplir",
            "particip",
            "particip",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            ["omplert", "omplerta", "omplerts", "omplertes"],
        ),
        (
            "omplir",
            "particip",
            "particip",
            AlternatesBehavior.SecondOnly,
            Gender.f,
            ["omplit", "omplida", "omplits", "omplides"],
        ),
        (
            "omplir",
            "imperatiu",
            "imperatiu-present",
            AlternatesBehavior.SecondOnly,
            Gender.m,
            ["omple", "ompli", "omplim", "ompliu", "omplin"],
        ),
        (
            "moure",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo moc",
                "tu mous",
                "ella mou",
                "nosaltres movem",
                "vosaltres moveu",
                "elles mouen",
            ],
        ),
        (
            "moure",
            "indicatiu",
            "passat-simple",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo moguí",
                "tu mogueres",
                "ella mogué",
                "nosaltres moguérem",
                "vosaltres moguéreu",
                "elles mogueren",
            ],
        ),
        (
            "moure",
            "indicatiu",
            "imperfet",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo movia",
                "tu movies",
                "ella movia",
                "nosaltres movíem",
                "vosaltres movíeu",
                "elles movien",
            ],
        ),
        (
            "absoldre",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo absolc",
                "tu absols",
                "ella absol",
                "nosaltres absolem",
                "vosaltres absoleu",
                "elles absolen",
            ],
        ),
        (
            "absoldre",
            "particip",
            "particip",
            AlternatesBehavior.SecondOnly,
            Gender.f,
            ["absolt", "absolta", "absolts", "absoltes"],
        ),
        (
            "obrir",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo obro",
                "tu obres",
                "ella obre",
                "nosaltres obrim",
                "vosaltres obriu",
                "elles obren",
            ],
        ),
        (
            "obrir",
            "particip",
            "particip",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            ["obert", "oberta", "oberts", "obertes"],
        ),
        (
            "prevenir",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo previnc",
                "tu prevens",
                "ella prevé",
                "nosaltres prevenim",
                "vosaltres preveniu",
                "elles prevenen",
            ],
        ),
        (
            "prevenir",
            "indicatiu",
            "passat-simple",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo previnguí",
                "tu previngueres",
                "ella previngué",
                "nosaltres previnguérem",
                "vosaltres previnguéreu",
                "elles previngueren",
            ],
        ),
        (
            "prevenir",
            "indicatiu",
            "imperfet",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo prevenia",
                "tu prevenies",
                "ella prevenia",
                "nosaltres preveníem",
                "vosaltres preveníeu",
                "elles prevenien",
            ],
        ),
        (
            "prevenir",
            "indicatiu",
            "futur",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo previndré",
                "tu previndràs",
                "ella previndrà",
                "nosaltres previndrem",
                "vosaltres previndreu",
                "elles previndran",
            ],
        ),
        (
            "prevenir",
            "subjuntiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo previngui",
                "tu previnguis",
                "ella previngui",
                "nosaltres previnguem",
                "vosaltres previngueu",
                "elles previnguin",
            ],
        ),
        (
            "prevenir",
            "subjuntiu",
            "imperfet",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo previngués",
                "tu previnguessis",
                "ella previngués",
                "nosaltres previnguéssim",
                "vosaltres previnguéssiu",
                "elles previnguessin",
            ],
        ),
        (
            "prevenir",
            "condicional",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo previndria",
                "tu previndries",
                "ella previndria",
                "nosaltres previndríem",
                "vosaltres previndríeu",
                "elles previndrien",
            ],
        ),
        (
            "prevenir",
            "particip",
            "particip",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            ["previngut", "previnguda", "previnguts", "previngudes"],
        ),
        (
            "prevenir",
            "imperatiu",
            "imperatiu-present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            ["prevén", "previngui", "previnguem", "preveniu", "previnguin"],
        ),
        (
            "sortir",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo surto",
                "tu surts",
                "ella surt",
                "nosaltres sortim",
                "vosaltres sortiu",
                "elles surten",
            ],
        ),
        (
            "sortir",
            "subjuntiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo surti",
                "tu surtis",
                "ella surti",
                "nosaltres sortim",
                "vosaltres sortiu",
                "elles surtin",
            ],
        ),
        (
            "sortir",
            "particip",
            "particip",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            ["sortit", "sortida", "sortits", "sortides"],
        ),
        (
            "sortir",
            "imperatiu",
            "imperatiu-present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            ["surt", "surti", "sortim", "sortiu", "surtin"],
        ),
        (
            "témer",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo temo",
                "tu tems",
                "ella tem",
                "nosaltres temem",
                "vosaltres temeu",
                "elles temen",
            ],
        ),
        (
            "témer",
            "infinitiu",
            "infinitiu-present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            ["témer"],
        ),
        (
            "témer",
            "gerundi",
            "gerundi",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            ["tement"],
        ),
        (
            "témer",
            "particip",
            "particip",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            ["temut", "temuda", "temuts", "temudes"],
        ),
        (
            "retraure",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo retrec",
                "tu retreus",
                "ella retreu",
                "nosaltres retraiem",
                "vosaltres retraieu",
                "elles retreuen",
            ],
        ),
        (
            "retraure",
            "indicatiu",
            "imperfet",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo retreia",
                "tu retreies",
                "ella retreia",
                "nosaltres retrèiem",
                "vosaltres retrèieu",
                "elles retreien",
            ],
        ),
        (
            "retraure",
            "indicatiu",
            "passat-simple",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo retraguí",
                "tu retragueres",
                "ella retragué",
                "nosaltres retraguérem",
                "vosaltres retraguéreu",
                "elles retragueren",
            ],
        ),
        (
            "retraure",
            "indicatiu",
            "futur",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo retraué",
                "tu retrauàs",
                "ella retrauà",
                "nosaltres retrauem",
                "vosaltres retraueu",
                "elles retrauan",
            ],
        ),
        (
            "retraure",
            "condicional",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo retrauia",
                "tu retrauies",
                "ella retrauia",
                "nosaltres retrauíem",
                "vosaltres retrauíeu",
                "elles retrauien",
            ],
        ),
        (
            "retraure",
            "subjuntiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo retregui",
                "tu retreguis",
                "ella retregui",
                "nosaltres retreguem",
                "vosaltres retregueu",
                "elles retreguin",
            ],
        ),
        (
            "premorir",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo premoro",
                "tu premors",
                "ella premor",
                "nosaltres premorim",
                "vosaltres premoriu",
                "elles premoren",
            ],
        ),
        (
            "conviure",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo convisc",
                "tu convius",
                "ella conviu",
                "nosaltres convivim",
                "vosaltres conviviu",
                "elles conviuen",
            ],
        ),
        (
            "conviure",
            "indicatiu",
            "imperfet",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo convivia",
                "tu convivies",
                "ella convivia",
                "nosaltres convivíem",
                "vosaltres convivíeu",
                "elles convivien",
            ],
        ),
        (
            "conviure",
            "indicatiu",
            "passat-simple",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo convisquí",
                "tu convisqueres",
                "ella convisqué",
                "nosaltres convisquérem",
                "vosaltres convisquéreu",
                "elles convisqueren",
            ],
        ),
        (
            "vèncer",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo venço",
                "tu vences",
                "ella venç",
                "nosaltres vencem",
                "vosaltres venceu",
                "elles vencen",
            ],
        ),
        (
            "vèncer",
            "imperatiu",
            "imperatiu-present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            ["venç", "venci", "vencem", "venceu", "vencin"],
        ),
        (
            "vèncer",
            "particip",
            "particip",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            ["vençut", "vençuda", "vençuts", "vençudes"],
        ),
        (
            "vèncer",
            "infinitiu",
            "infinitiu-present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            ["vèncer"],
        ),
        (
            "vèncer",
            "gerundi",
            "gerundi",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            ["vencent"],
        ),
        (
            "cerndre",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo cerno",
                "tu cerns",
                "ella cern",
                "nosaltres cernem",
                "vosaltres cerneu",
                "elles cernen",
            ],
        ),
        (
            "oir",
            "indicatiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo oeixo",
                "tu oeixes",
                "ella oeix",
                "nosaltres oïm",
                "vosaltres oïu",
                "elles oeixen",
            ],
        ),
        (
            "oir",
            "indicatiu",
            "imperfet",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo oïa",
                "tu oïes",
                "ella oïa",
                "nosaltres oíem",
                "vosaltres oíeu",
                "elles oïen",
            ],
        ),
        (
            "oir",
            "indicatiu",
            "passat-simple",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo oí",
                "tu oïres",
                "ella oí",
                "nosaltres oírem",
                "vosaltres oíreu",
                "elles oïren",
            ],
        ),
        (
            "oir",
            "indicatiu",
            "futur",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo oiré",
                "tu oiràs",
                "ella oirà",
                "nosaltres oirem",
                "vosaltres oireu",
                "elles oiran",
            ],
        ),
        (
            "oir",
            "subjuntiu",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo oeixi",
                "tu oeixis",
                "ella oeixi",
                "nosaltres oïm",
                "vosaltres oïu",
                "elles oeixin",
            ],
        ),
        (
            "oir",
            "subjuntiu",
            "imperfet",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo oís",
                "tu oïssis",
                "ella oís",
                "nosaltres oíssim",
                "vosaltres oíssiu",
                "elles oïssin",
            ],
        ),
        (
            "oir",
            "condicional",
            "present",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            [
                "jo oiria",
                "tu oiries",
                "ella oiria",
                "nosaltres oiríem",
                "vosaltres oiríeu",
                "elles oirien",
            ],
        ),
        (
            "oir",
            "particip",
            "particip",
            AlternatesBehavior.FirstOnly,
            Gender.f,
            ["oït", "oïda", "oïts", "oïdes"],
        ),
        (
            "oir",
            "infinitiu",
            "infinitiu-present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            ["oir"],
        ),
        (
            "oir",
            "gerundi",
            "gerundi",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            ["oint"],
        ),
        (
            "oir",
            "imperatiu",
            "imperatiu-present",
            AlternatesBehavior.FirstOnly,
            Gender.m,
            ["oeix", "oeixi", "oïm", "oïu", "oeixin"],
        ),
    ],
)
def test_inflector_ca_conjugate_mood_tense(
    cg, infinitive, mood, tense, alternates_behavior, gender, expected_result
):
    co = cg._get_conj_obs(infinitive)
    print("template:" + co.template.name)
    assert (
        cg.conjugate_mood_tense(infinitive, mood, tense, alternates_behavior, gender)
        == expected_result
    )


def test_inflector_ca_conjugate_simple_past(cg):
    assert cg.conjugate_mood_tense(
        "pertànyer",
        "indicatiu",
        "passat-simple",
        AlternatesBehavior.FirstOnly,
        Gender.m,
    ) == [
        "jo pertanyí",
        "tu pertanyeres",
        "ell pertanyé",
        "nosaltres pertanyérem",
        "vosaltres pertanyéreu",
        "ells pertanyeren",
    ]


def test_inflector_ca_conjugate_simple_past_alternate(cg):
    assert cg.conjugate_mood_tense(
        "pertànyer",
        "indicatiu",
        "passat-simple",
        AlternatesBehavior.SecondOnly,
        Gender.m,
    ) == [
        "jo pertanguí",
        "tu pertangueres",
        "ell pertangué",
        "nosaltres pertanguérem",
        "vosaltres pertanguéreu",
        "ells pertanguéren",
    ]


def test_inflector_ca_get_conj_obs(cg):
    co = cg._get_conj_obs("parlar")
    assert co.verb.infinitive == "parlar"
    assert co.verb_stem == "parl"
    assert co.template.name == "cant:ar"


def test_inflector_ca_get_conj_obs_2(cg):
    co = cg._get_conj_obs("abandonar")
    assert co.verb.infinitive == "abandonar"
    assert co.verb_stem == "abandon"
    assert co.template.name == "cant:ar"


def test_inflector_ca_get_conj_obs_3(cg):
    co = cg._get_conj_obs("pertànyer")
    assert co.verb.infinitive == "pertànyer"
    assert co.verb_stem == "pertàny"
    assert co.template.name == "pertàny:er"
    assert co.template.modify_stem == "strip-accents"


def test_inflector_ca_get_verb_stem_from_template_name(cg):
    verb_stem = cg._inflector._get_verb_stem_from_template_name("parlar", "cant:ar")
    assert verb_stem == "parl"


def test_inflector_ca_get_verb_stem_from_template_name_2(cg):
    verb_stem = cg._inflector._get_verb_stem_from_template_name("abandonar", "cant:ar")
    assert verb_stem == "abandon"


def test_inflector_ca_conjugate_simple_mood_tense(cg):
    mood = "indicatiu"
    tense = "present"
    verb_stem = "parl"
    tense_elem = etree.fromstring(
        """<present>
            <p><i>o</i></p>
            <p><i>es</i></p>
            <p><i>a</i></p>
            <p><i>em</i></p>
            <p><i>eu</i></p>
            <p><i>en</i></p>
        </present>""",
        parser=None,
    )
    tense_template = TenseTemplate(Lang.ca, mood, tense_elem)
    out = cg._conjugate_simple_mood_tense(verb_stem, mood, tense, tense_template)
    assert len(out) == 6
    assert out == [
        "jo parlo",
        "tu parles",
        "ell parla",
        "nosaltres parlem",
        "vosaltres parleu",
        "ells parlen",
    ]


@pytest.mark.parametrize(
    "person,gender,is_reflexive,expected_result",
    [
        (Person.FirstPersonSingular, Gender.m, False, "jo"),
        (Person.FirstPersonSingular, Gender.m, True, "jo me"),
        (Person.SecondPersonSingular, Gender.m, False, "tu"),
        (Person.SecondPersonSingular, Gender.m, True, "tu te"),
        (Person.ThirdPersonSingular, Gender.m, False, "ell"),
        (Person.ThirdPersonSingular, Gender.m, True, "ell se"),
        (Person.ThirdPersonSingular, Gender.f, False, "ella"),
        (Person.ThirdPersonSingular, Gender.f, True, "ella se"),
        (Person.FirstPersonPlural, Gender.m, False, "nosaltres"),
        (Person.FirstPersonPlural, Gender.m, True, "nosaltres nos"),
        (Person.SecondPersonPlural, Gender.m, False, "vosaltres"),
        (Person.SecondPersonPlural, Gender.m, True, "vosaltres os"),
        (Person.ThirdPersonPlural, Gender.m, False, "ells"),
        (Person.ThirdPersonPlural, Gender.m, True, "ells se"),
        (Person.ThirdPersonPlural, Gender.f, False, "elles"),
        (Person.ThirdPersonPlural, Gender.f, True, "elles se"),
    ],
)
def test_inflector_ca_get_default_pronoun(
    cg, person, gender, is_reflexive, expected_result
):
    assert (
        cg._inflector.get_default_pronoun(person, gender, is_reflexive=is_reflexive)
        == expected_result
    )


def test_inflector_conjugate(cg):
    assert cg.conjugate("ser") == {
        "verb": {
            "infinitive": "ser",
            "predicted": False,
            "pred_score": 1.0,
            "template": "és:ser",
            "translation_en": "be",
            "stem": "",
        },
        "moods": {
            "indicatiu": {
                "present": [
                    "jo sóc",
                    "tu ets",
                    "ell és",
                    "nosaltres som",
                    "vosaltres sou",
                    "ells són",
                ],
                "imperfet": [
                    "jo era",
                    "tu eres",
                    "ell era",
                    "nosaltres érem",
                    "vosaltres éreu",
                    "ells eren",
                ],
                "passat-simple": [
                    "jo fui",
                    "tu fores",
                    "ell fou",
                    "nosaltres fórem",
                    "vosaltres fóreu",
                    "ells foren",
                ],
                "futur": [
                    "jo seré",
                    "tu seràs",
                    "ell serà",
                    "nosaltres serem",
                    "vosaltres sereu",
                    "ells seran",
                ],
            },
            "subjuntiu": {
                "present": [
                    "jo sigui",
                    "tu siguis",
                    "ell sigui",
                    "nosaltres siguem",
                    "vosaltres sigueu",
                    "ells siguin",
                ],
                "imperfet": [
                    "jo fos",
                    "tu fossis",
                    "ell fos",
                    "nosaltres fóssim",
                    "vosaltres fóssiu",
                    "ells fossin",
                ],
            },
            "imperatiu": {
                "imperatiu-present": ["sigues", "sigui", "siguem", "sigueu", "siguin"]
            },
            "condicional": {
                "present": [
                    "jo seria",
                    "tu series",
                    "ell seria",
                    "nosaltres seríem",
                    "vosaltres seríeu",
                    "ells serien",
                ]
            },
            "infinitiu": {"infinitiu-present": ["ser"]},
            "gerundi": {"gerundi": ["sent"]},
            "particip": {"particip": ["estat", "estada", "estats", "estades"]},
        },
    }


def test_inflector_conjugate_with_alternates(cg):
    assert cg.conjugate("ser", include_alternates=True) == {
        "verb": {
            "infinitive": "ser",
            "predicted": False,
            "pred_score": 1.0,
            "template": "és:ser",
            "translation_en": "be",
            "stem": "",
        },
        "moods": {
            "indicatiu": {
                "present": [
                    ["jo sóc"],
                    ["tu ets"],
                    ["ell és"],
                    ["nosaltres som"],
                    ["vosaltres sou"],
                    ["ells són"],
                ],
                "imperfet": [
                    ["jo era"],
                    ["tu eres"],
                    ["ell era"],
                    ["nosaltres érem"],
                    ["vosaltres éreu"],
                    ["ells eren"],
                ],
                "passat-simple": [
                    ["jo fui"],
                    ["tu fores"],
                    ["ell fou"],
                    ["nosaltres fórem"],
                    ["vosaltres fóreu"],
                    ["ells foren"],
                ],
                "futur": [
                    ["jo seré"],
                    ["tu seràs"],
                    ["ell serà"],
                    ["nosaltres serem"],
                    ["vosaltres sereu"],
                    ["ells seran"],
                ],
            },
            "subjuntiu": {
                "present": [
                    ["jo sigui"],
                    ["tu siguis"],
                    ["ell sigui"],
                    ["nosaltres siguem"],
                    ["vosaltres sigueu"],
                    ["ells siguin"],
                ],
                "imperfet": [
                    ["jo fos"],
                    ["tu fossis"],
                    ["ell fos"],
                    ["nosaltres fóssim"],
                    ["vosaltres fóssiu"],
                    ["ells fossin"],
                ],
            },
            "imperatiu": {
                "imperatiu-present": [
                    ["sigues"],
                    ["sigui"],
                    ["siguem"],
                    ["sigueu"],
                    ["siguin"],
                ]
            },
            "condicional": {
                "present": [
                    ["jo seria", "jo fora"],
                    ["tu series", "tu fores"],
                    ["ell seria", "ell fora"],
                    ["nosaltres seríem", "nosaltres fórem"],
                    ["vosaltres seríeu", "vosaltres fóreu"],
                    ["ells serien", "ells foren"],
                ]
            },
            "infinitiu": {"infinitiu-present": [["ser", "ésser"]]},
            "gerundi": {"gerundi": [["sent", "essent"]]},
            "particip": {
                "particip": [
                    ["estat", "sigut"],
                    ["estada", "siguda"],
                    ["estats", "siguts"],
                    ["estades", "sigudes"],
                ]
            },
        },
    }


def test_inflector_conjugate_with_alternates_noconjpronouns(cg):
    assert cg.conjugate("ser", include_alternates=True, conjugate_pronouns=False) == {
        "verb": {
            "infinitive": "ser",
            "predicted": False,
            "pred_score": 1.0,
            "template": "és:ser",
            "translation_en": "be",
            "stem": "",
        },
        "moods": {
            "indicatiu": {
                "present": [
                    ["sóc"],
                    ["ets"],
                    ["és"],
                    ["som"],
                    ["sou"],
                    ["són"],
                ],
                "imperfet": [
                    ["era"],
                    ["eres"],
                    ["era"],
                    ["érem"],
                    ["éreu"],
                    ["eren"],
                ],
                "passat-simple": [
                    ["fui"],
                    ["fores"],
                    ["fou"],
                    ["fórem"],
                    ["fóreu"],
                    ["foren"],
                ],
                "futur": [
                    ["seré"],
                    ["seràs"],
                    ["serà"],
                    ["serem"],
                    ["sereu"],
                    ["seran"],
                ],
            },
            "subjuntiu": {
                "present": [
                    ["sigui"],
                    ["siguis"],
                    ["sigui"],
                    ["siguem"],
                    ["sigueu"],
                    ["siguin"],
                ],
                "imperfet": [
                    ["fos"],
                    ["fossis"],
                    ["fos"],
                    ["fóssim"],
                    ["fóssiu"],
                    ["fossin"],
                ],
            },
            "imperatiu": {
                "imperatiu-present": [
                    ["sigues"],
                    ["sigui"],
                    ["siguem"],
                    ["sigueu"],
                    ["siguin"],
                ]
            },
            "condicional": {
                "present": [
                    ["seria", "fora"],
                    ["series", "fores"],
                    ["seria", "fora"],
                    ["seríem", "fórem"],
                    ["seríeu", "fóreu"],
                    ["serien", "foren"],
                ]
            },
            "infinitiu": {"infinitiu-present": [["ser", "ésser"]]},
            "gerundi": {"gerundi": [["sent", "essent"]]},
            "particip": {
                "particip": [
                    ["estat", "sigut"],
                    ["estada", "siguda"],
                    ["estats", "siguts"],
                    ["estades", "sigudes"],
                ]
            },
        },
    }
