LX_POS_TAGS = {
    "ADJ",
    "ADV",
    "CARD",
    "CJ",
    "CL",
    "CN",
    "DA",
    "DEM",
    "DFR",
    "DGT",
    "DGTR",
    "DM",
    "EADR",
    "EL",
    "EMP",
    "EOE",
    "EXC",
    "GER",
    "IA",
    "IND",
    "INF",
    "INT",
    "ITJ",
    "LADV1",
    "LADV2",
    "LADV3",
    "LADV4",
    "LADV5",
    "LADV6",
    "LADV7",
    "LCJ1",
    "LCJ2",
    "LCJ3",
    "LCJ4",
    "LCJ5",
    "LD1",
    "LD2",
    "LDEM1",
    "LDEM2",
    "LDFR1",
    "LDFR2",
    "LDM1",
    "LDM2",
    "LDM3",
    "LINT1",
    "LINT2",
    "LITJ1",
    "LITJ2",
    "LITJ3",
    "LPREP1",
    "LPREP2",
    "LPREP3",
    "LPREP4",
    "LPREP5",
    "LPREP6",
    "LPRS1",
    "LPRS2",
    "LQD1",
    "LQD2",
    "LREL1",
    "LREL2",
    "LTR",
    "MGT",
    "MTH",
    "NP",
    "NULL",
    "ORD",
    "PADR",
    "PL",
    "PNM",
    "PNT",
    "POSS",
    "PP",
    "PPA",
    "PPT",
    "PREP",
    "PRS",
    "QNT",
    "REL",
    "SC",
    "STT",
    "SYB",
    "TERMN",
    "UM",
    "UNIT",
    "V",
    "VAUX",
    "VAUXGER",
    "VAUXINF",
    "WD",
    "X",
}

U_POS_TAGS = {
    "ADJ",
    "ADP",
    "ADV",
    "AUX",
    "CCONJ",
    "DET",
    "INT",
    "INTJ",
    "NOUN",
    "NUM",
    "PRON",
    "PROPN",
    "PUNCT",
    "SCONJ",
    "SYM",
    "VERB",
    "X",
}

LX_DEPREL_TAGS = {
    "ADV",
    "C-ARG1",
    "C-ARG2",
    "C-ARG3",
    "C",
    "CARD",
    "CONJ",
    "COORD",
    "DEM",
    "DEP",
    "DM",
    "DO-ARG1",
    "DO-ARG2",
    "DO-ARG21",
    "DO-ARG3",
    "DO-TMP",
    "DO",
    "ERROR",
    "INT",
    "IO-ARG2",
    "IO-ARG3",
    "IO-ARG31",
    "ITJ",
    "M-ADV",
    "M-ARG1",
    "M-ARG2",
    "M-CAU",
    "M-DIR",
    "M-EXT",
    "M-LOC",
    "M-M",
    "M-MNR",
    "M-PNC",
    "M-POV",
    "M-PRED",
    "M-TMP",
    "M",
    "N",
    "OBL-ADV",
    "OBL-ARG1",
    "OBL-ARG2",
    "OBL-ARG3",
    "OBL-ARG4",
    "ORD",
    "P",
    "PERCENT",
    "POSS",
    "PRD-ARG2",
    "PRD-ARG3",
    "PRD-ARG4",
    "PRD",
    "PRS",
    "PUNCT",
    "QNT",
    "REL",
    "ROOT",
    "S",
    "SJ-ARG1",
    "SJ-ARG11",
    "SJ-ARG11cp",
    "SJ-ARG1cp",
    "SJ-ARG2",
    "SJ-ARG21cp",
    "SJ-ARG2ac",
    "SJ-ARG2cp",
    "SJ",
    "SP-ARG1",
    "SP-ARG2",
    "SP-M",
    "SP-PRED",
    "SP",
    "V",
}

U_DEPREL_TAGS = {
    # only contains UD V2 tags that occur in CINTIL, i.e. tags known to our DepParser
    "advcl",
    "advmod",
    "amod",
    "appos",
    "aux",
    "case",
    "cc",
    "ccomp",
    "comp",
    "conj",
    "cop",
    "csubj:pass",
    "csubj",
    "dep",
    "det",
    "fixed",
    "iobj",
    "mark",
    "mod",
    "nsubj",
    "num",
    "number",
    "obj",
    "parataxis",
    "pobj",
    "poss",
    "preconj",
    "predet",
    "punct",
    "root",
    "xcomp",
}

U_DEPREL_TAGS_V1_TO_V2 = {
    # https://universaldependencies.org/v2/summary.html#clauses-and-dependents-of-predicates
    "dobj": "obj",
    "nsubjpass": "nsubj:pass",  # does not occur in CINTIL
    "csubjpass": "csubj:pass",
    "auxpass": "aux:pass",  # does not occur in CINTIL
    # https://universaldependencies.org/v2/summary.html#multiword-expressions
    "mwe": "fixed",
}

