verb_roots = """ #هست آخت#آهنج آراست#آرا آراماند#آرامان آرامید#آرام آرمید#آرام آزرد#آزار آزمود#آزما آسود#آسا آشامید#آشام آشفت#آشوب آشوبید#آشوب آغازید#آغاز آغشت#آمیز آفرید#آفرین آلود#آلا آمد#آ آمرزید#آمرز آموخت#آموز آموزاند#آموزان آمیخت#آمیز آورد#آر آورد#آور آویخت#آویز آکند#آکن آگاهانید#آگاهان ارزید#ارز افتاد#افت افراخت#افراز افراشت#افراز افروخت#افروز افروزید#افروز افزود#افزا افسرد#افسر افشاند#افشان افکند#افکن افگند#افگن انباشت#انبار انجامید#انجام انداخت#انداز اندوخت#اندوز اندود#اندا اندیشید#اندیش انگاشت#انگار انگیخت#انگیز انگیزاند#انگیزان ایستاد#ایست ایستاند#ایستان باخت#باز باراند#باران بارگذاشت#بارگذار بارید#بار باز#بازخواه بازآفرید#بازآفرین بازآمد#بازآ بازآموخت#بازآموز بازآورد#بازآور بازایستاد#بازایست بازتابید#بازتاب بازجست#بازجو بازخواند#بازخوان بازخوراند#بازخوران بازداد#بازده بازداشت#بازدار بازرساند#بازرسان بازرسانید#بازرسان باززد#باززن بازستاند#بازستان بازشمارد#بازشمار بازشمرد#بازشمار بازشمرد#بازشمر بازشناخت#بازشناس بازشناساند#بازشناسان بازفرستاد#بازفرست بازماند#بازمان بازنشست#بازنشین بازنمایاند#بازنمایان بازنهاد#بازنه بازنگریست#بازنگر بازپرسید#بازپرس بازگذارد#بازگذار بازگذاشت#بازگذار بازگرداند#بازگردان بازگردانید#بازگردان بازگردید#بازگرد بازگرفت#بازگیر بازگشت#بازگرد بازگشود#بازگشا بازگفت#بازگو بازیافت#بازیاب بافت#باف بالید#بال باوراند#باوران بایست#باید بخشود#بخش بخشود#بخشا بخشید#بخش بر#برخواه برآشفت#برآشوب برآمد#برآ برآورد#برآور برازید#براز برافتاد#برافت برافراخت#برافراز برافراشت#برافراز برافروخت#برافروز برافشاند#برافشان برافکند#برافکن براند#بران برانداخت#برانداز برانگیخت#برانگیز بربست#بربند برتاباند#برتابان برتابید#برتاب برتافت#برتاب برتنید#برتن برجهید#برجه برخاست#برخیز برخورد#برخور برد#بر برداشت#بردار بردمید#بردم برزد#برزن برشد#برشو برشمارد#برشمار برشمرد#برشمار برشمرد#برشمر برنشاند#برنشان برنشانید#برنشان برنشست#برنشین برنهاد#برنه برچید#برچین برکرد#برکن برکشید#برکش برکند#برکن برگذشت#برگذر برگرداند#برگردان برگردانید#برگردان برگردید#برگرد برگرفت#برگیر برگزید#برگزین برگشت#برگرد برگشود#برگشا برگمارد#برگمار برگمارید#برگمار برگماشت#برگمار برید#بر بست#بند بلعید#بلع بود#باش بوسید#بوس بویید#بو بیخت#بیز بیخت#بوز تاباند#تابان تابید#تاب تاخت#تاز تاراند#تاران تازاند#تازان تازید#تاز تافت#تاب ترادیسید#ترادیس تراشاند#تراشان تراشید#تراش تراوید#تراو ترساند#ترسان ترسید#ترس ترشاند#ترشان ترشید#ترش ترکاند#ترکان ترکید#ترک تفتید#تفت تمرگید#تمرگ تنید#تن توانست#توان توفید#توف تپاند#تپان تپید#تپ تکاند#تکان تکانید#تکان جست#جه جست#جو جنباند#جنبان جنبید#جنب جنگید#جنگ جهاند#جهان جهید#جه جوشاند#جوشان جوشانید#جوشان جوشید#جوش جويد#جو جوید#جو خاراند#خاران خارید#خار خاست#خیز خایید#خا خراشاند#خراشان خراشید#خراش خرامید#خرام خروشید#خروش خرید#خر خزید#خز خسبید#خسب خشکاند#خشکان خشکید#خشک خفت#خواب خلید#خل خماند#خمان خمید#خم خنداند#خندان خندانید#خندان خندید#خند خواباند#خوابان خوابانید#خوابان خوابید#خواب خواست#خواه خواست#خیز خواند#خوان خوراند#خوران خورد#خور خیزاند#خیزان خیساند#خیسان داد#ده داشت#دار دانست#دان در#درخواه درآمد#درآ درآمیخت#درآمیز درآورد#درآور درآویخت#درآویز درافتاد#درافت درافکند#درافکن درانداخت#درانداز درانید#دران دربرد#دربر دربرگرفت#دربرگیر درخشاند#درخشان درخشانید#درخشان درخشید#درخش درداد#درده دررفت#دررو درماند#درمان درنمود#درنما درنوردید#درنورد درود#درو دروید#درو درکرد#درکن درکشید#درکش درگذشت#درگذر درگرفت#درگیر دریافت#دریاب درید#در دزدید#دزد دمید#دم دواند#دوان دوخت#دوز دوشید#دوش دوید#دو دید#بین راند#ران ربود#ربا ربود#روب رخشید#رخش رساند#رسان رسانید#رسان رست#ره رست#رو رسید#رس رشت#ریس رفت#رو رفت#روب رقصاند#رقصان رقصید#رقص رماند#رمان رمانید#رمان رمید#رم رنجاند#رنجان رنجانید#رنجان رنجید#رنج رندید#رند رهاند#رهان رهانید#رهان رهید#ره روبید#روب روفت#روب رویاند#رویان رویانید#رویان رویید#رو رویید#روی ریخت#ریز رید#رین ریدن#رین ریسید#ریس زاد#زا زارید#زار زایاند#زایان زایید#زا زد#زن زدود#زدا زیست#زی ساباند#سابان سابید#ساب ساخت#ساز سایید#سا ستاد#ستان ستاند#ستان سترد#ستر ستود#ستا ستیزید#ستیز سراند#سران سرایید#سرا سرشت#سرش سرود#سرا سرکشید#سرکش سرگرفت#سرگیر سرید#سر سزید#سز سفت#سنب سنجید#سنج سوخت#سوز سود#سا سوزاند#سوزان سپارد#سپار سپرد#سپار سپرد#سپر سپوخت#سپوز سگالید#سگال شاشید#شاش شایست# شایست#شاید شتاباند#شتابان شتابید#شتاب شتافت#شتاب شد#شو شست#شو شست#شوی شلید#شل شمار#شمر شمارد#شمار شمرد#شمار شمرد#شمر شناخت#شناس شناساند#شناسان شنفت#شنو شنید#شنو شوتید#شوت شوراند#شوران شورید#شور شکافت#شکاف شکاند#شکان شکاند#شکن شکست#شکن شکفت#شکف طلبید#طلب طپید#طپ غراند#غران غرید#غر غلتاند#غلتان غلتانید#غلتان غلتید#غلت غلطاند#غلطان غلطانید#غلطان غلطید#غلط فرا#فراخواه فراخواند#فراخوان فراداشت#فرادار فرارسید#فرارس فرانمود#فرانما فراگرفت#فراگیر فرستاد#فرست فرسود#فرسا فرمود#فرما فرهیخت#فرهیز فرو#فروخواه فروآمد#فروآ فروآورد#فروآور فروافتاد#فروافت فروافکند#فروافکن فروبرد#فروبر فروبست#فروبند فروخت#فروش فروخفت#فروخواب فروخورد#فروخور فروداد#فروده فرودوخت#فرودوز فرورفت#فرورو فروریخت#فروریز فروشکست#فروشکن فروفرستاد#فروفرست فروماند#فرومان فرونشاند#فرونشان فرونشانید#فرونشان فرونشست#فرونشین فرونمود#فرونما فرونهاد#فرونه فروپاشاند#فروپاشان فروپاشید#فروپاش فروچکید#فروچک فروکرد#فروکن فروکشید#فروکش فروکوبید#فروکوب فروکوفت#فروکوب فروگذارد#فروگذار فروگذاشت#فروگذار فروگرفت#فروگیر فریفت#فریب فشاند#فشان فشرد#فشار فشرد#فشر فلسفید#فلسف فهماند#فهمان فهمید#فهم قاپید#قاپ قبولاند#قبول قبولاند#قبولان لاسید#لاس لرزاند#لرزان لرزید#لرز لغزاند#لغزان لغزید#لغز لمباند#لمبان لمید#لم لنگید#لنگ لولید#لول لیسید#لیس ماسید#ماس مالاند#مالان مالید#مال ماند#مان مانست#مان مرد#میر مویید#مو مکید#مک نازید#ناز نالاند#نالان نالید#نال نامید#نام نشاند#نشان نشست#نشین نمایاند#نما نمایاند#نمایان نمود#نما نهاد#نه نهفت#نهنب نواخت#نواز نوازید#نواز نوردید#نورد نوشاند#نوشان نوشانید#نوشان نوشت#نویس نوشید#نوش نکوهید#نکوه نگاشت#نگار نگرید# نگریست#نگر هراساند#هراسان هراسانید#هراسان هراسید#هراس هشت#هل وا#واخواه واداشت#وادار وارفت#وارو وارهاند#وارهان واماند#وامان وانهاد#وانه واکرد#واکن واگذارد#واگذار واگذاشت#واگذار ور#ورخواه ورآمد#ورآ ورافتاد#ورافت وررفت#وررو ورزید#ورز وزاند#وزان وزید#وز ویراست#ویرا پاشاند#پاشان پاشید#پاش پالود#پالا پایید#پا پخت#پز پذیراند#پذیران پذیرفت#پذیر پراند#پران پراکند#پراکن پرداخت#پرداز پرستید#پرست پرسید#پرس پرهیخت#پرهیز پرهیزید#پرهیز پروراند#پروران پرورد#پرور پرید#پر پسندید#پسند پلاساند#پلاسان پلاسید#پلاس پلکید#پلک پناهاند#پناهان پناهید#پناه پنداشت#پندار پوساند#پوسان پوسید#پوس پوشاند#پوشان پوشید#پوش پویید#پو پژمرد#پژمر پژوهید#پژوه پکید#پک پیراست#پیرا پیمود#پیما پیوست#پیوند پیچاند#پیچان پیچانید#پیچان پیچید#پیچ چاپید#چاپ چایید#چا چراند#چران چرانید#چران چرباند#چربان چربید#چرب چرخاند#چرخان چرخانید#چرخان چرخید#چرخ چروکید#چروک چرید#چر چزاند#چزان چسباند#چسبان چسبید#چسب چسید#چس چشاند#چشان چشید#چش چلاند#چلان چلانید#چلان چپاند#چپان چپید#چپ چکاند#چکان چکید#چک چید#چین کاست#کاه کاشت#کار کاوید#کاو کرد#کن کشاند#کشان کشانید#کشان کشت#کار کشت#کش کشید#کش کند#کن کوباند#کوبان کوبید#کوب کوشید#کوش کوفت#کوب کوچانید#کوچان کوچید#کوچ گایید#گا گداخت#گداز گذارد#گذار گذاشت#گذار گذراند#گذران گذشت#گذر گرازید#گراز گرانید#گران گرایید#گرا گرداند#گردان گردانید#گردان گردید#گرد گرفت#گیر گروید#گرو گریاند#گریان گریخت#گریز گریزاند#گریزان گریست#گر گریست#گری گزارد#گزار گزاشت#گزار گزید#گزین گسارد#گسار گستراند#گستران گسترانید#گستران گسترد#گستر گسست#گسل گسلاند#گسل گسیخت#گسل گشاد#گشا گشت#گرد گشود#گشا گفت#گو گمارد#گمار گماشت#گمار گنجاند#گنجان گنجانید#گنجان گنجید#گنج گنداند#گندان گندید#گند گوارید#گوار گوزید#گوز گیراند#گیران یازید#یاز یافت#یاب یونید#یون """.strip().split() # Below code is a modified version of HAZM package's verb conjugator, # with soem extra verbs (Anything in hazm and not in here? compare needed!) VERBS_EXC = {} with_nots = lambda items: items + ["ن" + item for item in items] simple_ends = ["م", "ی", "", "یم", "ید", "ند"] narrative_ends = ["ه‌ام", "ه‌ای", "ه", "ه‌ایم", "ه‌اید", "ه‌اند"] present_ends = ["م", "ی", "د", "یم", "ید", "ند"] # special case of '#هست': VERBS_EXC.update({conj: "هست" for conj in ["هست" + end for end in simple_ends]}) VERBS_EXC.update({conj: "هست" for conj in ["نیست" + end for end in simple_ends]}) for verb_root in verb_roots: conjugations = [] if "#" not in verb_root: continue past, present = verb_root.split("#") if past: past_simples = [past + end for end in simple_ends] past_imperfects = ["می‌" + item for item in past_simples] past_narratives = [past + end for end in narrative_ends] conjugations = with_nots(past_simples + past_imperfects + past_narratives) if present: imperatives = ["ب" + present, "ن" + present] if present.endswith("ا") or present in ("آ", "گو"): present = present + "ی" present_simples = [present + end for end in present_ends] present_imperfects = ["می‌" + present + end for end in present_ends] present_subjunctives = ["ب" + present + end for end in present_ends] conjugations += ( with_nots(present_simples + present_imperfects) + present_subjunctives + imperatives ) if past.startswith("آ"): conjugations = list( set( map( lambda item: item.replace("بآ", "بیا").replace("نآ", "نیا"), conjugations, ) ) ) VERBS_EXC.update({conj: (past,) if past else present for conj in conjugations})