# encoding: utf8
from __future__ import unicode_literals

from ...symbols import LEMMA, PRON_LEMMA

"""  
This dict includes all the PRON and DET tag combinations found in the
dataset developed by Schibsted, Nasjonalbiblioteket and LTG (to be published
autumn 2018) and the rarely used polite form. 
"""

MORPH_RULES = {
    "PRON__Animacy=Anim|Case=Nom|Number=Sing|Person=1|PronType=Prs": {
        "jeg":          {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "One", "Number": "Sing", "Case": "Nom"}
    },
    "PRON__Animacy=Anim|Case=Nom|Number=Sing|Person=2|PronType=Prs": {
        "du":           {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "Two", "Number": "Sing", "Case": "Nom"},
        #polite form, not sure about the tag
        "De":           {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "Two", "Number": "Sing", "Case": "Nom", "Polite": "Form"}
    },
    "PRON__Animacy=Anim|Case=Nom|Gender=Fem|Number=Sing|Person=3|PronType=Prs": {
        "hun":          {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "Three", "Number": "Sing", "Gender": "Fem",  "Case": "Nom"}
    },
    "PRON__Animacy=Anim|Case=Nom|Gender=Masc|Number=Sing|Person=3|PronType=Prs": {
        "han":          {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "Three", "Number": "Sing", "Gender": "Masc",  "Case": "Nom"}
    },
    "PRON__Gender=Neut|Number=Sing|Person=3|PronType=Prs": {
        "det":          {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "Three", "Number": "Sing", "Gender": "Neut"},
        "alt":          {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "Three", "Number": "Sing", "Gender": "Neut"},
        "intet":        {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "Three", "Number": "Sing", "Gender": "Neut"}
    },
    "PRON__Gender=Fem,Masc|Number=Sing|Person=3|PronType=Prs": {
        "den":          {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "Three", "Number": "Sing", "Gender": ("Fem", "Masc")}
    },
    "PRON__Animacy=Anim|Case=Nom|Number=Plur|Person=1|PronType=Prs": {
        "vi":           {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "One", "Number": "Plur", "Case": "Nom"}
    },
    "PRON__Animacy=Anim|Case=Nom|Number=Plur|Person=2|PronType=Prs": {
        "dere":         {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "Two", "Number": "Plur", "Case": "Nom"}
    },
    "PRON__Case=Nom|Number=Plur|Person=3|PronType=Prs": {
        "de":           {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "Three", "Number": "Plur", "Case": "Nom"}
    },
    "PRON__Animacy=Anim|Case=Acc|Number=Sing|Person=1|PronType=Prs": {
        "meg":          {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "One", "Number": "Sing", "Case": "Acc"}
    },
    "PRON__Animacy=Anim|Case=Acc|Number=Sing|Person=2|PronType=Prs": {
        "deg":          {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "Two", "Number": "Sing", "Case": "Acc"},
        #polite form, not sure about the tag
        "Dem":           {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "Two", "Number": "Sing", "Case": "Acc", "Polite": "Form"}
    },
    "PRON__Animacy=Anim|Case=Acc|Gender=Fem|Number=Sing|Person=3|PronType=Prs": {
        "henne":        {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "Three", "Number": "Sing", "Gender": "Fem",  "Case": "Acc"}
    },
    "PRON__Animacy=Anim|Case=Acc|Gender=Masc|Number=Sing|Person=3|PronType=Prs": {
        "ham":          {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "Three", "Number": "Sing", "Gender": "Masc", "Case": "Acc"},
        "han":          {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "Three", "Number": "Sing", "Gender": "Masc", "Case": "Acc"}
    },
    "PRON__Animacy=Anim|Case=Acc|Number=Plur|Person=1|PronType=Prs": {
        "oss":          {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "One", "Number": "Plur", "Case": "Acc"}
    },
    "PRON__Animacy=Anim|Case=Acc|Number=Plur|Person=2|PronType=Prs": {
        "dere":         {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "Two", "Number": "Plur", "Case": "Acc"}
    },
    "PRON__Case=Acc|Number=Plur|Person=3|PronType=Prs": {
        "dem":          {LEMMA: PRON_LEMMA, "PronType": "Prs", "Person": "Three", "Number": "Plur", "Case": "Acc"}
    },
    "PRON__Case=Acc|Reflex=Yes": {
        "seg":          {LEMMA: PRON_LEMMA, "Person": "Three", "Number": "Sing", "Reflex": "Yes"},
        "seg":          {LEMMA: PRON_LEMMA, "Person": "Three", "Number": "Plur", "Reflex": "Yes"}
    },
    "PRON__Animacy=Anim|Case=Nom|Number=Sing|PronType=Prs": {
        "man":          {LEMMA: PRON_LEMMA, "PronType": "Prs", "Number": "Sing", "Case": "Nom"}
    },
    "DET__Gender=Masc|Number=Sing|Poss=Yes": {
        "min":          {LEMMA: "min", "Person": "One", "Number": "Sing", "Poss": "Yes", "Gender": "Masc"},
        "din":          {LEMMA: "din", "Person": "Two", "Number": "Sing", "Poss": "Yes", "Gender": "Masc"},
        "hennes":       {LEMMA: "hennes", "Person": "Three", "Number": "Sing", "Poss": "Yes", "Gender": "Masc"},
        "hans":         {LEMMA: "hans", "Person": "Three", "Number": "Sing", "Poss": "Yes", "Gender": "Masc"},
        "sin":          {LEMMA: "sin", "Person": "Three", "Number": "Sing", "Poss": "Yes", "Gender": "Masc", "Reflex":"Yes"},
        "vår":          {LEMMA: "vår", "Person": "One", "Number": "Sing", "Poss": "Yes", "Gender": "Masc"},
        "deres":        {LEMMA: "deres", "Person": "Two", "Number": "Sing", "Poss": "Yes", "Gender":"Masc"},
        "deres":        {LEMMA: "deres", "Person": "Three", "Number": "Sing", "Poss": "Yes", "Gender":"Masc"},
        #polite form, not sure about the tag
        "Deres":        {LEMMA: "Deres", "Person": "Three", "Number": "Sing", "Poss": "Yes", "Gender":"Masc", "Polite": "Form"}
    },
   "DET__Gender=Fem|Number=Sing|Poss=Yes": {
        "mi":           {LEMMA: "min", "Person": "One", "Number": "Sing", "Poss": "Yes", "Gender": "Fem"},
        "di":           {LEMMA: "din", "Person": "Two", "Number": "Sing", "Poss": "Yes", "Gender": "Fem"},   
        "hennes":       {LEMMA: "hennes", "Person": "Three", "Number": "Sing", "Poss": "Yes", "Gender": "Fem"},
        "hans":         {LEMMA: "hans", "Person": "Three", "Number": "Sing", "Poss": "Yes", "Gender": "Fem"},
        "si":           {LEMMA: "sin", "Person": "Three", "Number": "Sing", "Poss": "Yes", "Gender": "Fem", "Reflex":"Yes"},
        "vår":          {LEMMA: "vår", "Person": "One", "Number": "Sing", "Poss": "Yes", "Gender": "Fem"},
        "deres":        {LEMMA: "deres", "Person": "Two", "Number": "Sing", "Poss": "Yes", "Gender": "Fem"},
        "deres":        {LEMMA: "deres", "Person": "Three", "Number": "Sing", "Poss": "Yes", "Gender": "Fem"},
        #polite form, not sure about the tag
        "Deres":        {LEMMA: "Deres", "Person": "Three", "Number": "Sing", "Poss": "Yes", "Gender":"Fem", "Polite": "Form"}
    },
   "DET__Gender=Neut|Number=Sing|Poss=Yes": {
        "mitt":         {LEMMA: "min", "Person": "One", "Number": "Sing", "Poss": "Yes", "Gender": "Neut"},
        "ditt":         {LEMMA: "din", "Person": "Two", "Number": "Sing", "Poss": "Yes", "Gender": "Neut"},        
        "hennes":       {LEMMA: "hennes", "Person": "Three", "Number": "Sing", "Poss": "Yes", "Gender": "Neut"},
        "hans":         {LEMMA: "hans", "Person": "Three", "Number": "Sing", "Poss": "Yes", "Gender": "Neut"},
        "sitt":         {LEMMA: "sin", "Person": "Three", "Number": "Sing", "Poss": "Yes", "Gender": "Neut", "Reflex":"Yes"},
        "vårt":         {LEMMA: "vår", "Person": "One", "Number": "Sing", "Poss": "Yes", "Gender": "Neut"},
        "deres":        {LEMMA: "deres", "Person": "Two", "Number": "Sing", "Poss": "Yes", "Gender": "Neut"},
        "deres":        {LEMMA: "deres", "Person": "Three", "Number": "Sing", "Poss": "Yes", "Gender": "Neut"},
        #polite form, not sure about the tag
        "Deres":        {LEMMA: "Deres", "Person": "Three", "Number": "Sing", "Poss": "Yes", "Gender":"Neut", "Polite": "Form"}
    },
   "DET__Number=Plur|Poss=Yes": {
        "mine":         {LEMMA: "min", "Person": "One", "Number": "Plur", "Poss": "Yes"},
        "dine":         {LEMMA: "din", "Person": "Two", "Number": "Plur", "Poss": "Yes"},        
        "hennes":       {LEMMA: "hennes", "Person": "Three", "Number": "Plur", "Poss": "Yes"},
        "hans":         {LEMMA: "hans", "Person": "Three", "Number": "Plur", "Poss": "Yes"},
        "sine":         {LEMMA: "sin", "Person": "Three", "Number": "Plur", "Poss": "Yes", "Reflex":"Yes"},
        "våre":         {LEMMA: "vår", "Person": "One", "Number": "Plur", "Poss": "Yes"},
        "deres":        {LEMMA: "deres", "Person": "Two", "Number": "Plur", "Poss": "Yes"},
        "deres":        {LEMMA: "deres", "Person": "Three", "Number": "Plur", "Poss": "Yes"}
    },
    "PRON__Animacy=Anim|Number=Plur|PronType=Rcp": {
        "hverandre":    {LEMMA: PRON_LEMMA, "PronType": "Rcp", "Number": "Plur"}
    },
    "DET__Number=Plur|Poss=Yes|PronType=Rcp": {
        "hverandres":   {LEMMA: "hverandres", "PronType": "Rcp", "Number": "Plur", "Poss": "Yes"}
    },
    "PRON___": {
        "som":          {LEMMA: PRON_LEMMA},
        "ikkenoe":      {LEMMA: PRON_LEMMA}
    },
    "PRON__PronType=Int": {
        "hva":         {LEMMA: PRON_LEMMA, "PronType": "Int"}
    },
    "PRON__Animacy=Anim|PronType=Int": {
        "hvem":         {LEMMA: PRON_LEMMA, "PronType": "Int"}
    },
    "PRON__Animacy=Anim|Poss=Yes|PronType=Int": {
        "hvis":         {LEMMA:PRON_LEMMA, "PronType": "Int", "Poss": "Yes"}
    },
    "PRON__Number=Plur|Person=3|PronType=Prs": {
        "noen":         {LEMMA:PRON_LEMMA, "PronType": "Prs", "Number": "Plur", "Person": "Three"}
    },
    "PRON__Gender=Fem,Masc|Number=Sing|Person=3|PronType=Prs": {
        "noen":         {LEMMA:PRON_LEMMA, "PronType": "Prs", "Number": "Sing", "Person": "Three", "Gender": ("Fem", "Masc")},
        "den":          {LEMMA:PRON_LEMMA, "PronType": "Prs", "Number": "Sing", "Person": "Three", "Gender": ("Fem", "Masc")}
    },
    "PRON__Gender=Neut|Number=Sing|Person=3|PronType=Prs":  {
        "noe":          {LEMMA:PRON_LEMMA, "PronType": "Prs", "Number": "Sing", "Person": "Three", "Gender": "Neut"},
        "det":          {LEMMA:PRON_LEMMA, "PronType": "Prs", "Number": "Sing", "Person": "Three", "Gender": "Neut"}
    },
    "PRON__Gender=Fem,Masc|Number=Sing|Person=3|PronType=Prs": {
        "ingen":        {LEMMA:PRON_LEMMA, "PronType": "Prs", "Number": "Sing", "Person": "Three", "Gender": ("Fem", "Masc"), "Polarity": "Neg"}
    },
    "PRON__Number=Plur|Person=3|PronType=Prs": {
        "ingen":        {LEMMA:PRON_LEMMA, "PronType":"Prs", "Number": "Plur", "Person": "Three"}
    },
    "PRON__Number=Sing": {
        "ingenting":    {LEMMA:PRON_LEMMA, "Number": "Sing"}
    },
    "PRON__Number=Plur|Person=3|PronType=Prs": {
        "alle":         {LEMMA:PRON_LEMMA, "PronType": "Prs", "Number": "Plur", "Person": "Three"}
    },
    "PRON__Animacy=Anim|Number=Sing|PronType=Prs": {
        "en":           {LEMMA:PRON_LEMMA, "PronType": "Prs", "Number": "Sing"}
    },
    "PRON__Animacy=Anim|Case=Gen,Nom|Number=Sing|PronType=Prs": {
        "ens":          {LEMMA:PRON_LEMMA, "PronType": "Prs", "Number": "Sing", "Case": ("Gen", "Nom")}
    },
    "PRON__Animacy=Anim|Case=Gen|Number=Sing|PronType=Prs": {
        "ens":          {LEMMA: PRON_LEMMA, "PronType": "Prs", "Number": "Sing", "Case": "Gen"}
    },
    "DET__Case=Gen|Gender=Masc|Number=Sing": {
        "ens":          {LEMMA: "en", "Number": "Sing", "Case": "Gen"}
    },
    "DET__Gender=Masc|Number=Sing": {
        "enhver":       {LEMMA: "enhver", "Number": "Sing", "Gender": "Masc"},
        "all":          {LEMMA: "all", "Number": "Sing", "Gender": "Masc"},
        "hver":         {LEMMA: "hver", "Number": "Sing", "Gender": "Masc"}
    },
    "DET__Gender=Fem|Number=Sing": {
        "enhver":       {LEMMA: "enhver", "Number": "Sing", "Gender": "Fem"},
        "all":          {LEMMA: "all", "Number": "Sing", "Gender": "Fem"},
        "hver":         {LEMMA: "hver", "Number": "Sing", "Gender": "Fem"}
    },
    "DET__Gender=Neut|Number=Sing": {
        "ethvert":      {LEMMA: "enhver", "Number": "Sing", "Gender": "Neut"},
        "alt":          {LEMMA: "all", "Number": "Sing", "Gender": "Neut"},
        "hvert":        {LEMMA: "hver", "Number": "Sing", "Gender": "Neut"},
    },
    "DET__Gender=Masc|Number=Sing": {
        "noen":         {LEMMA: "noen", "Gender": "Masc", "Number": "Sing"},
        "noe":          {LEMMA: "noen", "Gender": "Masc", "Number": "Sing"}
    },
    "DET__Gender=Fem|Number=Sing": {
        "noen":         {LEMMA: "noen", "Gender": "Fem", "Number": "Sing"},
        "noe":          {LEMMA: "noen", "Gender": "Fem", "Number": "Sing"}
    },
    "DET__Gender=Neut|Number=Sing": {
        "noe":          {LEMMA: "noen", "Number": "Sing", "Gender": "Neut"}
    },
    "DET__Number=Plur": {
        "noen":         {LEMMA: "noen", "Number": "Plur"}
    },
    "DET__Gender=Neut|Number=Sing": {
        "intet":        {LEMMA: "ingen", "Gender": "Neut", "Number": "Sing"}
    },
    "DET__Gender=Masc|Number=Sing": {
        "en":           {LEMMA: "en", "Number": "Sing", "Gender": "Neut"}
    },
    "DET__Gender=Fem|Number=Sing": {
        "ei":           {LEMMA: "en", "Number": "Sing", "Gender": "Fem"}
    },
    "DET__Gender=Neut|Number=Sing": {
        "et":           {LEMMA: "en", "Number": "Sing", "Gender": "Neut"}
    },
    "DET__Gender=Neut|Number=Sing|PronType=Int": {
        "hvilket":      {LEMMA: "hvilken", "PronType": "Int", "Number": "Sing", "Gender": "Neut"}
    },
    "DET__Gender=Fem|Number=Sing|PronType=Int": {
        "hvilken":      {LEMMA: "hvilken", "PronType": "Int", "Number": "Sing", "Gender": "Fem"}
    },
    "DET__Gender=Masc|Number=Sing|PronType=Int": {
        "hvilken":      {LEMMA: "hvilken", "PronType": "Int", "Number": "Sing", "Gender": "Masc"}
    },
    "DET__Number=Plur|PronType=Int": {
        "hvilke":       {LEMMA: "hvilken", "PronType": "Int", "Number": "Plur"}
    },
    "DET__Number=Plur": {
        "alle":         {LEMMA: "all", "Number": "Plur"}
    },
    "PRON__Number=Plur|Person=3|PronType=Prs": {
        "alle":        {LEMMA: PRON_LEMMA, "PronType": "Prs", "Number": "Plur", "Person": "Three"}
    },
    "DET__Gender=Masc|Number=Sing|PronType=Dem": {
        "den":          {LEMMA: "den", "PronType": "Dem", "Number": "Sing", "Gender": "Masc"},
        "slik":         {LEMMA: "slik", "PronType": "Dem", "Number": "Sing", "Gender": "Masc"},
        "denne":        {LEMMA: "denne", "PronType": "Dem", "Number": "Sing", "Gender": "Masc"}
    },
    "DET__Gender=Fem|Number=Sing|PronType=Dem": {
        "den":          {LEMMA: "den", "PronType": "Dem", "Number": "Sing", "Gender": "Fem"},
        "slik":         {LEMMA: "slik", "PronType": "Dem", "Number": "Sing", "Gender": "Fem"},
        "denne":        {LEMMA: "denne", "PronType": "Dem", "Number": "Sing", "Gender": "Fem"}
    },
    "DET__Gender=Neut|Number=Sing|PronType=Dem": {
        "det":          {LEMMA: "det", "PronType": "Dem", "Number": "Sing", "Gender": "Neut"},
        "slikt":        {LEMMA: "slik", "PronType": "Dem", "Number": "Sing", "Gender": "Neut"},
        "dette":        {LEMMA: "dette", "PronType": "Dem", "Number": "Sing", "Gender": "Neut"}
    },
    "DET__Number=Plur|PronType=Dem": {
        "disse":        {LEMMA: "disse", "PronType": "Dem", "Number": "Plur"},
        "andre":        {LEMMA: "annen", "PronType": "Dem", "Number": "Plur"},
        "de":           {LEMMA: "de", "PronType": "Dem", "Number": "Plur"},
        "slike":        {LEMMA: "slik", "PronType": "Dem", "Number": "Plur"}
    },
    "DET__Definite=Ind|Gender=Masc|Number=Sing|PronType=Dem": {
        "annen":        {LEMMA: "annen", "PronType": "Dem", "Number": "Sing", "Gender": "Masc"}
    },
    "DET__Definite=Ind|Gender=Fem|Number=Sing|PronType=Dem": {
        "annen":        {LEMMA: "annen", "PronType": "Dem", "Number": "Sing", "Gender": "Fem"}
    },
    "DET__Definite=Ind|Gender=Neut|Number=Sing|PronType=Dem": {
        "annet":        {LEMMA: "annen", "PronType": "Dem", "Number": "Sing", "Gender": "Neut"}
    },
    "DET__Case=Gen|Definite=Ind|Gender=Masc|Number=Sing|PronType=Dem": {
        "annens":       {LEMMA: "annnen", "PronType": "Dem", "Number": "Sing", "Gender": "Masc", "Case": "Gen"}
    },
    "DET__Case=Gen|Number=Plur|PronType=Dem": {
        "andres":       {LEMMA: "annen", "PronType": "Dem", "Number": "Plur", "Case": "Gen"}
    },
    "DET__Case=Gen|Gender=Fem|Number=Sing|PronType=Dem": {
        "dens":         {LEMMA: "den", "PronType": "Dem", "Number": "Sing", "Gender": "Fem", "Case": "Gen"}
    },
    "DET__Case=Gen|Gender=Masc|Number=Sing|PronType=Dem": {
        "hvis":         {LEMMA: "hvis", "PronType": "Dem", "Number": "Sing", "Gender": "Masc", "Case": "Gen"},
        "dens":         {LEMMA: "den", "PronType": "Dem", "Number": "Sing", "Gender": "Masc", "Case": "Gen"}
    },
    "DET__Case=Gen|Gender=Neut|Number=Sing|PronType=Dem": {
        "dets":         {LEMMA: "det", "PronType": "Dem", "Number": "Sing", "Gender": "Neut", "Case": "Gen"}
    },
    "DET__Case=Gen|Number=Plur": {
        "alles":        {LEMMA: "all", "Number": "Plur", "Case": "Gen"}
    },
    "DET__Definite=Def|Number=Sing|PronType=Dem": {
        "andre":        {LEMMA: "annen", "Number": "Sing", "PronType": "Dem"}
    },
    "DET__Definite=Def|PronType=Dem": {
        "samme":        {LEMMA: "samme", "PronType": "Dem"},
        "forrige":      {LEMMA: "forrige", "PronType": "Dem"},
        "neste":        {LEMMA: "neste", "PronType": "Dem"},
    },
    "DET__Definite=Def": {
        "selve":        {LEMMA: "selve"},
        "selveste":     {LEMMA: "selveste"},
    },
    "DET___": {
        "selv":         {LEMMA: "selv"},
        "endel":        {LEMMA: "endel"}
    },
    "DET__Definite=Ind|Gender=Fem|Number=Sing": {
        "egen":         {LEMMA: "egen", "Gender": "Fem", "Number": "Sing"}
    },
    "DET__Definite=Ind|Gender=Masc|Number=Sing": {
        "egen":         {LEMMA: "egen", "Gender": "Masc", "Number": "Sing"}
    },
    "DET__Definite=Ind|Gender=Neut|Number=Sing": {
        "eget":         {LEMMA: "egen", "Gender": "Neut", "Number": "Sing"}
    },
    "DET__Number=Plur": {
        "egne":         {LEMMA: "egen", "Number": "Plur"}
    },
    "DET__Gender=Masc|Number=Sing": {
        "ingen":        {LEMMA: "ingen", "Gender": "Masc", "Number": "Sing"}
    },
    "DET__Number=Plur": {
        "ingen":        {LEMMA: "ingen", "Number": "Plur"}
    },
    #same wordform and pos (verb), have to specify the exact features in order to not mix them up
    "VERB__Mood=Ind|Tense=Pres|VerbForm=Fin": {
        "så":           {LEMMA: "så", "VerbForm": "Fin", "Tense": "Pres", "Mood": "Ind"}
    },
    "VERB__Mood=Ind|Tense=Past|VerbForm=Fin": {
        "så":           {LEMMA: "se", "VerbForm": "Fin", "Tense": "Past", "Mood": "Ind"}
    }

}

#copied from the English morph_rules.py
for tag, rules in MORPH_RULES.items():
    for key, attrs in dict(rules).items():
        rules[key.title()] = attrs