LX_FEATS = {
    "1p",
    "1s",
    "2p",
    "2s",
    "3p",
    "3s",
    "c-1p",
    "c-1s",
    "c-2p",
    "c-2s",
    "c-3p",
    "c-3s",
    "fc-1p",
    "fc-1s",
    "fc-2s",
    "fc-3p",
    "fc-3s",
    "fi-1p",
    "fi-1s",
    "fi-2p",
    "fi-2s",
    "fi-3p",
    "fi-3s",
    "fp-comp",
    "fp-dim",
    "fp-sup",
    "fp",
    "fp1",
    "fp2",
    "fp3",
    "fs-comp-dim",
    "fs-comp",
    "fs-dim",
    "fs-sup",
    "fs",
    "fs1",
    "fs2",
    "fs3",
    "gn",
    "gn13",
    "gn3",
    "gp-comp",
    "gp",
    "gp1",
    "gp2",
    "gp3",
    "gs-comp",
    "gs-sup",
    "gs",
    "gs1",
    "gs2",
    "gs3",
    "ic-1p",
    "ic-1s",
    "ic-2s",
    "ic-3p",
    "ic-3s",
    "ii-1p",
    "ii-1s",
    "ii-2s",
    "ii-3p",
    "ii-3s",
    "imp-1p",
    "imp-2p",
    "imp-2s",
    "imp-Cp",
    "imp-Cs",
    "impaf-2p",
    "impaf-2s",
    "impneg-2p",
    "impneg-2s",
    "mn",
    "mp-comp",
    "mp-dim",
    "mp-sup",
    "mp",
    "mp1",
    "mp2",
    "mp3",
    "mpC",
    "mpi-1p",
    "mpi-1s",
    "mpi-3p",
    "mpi-3s",
    "ms-comp-dim",
    "ms-comp",
    "ms-dim",
    "ms-sup-dim",
    "ms-sup",
    "ms",
    "ms1",
    "ms2",
    "ms3",
    "ndef",
    "ninf",
    "np",
    "pc-1p",
    "pc-1s",
    "pc-2p",
    "pc-2s",
    "pc-3p",
    "pc-3s",
    "pi-1p",
    "pi-1s",
    "pi-2p",
    "pi-2s",
    "pi-3p",
    "pi-3s",
    "pi-Cp",
    "ppi-1p",
    "ppi-1s",
    "ppi-2p",
    "ppi-2s",
    "ppi-3p",
    "ppi-3s",
}

