def _2S(self): return "{}/{}".format( phon(recessive(self.stem + self.extra + "+ε+ι")), # ε + σαι phon(recessive(self.stem + self.extra + "+ῃ")) # ε + σαι ) class Endings2C(ConnectiveOEEOEO, PrimaryMiddle):
def _2S(self): return "{}/{}".format( phon(recessive(self.prep_stem_2S(self.stem) + self.extra + "+ε+ι")), # ε + σαι phon(recessive(self.prep_stem_2S(self.stem) + self.extra + "+ῃ")) # ε + σαι ) class Endings13(PrimaryMiddle):
def construct_quiz(self): questions = [] for verb in random.sample(set(get_verbs(1)), 10): questions.append((verb, recessive(verb))) return questions
def conditional_recessive(word, parse): """ only add recessive accent if there isn't already an accent and don't let accent cross $ boundary """ if has_accent(word): return remove_length(word) else: if parse in ["AAN", "APN", "PAN", "XAN", "XMN"]: return remove_length(on_penult(word)) if "$" in word: prefix, body = word.split("$") return prefix + "$" + remove_length(recessive(body)) else: if parse[2] == "O": return remove_length(recessive(word, False)) else: return remove_length(recessive(word))
def AAN(self): return phon(recessive(phon2(self.stem2) + "+ναι")) class Verb2G(Verb1):
def AMN(self): return recessive(self.stem2 + "σθαι") def AAP(self): return Endings26mi(self.stem2)
def AAN(self): return phon(recessive(self.stem2 + "+εναι")) def AMN(self): return recessive(self.stem2 + "σθαι")
def PMN(self): return recessive(self.stem1 + "σθαι") def PAP(self): return Endings26mi(self.stem1)
def AMN(self): return recessive(self.stem1 + "σ" + "α" + "σθαι") def APN(self): return make_properispomenon(self.stem1 + "θη" + "ναι")
def AAN(self): return recessive(self.stem1 + "σαι") def AMN(self): return recessive(self.stem1 + "σ" + "α" + "σθαι")
def FPN(self): return recessive(self.stem1 + "θη" + "σ" + "ε" + "σθαι") def AAN(self): return recessive(self.stem1 + "σαι")
def FAN(self): return recessive(self.stem1 + "σ" + "ειν") def FMN(self): return recessive(self.stem1 + "σ" + "ε" + "σθαι")
def PMN(self): return phon(recessive(self.stem1 + "+εσθαι")) def FAN(self): return recessive(self.stem1 + "σ" + "ειν")
def generate(self, lemma, parse, allow_form_override=True, context=None): answers = [] stems = None accent_override = None is_enclitic = False ending_override = None if lemma in self.lexicon: if allow_form_override: answer = self.lexicon[lemma].get("forms", {}).get(parse) if answer: return answer stems = self.regex_list(lemma, parse, context) if "." in parse: accents = self.lexicon[lemma].get("accents", {}).get(parse.split(".")[0]) if accents == "enclitic": is_enclitic = True else: accent_override = accents ending_override = self.lexicon[lemma].get("endings", {}).get(parse) if stems is None: return else: stems = stems.split("/") if parse not in stemming_rules: return for stem in stems: stem = debreath(stem) pairs = stemming_rules[parse] while isinstance(pairs, dict) and "ref" in pairs: if pairs["ref"] in stemming_rules: pairs = stemming_rules[pairs["ref"]] else: # @@@ raise error? return base_endings = [] default = [] for rule in pairs: s1, s234, s5 = rule.split("|") s2, s34 = s234.split(">") s3, s4 = s34.split("<") if stem.endswith(strip_accents(s1 + s2)): if s2: base = stem[:-len(s2)] else: base = stem else: continue if ending_override: ending_list = ending_override.split("/") else: ending_list = [s3 + s5] if s1 + s2: base_endings.append((base, ending_list)) else: default.append((base, ending_list)) # only use default if there are no other options if len(base_endings) == 0 and len(default) > 0: base_endings = default for base, ending_list in base_endings: for ending in ending_list: if accent(ending): answers.append((base + ending).replace("|", "")) elif is_enclitic: answers.append(make_oxytone(base + ending).replace("|", "")) else: if parse[2] == "P": if accent_override: answers.append(persistent(base + ending, accent_override)) elif parse == "AAP.NSM" and ending == "ων": answers.append(make_oxytone(base + ending).replace("|", "")) elif parse == "AAP.NSM" and ending == "_3+ς": answers.append(make_oxytone(base + ending).replace("|", "")) elif parse == "PAP.NSM" and ending == "_3+ς": answers.append(make_oxytone(base + ending).replace("|", "")) elif parse[0:3] == "AAP" and parse != "AAP.NSM": # calculate NSM nsms = self.generate(lemma, "AAP.NSM", context=context) nsms = nsms.split("/") for nsm in nsms: if nsm.endswith(("ών", "ούς")): answers.append(persistent(base + ending, nsm)) else: answers.append(persistent(base + ending, lemma)) elif parse[0:3] == "PAP" and parse != "PAP.NSM": # calculate NSM nsms = self.generate(lemma, "PAP.NSM").split("/") for nsm in nsms: nsm = strip_length(nsm) answers.append(persistent(base + ending, nsm)) else: answers.append(recessive(base + ending, default_short=True)) elif parse[0:3] in ["AAN", "XAN", "XMN", "XPN"]: answers.append(on_penult(base + ending, default_short=True)) elif parse[0:3] == "PAN" and stem.endswith("!"): answers.append(on_penult(base + ending, default_short=True)) else: answers.append(recessive(base + ending, default_short=True)) return "/".join(remove_duplicates(rebreath(w) for w in answers))