# This was obtained from values of lx2u.feats.LX_FEATS_TO_U_FEATS.
# The ones that pass through _get_add_verb_form_inf_callable appear twice, once
# as they are, another with |VerbForm=Inf appended to them.
# The resulting list has been sorted and de-duplicated.
U_FEATS = {
    "Degree=Abs|Gender=Fem|Number=Plur",
    "Degree=Abs|Gender=Fem|Number=Sing",
    "Degree=Cmp|Gender=Fem|Number=Plur",
    "Degree=Cmp|Gender=Fem|Number=Sing",
    "Gender=Fem|Number=Plur",
    "Gender=Fem|Number=Plur|Person=1",
    "Gender=Fem|Number=Plur|Person=2",
    "Gender=Fem|Number=Plur|Person=3",
    "Gender=Fem|Number=Sing",
    "Gender=Fem|Number=Sing|Person=1",
    "Gender=Fem|Number=Sing|Person=2",
    "Gender=Fem|Number=Sing|Person=3",
    "Gender=Masc",
    "Gender=Masc|Number=Plur",
    "Gender=Masc|Number=Plur|Degree=Abs",
    "Gender=Masc|Number=Plur|Degree=Cmp",
    "Gender=Masc|Number=Plur|Person=1",
    "Gender=Masc|Number=Plur|Person=2",
    "Gender=Masc|Number=Plur|Person=2|Polite=Form",
    "Gender=Masc|Number=Plur|Person=3",
    "Gender=Masc|Number=Sing",
    "Gender=Masc|Number=Sing|Degree=Abs",
    "Gender=Masc|Number=Sing|Degree=Cmp",
    "Gender=Masc|Number=Sing|Person=1",
    "Gender=Masc|Number=Sing|Person=2",
    "Gender=Masc|Number=Sing|Person=3",
    "Mood=Cnd|Number=Plur|Person=1",
    "Mood=Cnd|Number=Plur|Person=2",
    "Mood=Cnd|Number=Plur|Person=3",
    "Mood=Cnd|Number=Sing|Person=1",
    "Mood=Cnd|Number=Sing|Person=2",
    "Mood=Cnd|Number=Sing|Person=3",
    "Mood=Imp|Person=1|Number=Plur",
    "Mood=Imp|Person=2|Number=Plur",
    "Mood=Imp|Person=2|Number=Sing",
    "Mood=Imp|Person=2|Polite=Form|Number=Plur",
    "Mood=Imp|Person=2|Polite=Form|Number=Sing",
    "Mood=Ind|Number=Plur|Person=1|Tense=Fut",
    "Mood=Ind|Number=Plur|Person=1|Tense=Past",
    "Mood=Ind|Number=Plur|Person=1|Tense=Pres",
    "Mood=Ind|Number=Plur|Person=2|Polite=Form|Tense=Pres",
    "Mood=Ind|Number=Plur|Person=2|Tense=Fut",
    "Mood=Ind|Number=Plur|Person=2|Tense=Past",
    "Mood=Ind|Number=Plur|Person=2|Tense=Pres",
    "Mood=Ind|Number=Plur|Person=3|Tense=Fut",
    "Mood=Ind|Number=Plur|Person=3|Tense=Past",
    "Mood=Ind|Number=Plur|Person=3|Tense=Pres",
    "Mood=Ind|Number=Sing|Person=1|Tense=Fut",
    "Mood=Ind|Number=Sing|Person=1|Tense=Past",
    "Mood=Ind|Number=Sing|Person=1|Tense=Pres",
    "Mood=Ind|Number=Sing|Person=2|Tense=Fut",
    "Mood=Ind|Number=Sing|Person=2|Tense=Past",
    "Mood=Ind|Number=Sing|Person=2|Tense=Pres",
    "Mood=Ind|Number=Sing|Person=3|Tense=Fut",
    "Mood=Ind|Number=Sing|Person=3|Tense=Past",
    "Mood=Ind|Number=Sing|Person=3|Tense=Pres",
    "Mood=Sub|Number=Plur|Person=1|Tense=Fut",
    "Mood=Sub|Number=Plur|Person=1|Tense=Pres",
    "Mood=Sub|Number=Plur|Person=2|Tense=Pres",
    "Mood=Sub|Number=Plur|Person=3|Tense=Fut",
    "Mood=Sub|Number=Plur|Person=3|Tense=Pres",
    "Mood=Sub|Number=Sing|Person=1|Tense=Fut",
    "Mood=Sub|Number=Sing|Person=1|Tense=Pres",
    "Mood=Sub|Number=Sing|Person=2|Tense=Fut",
    "Mood=Sub|Number=Sing|Person=2|Tense=Pres",
    "Mood=Sub|Number=Sing|Person=3|Tense=Fut",
    "Mood=Sub|Number=Sing|Person=3|Tense=Pres",
    "Number=Plur",
    "Number=Plur|Degree=Cmp",
    "Number=Plur|Person=1",
    "Number=Plur|Person=1|VerbForm=Inf",
    "Number=Plur|Person=2",
    "Number=Plur|Person=2|VerbForm=Inf",
    "Number=Plur|Person=3",
    "Number=Plur|Person=3|VerbForm=Inf",
    "Number=Sing",
    "Number=Sing|Degree=Abs",
    "Number=Sing|Degree=Cmp",
    "Number=Sing|Person=1",
    "Number=Sing|Person=1|VerbForm=Inf",
    "Number=Sing|Person=2",
    "Number=Sing|Person=2|VerbForm=Inf",
    "Number=Sing|Person=3",
    "Number=Sing|Person=3|VerbForm=Inf",
    "Person=1",
    "Person=2",
    "Person=3",
    "Tense=Imp|Mood=Ind|Person=1|Number=Plur",
    "Tense=Imp|Mood=Ind|Person=1|Number=Sing",
    "Tense=Imp|Mood=Ind|Person=2|Number=Sing",
    "Tense=Imp|Mood=Ind|Person=3|Number=Plur",
    "Tense=Imp|Mood=Ind|Person=3|Number=Sing",
    "Tense=Imp|Mood=Sub|Person=1|Number=Plur",
    "Tense=Imp|Mood=Sub|Person=1|Number=Sing",
    "Tense=Imp|Mood=Sub|Person=2|Number=Sing",
    "Tense=Imp|Mood=Sub|Person=3|Number=Plur",
    "Tense=Imp|Mood=Sub|Person=3|Number=Sing",
    "Tense=Pqp|Mood=Ind|Person=1|Number=Plur",
    "Tense=Pqp|Mood=Ind|Person=1|Number=Sing",
    "Tense=Pqp|Mood=Ind|Person=3|Number=Plur",
    "Tense=Pqp|Mood=Ind|Person=3|Number=Sing",
    "VerbForm=Inf",
}

NE_TAGS = {
    "B-EVT",
    "B-LOC",
    "B-MSC",
    "B-ORG",
    "B-PER",
    "B-WRK",
    "I-EVT",
    "I-LOC",
    "I-MSC",
    "I-ORG",
    "I-PER",
    "I-WRK",
    "O",
}
