Module:sa-verb/testcases

local tests = require('Module:UnitTests') local sa_verb_data = require("Module:sa-verb/data") local to_script = require("Module:sa-convert").tr local to_IAST = require("Module:sa-utilities/translit/SLP1-to-IAST").tr local to_SLP1 = require("Module:sa-utilities/translit/IAST-to-SLP1").tr

local gsub = mw.ustring.gsub local match = mw.ustring.match local sub = mw.ustring.sub local u = mw.ustring.char local gasub = string.gsub -- Much faster than gsub, but handles far fewer cases. local ti = table.insert

-- tests.sc="Lana" tests.sc = "IAST" tests.option = {impl="yes"}

local spaceJoin = function(vals) output = "" for i, v in ipairs(vals) do		if output == "" then output = v		else output = output.." "..v		end end return output end

local empty9 = {{}, {}, {}, {}, {}, {}, {}, {}, {}} local num = {[1] = 1, [4] = 2, [7] = 3}

local comp_lists = function(vref, vgot, label, tablet1, tablet2) local exp, got if tablet2 then exp =	spaceJoin(vref[tablet1] or {})..' ; '.. spaceJoin(vref[tablet2] or {}) got =	spaceJoin(vgot[tablet1] or {})..' ; '.. spaceJoin(vgot[tablet2] or {}) else exp =	spaceJoin(vref[tablet1] or {}) got =	spaceJoin(vgot[tablet1] or {}) end got = to_IAST(got) if (exp ~= got) then exp = {exp} if vref[tablet1].why then ti(exp, vref[tablet1].why) end if vref[tablet2] and vref[tablet2].why then ti(exp, vref[tablet2].why) end exp = table.concat(exp, " ") got = {got} if vref[tablet1].whynot then ti(got, vref[tablet1].whynot) end if vref[tablets] and vref[tablet2].whynot then ti(got, vref[tablet2].whynot) end got = table.concat(got, " ") end tests:equals(label, got, exp,		{show_difference = true}) -- to_script(exp, tests.sc, tests.option)) end

local pass_through = function(x) return x end

local knockout = function(forms) retval = {} for _, v in pairs(forms) do		if not match(v, "[โเໂເ][มวມວ]["..u(0x0e3a)..u(0x0eba)..']') then table.insert(retval, v)		end end return retval end

-- tablet1 and tablet2 are tense,voice etc. tables, such as presa and presm. local compare = function(vref, vgot, label, tablet1, tablet2, detAt) local exp, got local r1 = vref[tablet1] or empty9 local g1 = vgot[tablet1] or empty9 local r2, g2 --	mw.addWarning("Type of vgot["..tablet1.."] is "..type(vgot[tablet1])) if tablet2 then r2 = vref[tablet2] or empty9 g2 = vgot[tablet2] or empty9 --		mw.addWarning("Type of vgot["..tablet2.."] is "..type(vgot[tablet2])) end local dolog = false -- Logging for debugging if vgot.impra and detAt then for p = 4, 7, 3 do			local old = vgot.impra[p] or {} vgot.impra[p] = {} for i, v in pairs(old) do				if type(i) == "number" then if not match(v, "[tdTDwqWQ]A/?t$") then if dolog then mw.addWarning("kept "..v) end ti(vgot.impra[p], v)					elseif dolog then mw.addWarning("binned "..v)					end else vgot.impra[p][i] = v				end end end end

local f	if (tests.sc == "Thai" or tests.sc == "Laoo") and tests.option.impl ~= "no" then f = knockout else f = pass_through end for i = 1, 7, 3 do -- Was 1, 5, 2 if tablet2 then exp = spaceJoin(r1[i])..' ; '..spaceJoin(r1[i+1])..' ; '..spaceJoin(r1[i+2]) ..' ; '..spaceJoin(r2[i])..' ; '..spaceJoin(r2[i+1])..' ; '..spaceJoin(r2[i+2]) if false then -- For tracking nil data flowing in. mw.addWarning("Type of "..tablet1..":g1["..i.."] is "..type(g1[i])) mw.addWarning("Type of "..tablet1..":g1["..(i+1).."] is "..type(g1[i+1])) mw.addWarning("Type of "..tablet1..":g1["..(i+2).."] is "..type(g1[i+2])) mw.addWarning("Type of "..tablet2..":g2["..i.."] is "..type(g2[i])) mw.addWarning("Type of "..tablet2..":g2["..(i+1).."] is "..type(g2[i+1])) mw.addWarning("Type of "..tablet2..":g2["..(i+2).."] is "..type(g2[i+2])) mw.addWarning("Type of "..tablet1..":f(g1["..i.."]) is "..type(f(g1[i]))) mw.addWarning("Type of "..tablet1..":f(g1["..(i+1).."]) is "..type(f(g1[i+1]))) mw.addWarning("Type of "..tablet1..":f(g1["..(i+2).."]) is "..type(f(g1[i+2]))) mw.addWarning("Type of "..tablet2..":f(g2["..i.."]) is "..type(f(g2[i]))) mw.addWarning("Type of "..tablet2..":f(g2["..(i+1).."]) is "..type(f(g2[i+1]))) mw.addWarning("Type of "..tablet2..":f(g2["..(i+2).."]) is "..type(f(g2[i+2]))) end got = spaceJoin(f(g1[i]))..' ; '..spaceJoin(f(g1[i+1]))..' ; '..spaceJoin(f(g1[i+2])) ..' ; '..spaceJoin(f(g2[i]))..' ; '..spaceJoin(f(g2[i+1]))..' ; '..spaceJoin(f(g2[i+2])) else exp = spaceJoin(r1[i])..' ; '..spaceJoin(r1[i+1])..' ; '..spaceJoin(r1[i+2]) got = spaceJoin(f(g1[i]))..' ; '..spaceJoin(f(g1[i+1]))..' ; '..spaceJoin(f(g1[i+2])) end got = to_IAST(got) if exp ~= got then -- Add arguments. exp = {exp} if r1.why            then ti(exp, r1.why); end if r1[i].why         then ti(exp, r1[i].why); end if r1[i+1].why       then ti(exp, r1[i+1].why); end if r1[i+2].why       then ti(exp, r1[i+2].why); end if r2 and r2.why     then ti(exp, r2.why); end if r2 and r2[i].why  then ti(exp, r2[i].why); end if r2 and r2[i+1].why then ti(exp, r2[i+1].why); end if r2 and r2[i+2].why then ti(exp, r2[i+2].why); end exp = table.concat(exp, " ")

got = {got} if r1.whynot            then ti(got, r1.whynot); end if r1[i].whynot         then ti(got, r1[i].whynot); end if r1[i+1].whynot       then ti(got, r1[i+1].whynot); end if r1[i+2].whynot       then ti(got, r1[i+2].whynot); end if r2 and r2.whynot     then ti(got, r2.whynot); end if r2 and r2[i].whynot  then ti(got, r2[i].whynot); end if r2 and r2[i+1].whynot then ti(got, r2[i+1].whynot); end if r2 and r2[i+2].whynot then ti(got, r2[i+2].whynot); end got = table.concat(got, " ") end tests:equals(label..num[i], got, exp,			{show_difference = true}) -- to_script(exp, tests.sc, tests.option))	end end

local whyant = "Whitney e.g. Para 741 cites participles in strong form. ".. "See discussion." local irs3_strong = "3s imperative active is strong. McDonnell concurs." local notat2 = "Whitney reports that in Class 2, -tāt only occurs for 6 roots, and this is not one of them." local notat3 = "Whitney reports that in Class 3, -tāt only occurs for 4 roots, and this is not one of them." local notat4 = "Whitney reports that in Class 4, -tāt only occurs for 3 roots, and this is not one of them." local notat5 = "Whitney does not report -tāt for Classes 5 and 8." local notat7 = "Whitney denies the existence of -tāt for Class 7." local notat9 = "Whitney reports that in Class 9, -tāt only occurs for 3 roots, and this is not one of them." local hi_after_vowel = "2s ending is -hi rather than -dhi after vowels." local tat2sonly = "Whitney inflection details mention ony 2s, not 3s, in -tāt."

function dhvam_why(letter) local argument = {"See [https://en.wikisource.org/wiki/", "Page%3ASanskrit_Grammar_", "by_Whitney_p1.djvu/105 Whitney] 226c for the retroflexion in ", "the 2p marker. "} if letter == "is s" then -- s-aorist. elseif string.match(letter, "[yrlv]") then ti(argument, "The '") ti(argument, letter) ti(argument, "' is a semivowel.") elseif letter == 'h' then ti(argument, "Note the letter 'h'.") else ti(argument, "The '") ti(argument, letter) ti(argument, "' is a not semivowel.") end return table.concat(argument) end

local bhavati_ref = { presa = { -- Whitney Para 735, but with ḥ for final s.		{"bhávāmi"}, {"bhávāvaḥ"}, {"bhávāmaḥ"}, {"bhávasi"}, {"bhávathaḥ"}, {"bhávatha"}, {"bhávati"}, {"bhávataḥ"}, {"bhávanti"} },	presm = { -- Whitney Para 735 {"bháve"}, {"bhávāvahe"}, {"bhávāmahe"}, {"bhávase"}, {"bhávethe"}, {"bhávadhve"}, {"bhávate"}, {"bhávete"}, {"bhávante"} },	subja = { -- Whitney Para 736, but with ḥ for final s.		{"bhávāni"}, {"bhávāva"}, {"bhávāma"}, {"bhávāsi", "bhávāḥ"}, {"bhávāthaḥ"}, {"bhávātha"}, {"bhávāti", "bhávāt"}, {"bhávātaḥ"}, {"bhávān"} },	subjm = { -- Whitney Para 736 {"bhávai"}, {"bhávāvahai"}, {"bhávāmahai"}, {"bhávāse", "bhávāsai"}, {}, {"bhávādhvai"}, {"bhávāte", "bhávātai"}, {"bhávaite"}, {"bhávanta", "bhávāntai"} },	optaa = { -- Whitney Para 738, but with ḥ for final s.		{"bháveyam"}, {"bháveva"}, {"bhávema"}, {"bháveḥ"}, {"bhávetam"}, {"bháveta"}, {"bhávet"}, {"bhávetām"}, {"bháveyuḥ"}, },	optam = { -- Whitney Para 738, but with ḥ for final s.		{"bháveya"}, {"bhávevahi"}, {"bhávemahi"}, {"bhávethāḥ"}, {"bháveyāthām"}, {"bhávedhvam"}, {"bháveta"}, {"bháveyātām"}, {"bháveran"}, },	impra = { -- Whitney Para 739 & 740. {"bhávāni"}, {"bhávāva"}, {"bhávāma"}, {"bháva", "bhávatāt"}, {"bhávatam"}, {"bhávata"}, {"bhávatu", why = tat2sonly}, {"bhávatām"}, {"bhávantu"}, },	impra_reg = { -- Remove -tāt {"bhávāni"}, {"bhávāva"}, {"bhávāma"}, {"bháva"}, {"bhávatam"}, {"bhávata"}, {"bhávatu"}, {"bhávatām"}, {"bhávantu"}, },	imprm = { -- Whitney Para 739. {"bhávai"}, {"bhávāvahai"}, {"bhávāmahai"}, {"bhávasva"}, {"bhávethām"}, {"bhávadhvam"}, {"bhávatām"}, {"bhávetām"}, {"bhávantām"}, },	pap = {"bhávant", whynot = whyant},  -- Whitney Para 741. pmp = {"bhávamāna"}, -- Whitney Para 741. impfa = { -- Whitney Para 742, but with ḥ for final s.		{"ábhavam"}, {"ábhavāva"}, {"ábhavāma"}, {"ábhavaḥ"},{"ábhavatam"}, {"ábhavata"}, {"ábhavat"}, {"ábhavatām"}, {"ábhavan"}, },	impfm = { -- Whitney Para 742, but with ḥ for final s.		{"ábhave"}, {"ábhavāvahi"}, {"ábhavāmahi"}, {"ábhavathāḥ"}, {"ábhavethām"}, {"ábhavadhvam"}, {"ábhavata"}, {"ábhavetām"}, {"ábhavanta"}, }, -- Injunctive form of the aboveː impfja = { -- Whitney Para 742 + 743, but with ḥ for final s.		{"bhávam"}, {"bhávāva"}, {"bhávāma"}, {"bhávaḥ"},{"bhávatam"}, {"bhávata"}, {"bhávat"}, {"bhávatām"}, {"bhávan"}, },	impfjm = { -- Whitney Para 742 + 743, but with ḥ for final s.		{"bháve"}, {"bhávāvahi"}, {"bhávāmahi"}, {"bhávathāḥ"}, {"bhávethām"}, {"bhávadhvam"}, {"bhávata"}, {"bhávetām"}, {"bhávanta"}, }, }

local eti_ref = { presa = { -- Whitney Para 612a, but with ḥ for final s.		{"émi"}, {"iváḥ"}, {"imáḥ"}, {"éṣi"}, {"itháḥ"}, {"ithá"}, {"éti"}, {"itáḥ"}, {"yánti"} },	subja = { -- Whitney Para 614a, but with ḥ for final s.		{"áyāni", "áyā"}, {"áyāva"}, {"áyāma"}, {"áyasi", "áyaḥ"}, {"áyathaḥ"}, {"áyatha"}, {"áyati", "áyat"}, {"áyataḥ"}, {"áyan"} },	optaa = { -- Whitney Para 616a, but with ḥ for final s.		{"iyā́m"}, {"iyā́va"}, {"iyā́ma"}, {"iyā́ḥ"}, {"iyā́tam"}, {"iyā́ta"}, {"iyā́t"}, {"iyā́tām"}, {"iyúḥ"}, },	impra = { -- Whitney Para 617a. {"áyāni"}, {"áyāva"}, {"áyāma"}, {"ihí", why = hi_after_vowel .. " "..notat2}, {"itám"}, {"itá"}, {"étu", why = tat2sonly}, {"itā́m"}, {"yántu"}, },	pap = {"yánt", whynot = whyant},  -- Whitney Para 619. pmp = {"iyāná"}, -- Whitney Para 619. impfa = { -- Whitney Para 620a, but with ḥ for final s.		{"ā́yam"}, {"aíva"}, {"aíma"}, {"aíḥ"},{"aítam"}, {"aíta"}, {"aít"}, {"aítām"}, {"ā́yan"}, }, -- Injunctive form of the aboveː impfja = nil -- Whitney Para 622 }

local aste_ref = { presm = { -- Whitney Para 612a {"ā́se"}, {"ā́svahe"}, {"ā́smahe"}, {"ā́sse"}, {"ā́sāthe"}, {"ā́ddhve"}, {"ā́ste"}, {"ā́sāte"}, {"ā́sate"} },	subjm = { -- Whitney Para 614a {"ā́sai"}, {"ā́sāvahai", "ā́sāvahe"}, {"ā́sāmahai", "ā́sāmehe"}, {"ā́sase", "ā́sāsai"}, {"ā́saithe"}, {"ā́sadhve", "ā́sādhvai"}, {"ā́sate", "ā́sātai"}, {"ā́saite"}, {"ā́sante", "ā́santa", "ā́sāntai"} },	optam = { -- Whitney Para 616a, but with ḥ for final s.		{"ā́sīya"}, {"ā́sīvahi"}, {"ā́sīmahi"}, {"ā́sīthāḥ"}, {"ā́sīyāthām"}, {"ā́sīdhvam"}, {"ā́sīta"}, {"ā́sīyātām"}, {"ā́sīran"}, },	imprm = { -- Whitney Para 617a. {"ā́sai"}, {"ā́sāvahai"}, {"ā́sāmahai"}, {"ā́ssva"}, {"ā́sāthām"}, {"ā́ddhvam"}, {"ā́stām"}, {"ā́sātām"}, {"ā́satām"}, },	pap = {},  -- Whitney Para 619. pmp = {"ā́sīna", "āsāná"}, -- Whitney Para 619c. pmp_reg = {"ā́sāna"}, impfm = { -- Whitney Para 620a, but with ḥ for final s.		{"ā́si"}, {"ā́svahi"}, {"ā́smahi"}, {"ā́sthāḥ"}, {"ā́sāthām"}, {"ā́ddhvam"}, {"ā́sta"}, {"ā́sātām"}, {"ā́sata"}, }, -- Injunctive form of the aboveː impfjm = nil -- Whitney Para 622. }

local dvesti_ref = { presa = { -- Whitney Para 612a, but with ḥ for final s.		{"dvéṣmi"}, {"dviṣváḥ"}, {"dviṣmáḥ"}, {"dvékṣi"}, {"dviṣṭháḥ"}, {"dviṣṭhá"}, {"dvéṣṭi"}, {"dviṣṭáḥ"}, {"dviṣánti"} },	presm = { -- Whitney Para 612a {"dviṣé"}, {"dviṣváhe"}, {"dviṣmáhe"}, {"dvikṣé"}, {"dviṣā́the"}, {"dviḍḍhvé"}, {"dviṣṭé"}, {"dviṣā́te"}, {"dviṣáte"} }, --	subja = { -- Whitney Para 614a, but with ḥ for final s. --		{""}, {""}, {""}, --		{"", ""}, {""}, {""}, --		{"", ""}, {""}, {""} --	}, --	subjm = { -- Whitney Para 614a --		{""}, {""}, {""}, --		{"", ""}, {}, {""}, --		{"", ""}, {""}, {"", ""} --	},	optaa = { -- Whitney Para 616a, but with ḥ for final s.		{"dviṣyā́m"}, {"dviṣyā́va"}, {"dviṣyā́ma"}, {"dviṣyā́ḥ"}, {"dviṣyā́tam"}, {"dviṣyā́ta"}, {"dviṣyā́t"}, {"dviṣyā́tām"}, {"dviṣyúḥ"}, },	optam = { -- Whitney Para 616a, but with ḥ for final s.		{"dviṣīyá"}, {"dviṣīváhi"}, {"dviṣīmáhi"}, {"dviṣīthā́ḥ"}, {"dviṣīyā́thām"}, {"dviṣīdhvám"}, {"dviṣītá"}, {"dviṣīyā́tām"}, {"dviṣīrán"}, },	impra = { -- Whitney Para 617b. {"dvéṣāṇi", why = "r and ṣ act alike on n."}, {"dvéṣāva"}, {"dvéṣāma"}, {"dviḍḍhí", why = notat2}, {"dviṣṭám"}, {"dviṣṭá"}, {"dvéṣṭu", why = tat2sonly}, {"dviṣṭā́m"}, {"dviṣántu"}, },	imprm = { -- Whitney Para 617b. {"dvéṣai"}, {"dvéṣāvahai"}, {"dvéṣāmahai"}, {"dvikṣvá"}, {"dviṣā́thām"}, {"dviḍḍhvám"}, {"dviṣṭā́m"}, {"dviṣā́tām"}, {"dviṣátām"}, },	pap = {"dviṣánt", whynot = whyant},  -- Whitney Para 619. pmp = {"dviṣāṇá"}, -- Whitney Para 619. impfa = { -- Whitney Para 620a, but with ḥ for final s.		{"ádveṣam"}, {"ádviṣva"}, {"ádviṣma"}, {"ádveṭ"},{"ádviṣṭam"}, {"ádviṣṭa"}, {"ádveṭ"}, {"ádviṣṭām"}, {"ádviṣan"}, },	impfm = { -- Whitney Para 620a, but with ḥ for final s.		{"ádviṣi"}, {"ádviṣvahi"}, {"ádviṣmahi"}, {"ádviṣṭhāḥ"}, {"ádviṣāthām"}, {"ádviḍḍhvam"}, {"ádviṣṭa"}, {"ádviṣātām"}, {"ádviṣata"}, }, -- Injunctive form of the aboveː impfja = nil, -- Whitney Para 622. impfjm = nil, -- Whitney Para 622. }

local dogdhi_ref = { presa = { -- Whitney Para 612c, but with ḥ for final s.		{"dóhmi"}, {"duhváḥ"}, {"duhmáḥ"}, {"dhókṣi"}, {"dugdháḥ"}, {"dugdhá"}, {"dógdhi"}, {"dugdháḥ"}, {"duhánti"} },	presm = { -- Whitney Para 612c {"duhé"}, {"duhváhe"}, {"duhmáhe"}, {"dhukṣé"}, {"duhā́the"}, {"dhugdhvé"}, {"dugdhé"}, {"duhā́te"}, {"duháte"} }, --	subja = { -- Whitney Para 614a, but with ḥ for final s. --		{""}, {""}, {""}, --		{"", ""}, {""}, {""}, --		{"", ""}, {""}, {""} --	}, --	subjm = { -- Whitney Para 614a --		{""}, {""}, {""}, --		{"", ""}, {}, {""}, --		{"", ""}, {""}, {"", ""} --	},	optaa = { -- Whitney Para 616a, but with ḥ for final s.		{"duhyā́m"}, {"duhyā́va"}, {"duhyā́ma"}, {"duhyā́ḥ"}, {"duhyā́tam"}, {"duhyā́ta"}, {"duhyā́t"}, {"duhyā́tām"}, {"duhyúḥ"}, },	optam = { -- Whitney Para 616a, but with ḥ for final s.		{"duhīyá"}, {"duhīváhi"}, {"duhīmáhi"}, {"duhīthā́ḥ"}, {"duhīyā́thām"}, {"duhīdhvám"}, {"duhītá"}, {"duhīyā́tām"}, {"duhīrán"}, },	impra = { -- Whitney Para 617b. {"dóhāni"}, {"dóhāva"}, {"dóhāma"}, {"dugdhí", why = notat2}, {"dugdhám"}, {"dugdhá"}, {"dógdhu", why = tat2sonly}, {"dugdhā́m"}, {"duhántu"}, },	imprm = { -- Whitney Para 617b. {"dóhai"}, {"dóhāvahai"}, {"dóhāmahai"}, {"dhukṣvá"}, {"duhā́thām"}, {"dhugdhvám"}, {"dugdhā́m"}, {"duhā́tām"}, {"duhátām"}, },	pap = {"duhánt", whynot = whyant},  -- Whitney Para 619a. pmp = {"duhāná", "dúhāna", "dúghāna"}, -- Whitney Para 619. pmp_reg = {"duhāná"}, impfa = { -- Whitney Para 620b. {"ádoham"}, {"áduhva"}, {"áduhma"}, {"ádhok"}, {"ádugdham"}, {"ádugdha"}, {"ádhok"}, {"ádugdhām"}, {"áduhan"}, },	impfm = { -- Whitney Para 620b, but with ḥ for final s.		{"áduhi"}, {"áduhvahi"}, {"áduhmahi"}, {"ádugdhāḥ"}, {"áduhāthām"}, {"ádhugdhvam"}, {"ádugdha"}, {"áduhātām"}, {"áduhata"}, }, -- Injunctive form of the aboveː impfja = nil, -- Whitney Para 622. impfjm = nil, -- Whitney Para 622. }

local ledhi_ref = { presa = { -- Whitney Para 612d, but with ḥ for final s.		{"léhmi"}, {"lihváḥ"}, {"lihmáḥ"}, {"lékṣi"}, {"līḍháḥ"}, {"līḍhá"}, {"léḍhi"}, {"līḍháḥ"}, {"lihánti"} },	presm = { -- Whitney Para 612d {"lihé"}, {"lihváhe"}, {"lihmáhe"}, {"likṣé"}, {"lihā́the"}, {"līḍhvé"}, {"līḍhé"}, {"lihā́te"}, {"liháte"} }, --	subja = { -- Whitney Para 614a, but with ḥ for final s. --		{""}, {""}, {""}, --		{"", ""}, {""}, {""}, --		{"", ""}, {""}, {""} --	}, --	subjm = { -- Whitney Para 614a --		{""}, {""}, {""}, --		{"", ""}, {}, {""}, --		{"", ""}, {""}, {"", ""} --	},	optaa = { -- Whitney Para 616a, but with ḥ for final s.		{"lihyā́m"}, {"lihyā́va"}, {"lihyā́ma"}, {"lihyā́ḥ"}, {"lihyā́tam"}, {"lihyā́ta"}, {"lihyā́t"}, {"lihyā́tām"}, {"lihyúḥ"}, },	optam = { -- Whitney Para 616a, but with ḥ for final s.		{"lihīyá"}, {"lihīváhi"}, {"lihīmáhi"}, {"lihīthā́ḥ"}, {"lihīyā́thām"}, {"lihīdhvám"}, {"lihītá"}, {"lihīyā́tām"}, {"lihīrán"}, },	impra = { -- Whitney Para 617b. {"léhāni"}, {"léhāva"}, {"léhāma"}, {"līḍhí", why = notat2}, {"līḍhám"}, {"līḍhá"}, {"léḍhu", why = tat2sonly}, {"līḍhā́m"}, {"lihántu"}, },	imprm = { -- Whitney Para 617b. {"léhai"}, {"léhāvahai"}, {"léhāmahai"}, {"likṣvá"}, {"lihā́thām"}, {"līḍhvám"}, {"līḍhā́m"}, {"lihā́tām"}, {"lihátām"}, },	pap = {"lihánt", whynot = whyant},  -- Whitney Para 619a. pmp = {"lihāná"}, -- Whitney Para 619b. impfa = { -- Whitney Para 620b. {"áleham"}, {"álihva"}, {"álihma"}, {"áleṭ"},{"álīḍham"}, {"álīḍha"}, {"áleṭ"}, {"álīḍhām"}, {"álihan"}, },	impfm = { -- Whitney Para 620b, but with ḥ for final s.		{"álihi"}, {"álihvahi"}, {"álihmahi"}, {"álīḍhāḥ"}, {"álihāthām"}, {"álīḍhvam"}, {"álīḍha"}, {"álihātām"}, {"álihata"}, }, -- Injunctive form of the aboveː impfja = nil, -- Whitney Para 622. impfjm = nil, -- Whitney Para 622. }

local asti_ref = { presa = { -- Whitney Para 636a + 636c + 636d, but with ḥ for final s.		{"ásmi"}, {"sváḥ", "sva"}, {"smáḥ", "sma"}, {"ási"}, {"stháḥ"}, {"sthá", "sthána"}, {"ásti"}, {"stáḥ"}, {"sánti"} },	presm = { -- Whitney Para 636d {}, {}, {"smahe"}, {}, {}, {}, {}, {}, {} }, --	subja = { -- Whitney Para 614a, but with ḥ for final s. --		{""}, {""}, {""}, --		{"", ""}, {""}, {""}, --		{"", ""}, {""}, {""} --	},	optaa = { -- Whitney Para 636a + 636d, but with ḥ for final s.		{"syā́m"}, {"syā́va", "syāvaḥ"}, {"syā́ma", "syāmaḥ"}, {"syā́ḥ"}, {"syā́tam"}, {"syā́ta"}, {"syā́t"}, {"syā́tām"}, {"syúḥ"}, },	optam = { -- Whitney Para 636d {}, {}, {"syāmahe"}, {}, {}, {}, {}, {}, {} },	impra = { -- Whitney Para 636a. {"ásāni"}, {"ásāva"}, {"ásāma"}, {"edhí"}, {"stám"}, {"stá"}, {"ástu", why = tat2sonly}, {"stā́m"}, {"sántu"}, why = "Whitney Para 740 mentions ony 2s, not 3s, in -tāt.", },	pap = {"sánt", whynot = whyant},  -- Whitney Para 636a. pmp = nil, -- Whitney Para 636a. impfa = { -- Whitney Para 636a and 636c but with ḥ for final s.		{"ā́sam"}, {"ā́sva"}, {"ā́sma"}, {"ā́sīḥ", "ā́ḥ"}, {"ā́stam"}, {"ā́sta"}, {"ā́sīt", "ā́ḥ"}, {"ā́stām"}, {"ā́san"}, }, -- Injunctive form of the aboveː --	impfja = { -- Whitney Para 620 + 622, but with ḥ for final s. --		{}, {""}, {""}, --		{""},{""}, {""}, --		{""}, {""}, {""}, --	}, --	impfjm = { -- Whitney Para 620 + 622, but with ḥ for final s. --		{""}, {""}, {""}, --		{""}, {""}, {""}, --		{""}, {""}, {""}, --	}, }

local hanti_ref = { -- Converted by RichardW57 from ledhi_ref in accordance with Whitney -- Para 637 unless otherwise stated, and so deduced discrepancies must -- be treated with extreme caution. presa = { -- Whitney Para 637, but with ḥ for final s.		{"hánmi"}, {"hanváḥ"}, {"hanmáḥ"}, {"háṃsi"}, {"hatháḥ"}, {"hathá"}, -- Note that Whitney's ṅ is an anusvara, so changed to ṃ. {"hánti"}, {"hatáḥ"}, {"ghnánti"} },	presm = { {"ghné"}, {"hanváhe"}, {"hanmáhe"}, {"hasé"}, {"ghnā́the"}, {"hadhvé"}, {"haté"}, {"ghnā́te"}, {"ghnáte"} }, --	subja = { --		{""}, {""}, {""}, --		{"", ""}, {""}, {""}, --		{"", ""}, {""}, {""} --	}, --	subjm = { --		{""}, {""}, {""}, --		{"", ""}, {}, {""}, --		{"", ""}, {""}, {"", ""} --	},	optaa = { {"hanyā́m"}, {"hanyā́va"}, {"hanyā́ma"}, {"hanyā́ḥ"}, {"hanyā́tam"}, {"hanyā́ta"}, {"hanyā́t"}, {"hanyā́tām"}, {"hanyúḥ"}, },	optam = { -- 2nd form of 3s from Whitney Para 637b. {"ghnīyá"}, {"ghnīváhi"}, {"ghnīmáhi"}, {"ghnīthā́ḥ"}, {"ghnīyā́thām"}, {"ghnīdhvám"}, {"ghnītá", "hanītá"}, {"ghnīyā́tām"}, {"ghnīrán"}, },	impra = { -- Imperative 2s by Whitney 637a and 618. {"hánāni"}, {"hánāva"}, {"hánāma"}, {"jahí", "hatāt"}, {"hatám"}, {"hatá"}, {"hántu", why = tat2sonly}, {"hatā́m"}, {"ghnántu"}, },	imprm = { {"hánai"}, {"hánāvahai"}, {"hánāmahai"}, {"hasvá"}, {"ghnā́thām"}, {"hadhvám"}, {"hatā́m"}, {"ghnā́tām"}, {"ghnátām"}, },	pap = {"ghnánt", whynot = whyant},  -- Whitney Para 637. pmp = {"ghnāná"}, -- Whitney Para 619b. impfa = { -- Whitney Para 620b. {"áhanam"}, {"áhanva"}, {"áhanma"}, {"áhan"},{"áhatam"}, {"áhata"}, {"áhan"}, {"áhatām"}, {"ághnan"}, },	impfm = { -- 2nd form of 3p from Whitney Para 637b {"ághni"}, {"áhanvahi"}, {"áhanmahi"}, {"áhathāḥ"}, {"ághnāthām"}, {"áhadhvam"}, {"áhata"}, {"ághnātām"}, {"ághnata", "áhata"}, }, -- Injunctive form of the aboveː impfja = nil, -- Whitney Para 622. impfjm = nil, -- Whitney Para 622. }

juhoti_ref = { presa = { -- Whitney Para 647a with final s replaced by ḥ. {"juhómi"}, {"juhuváḥ"}, {"juhumáḥ"}, {"juhóṣi"}, {"juhutháḥ"}, {"juhuthá"}, {"juhóti"}, {"juhutáḥ"}, {"júhvati"}, },	presm = { -- Whitney Para 647a {"júhve"}, {"juhuváhe"}, {"juhumáhe"}, {"juhuṣé"}, {"júhvāthe"}, {"juhudhvé"}, {"juhuté"}, {"júhvāte"}, {"júhvate"}, },	optaa = { -- Whitney Para 651 for 1st person. By analogy for others. {"juhuyā́m"}, {"juhuyā́va"}, {"juhuyā́ma"	}, {"juhuyā́ḥ"}, {"juhuyā́tam"}, {"juhuyā́ta"}, {"juhuyā́t"}, {"juhuyā́tām"}, {"juhuyúḥ"}, },	optam = { -- Whitney Para 651 for 1st person. By analogy for others. {"júhvīya"}, {"júhvīvahi"}, {"júhvīmahi"}, {"júhvīthāḥ"}, {"júhvīyāthām"}, {"júhvīdhvam"}, {"júhvīta"}, {"júhvīyātām"}, {"júhvīran"}, },	impra = { -- Whitney Para 653a {"juhávāni"}, {"juhávāva"}, {"juhávāma"}, {"juhudhí", why = notat3}, {"juhutám"}, {"juhutá"}, -- 2s irregular! {"juhótu", why = tat2sonly}, {"juhutā́m"}, {"júhvatu"}, },	imprm = { -- Whitney Para 653b {"juhávai"}, {"juhávāvahai"}, {"juhávāmahai"}, {"juhuṣvá"}, {"júhvāthām"}, {"juhudhvám"}, {"juhutā́m"}, {"júhvātām"}, {"júhvatām"}, },	optaa = { -- Whitney Para 651 for 1st person. By analogy for others. {"juhuyā́m"}, {"juhuyā́va"}, {"juhuyā́ma"	}, {"juhuyā́ḥ"}, {"juhuyā́tam"}, {"juhuyā́ta"}, {"juhuyā́t"}, {"juhuyā́tām"}, {"juhuyúḥ"}, },	optam = { -- Whitney Para 651 for 1st person. By analogy for others. {"júhvīya"}, {"júhvīvahi"}, {"júhvīmahi"}, {"júhvīthāḥ"}, {"júhvīyāthām"}, {"júhvīdhvam"}, {"júhvīta"}, {"júhvīyātām"}, {"júhvīran"}, },	pap = {"júhvat"}, pmp = {"júhvāna"}, impfa = { -- Whitney Para 657 {"ájuhavam"}, {"ájuhuva"}, {"ájuhuma"}, {"ájuhoḥ"}, {"ájuhutam"}, {"ájuhuta"}, {"ájuhot"}, {"ájuhutām"}, {"ájuhavuḥ"}, },	impfm = { -- Whitney Para 657 with final s replaced by ḥ. {"ájuhvi"}, {"ájuhuvahi"}, {"ájuhumahi"}, {"ájuhuthāḥ"}, {"ájuhvāthām"}, {"ájuhudhvam"}, {"ájuhuta"}, {"ájuhvātām"}, {"ájuhvata"}, }, } bibharti_ref = { presa = { -- Whitney Para 647b with final s replaced by ḥ. {"bíbharmi"}, {"bibhṛváḥ"}, {"bibhṛmáḥ"}, {"bíbharṣi"}, {"bibhṛtháḥ"}, {"bibhṛthá"}, {"bíbharti"}, {"bibhṛtáḥ"}, {"bíbhrati"}, },	presm = { -- Whitney Para 647b {"bíbhre"}, {"bibhṛváhe"}, {"bibhṛmáhe"}, {"bibhṛṣé"}, {"bíbhrāthe"}, {"bibhṛdhvé"}, {"bibhṛté"}, {"bíbhrāte"}, {"bíbhrate"}, },	optaa = { -- Whitney Para 651 says these are obvious, so composed by RichardW57m. {"bibhṛyā́m"}, {"bibhṛyā́va"}, {"bibhṛyā́ma"	}, {"bibhṛyā́ḥ"}, {"bibhṛyā́tam"}, {"bibhṛyā́ta"}, {"bibhṛyā́t"}, {"bibhṛyā́tām"}, {"bibhṛyúḥ"}, },	optam = { -- Whitney Para 651 says these are obvious, so composed by RichardW57m. {"bíbhrīya"}, {"bíbhrīvahi"}, {"bíbhrīmahi"}, {"bíbhrīthāḥ"}, {"bíbhrīyāthām"}, {"bíbhrīdhvam"}, {"bíbhrīta"}, {"bíbhrīyātām"}, {"bíbhrīran"}, },	impra = { -- Whitney Para 653a as modified by Para 654b {"bíbharāṇi"}, {"bíbharāva"}, {"bíbharāma"}, {"bibhṛhí", why = hi_after_vowel..' '..notat3}, {"bibhṛtám"}, {"bibhṛtá"}, {"bíbhartu", why = tat2sonly}, {"bibhṛtā́m"}, {"bíbhratu"}, },	imprm = { -- Whitney Para 653b as modified by Para 654b {"bíbharai"}, {"bíbharāvahai"}, {"bíbharāmahai"}, {"bibhṛṣvá"}, {"bíbhrāthām"}, {"bibhṛdhvám"}, {"bibhṛtā́m"}, {"bíbhrātām"}, {"bíbhratām"}, },	pap = {"bíbhrat"}, pmp = {"bíbhrāṇa"}, impfa = { -- Based on Whitney Para 657 with final r and s replaced by ḥ. {"ábibharam"}, {"ábibhṛva"}, {"ábibhṛma"}, {"ábibhaḥ"}, {"ábibhṛtam"}, {"ábibhṛta"}, {"ábibhaḥ"}, {"ábibhṛtām"}, {"ábibharuḥ"}, },	impfm = { -- Based on Whitney Para 657 {"ábibhri"}, {"ábibhṛvahi"}, {"ábibhṛmahi"}, {"ábibhṛthāḥ"}, {"ábibhrāthām"}, {"ábibhṛdhvam"}, {"ábibhṛta"}, {"ábibhrātām"}, {"ábibhrata"}, }, }

local dadhati_ref = { presa = { -- Whitney Para 668, but with ḥ for final s.		{"dádhāmi"}, {"dadhváḥ"}, {"dadhmáḥ"}, {"dádhāsi"}, {"dhattháḥ"}, {"dhatthá"}, {"dádhāti"}, {"dhattáḥ"}, {"dádhati"} },	presm = { -- Whitney Para 668 {"dadhé"}, {"dádhvahe"}, {"dádhmahe"}, {"dhatsé"}, {"dadhāthe"}, {"dhaddhve"}, {"dhatté"}, {"dadhā́te"}, {"dádhate"} }, --	subja = { -- Whitney Para 614a, but with ḥ for final s. --		{""}, {""}, {""}, --		{"", ""}, {""}, {""}, --		{"", ""}, {""}, {""} --	}, --	subjm = { -- Whitney Para 614a --		{""}, {""}, {""}, --		{"", ""}, {}, {""}, --		{"", ""}, {""}, {"", ""} --	},	optaa = { -- Whitney Para 668, but with ḥ for final s.		{"dadhyā́m"}, {"dadhyā́va"}, {"dadhyā́ma"}, {"dadhyā́ḥ"}, {"dadhyā́tam"}, {"dadhyā́ta"}, {"dadhyā́t"}, {"dadhyā́tām"}, {"dadhyúḥ"}, },	optam = { -- Whitney Para 668, but with ḥ for final s.		{"dádhīya"}, {"dádhīvahi"}, {"dádhīmahi"}, {"dádhīthāḥ"}, {"dádhīyāthām"}, {"dádhīdhvam"}, {"dádhīta"}, {"dádhīyātām"}, {"dádhīran"}, },	impra = { -- Whitney Para 668 and 669(4). {"dádhāni"}, {"dádhāva"}, {"dádhāma"}, --		{"dhehí", "daddhí", "dhattā́t"}, -- Preferred ordering {"daddhí", "dhattā́t", "dhehí", }, -- Better for matching. {"dhattám"}, {"dhattá", "dhattána", "dádhāta", "dádhātana"}, -- Para 669(1), Not dattana {"dádhātu", why = "Whitney Para 654 mentions ony 2s, not 3s, in -tāt."}, {"dhattā́m"}, {"dádhatu"}, },	imprm = { -- Whitney Para 668. {"dádhai"}, {"dádhāvahai"}, {"dádhāmahai"}, {"dhatsva"}, {"dadhāthām"}, {"dhaddhvam"}, {"dhattām"}, {"dadhātām"}, {"dadhatām"}, },	pap = {"dádhat"}, -- Whitney Para 668. pmp = {"dádhāna"}, -- Whitney Para 668. impfa = { -- Whitney Para 668, but with ḥ for final s.		{"ádadhām"}, {"ádadhva"}, {"ádadhma"}, {"ádadhāḥ"}, {"ádhattam"}, {"ádhatta"}, {"ádadhāt"}, {"ádhattām"}, {"ádadhuḥ"}, },	impfm = { -- Whitney Para 668, but with ḥ for final s.		{"ádadhi"}, {"ádadhvahi"}, {"ádadhmahi"}, {"ádhatthāḥ"}, {"ádadhāthām"}, {"ádhaddhvam"}, {"ádhatta"}, {"ádadhātām"}, {"ádadhata"}, }, -- Injunctive form of the aboveː --	impfja = { -- Whitney Para 620 + 622, but with ḥ for final s. --		{}, {""}, {""}, --		{""},{""}, {""}, --		{""}, {""}, {""}, --	}, --	impfjm = { -- Whitney Para 620 + 622, but with ḥ for final s. --		{""}, {""}, {""}, --		{""}, {""}, {""}, --		{""}, {""}, {""}, --	}, }

local dadati_ref = { -- Adapted from dadati_ref - checked against https://sanskrit.inria.fr	presa = { {"dádāmi"}, {"dadváḥ"}, {"dadmáḥ"}, {"dádāsi"}, {"dattháḥ"}, {"datthá"}, {"dádāti"}, {"dattáḥ"}, {"dádati"} },	presm = { {"dadé"}, {"dádvahe"}, {"dádmahe"}, {"datsé"}, {"dadāthe"}, {"daddhve"}, {"datté"}, {"dadā́te"}, {"dádate"} }, --	subja = { -- Whitney Para 614a, but with ḥ for final s. --		{""}, {""}, {""}, --		{"", ""}, {""}, {""}, --		{"", ""}, {""}, {""} --	}, --	subjm = { -- Whitney Para 614a --		{""}, {""}, {""}, --		{"", ""}, {}, {""}, --		{"", ""}, {""}, {"", ""} --	},	optaa = { {"dadyā́m"}, {"dadyā́va"}, {"dadyā́ma"}, {"dadyā́ḥ"}, {"dadyā́tam"}, {"dadyā́ta"}, {"dadyā́t"}, {"dadyā́tām"}, {"dadyúḥ"}, },	optam = { {"dádīya"}, {"dádīvahi"}, {"dádīmahi"}, {"dádīthāḥ"}, {"dádīyāthām"}, {"dádīdhvam"}, {"dádīta"}, {"dádīyātām"}, {"dádīran"}, },	impra = { {"dádāni"}, {"dádāva"}, {"dádāma"}, -- Using analogy of dhattā́t. --		{"dehí", "daddhí", "dattā́t"}, -- Preferred ordering {"daddhí", "dattā́t", "dehí", }, -- Better for matching. {"dattám"}, {"dattá", "dádāta", "dádātana"}, -- Not dattana {"dádātu", why = "Whitney Para 654 mentions ony 2s, not 3s, in -tāt."}, {"dattā́m"}, {"dádatu"}, },	imprm = { {"dádai"}, {"dádāvahai"}, {"dádāmahai"}, {"datsvá"}, {"dádāthām"}, {"daddhvám"}, {"dattā́m"}, {"dádātām"}, {"dádatām"}, },	pap = {"dádat"}, pmp = {"dádāna"}, impfa = { {"ádadām"}, {"ádadva"}, {"ádadma"}, {"ádadāḥ"}, {"ádattam"}, {"ádatta"}, {"ádadāt"}, {"ádattām"}, {"ádaduḥ"}, },	impfm = { {"ádadi"}, {"ádadvahi"}, {"ádadmahi"}, {"ádatthāḥ"}, {"ádadāthām"}, {"ádaddhvam"}, {"ádatta"}, {"ádadātām"}, {"ádadata"}, }, -- Injunctive form of the aboveː --	impfja = { -- Whitney Para 620 + 622, but with ḥ for final s. --		{}, {""}, {""}, --		{""},{""}, {""}, --		{""}, {""}, {""}, --	}, --	impfjm = { -- Whitney Para 620 + 622, but with ḥ for final s. --		{""}, {""}, {""}, --		{""}, {""}, {""}, --		{""}, {""}, {""}, --	}, }

local nahyati_ref = { presa = { -- Whitney Para 760, but with ḥ for final s.		{"náhyāmi"}, {"náhyāvaḥ"}, {"náhyāmaḥ"}, {"náhyasi"}, {"náhyathaḥ"}, {"náhyatha"}, {"náhyati"}, {"náhyataḥ"}, {"náhyanti"} },	presm = { -- Whitney Para 760 {"náhye"}, {"náhyāvahe"}, {"náhyāmahe"}, {"náhyase"}, {"náhyethe"}, {"náhyadhve"}, {"náhyate"}, {"náhyete"}, {"náhyante"} },	subja = { -- Whitney Para 760, but with ḥ for final s and without the gaps. {"náhyāni"}, {"náhyāva"}, {"náhyāma"}, {"náhyāsi", "náhyāḥ"}, {"náhyāthaḥ"}, {"náhyātha"}, {"náhyāti", "náhyāt"}, {"náhyātaḥ"}, {"náhyān"} },	subjm = { -- Whitney Para 760, but without the blanks/ {"náhyai"}, {"náhyāvahai"}, {"náhyāmahai"}, {"náhyāse", "náhyāsai"}, {}, {"náhyādhvai"}, {"náhyāte", "náhyātai"}, {"náhyaite"}, {"náhyanta", "náhyāntai"} },	optaa = { -- Whitney Para 760, but with ḥ for final s,and without the blanks. {"náhyeyam"}, {"náhyeva"}, {"náhyema"}, {"náhyeḥ"}, {"náhyetam"}, {"náhyeta"}, {"náhyet"}, {"náhyetām"}, {"náhyeyuḥ"}, },	optam = { -- Whitney Para 760, but with ḥ for final s.		{"náhyeya"}, {"náhyevahi"}, {"náhyemahi"}, {"náhyethāḥ"}, {"náhyeyāthām"}, {"náhyedhvam"}, {"náhyeta"}, {"náhyeyātām"}, {"náhyeran"}, },	impra = { -- Whitney Para 760. {"náhyāni"}, {"náhyāva"}, {"náhyāma"}, {"náhya", why = notat4}, {"náhyatam"}, {"náhyata"}, {"náhyatu", why = "Whitney Para 760 mentions ony 2s, not 3s, in -tāt."}, {"náhyatām"}, {"náhyantu"}, },	imprm = { -- Whitney Para 760. {"náhyai"}, {"náhyāvahai"}, {"náhyāmahai"}, {"náhyasva"}, {"náhyethām"}, {"náhyadhvam"}, {"náhyatām"}, {"náhyetām"}, {"náhyantām"}, },	pap = {"náhyant", whynot = whyant},  -- Whitney Para 760. pmp = {"náhyamāna"}, -- Whitney Para 760. impfa = { -- Whitney Para 760, but with ḥ for final s.		{"ánahyam"}, {"ánahyāva"}, {"ánahyāma"}, {"ánahyaḥ"},{"ánahyatam"}, {"ánahyata"}, {"ánahyat"}, {"ánahyatām"}, {"ánahyan"}, },	impfm = { -- Whitney Para 760, but with ḥ for final s.		{"ánahye"}, {"ánahyāvahi"}, {"ánahyāmahi"}, {"ánahyathāḥ"}, {"ánahyethām"}, {"ánahyadhvam"}, {"ánahyata"}, {"ánahyetām"}, {"ánahyanta"}, }, -- Injunctive form of the aboveː impfja = { -- Whitney Para 760d, but with ḥ for final s.		{"náhyam"}, {"náhyāva"}, {"náhyāma"}, {"náhyaḥ"},{"náhyatam"}, {"náhyata"}, {"náhyat"}, {"náhyatām"}, {"náhyan"}, },	impfjm = { -- Whitney Para 760d, but with ḥ for final s.		{"náhye"}, {"náhyāvahi"}, {"náhyāmahi"}, {"náhyathāḥ"}, {"náhyethām"}, {"náhyadhvam"}, {"náhyata"}, {"náhyetām"}, {"náhyanta"}, }, }

local kriyate_ref = { presm = { -- Whitney Para 771a {"kriyé"}, {"kriyā́vahe"}, {"kriyā́mahe"}, {"kriyáse"}, {"kriyéthe"}, {"kriyádhve"}, {"kriyáte"}, {"kriyéte"}, {"kriyánte"} },	subjm = { -- Whitney Para 771b, but without the blanks/ {"kriyaí"}, {"kriyā́vahai"}, {"kriyā́mahai"}, {"kriyā́se", "kriyā́sai"}, {}, {"kriyā́dhvai"}, {"kriyā́te", "kriyā́tai"}, {"kriyaíte"}, {"kriyánta", "kriyā́ntai"} },	optam = { -- Whitney Para 771c, but with ḥ for final s.		{"kriyéya"}, {"kriyévahi"}, {"kriyémahi"}, {"kriyéthāḥ"}, {"kriyéyāthām"}, {"kriyédhvam"}, {"kriyéta"}, {"kriyéyātām"}, {"kriyéran"}, },	imprm = { -- Whitney Para 771d. {"kriyaí"}, {"kriyā́vahai"}, {"kriyā́mahai"}, {"kriyásva"}, {"kriyéthām"}, {"kriyádhvam"}, {"kriyátām"}, {"kriyétām"}, {"kriyántām"}, },	pmp = {"kriyámāṇa"}, -- Whitney Para 771e. impfm = { -- Whitney Para 760, but with ḥ for final s.		{"ákriye"}, {"ákriyāvahi"}, {"ákriyāmahi"}, {"ákriyathāḥ"}, {"ákriyethām"}, {"ákriyadhvam"}, {"ákriyata"}, {"ákriyetām"}, {"ákriyanta"}, }, -- Injunctive form of the aboveː impfjm = { {"kriyé"}, {"kriyā́vahi"}, {"kriyā́mahi"}, {"kriyáthāḥ"}, {"kriyéthām"}, {"kriyádhvam"}, {"kriyáta"}, {"kriyétām"}, {"kriyánta"}, }, }

local sunoti_ref = { presa = { -- Whitney Para 698A + 698a, but with ḥ for final s.		{"sunómi"}, {"sunváḥ", "sunuváḥ"}, {"sunmáḥ", "sunumáḥ"}, {"sunóṣi"}, {"sunutháḥ"}, {"sunuthá"}, {"sunóti"}, {"sunutáḥ"}, {"sunvánti"}, },	presm = { -- Whitney Para 698A + 698a + 699b {"sunvé"}, {"sunváhe", "sunuváhe"}, {"sunmáhe", "sunumáhe"}, {"sunuṣé"}, {"sunvā́the"}, {"sunudhvé"}, {"sunuté"}, {"sunvā́te"}, {"sunváte", "sunviré"}, -- This verb irr! },	presm_reg = { -- Whitney Para 698A + 698a + 699b {"sunvé"}, {"sunváhe", "sunuváhe"}, {"sunmáhe", "sunumáhe"}, {"sunuṣé"}, {"sunvā́the"}, {"sunudhvé"}, {"sunuté"}, {"sunvā́te"}, {"sunváte"}, },	subja = { -- Whitney Para 700, but with ḥ for final s.		{"sunávāni"}, {"sunávāva"}, {"sunávāma"}, {"sunávas"}, {},           {"sunávatha"}, {"sunávat"}, {},           {"sunávan"}, },	subjm = { -- Whitney Para 700 {"sunávāi"}, 	{"sunávāvahāi"}, {"sunávāmahāi"}, {"sunávase"}, 	{"sunávāithe"},  {}, {"sunávate", "sunávātāi"}, {}, 	 {"sunávanta"}, },	optaa = { -- Whitney Para 702 {"sunuyā́m"}, {"sunuyā́va"}, {"sunuyā́ma"}, {"sunuyā́ḥ"}, {"sunuyā́tam"}, {"sunuyā́ta"}, {"sunuyā́t"}, {"sunuyā́tām"}, {"sunuyúḥ"}, },	optam = { -- Whitney Para 702 {"sunvīyá"},  {"sunvīváhi"},   {"sunvīmáhi"}, {"sunvīthā́ḥ"}, {"sunvīyā́thām"}, {"sunvīdhvám"}, {"sunvītá"},  {"sunvīyā́tām"},  {"sunvīrán"}, },	impra = { -- Whitney Para 703 + 704 {"sunávāni"}, {"sunávāva"}, {"sunávāma"}, {"sunú", "sunuhí", why = hi_after_vowel..' '..notat5}, {"sunutám"}, {"sunutá", "sunóta", "sunótana"}, -- All but first 2p are irregular. {"sunótu", why = tat2sonly}, {"sunutā́m"}, {"sunvántu"}, },	impra_reg = { -- Whitney Para 703 + 704 {"sunávāni"}, {"sunávāva"}, {"sunávāma"}, {"sunú", "sunuhí", why = hi_after_vowel..' '..notat5}, {"sunutám"}, {"sunutá"}, {"sunótu", why = tat2sonly}, {"sunutā́m"}, {"sunvántu"}, },	imprm = { -- Whitney Para 703 {"sunávai"}, {"sunávāvahai"}, {"sunávāmahai"}, {"sunuṣvá"}, {"sunvā́thām"}, {"sunudhvám"}, {"sunutā́m"}, {"sunvā́tām"}, {"sunvátām"}, },	pap = {"sunvánt", whynot = whyant}, -- Whitney Para 705 pmp = {"sunvāná"}, -- Whitney Para 705 impfa = { -- Whitney Para 706, but with ḥ for final s.		{"ásunavam"}, {"ásunva", "ásunuva"}, {"ásunma","ásunuma"}, {"ásunoḥ"}, {"ásunutam"}, {"ásunuta"}, {"ásunot"}, {"ásunutām"}, {"ásunvan"}, },	impfm = { -- Whitney Para 706, but with ḥ for final s.		{"ásunvi"}, {"ásunvahi", "ásunuvahi"}, {"ásunmahi", "ásunumahi"}, {"ásunuthāḥ"}, {"ásunvāthām"}, {"ásunudhvam"}, {"ásunuta"}, {"ásunvātām"}, {"ásunvata"}, }, }

local srnoti_ref = { -- Based on sunoti_ref plus Whitney notes on this word presa = { -- {"śṛṇómi"}, {"śṛṇváḥ", "śṛṇuváḥ"}, {"śṛṇmáḥ", "śṛṇumáḥ"}, {"śṛṇóṣi"}, {"śṛṇutháḥ"}, {"śṛṇuthá"}, {"śṛṇóti"}, {"śṛṇutáḥ"}, {"śṛṇvánti"}, },	presm = { {"śṛṇvé"}, {"śṛṇváhe", "śṛṇuváhe"}, {"śṛṇmáhe", "śṛṇumáhe"}, {"śṛṇuṣé"}, {"śṛṇvā́the"}, {"śṛṇudhvé"}, {"śṛṇuté"}, {"śṛṇvā́te"}, {"śṛṇváte", "śṛṇviré"}, -- This verb irr! },	presm_reg = { {"śṛṇvé"}, {"śṛṇváhe", "śṛṇuváhe"}, {"śṛṇmáhe", "śṛṇumáhe"}, {"śṛṇuṣé"}, {"śṛṇvā́the"}, {"śṛṇudhvé"}, {"śṛṇuté"}, {"śṛṇvā́te"}, {"śṛṇváte"}, },	subja = { {"śṛṇávāni"}, {"śṛṇávāva"}, {"śṛṇávāma"}, {"śṛṇávas"}, {},           {"śṛṇávatha"}, {"śṛṇávat"}, {},           {"śṛṇávan"}, },	subjm = { {"śṛṇávāi"}, 	{"śṛṇávāvahāi"}, {"śṛṇávāmahāi"}, {"śṛṇávase"}, 	{"śṛṇávāithe"},  {}, {"śṛṇávate", "śṛṇávātāi"}, {}, 	 {"śṛṇávanta"}, },	optaa = { {"śṛṇuyā́m"}, {"śṛṇuyā́va"}, {"śṛṇuyā́ma"}, {"śṛṇuyā́ḥ"}, {"śṛṇuyā́tam"}, {"śṛṇuyā́ta"}, {"śṛṇuyā́t"}, {"śṛṇuyā́tām"}, {"śṛṇuyúḥ"}, },	optam = { {"śṛṇvīyá"},  {"śṛṇvīváhi"},   {"śṛṇvīmáhi"}, {"śṛṇvīthā́ḥ"}, {"śṛṇvīyā́thām"}, {"śṛṇvīdhvám"}, {"śṛṇvītá"},  {"śṛṇvīyā́tām"},  {"śṛṇvīrán"}, },	impra = { {"śṛṇávāni"}, {"śṛṇávāva"}, {"śṛṇávāma"}, {"śṛṇú", "śṛṇuhí", why = hi_after_vowel..' '..notat5}, {"śṛṇutám"}, {"śṛṇutá", "śṛṇóta", "śṛṇótana"}, -- All but first 2p are irregular. Accent not attested for 3rd. {"śṛṇótu", why = tat2sonly}, {"śṛṇutā́m"}, {"śṛṇvántu"}, },	impra_reg = { {"śṛṇávāni"}, {"śṛṇávāva"}, {"śṛṇávāma"}, {"śṛṇú", "śṛṇuhí", why = hi_after_vowel..' '..notat5}, {"śṛṇutám"}, {"śṛṇutá"}, {"śṛṇótu", why = tat2sonly}, {"śṛṇutā́m"}, {"śṛṇvántu"}, },	imprm = { {"śṛṇávai"}, {"śṛṇávāvahai"}, {"śṛṇávāmahai"}, {"śṛṇuṣvá"}, {"śṛṇvā́thām"}, {"śṛṇudhvám"}, {"śṛṇutā́m"}, {"śṛṇvā́tām"}, {"śṛṇvátām"}, },	pap = {"śṛṇvánt", whynot = whyant}, pmp = {"śṛṇvāná"}, impfa = { {"áśṛṇavam"}, {"áśṛṇva", "áśṛṇuva"}, {"áśṛṇma","áśṛṇuma"}, {"áśṛṇoḥ"}, {"áśṛṇutam"}, {"áśṛṇuta"}, {"áśṛṇot"}, {"áśṛṇutām"}, {"áśṛṇvan"}, },	impfm = { {"áśṛṇvi"}, {"áśṛṇvahi", "áśṛṇuvahi"}, {"áśṛṇmahi", "áśṛṇumahi"}, {"áśṛṇuthāḥ"}, {"áśṛṇvāthām"}, {"áśṛṇudhvam"}, {"áśṛṇuta"}, {"áśṛṇvātām"}, {"áśṛṇvata"}, }, }

local apnoti_ref = { presa = { -- Whitney Para 698A + 697a, but with ḥ for final s.		{"āpnómi"}, {"āpnuváḥ"}, {"āpnumáḥ"}, {"āpnóṣi"}, {"āpnutháḥ"}, {"āpnuthá"}, {"āpnóti"}, {"āpnutáḥ"}, {"āpnuvánti"}, },	presm = { -- Whitney Para 698A + 697a {"āpnuvé"}, {"āpnuváhe"}, {"āpnumáhe"}, {"āpnuṣé"}, {"āpnuvā́the"}, {"āpnudhvé"}, {"āpnuté"}, {"āpnuvā́te"}, {"āpnuváte"}, },	optaa = { -- Whitney Para 702 {"āpnuyā́m"}, {"āpnuyā́va"}, {"āpnuyā́ma"}, {"āpnuyā́ḥ"}, {"āpnuyā́tam"}, {"āpnuyā́ta"}, {"āpnuyā́t"}, {"āpnuyā́tām"}, {"āpnuyúḥ"}, },	optam = { -- Whitney Para 702 + 702a {"āpnuvīyá"},  {"āpnuvīváhi"},   {"āpnuvīmáhi"}, {"āpnuvīthā́ḥ"}, {"āpnuvīyā́thām"}, {"āpnuvīdhvám"}, {"āpnuvītá"},  {"āpnuvīyā́tām"},  {"āpnuvīrán"}, },	impra = { -- Whitney Para 703 + 703a {"āpnávāni"}, {"āpnávāva"}, {"āpnávāma"}, {"āpnuhí", why = hi_after_vowel..' '..notat5}, {"āpnutám"}, {"āpnutá"}, {"āpnótu", why = tat2sonly}, {"āpnutā́m"}, {"āpnuvántu"}, },	imprm = { -- Whitney Para 703 + 703a {"āpnávai"}, {"āpnávāvahai"}, {"āpnávāmahai"}, {"āpnuṣvá"}, {"āpnuvā́thām"}, {"āpnudhvám"}, {"āpnutā́m"}, {"āpnuvā́tām"}, {"āpnuvátām"}, },	pap = {"āpnuvánt", whynot = whyant}, -- Whitney Para 705 pmp = {"āpnuvāná"}, -- Whitney Para 705 impfa = { -- Whitney Para 706, but with ḥ for final s, interpreted by RichardW57. {"ā́pnavam"}, {"ā́pnuva"}, {"ā́pnuma"}, {"ā́pnoḥ"}, {"ā́pnutam"}, {"ā́pnuta"}, {"ā́pnot"}, {"ā́pnutām"}, {"ā́pnuvan"}, },	impfm = { -- Whitney Para 706, but with ḥ for final s, interpreted by RichardW57. {"ā́pnuvi"}, {"ā́pnuvahi"}, {"ā́pnumahi"}, {"ā́pnuthāḥ"}, {"ā́pnuvāthām"}, {"ā́pnudhvam"}, {"ā́pnuta"}, {"ā́pnuvātām"}, {"ā́pnuvata"}, }, }

local tanoti_ref = { presa = { -- Whitney Para 698A + 698a + 698b, but with ḥ for final s.		{"tanómi"}, {"tanváḥ", "tanuváḥ"}, {"tanmáḥ", "tanumáḥ"}, {"tanóṣi"}, {"tanutháḥ"}, {"tanuthá"}, {"tanóti"}, {"tanutáḥ"}, {"tanvánti"}, },	presm = { -- Whitney Para 698A + 698a + 698b + 699a. {"tanvé"}, {"tanváhe", "tanuváhe"}, {"tanmáhe", "tanumáhe"}, {"tanuṣé"}, {"tanvā́the"}, {"tanudhvé"}, {"tanuté"}, {"tanvā́te"}, {"tanváte", "tanvaté"}, -- This verb has irr .3p! },	optaa = { -- Whitney Para 702 {"tanuyā́m"}, {"tanuyā́va"}, {"tanuyā́ma"}, {"tanuyā́ḥ"}, {"tanuyā́tam"}, {"tanuyā́ta"}, {"tanuyā́t"}, {"tanuyā́tām"}, {"tanuyúḥ"}, },	optam = { -- Whitney Para 702 {"tanvīyá"},  {"tanvīváhi"},   {"tanvīmáhi"}, {"tanvīthā́ḥ"}, {"tanvīyā́thām"}, {"tanvīdhvám"}, {"tanvītá"},  {"tanvīyā́tām"},  {"tanvīrán"}, },	impra = { -- Whitney Para 703 + 704 {"tanávāni"}, {"tanávāva"}, {"tanávāma"}, {"tanú", "tanuhí", why = hi_after_vowel..' '..notat5}, {"tanutám"}, {"tanutá", "tanóta"}, {"tanótu", why = tat2sonly}, {"tanutā́m"}, {"tanvántu"}, },	imprm = { -- Whitney Para 703 {"tanávai"}, {"tanávāvahai"}, {"tanávāmahai"}, {"tanuṣvá"}, {"tanvā́thām"}, {"tanudhvám"}, {"tanutā́m"}, {"tanvā́tām"}, {"tanvátām"}, },	pap = {"tanvánt", whynot = whyant}, -- Whitney Para 705 pmp = {"tanvāná"}, -- Whitney Para 705 impfa = { -- Whitney Para 706, but with ḥ for final s.		{"átanavam"}, {"átanva", "átanuva"}, {"átanma", "átanuma"}, {"átanoḥ"}, {"átanutam"}, {"átanuta"}, {"átanot"}, {"átanutām"}, {"átanvan"}, },	impfm = { -- Whitney Para 706, but with ḥ for final s.		{"átanvi"}, {"átanvahi", "átanuvahi"}, {"átanmahi", "átanumahi"}, {"átanuthāḥ"}, {"átanvāthām"}, {"átanudhvam"}, {"átanuta"}, {"átanvātām"}, {"átanvata"}, }, }

karoti_ref = { presa = { -- Whitley Para 714, but with ḥ for final s. {"karómi"}, {"kurváḥ"}, {"kurmáḥ"}, -- Para 715 - add kurmi! {"karóṣi"}, {"kurutháḥ"}, {"kuruthá"}, {"karóti"}, {"kurutáḥ"}, {"kurvánti"}, },	presm = { -- Whitley Para 714 {"kurvé"}, {"kurváhe"}, {"kurmáhe"}, {"kuruṣé"}, {"kurvā́the"}, {"kurudhvé"}, {"kuruté"}, {"kurvā́te"}, {"kurváte"}, },	optaa = { -- Whitley Para 714 {"kuryā́m"}, {"kuryā́va"}, {"kuryā́ma"}, {"kuryā́ḥ"}, {"kuryā́tam"}, {"kuryā́ta"}, {"kuryā́t"}, {"kuryā́tām"}, {"kuryúḥ"}, },	optam = { -- Whitley Para 714 {"kurvīyá"}, {"kurvīváhi"}, {"kurvīmáhi"}, {"kurvīthā́ḥ"}, {"kurvīyā́thām"}, {"kurvīdhvám"}, {"kurvītá"},  {"kurvīyā́tām"},  {"kurvīrán"}, },	impra = { -- Whitley Para 714 {"karávāṇi"}, {"karávāva"}, {"karávāma"}, {"kurú", why = notat5}, {"kurutám"}, {"kurutá"}, {"karótu", why = tat2sonly}, {"kurutā́m"}, {"kurvántu"}, },	imprm = { -- Whitley Para 714 {"karávai"}, {"karávāvahai"}, {"karávāmahai"}, {"kuruṣvá"}, {"kurvā́thām"}, {"kurudhvám"}, {"kurutā́m"}, {"kurvā́tām"}, {"kurvátām"}, },	pap = {"kurvánt", whynot = whyant}, -- Whitley Para 714 pmp = {"kurvāṇá"}, -- Whitley Para 714 impfa = { -- Whitley Para 714, but with ḥ for final s.		{"ákaravam"}, {"ákurva"}, {"ákurma"}, {"ákaroḥ"}, {"ákurutam"}, {"ákuruta"}, {"ákarot"}, {"ákurutām"}, {"ákurvan"}, },	impfm = { -- Whitley Para 714, but with ḥ for final s.		{"ákurvi"}, {"ákurvahi"}, {"ákurmahi"}, {"ákuruthāḥ"}, {"ákurvāthām"}, {"ákurudhvam"}, {"ákuruta"}, {"ákurvātām"}, {"ákurvata"}, }, }

local vishati_ref = { presa = { -- Whitney Para 752, but with ḥ for final s.		{"viśā́mi"}, {"viśā́vaḥ"}, {"viśā́maḥ"}, {"viśási"}, {"viśáthaḥ"}, {"viśátha"}, {"viśáti"}, {"viśátaḥ"}, {"viśánti"} },	presm = { -- Whitney Para 752 {"viśé"}, {"viśā́vahe"}, {"viśā́mahe"}, {"viśáse"}, {"viśéthe"}, {"viśádhve"}, {"viśáte"}, {"viśéte"}, {"viśánte"} },	subja = { -- Whitney Para 752, but with ḥ for final s and without the gaps. {"viśā́ni"}, {"viśā́va"}, {"viśā́ma"}, {"viśā́si", "viśā́ḥ"}, {"viśā́thaḥ"}, {"viśā́tha"}, {"viśā́ti", "viśā́t"}, {"viśā́taḥ"}, {"viśā́n"} },	subjm = { -- Whitney Para 752, but without the blanks. {"viśaí"}, {"viśā́vahai"}, {"viśā́mahai"}, {"viśā́se", "viśā́sai"}, {}, {"viśā́dhvai"}, {"viśā́te", "viśā́tai"}, {"viśaíte"}, {"viśánta", "viśā́ntai"} },	optaa = { -- Whitney Para 752, but with ḥ for final s,and without the blanks. {"viśéyam"}, {"viśéva"}, {"viśéma"}, {"viśéḥ"}, {"viśétam"}, {"viśéta"}, {"viśét"}, {"viśétām"}, {"viśéyuḥ"}, },	optam = { -- Whitney Para 752, but with ḥ for final s.		{"viśéya"}, {"viśévahi"}, {"viśémahi"}, {"viśéthāḥ"}, {"viśéyāthām"}, {"viśédhvam"}, {"viśéta"}, {"viśéyātām"}, {"viśéran"}, },	impra = { -- Whitney Para 752. {"viśā́ni"}, {"viśā́va"}, {"viśā́ma"}, {"viśá", "viśátāt"}, {"viśátam"}, {"viśáta"}, {"viśátu", why = "Whitney Para 760 mentions ony 2s, not 3s, in -tāt."}, {"viśátām"}, {"viśántu"}, },	imprm = { -- Whitney Para 752. {"viśaí"}, {"viśā́vahai"}, {"viśā́mahai"}, {"viśásva"}, {"viśéthām"}, {"viśádhvam"}, {"viśátām"}, {"viśétām"}, {"viśántām"}, },	pap = {"viśánt", whynot = whyant},  -- Whitney Para 752. pmp = {"viśámāna"}, -- Whitney Para 752. impfa = { -- Whitney Para 752, but with ḥ for final s.		{"áviśam"}, {"áviśāva"}, {"áviśāma"}, {"áviśaḥ"},{"áviśatam"}, {"áviśata"}, {"áviśat"}, {"áviśatām"}, {"áviśan"}, },	impfm = { -- Whitney Para 752, but with ḥ for final s.		{"áviśe"}, {"áviśāvahi"}, {"áviśāmahi"}, {"áviśathāḥ"}, {"áviśethām"}, {"áviśadhvam"}, {"áviśata"}, {"áviśetām"}, {"áviśanta"}, }, -- Injunctive form of the aboveː impfja = { -- Whitney Para 752, but with ḥ for final s.		{"viśám"}, {"viśā́va"}, {"viśā́ma"}, {"viśáḥ"},{"viśátam"}, {"viśáta"}, {"viśát"}, {"viśátām"}, {"viśán"}, },	impfjm = { -- Whitney Para 752, but with ḥ for final s.		{"viśé"}, {"viśā́vahi"}, {"viśā́mahi"}, {"viśáthāḥ"}, {"viśéthām"}, {"viśádhvam"}, {"viśáta"}, {"viśétām"}, {"viśánta"}, }, }

yunakti_ref = { presa = { -- Whitney Para 684, with n̄ replaced by ṅ and final s replaced by ḥ {"yunájmi"}, {"yuñjváḥ"}, {"yuñjmáḥ"}, {"yunákṣi"}, {"yuṅtháḥ", "yuṅktháḥ"}, {"yuṅthá", "yuṅkthá"}, {"yunákti"}, {"yuṅtáḥ", "yuṅktáḥ"}, {"yuñjánti"}, },	presm = { -- Whitney Para 684, with n̄ replaced by ṅ {"yuñjé"}, {"yuñjváhe"}, {"yuñjmáhe"}, {"yuṅkṣé"}, {"yuñjā́the"}, {"yuṅdhvé", "yuṅgdhvé"}, {"yuṅté", "yuṅkté"}, {"yuñjā́te"}, {"yuñjáte"}, }, -- Subjunctive to be done. optaa = { -- Whitney Para 688 {"yuñjyā́m"}, {"yuñjyā́va"}, {"yuñjyā́ma"}, {"yuñjyā́ḥ"}, {"yuñjyā́tam"}, {"yuñjyā́ta"}, {"yuñjyā́t"}, {"yuñjyā́tām"}, {"yuñjyúḥ"}, },	optam = { -- Whitney Para 688 {"yuñjīyá"}, {"yuñjīváhi"}, {"yuñjīmáhi"}, {"yuñjīthā́ḥ"}, {"yuñjīyā́thām"}, {"yuñjīdhvám"}, {"yuñjītá"},  {"yuñjīyā́tām"},  {"yuñjīrán"}, },	impra = { -- Whitney Para 689 {"yunájāni"}, {"yunájāva"}, {"yunájāma"}, {"yuṅdhí", "yuṅgdhí", why = notat7}, {"yuṅtám", "yuṅktám"}, {"yuṅtá", "yuṅktá"}, {"yunáktu", why=notat7}, {"yuṅtā́m", "yuṅktā́m"}, {"yuñjántu"}, },	imprm = { -- Whitney Para 689 {"yunájai"}, {"yunájāvahai"}, {"yunájāmahai"}, {"yuṅkṣvá"}, {"yuñjā́thām"}, {"yuṅdhvám", "yuṅgdhvám"}, {"yuṅtā́m", "yuṅktā́m"}, {"yuñjā́tām"}, {"yuñjátām"}, },	pap = {"yuñjánt", why = why_ant}, -- Whitney Para 691 pmp = {"yuñjāná"}, -- Whitney Para 691 impfa = { -- Whitney Para 692 {"áyunajam"}, {"áyuñjva"}, {"áyuñjma"}, {"áyunak"}, {"áyuṅtam", "áyuṅktam"}, {"áyuṅta", "áyuṅkta"}, {"áyunak"}, {"áyuṅtām", "áyuṅktām"}, {"áyuñjan"}, },	impfm = { -- Whitney Para 692 with final s replaced by ḥ {"áyuñji"}, {"áyuñjvahi"}, {"áyuñjmahi"}, {"áyuṅthāḥ", "áyuṅkthāḥ"}, {"áyuñjāthām"}, 	{"áyuṅdhvam", "áyuṅgdhvam"}, {"áyuṅta", "áyuṅkta"}, {"áyuñjātām"}, {"áyuñjata"}, },	impfja = { -- Whitney Para 692 + 693 {"yunájam"}, {"yuñjvá"}, {"yuñjmá"}, {"yunák"}, {"yuṅtám", "yuṅktám"}, {"yuṅtá", "yuṅktá"}, {"yunák"}, {"yuṅtā́m", "yuṅktā́m"}, {"yuñján"}, },	impfjm = { -- Whitney Para 692 + 693with final s replaced by ḥ {"yuñjí"}, {"yuñjváhi"}, {"yuñjmáhi"}, {"yuṅthā́ḥ", "yuṅkthā́ḥ"}, {"yuñjā́thām"}, {"yuṅdhvám", "yuṅgdhvám"}, {"yuṅtá", "yuṅktá"}, {"yuñjā́tām"}, {"yuñjáta"}, }, }

runaddhi_ref = { presa = { -- Whitney Para 684, with final s replaced by ḥ {"ruṇádhmi"}, {"rundhváḥ"}, {"rundhmáḥ"}, {"ruṇátsi"}, {"rundháḥ", "runddháḥ"}, {"rundhá", "runddhá"}, {"ruṇáddhi"}, {"rundháḥ", "runddháḥ"}, {"rundhánti"}, },	presm = { -- Whitney Para 684 {"rundhé"}, {"rundhváhe"}, {"rundhmáhe"}, {"runtsé"}, {"rundhā́the"}, {"rundhvé", "runddhvé"}, {"rundhé", "runddhé"}, {"rundhā́te"}, {"rundháte"}, }, }

krinati_ref = { presa = { -- Whitney Para 718, with final s replaced by ḥ {"krīṇā́mi"}, {"krīṇīváḥ"}, {"krīṇīmáḥ"}, {"krīṇā́si"}, {"krīṇītháḥ"}, {"krīṇīthá"}, {"krīṇā́ti"}, {"krīṇītáḥ"}, {"krīṇánti"}, },	presm = { -- Whitney Para 718 {"krīṇé"}, {"krīṇīváhe"}, {"krīṇīmáhe"}, {"krīṇīṣé"}, {"krīṇā́the"}, {"krīṇīdhvé"}, {"krīṇīté"}, {"krīṇā́te"}, {"krīṇáte"}, },	subja = { -- Whitney Para 720, with final s replaced by ḥ {"krīṇāni"}, {},           {"krīṇā́ma"}, {"krīṇā́ḥ"}, {},            {"krīṇātha"}, {"krīṇā́t"},	 {},           {"krīṇā́n"}, },	subjm = { -- Whitney Para 720 {"krīṇaí"}, {"krīṇāvahai"}, {"krīṇāmahai"}, {"krīṇāsai"}, {},           {}, {"krīṇātai"}, {},          {"krīṇāntai"}, },	optaa = { -- Whitney Para 721 {"krīṇīyā́m"}, {"krīṇīyā́va"}, {"krīṇīyā́ma"}, {"krīṇīyā́ḥ"}, {"krīṇīyā́tam"}, {"krīṇīyā́ta"}, {"krīṇīyā́t"}, {"krīṇīyā́tām"}, {"krīṇīyúḥ"}, },	optam = { -- Whitney Para 721 {"krīṇīyá"}, {"krīṇīváhi"}, {"krīṇīmáhi"}, {"krīṇīthā́ḥ"}, {"krīṇīyā́thām"}, {"krīṇīdhvám"}, {"krīṇītá"},  {"krīṇīyā́tām"},  {"krīṇīrán"}, },	impra = { -- Whitney Para 722 {"krīṇā́ni"}, {"krīṇā́va"}, {"krīṇā́ma"}, {"krīṇīhí", why = notat9}, {"krīṇītám"}, {"krīṇītá"}, {"krīṇā́tu", why = tat2sonly}, {"krīṇītā́m"}, {"krīṇántu"}, },	imprm = { -- Whitney Para 722 {"krīṇaí"}, {"krīṇā́vahai"}, {"krīṇā́mahai"}, {"krīṇīṣvá"}, {"krīṇā́thām"}, {"krīṇīdhvám"}, {"krīṇītā́m"}, {"krīṇā́tām"}, {"krīṇátām"}, },	pap = {"krīṇánt", why = whyant}, -- Whitney Para 724 pmp = {"krīṇāná"}, -- Whitney Para 724 impfa = { -- Whitney Para 725, with final s replaced by ḥ {"ákrīṇām"}, {"ákrīṇīva"}, {"ákrīṇīma"}, {"ákrīṇāḥ"}, {"ákrīṇītam"}, {"ákrīṇīta"}, {"ákrīṇāt"}, {"ákrīṇītām"}, {"ákrīṇan"}, },	impfm = { -- Whitney Para 725, with final s replaced by ḥ {"ákrīṇi"}, {"ákrīṇīvahi"}, {"ákrīṇīmahi"}, {"ákrīṇīthāḥ"}, {"ákrīṇāthām"}, {"ákrīṇīdhvam"}, {"ákrīṇīta"}, {"ákrīṇātām"}, {"ákrīṇata"}, },	impfja = { -- Whitney Para 725 and 726, with final s replaced by ḥ {"krīṇā́m"}, {"krīṇīvá"}, {"krīṇīmá"}, {"krīṇā́ḥ"}, {"krīṇītám"}, {"krīṇītá"}, {"krīṇā́t"}, {"krīṇītā́m"}, {"krīṇán"}, },	impfjm = { -- Whitney Para 725 and 726, with final s replaced by ḥ {"krīṇí"}, {"krīṇīváhi"}, {"krīṇīmáhi"}, {"krīṇīthā́ḥ"}, {"krīṇā́thām"}, {"krīṇīdhvám"}, {"krīṇītá"}, {"krīṇā́tām"}, {"krīṇáta"}, }, }

grhnati_ref = { presa = { -- Based on Whitney Para 718, with final s replaced by ḥ {"gṛhṇā́mi"}, {"gṛhṇīváḥ"}, {"gṛhṇīmáḥ"}, {"gṛhṇā́si"}, {"gṛhṇītháḥ"}, {"gṛhṇīthá"}, {"gṛhṇā́ti"}, {"gṛhṇītáḥ"}, {"gṛhṇánti"}, },	presm = { -- Based on Whitney Para 718 {"gṛhṇé"}, {"gṛhṇīváhe"}, {"gṛhṇīmáhe"}, {"gṛhṇīṣé"}, {"gṛhṇā́the"}, {"gṛhṇīdhvé"}, {"gṛhṇīté"}, {"gṛhṇā́te"}, {"gṛhṇáte"}, },	impra = { -- Based on Whitney Para 722 and directly from 723. {"gṛhṇā́ni"}, {"gṛhṇā́va"}, {"gṛhṇā́ma"}, {"gṛhāṇá", "gṛhṇītāt", "gṛhṇāhí"}, {"gṛhṇītám"}, {"gṛhṇītá"}, {"gṛhṇā́tu", why = tat2sonly}, {"gṛhṇītā́m"}, {"gṛhṇántu"}, },	imprm = { -- Based on Whitney Para 722 {"gṛhṇaí"}, {"gṛhṇā́vahai"}, {"gṛhṇā́mahai"}, {"gṛhṇīṣvá"}, {"gṛhṇā́thām"}, {"gṛhṇīdhvám"}, {"gṛhṇītā́m"}, {"gṛhṇā́tām"}, {"gṛhṇátām"}, }, }

local visarjayati_ref = { presa = { {"visarjayāmi"}, {"visarjayāvaḥ"}, {"visarjayāmaḥ"}, {"visarjayasi"}, {"visarjayathaḥ"}, {"visarjayatha"}, {"visarjayati"}, {"visarjayataḥ"}, {"visarjayanti"} }, }

local visrjati_ref = { presa = { {"visṛjāmi"}, {"visṛjāvaḥ"}, {"visṛjāmaḥ"}, {"visṛjasi"}, {"visṛjathaḥ"}, {"visṛjatha"}, {"visṛjati"}, {"visṛjataḥ"}, {"visṛjanti"} }, }

local pesati_ref = { presa = { {"pesāmi"}, {"pesāvaḥ"}, {"pesāmaḥ"}, {"pesasi"}, {"pesathaḥ"}, {"pesatha"}, {"pesati"}, {"pesataḥ"}, {"pesanti"} }, }

local cintayati_ref = { -- Adapted from bhavati_ref in accordance with -- Whitney Para 775. presa = { {"cintáyāmi"}, {"cintáyāvaḥ"}, {"cintáyāmaḥ"}, {"cintáyasi"}, {"cintáyathaḥ"}, {"cintáyatha"}, {"cintáyati"}, {"cintáyataḥ"}, {"cintáyanti"} },	presm = { {"cintáye"}, {"cintáyāvahe"}, {"cintáyāmahe"}, {"cintáyase"}, {"cintáyethe"}, {"cintáyadhve"}, {"cintáyate"}, {"cintáyete"}, {"cintáyante"} },	subja = { {"cintáyāni"}, {"cintáyāva"}, {"cintáyāma"}, {"cintáyāsi", "cintáyāḥ"}, {"cintáyāthaḥ"}, {"cintáyātha"}, {"cintáyāti", "cintáyāt"}, {"cintáyātaḥ"}, {"cintáyān"} },	subjm = { {"cintáyai"}, {"cintáyāvahai"}, {"cintáyāmahai"}, {"cintáyāse", "cintáyāsai"}, {}, {"cintáyādhvai"}, {"cintáyāte", "cintáyātai"}, {"cintáyaite"}, {"cintáyanta", "cintáyāntai"} },	optaa = { {"cintáyeyam"}, {"cintáyeva"}, {"cintáyema"}, {"cintáyeḥ"}, {"cintáyetam"}, {"cintáyeta"}, {"cintáyet"}, {"cintáyetām"}, {"cintáyeyuḥ"}, },	optam = { {"cintáyeya"}, {"cintáyevahi"}, {"cintáyemahi"}, {"cintáyethāḥ"}, {"cintáyeyāthām"}, {"cintáyedhvam"}, {"cintáyeta"}, {"cintáyeyātām"}, {"cintáyeran"}, },	impra = { {"cintáyāni"}, {"cintáyāva"}, {"cintáyāma"}, {"cintáya"}, {"cintáyatam"}, {"cintáyata"}, {"cintáyatu", why = tat2sonly}, {"cintáyatām"}, {"cintáyantu"}, },	imprm = { {"cintáyai"}, {"cintáyāvahai"}, {"cintáyāmahai"}, {"cintáyasva"}, {"cintáyethām"}, {"cintáyadhvam"}, {"cintáyatām"}, {"cintáyetām"}, {"cintáyantām"}, },	pap = {"cintáyant", whynot = whyant}, pmp = {"cintáyamāna", "cintayāna"}, -- Whitney Para 741 & 755c TODO: Review accent! impfa = { -- Whitney Para 742, but with ḥ for final s.		{"ácintayam"}, {"ácintayāva"}, {"ácintayāma"}, {"ácintayaḥ"},{"ácintayatam"}, {"ácintayata"}, {"ácintayat"}, {"ácintayatām"}, {"ácintayan"}, },	impfm = { -- Whitney Para 742, but with ḥ for final s.		{"ácintaye"}, {"ácintayāvahi"}, {"ácintayāmahi"}, {"ácintayathāḥ"}, {"ácintayethām"}, {"ácintayadhvam"}, {"ácintayata"}, {"ácintayetām"}, {"ácintayanta"}, }, -- Injunctive form of the aboveː impfja = { -- Whitney Para 742 + 743, but with ḥ for final s.		{"cintáyam"}, {"cintáyāva"}, {"cintáyāma"}, {"cintáyaḥ"},{"cintáyatam"}, {"cintáyata"}, {"cintáyat"}, {"cintáyatām"}, {"cintáyan"}, },	impfjm = { -- Whitney Para 742 + 743, but with ḥ for final s.		{"cintáye"}, {"cintáyāvahi"}, {"cintáyāmahi"}, {"cintáyathāḥ"}, {"cintáyethām"}, {"cintáyadhvam"}, {"cintáyata"}, {"cintáyetām"}, {"cintáyanta"}, }, } local blank_ref = { presa = { -- Whitney Para 612a, but with ḥ for final s.		{""}, {""}, {""}, {""}, {""}, {""},		{""}, {""}, {""}	},	presm = { -- Whitney Para 612a {""}, {""}, {""},		{""}, {""}, {""},		{""}, {""}, {""}	},	subja = { -- Whitney Para 614a, but with ḥ for final s.		{""}, {""}, {""}, {"", ""}, {""}, {""},		{"", ""}, {""}, {""}	},	subjm = { -- Whitney Para 614a {""}, {""}, {""},		{"", ""}, {}, {""},		{"", ""}, {""}, {"", ""}	},	optaa = { -- Whitney Para 616a, but with ḥ for final s.		{""}, {""}, {""}, {""}, {""}, {""},		{""}, {""}, {""},	},	optam = { -- Whitney Para 616a, but with ḥ for final s.		{""}, {""}, {""}, {""}, {""}, {""},		{""}, {""}, {""},	},	impra = { -- Whitney Para 617a. {""}, {""}, {""},		{"", ""}, {""}, {""},		{"", why = tat2sonly}, {""}, {""}, },	imprm = { -- Whitney Para 617a. {""}, {""}, {""},		{""}, {""}, {""},		{""}, {""}, {""},	},	pap = {"", whynot = whyant},  -- Whitney Para 619. pmp = {""}, -- Whitney Para 619. impfa = { -- Whitney Para 620a, but with ḥ for final s.		{""}, {""}, {""}, {""},{""}, {""},		{""}, {""}, {""},	},	impfm = { -- Whitney Para 620a, but with ḥ for final s.		{""}, {""}, {""}, {""}, {""}, {""},		{""}, {""}, {""},	}, -- Injunctive form of the aboveː impfja = { -- Whitney Para 620 + 622, but with ḥ for final s.		{}, {""}, {""}, {""},{""}, {""},		{""}, {""}, {""},	},	impfjm = { -- Whitney Para 620 + 622, but with ḥ for final s.		{""}, {""}, {""}, {""}, {""}, {""},		{""}, {""}, {""},	}, }

local dasyati_ref = { futua = { -- Whitney Para 933, but with ḥ for final s.		{"dāsyā́mi"}, {"dāsyā́vaḥ"}, {"dāsyā́maḥ"}, {"dāsyási"}, {"dāsyáthaḥ"}, {"dāsyátha"}, {"dāsyáti"}, {"dāsyátaḥ"}, {"dāsyánti"}, },	futum = { -- Whitney Para 933 {"dāsyé"}, {"dāsyā́vahe"}, {"dāsyā́mahe"}, {"dāsyáse"}, {"dāsyéthe"}, {"dāsyádhve"}, {"dāsyáte"}, {"dāsyéte"}, {"dāsyánte"}, },	fap = {"dāsyánt", why = whyant}, -- Whitney Para 939 fmp = {"dāsyámāna"}, -- Whitney Para 939 conda = { -- Whitney Para 940, but with ḥ for final s.		{"ádāsyam"}, {"ádāsyāva"}, {"ádāsyāma"}, {"ádāsyaḥ"}, {"ádāsyatam"}, {"ádāsyata"}, {"ádāsyat"}, {"ádāsyatām"}, {"ádāsyan"}, },	condm = { -- Whitney Para 940, but with ḥ for final s.		{"ádāsye"}, {"ádāsyāvahi"}, {"ádāsyāmahi"}, {"ádāsyathāḥ"}, {"ádāsyethām"}, {"ádāsyadhvam"}, {"ádāsyata"}, {"ádāsyetām"}, {"ádāsyanta"}, }, }

local karisyati_ref = { futua = { -- Whitney Para 933, but with ḥ for final s, for 1st person, -- with 2nd and 3rd fleshed out by RichardW57 accordingly {"kariṣyā́mi"}, {"kariṣyā́vaḥ"}, {"kariṣyā́maḥ"}, {"kariṣyási"}, {"kariṣyáthaḥ"}, {"kariṣyátha"}, {"kariṣyáti"}, {"kariṣyátaḥ"}, {"kariṣyánti"}, },	futum = { -- Whitney Para 933 for 1st person, with 2nd and 3rd fleshed out by RichardW57 accordingly {"kariṣyé"}, {"kariṣyā́vahe"}, {"kariṣyā́mahe"}, {"kariṣyáse"}, {"kariṣyéthe"}, {"kariṣyádhve"}, {"kariṣyáte"}, {"kariṣyéte"}, {"kariṣyánte"}, },	fap = {"kariṣyánt", why = whyant}, -- Whitney Para 939 fmp = {"kariṣyámāṇa"}, -- Whitney Para 939 conda = { -- Whitney Para 940, and 2nd and 3rd fleshed out by RicharW57. {"ákariṣyam"}, {"ákariṣyāva"}, {"ákariṣyāma"}, {"ákariṣyaḥ"}, {"ákariṣyatam"}, {"ákariṣyata"}, {"ákariṣyat"}, {"ákariṣyatām"}, {"ákariṣyan"}, },	condm = { -- Whitney Para 940, and 2nd and 3rd fleshed out by RicharW57. {"ákariṣye"}, {"ákariṣyāvahi"}, {"ákariṣyāmahi"}, {"ákariṣyathāḥ"}, {"ákariṣyethām"}, {"ákariṣyadhvam"}, {"ákariṣyata"}, {"ákariṣyetām"}, {"ákariṣyanta"}, }, }

local data_ref = { pfuta = { -- Whitney Para 944, but with ḥ for final s (+ Vedic dual) {"dātā́smi"}, {"dātā́svaḥ"}, {"dātā́smaḥ"}, {"dātā́si"}, {"dātā́sthaḥ"}, {"dātā́stha"}, {"dātā́"}, {"dātā́rau", "dātā́rā"}, {"dātā́raḥ"}, },	pfutm = { -- Whitney Para 947, but with ḥ for final s		{"dātā́he"}, {"dātā́svahe"}, {"dātā́smahe"}, {"dātā́se"}, {"dātā́sāthe"}, {"dātā́dhve"}, {"dātā́"}, {"dātā́rau"}, {"dātā́raḥ"}, }, }

local adat_ref = { aoria = { -- Whitney Para 829, but with ḥ for final s		{"ádām"}, {"ádāva"}, {"ádāma"}, {"ádāḥ"}, {"ádātam"}, {"ádāta"}, {"ádāt"}, {"ádātām"}, {"áduḥ"}, }, }

local abhut_ref = { aoria = { -- Whitney Para 829, but with ḥ for final s		{"ábhūvam"}, {"ábhūva"}, {"ábhūma"}, {"ábhūḥ"}, {"ábhūtam"}, {"ábhūta"}, {"ábhūt"}, {"ábhūtām"}, {"ábhūvan"}, },	preca = { -- Whitney Para 924, but with ḥ for final s		{"bhūyā́sam"}, {"bhūyā́sva"}, {"bhūyā́sma"}, {"bhūyā́ḥ"}, {"bhūyā́stam"}, {"bhūyā́sta"}, {"bhūyā́t"}, {"bhūyā́stām"}, {"bhūyā́suḥ"}, },	precm = { -- Whitney Para 924, but with ḥ for final s		{"bhaviṣīyá"}, {"bhaviṣīváhi"}, {"bhaviṣīmáhi"}, {"bhaviṣīṣṭhā́ḥ"}, {"bhaviṣīyā́sthām"}, {"bhaviṣīḍhvám", why = dhvam_why('v')}, --		why = "See [https://en.wikisource.org/wiki/Page%3ASanskrit_Grammar_by_" --           .."Whitney_p1.djvu/105 Whitney] 226c for the retroflexion in the 2p ".. --           "marker.  The 'v' is a semivowel."}, {"bhaviṣīṣṭá"}, {"bhaviṣīyā́stām"}, {"bhaviṣīrán"}, }, }

local asicat_ref = { aoria = { -- Whitney Para 846, but with ḥ for final s		{"ásicam"}, {"ásicāva"}, {"ásicāma"}, {"ásicaḥ"}, {"ásicatam"}, {"ásicata"}, {"ásicat"}, {"ásicatām"}, {"ásican"}, },	aorim = { -- Whitney Para 846, but with ḥ for final s		{"ásice"}, {"ásicāvahi"}, {"ásicāmahi"}, {"ásicathāḥ"}, {"ásicethām"}, {"ásicadhvam"}, -- 2p accent added by RichardW57. {"ásicata"}, {"ásicetām"}, {"ásicanta"}, }, }

local avidat_ref = { aoria = { -- Whitney Para 848, but with ḥ for final s. 2d & 3d from asicat. {"ávidam"}, {"ávidāva"}, {"ávidāma"}, {"ávidaḥ"}, {"ávidatam"}, {"ávidata"}, {"ávidat"}, {"ávidatām"}, {"ávidan"}, },	aorim = { -- Whitney Para 848, but with ḥ for final s. 2d and 2p from asicat. {"ávide"}, {"ávidāvahi"}, {"ávidāmahi"}, {"ávidathāḥ"}, {"ávidethām"}, {"ávidadhvam"}, {"ávidata"}, {"ávidetām"}, {"ávidanta"}, -- RichardW57 added accent to -- 3s and 3d; not in Whitney. },	subja = { -- Whitney Para 849, but with ḥ for final s. 2d and 2p from asicat. {},	                {"vidā́va"},   {"vidāma"}, {"vidā́si", "vidā́ḥ"}, {"vidāthaḥ"}, {"vidātha"}, {"vidā́t"}, 	     {},           {"vidātai"}, }, -- subjm too untrustworthy. }

ajijanat_ref = { aoria = { -- Whitney Para 864, but with ḥ for final s.		{"ájījanam"}, {"ájījanāva"}, {"ájījanāma"}, {"ájījanaḥ"}, {"ájījanatam"}, {"ájījanata"}, {"ájījanat"}, {"ájījanatām"}, {"ájījanan"}, },	aorim = { -- Whitney Para 864, but with ḥ for final s.		{"ájījane"}, {"ájījanāvahi"}, {"ájījanāmahi"}, {"ájījanathāḥ"}, {"ájījanethām"}, {"ájījanadhvam"}, {"ájījanata"}, {"ájījanetām"}, {"ájījananta"}, },	aorija = { -- Whitney Para 869c {"jī́janam"}, {"jī́janāva"}, {"jī́janāma"}, {"jī́janaḥ"}, {"jī́janatam"}, {"jī́janata"}, {"jī́janat"}, {"jī́janatām"}, {"jī́janan"}, },	aorijm = { -- Whitney Para 869c {"jī́jane"}, {"jī́janāvahi"}, {"jī́janāmahi"}, {"jī́janathāḥ"}, {"jī́janethām"}, {"jī́janadhvam"}, {"jī́janata"}, {"jī́janetām"}, {"jī́jananta"}, }, }

anaisit_ref = { aoria = { -- Whitney Para 882, but with ḥ for final s.		{"ánaiṣam"}, {"ánaiṣva"}, {"ánaiṣma"}, {"ánaiṣīḥ", "ánaiḥ"}, {"ánaiṣṭam"}, {"ánaiṣṭa"}, {"ánaiṣīt", "ánaiḥ", "ánait"}, {"ánaiṣṭām"}, {"ánaiṣuḥ"}, }, 	aorim = { -- Whitney Para 882, but with ḥ for final s.		{"áneṣi"}, {"áneṣvahi"}, {"áneṣmahi"}, {"áneṣṭhāḥ"}, {"áneṣāthām"}, {"áneḍhvam", why = dhvam_why("is s")}, {"áneṣṭa"}, {"áneṣātām"}, {"áneṣata"}, }, 	aorija = { -- Whitney Para 892 {"naíṣam"}, {"naíṣva"}, {"naíṣma"}, {"naíṣīḥ", "naíḥ"}, {"naíṣṭam"}, {"naíṣṭa"}, {"naíṣīt", "naíḥ", "naít"}, {"naíṣṭām"}, {"naíṣuḥ"}, }, 	aorijm = { -- Whitney Para 892 {"néṣi"}, {"néṣvahi"}, {"néṣmahi"}, {"néṣṭhāḥ"}, {"néṣāthām"}, {"néḍhvam", why = dhvam_why("is s")}, {"néṣṭa"}, {"néṣātām"}, {"néṣata"}, }, }

acchaitsit_ref = { aoria = { -- Whitney Para 882, but with ḥ for final s.		{"ácchaitsam"}, {"ácchaitsva"}, {"ácchaitsma"}, {"ácchaitsīḥ", "ácchait"}, {"ácchaittam"}, {"ácchaitta"}, {"ácchaitsīt", "ácchait"}, {"ácchaittām"}, {"ácchaitsuḥ"}, }, 	aorim = { -- Whitney Para 882, but with ḥ for final s.		{"ácchitsi"}, {"ácchitsvahi"}, {"ácchitsmahi"}, {"ácchitthāḥ"}, {"ácchitsāthām"}, {"ácchiddhvam"}, {"ácchitta"}, {"ácchitsātām"}, {"ácchitsata"}, }, }

apavit_ref = { aoria = { -- Whitney Para 902, but with ḥ for final s.		{"ápāviṣam"}, {"ápāviṣva"}, {"ápāviṣma"}, {"ápāvīḥ"}, {"ápāviṣṭam"}, {"ápāviṣṭa"}, {"ápāvīt"}, {"ápāviṣṭām"}, {"ápāviṣuḥ"}, },	aorim = { -- Whitney Para 902, but with ḥ for final s.		{"ápaviṣi"}, {"ápaviṣvahi"}, {"ápaviṣmahi"}, {"ápaviṣṭhāḥ"}, {"ápaviṣāthām"}, {"ápaviḍhvam"}, {"ápaviṣṭa"}, {"ápaviṣātām"}, {"ápaviṣata"}, }, }

abodhit_ref = { aoria = { -- Whitney Para 902, but with ḥ for final s. 2nd & 3rd added by analogy. {"ábodhiṣam"}, {"ábodhiṣva"}, {"ábodhiṣma"}, {"ábodhīḥ"}, {"ábodhiṣṭam"}, {"ábodhiṣṭa"}, {"ábodhīt"}, {"ábodhiṣṭām"}, {"ábodhiṣuḥ"}, },	aorim = { -- Whitney Para 902, but with ḥ for final s. 2nd & 3rd added by analogy. {"ábodhiṣi"}, {"ábodhiṣvahi"}, {"ábodhiṣmahi"}, {"ábodhiṣṭhāḥ"}, {"ábodhiṣāthām"}, {"ábodhiḍhvam"}, {"ábodhiṣṭa"}, {"ábodhiṣātām"}, {"ábodhiṣata"}, },	aorija = { -- Whitney Para 905. {"bódhiṣam"}, {"bódhiṣva"}, {"bódhiṣma"}, {"bódhīḥ"}, {"bódhiṣṭam"}, {"bódhiṣṭa"}, {"bódhīt"}, {"bódhiṣṭām"}, {"bódhiṣuḥ"}, },	aorijm = { -- Whitney Para 905. {"bódhiṣi"}, {"bódhiṣvahi"}, {"bódhiṣmahi"}, {"bódhiṣṭhāḥ"}, {"bódhiṣāthām"}, {"bódhiḍhvam"}, {"bódhiṣṭa"}, {"bódhiṣātām"}, {"bódhiṣata"}, }, }

ayasit_ref = { aoria = { -- Whitney Para 911, 2nd and 3rd persons by analogy {"áyāsiṣam"}, {"áyāsiṣva"}, {"áyāsiṣma"}, {"áyāsīḥ"}, {"áyāsiṣṭam"}, {"áyāsiṣṭa"}, {"áyāsīt"}, {"áyāsiṣṭām"}, {"áyāsiṣuḥ"}, },	aorija = { -- Whitney Para 913a {"yā́siṣam"}, {"yā́siṣva"}, {"yā́siṣma"}, {"yā́sīḥ"}, {"yā́siṣṭam"}, {"yā́siṣṭa"}, {"yā́sīt"}, {"yā́siṣṭām"}, {"yā́siṣuḥ"}, }, }

anamsit_ref = { aoria = { -- Whitney Para 911, 2nd and 3rd persons by analogy {"ánaṁsiṣam"}, {"ánaṁsiṣva"}, {"ánaṁsiṣma"}, {"ánaṁsīḥ"}, {"ánaṁsiṣṭam"}, {"ánaṁsiṣṭa"}, {"ánaṁsīt"}, {"ánaṁsiṣṭām"}, {"ánaṁsiṣuḥ"}, }, }

adiksat_ref = { aoria = { -- Whitney Para 918, but with ḥ for final s.		{"ádikṣam"}, {"ádikṣāva"}, {"ádikṣāma"}, {"ádikṣaḥ"}, {"ádikṣatam"}, {"ádikṣata"}, {"ádikṣat"}, {"ádikṣatām"}, {"ádikṣan"}, },	aorim = { -- Whitney Para 918, but with ḥ for final s.		{"ádikṣi"}, {"ádikṣāvahi"}, {"ádikṣāmahi"}, {"ádikṣathāḥ"}, {"ádikṣāthām"}, {"ádikṣadhvam"}, {"ádikṣata"}, {"ádikṣātām"}, {"ádikṣanta"}, },	aorija = { -- Whitney Para 920b and 920e {"dikṣám"}, {"dikṣā́va"}, {"dikṣā́ma"}, {"dikṣáḥ"}, {"dikṣátam"}, {"dikṣáta"}, {"dikṣát"}, {"dikṣátām"}, {"dikṣán"}, },	aorijm = { -- Whitney Para 920b and 920e {"dikṣí"}, {"dikṣā́vahi"}, {"dikṣā́mahi"}, {"dikṣáthāḥ"}, {"dikṣā́thām"}, {"dikṣádhvam"}, {"dikṣáta"}, {"dikṣā́tām"}, {"dikṣánta"}, }, }

bubodha_ref = { perfa = { -- Whitney 800a, but with ḥ for final s.		{"bubódha"}, {"bubudhivá", "bubudhvá"}, {"bubudhimá", "bubudhmá"}, -- the second form of each pair is Vedic (following Whitney §798a) {"bubódhitha"}, {"bubudháthuḥ"}, {"bubudhá"}, {"bubódha"}, {"bubudhátuḥ"}, {"bubudhúḥ"}, },	perfm = { -- Whitney 800a {"bubudhé"}, {"bubudhiváhe", "bubudhváhe"}, {"bubudhimáhe", "bubudhmáhe"}, {"bubudhiṣé", "bubutsé"}, {"bubudhā́the"}, {"bubudhidhvé", "bubuddhvé"}, {"bubudhé"}, {"bubudhā́te"}, {"bubudhiré", "bubudhré"}, },	pfap = {"bubudhvā́ṃs"}, -- Whitney 802 pfmp = {"bubudhāná"}, -- Whitney 806 }

ninaya_ref = { perfa = { -- Whitney 800c, but with ḥ for final s.		{"nináya", "ninā́ya"}, {"ninyivá"}, {"ninyimá"}, {"ninétha", "nináyitha"}, {"ninyáthuḥ"}, {"ninyá"}, {"ninā́ya"}, {"ninyátuḥ"}, {"ninyúḥ"}, },	perfm = { -- Whitney 800c {"ninyé"}, {"ninyiváhe"}, {"ninyimáhe"}, {"ninyiṣé"}, {"ninyā́the"}, {"ninyidhvé"}, {"ninyé"}, {"ninyā́te"}, {"ninyiré"}, },	pfap = {"ninīvā́ṃs"}, -- Whitney 802 pfmp = {"ninyāná"}, -- Whitney 806 }

babhuva_ref = { perfa = { -- Whitney 800d, but with ḥ for final s.		{"babhū́va"}, {"babhūvivá"}, {"babhūvimá"}, {"babhū́tha", "babhū́vitha"}, {"babhūváthuḥ"}, {"babhūvá"}, {"babhū́va"}, {"babhūvátuḥ"}, {"babhūvúḥ"}, }, }

dadau_ref = { perfa = { -- Whitney 800e, but with ḥ for final s.		{"dadaú"}, {"dadivá"}, {"dadimá"}, {"dadā́tha", "dadithá"}, {"dadáthuḥ"}, {"dadá"}, {"dadaú"}, {"dadátuḥ"}, {"dadúḥ"}, },	perfm = { -- Whitney 800e {"dadé"}, {"dadiváhe"}, {"dadimáhe"}, {"dadiṣé"}, {"dadā́the"}, {"dadidhvé"}, {"dadé"}, {"dadā́te"}, {"dadiré"}, },	pfap = {"dadivā́ṃs"}, -- Whitney 803 pfmp = {"dadāná"}, -- Whitney 806 }

tatana_ref = { perfa = { -- Whitney 800g, but with ḥ for final s.		{"tatána", "tatā́na"}, {"tenivá"}, {"tenimá"}, {"tatántha", "tenithá"}, {"tenáthuḥ"}, {"tená"}, {"tatā́na"}, {"tenátuḥ"}, {"tenúḥ"}, },	perfm = { -- Whitney 800g {"tené"}, {"teniváhe"}, {"tenimáhe"}, {"teniṣé"}, {"tenā́the"}, {"tenidhvé"}, {"tené"}, {"tenā́te"}, {"teniré"}, },	pfap = {"tenivā́ṃs"}, -- Whitney 803 pfmp = {"tenāná"}, -- Whitney 806 }

jajana_ref = { perfa = { -- Whitney 800h, but with ḥ for final s.		{"jajána", "jajā́na"}, {"jajñivá"}, {"jajñimá"}, {"jajántha", "jajñithá"}, {"jajñáthuḥ"}, {"jajñá"}, {"jajā́na"}, {"jajñátuḥ"}, {"jajñúḥ"}, },	perfm = { -- Whitney 800h {"jajñé"}, {"jajñiváhe"}, {"jajñimáhe"}, {"jajñiṣé"}, {"jajñā́the"}, {"jajñidhvé"}, {"jajñé"}, {"jajñā́te"}, {"jajñiré"}, },	pfap = {"jajñivā́ṃs"}, -- Whitney 803 pfmp = {"jajñāná"}, -- Whitney 806 }

uvaca_ref = { perfa = { -- Whitney 800i, but with ḥ for final s.		{"uváca", "uvā́ca"}, {"ūcivá"}, {"ūcimá"}, {"uváktha", "uvácitha"}, {"ūcáthuḥ"}, {"ūcá"}, {"uvā́ca"}, {"ūcátuḥ"}, {"ūcúḥ"}, },	perfm = { -- Whitney 800i {"ūcé"}, {"ūciváhe"}, {"ūcimáhe"}, {"ūciṣé"}, {"ūcā́the"}, {"ūcidhvé"}, {"ūcé"}, {"ūcā́te"}, {"ūciré"}, },	pfap = {"ūcivā́ṃs"}, -- Whitney 803 pfmp = {"ūcāná"}, -- Whitney 806 }

iyaja_ref = { perfa = { -- Whitney 800j, but with ḥ for final s.		{"iyája", "iyā́ja"}, {"ījivá"}, {"ījimá"}, {"iyáṣṭha", "iyájitha"}, {"ījáthuḥ"}, {"ījá"}, {"iyā́ja"}, {"ījátuḥ"}, {"ījúḥ"}, },	perfm = { -- Whitney 800i {"ījé"}, {"ījiváhe"}, {"ījimáhe"}, {"ījiṣé"}, {"ījā́the"}, {"ījidhvé"}, {"ījé"}, {"ījā́te"}, {"ījiré"}, }, }

uvoca_ref = { perfa = { -- Whitney 800j, but with ḥ for final s.		{"uvóca"}, {"ūcivá"}, {"ūcimá"}, {"uvócitha"}, {"ūcáthuḥ"}, {"ūcá"}, {"uvóca"}, {"ūcátuḥ"}, {"ūcúḥ"}, },	perfm = { -- Whitney 800i {"ūcé"}, {"ūciváhe"}, {"ūcimáhe"}, {"ūciṣé"}, {"ūcā́the"}, {"ūcidhvé"}, {"ūcé"}, {"ūcā́te"}, {"ūciré"}, },	pfap = {"ūcivā́ṃs"}, -- Whitney 803 pfmp = {"ūcāná"}, -- Whitney 806 }

cakara_ref = { perfa = { -- Whitney 800k, but with ḥ for final s.		{"cakára", "cakā́ra"}, {"cakṛvá"}, {"cakṛmá"}, {"cakártha"}, {"cakráthuḥ"}, {"cakrá"}, {"cakā́ra"}, {"cakrátuḥ"}, {"cakrúḥ"}, },	perfm = { -- Whitney 800k {"cakré"}, {"cakṛváhe"}, {"cakṛmáhe"}, {"cakṛṣé"}, {"cakrā́the"}, {"cakṛdhvé"}, {"cakré"}, {"cakrā́te"}, {"cakriré"}, },	pfap = {"cakṛvā́ṃs"}, -- Whitney 802 }

dadhara_ref = { perfa = { -- Whitney 800l; 2 & 3 as at https://sanskrit.inria.fr		{"dadhára", "dadhā́ra"}, {"dadhrivá", whynot = "https://sanskrit.inria.fr allows dadhṛvá."}, {"dadhrimá", whynot = "https://sanskrit.inria.fr allows dadhṛmá."}, {"dadhártha", "dadháritha"}, {"dadhráthuḥ"}, {"dadhrá"}, {"dadhā́ra"}, {"dadhrátuḥ"}, {"dadhrúḥ"}, },	perfm = { -- Whitney 800l {"dadhré"}, {"dadhriváhe", "dadhṛváhe"}, {"dadhrimáhe", "dadhṛmáhe"}, {"dadhriṣé", "dadhṛṣé"}, {"dadhrā́the"}, {"dadhridhvé", "dadhṛdhvé"}, {"dadhré"}, {"dadhrā́te"}, {"dadhriré"}, }, }

asa_ref = { perfa = { -- Whitney 800m, but with ḥ for final s.		{"ā́sa"}, {"āsivá"}, {"āsimá"}, {"ā́sitha"}, {"āsáthuḥ"}, {"āsá"}, {"ā́sa"}, {"āsátuḥ"}, {"āsúḥ"}, }, }

ada_ref = { -- Stems from Whitney 783a; details of perfect verified against https://sanskrit.inria.fr perfa = { -- Whitney 800m, but with ḥ for final s.		{"ā́da"}, {"ādivá"}, {"ādimá"}, {"ā́ditha"}, {"ādáthuḥ"}, {"ādá"}, {"ā́da"}, {"ādátuḥ"}, {"ādúḥ"}, },	pfap = {"ādivā́ṃs"}, -- Whitney 803 }

jagama_ref = { perfa = { -- Whitney 794e for weak stem, details verified against https://sanskrit.inria.fr		{"jagáma", "jagā́ma"}, {"jagmivá"}, {"jagmimá"}, {"jagántha", "jagámitha"}, {"jagmáthuḥ"}, {"jagmá"}, {"jagā́ma"}, {"jagmátuḥ"}, {"jagmúḥ"}, },	perfm = { -- Whitney 794e for weak stem, details verified against https://sanskrit.inria.fr		{"jagmé"}, {"jagmiváhe"}, {"jagmimáhe"}, {"jagmiṣé"}, {"jagmā́the"}, {"jagmidhvé"}, {"jagmé"}, {"jagmā́te"}, {"jagmiré"}, },	pfap = {"jaganvā́ṃs", "jagmivā́ṃs"}, -- Whitney 805 }

jaghana_ref = { perfa = { -- Whitney 787 for strong stem and 794e for weak stem, details verified against https://sanskrit.inria.fr		{"jaghána", "jaghā́na"}, {"jaghnivá"}, {"jaghnimá"}, {"jaghántha", "jaghánitha"}, {"jaghnáthuḥ"}, {"jaghná"}, {"jaghā́na"}, {"jaghnátuḥ"}, {"jaghnúḥ"}, },	perfm = { -- Whitney 794e for weak stem, details verified against https://sanskrit.inria.fr		{"jaghné"}, {"jaghniváhe"}, {"jaghnimáhe"}, {"jaghniṣé"}, {"jaghnā́the"}, {"jaghnidhvé"}, {"jaghné"}, {"jaghnā́te"}, {"jaghniré"}, },	pfap = {"jaghanvā́ṃs", "jaghnivā́ṃs"}, -- Whitney 805 }

vevetti_ref = { presa = { -- Whitney 1006a, but with ḥ for final s.		{"vévedmi", "vévidīmi"}, {"vevidváḥ"}, {"vevidmáḥ"}, {"vévetsi", "vévidīṣi"}, {"vevittháḥ"}, {"vevitthá"}, {"vévetti", "vévidīti"}, {"vevittáḥ"}, {"vévidati"}, },	opta = { -- Whitney 1009, but with ḥ for final s.		{"vevidyā́m"}, {"vevidyā́va"}, {"vevidyā́ma"}, {"vevidyā́ḥ"}, {"vevidyā́tam"}, {"vevidyā́ta"}, {"vevidyā́t"}, {"vevidyā́tām"}, {"vevidyúḥ"}, },	impra = { -- Whitney 1010, but with ḥ for final s.		{"vévidāni"}, {"vévidāva"}, {"vévidāma"}, {"veviddhí"}, {"vevittám"}, {"vevittá"}, {"vévettu", "vévidītu"}, {"vevittā́m"}, {"vévidatu"}, },	pap = {"vévidat"}, -- Based on Whitney 1012 pmp = {"vévidāna"}, -- Based on Whitney 1012 impfa = { -- Whitney 1014, but with ḥ for final s.		{"ávevidam"}, {"ávevidva"}, {"ávevidma"}, {"ávevet", "ávevidīḥ"}, {"ávevittam"}, {"ávevitta"}, {"ávevet", "ávevidīt"}, {"ávevittām"}, {"áveviduḥ"}, }, }

johoti_ref = { presa = { -- Whitney 1006b, but with ḥ for final s, for forms in --. MW for johoti. https://sanskrit.inria.fr for jahvati. {"jóhomi", "jóhavīmi"}, {}, {}, {"jóhoṣi", "jóhavīṣi"}, {}, {}, {"jóhoti", "jóhavīti"}, {}, {"jóhavati"} }, }

ipsati_ref = { presa = { -- Whitney 1032, but with ḥ for final s		{"ī́psāmi"}, {"ī́psāvaḥ"}, {"ī́psāmaḥ"}, {"ī́psasi"}, {"ī́psathaḥ"}, {"ī́psatha"}, {"ī́psati"}, {"ī́psataḥ"}, {"ī́psanti"} },	subja = { -- Whitney 1032, but with ḥ for final s		{"ī́psāni"}, {"ī́psāva"}, {"ī́psāma"}, {"ī́psāsi", "ī́psāḥ"}, {"ī́psāthaḥ"}, {"ī́psātha"}, {"ī́psāti", "ī́psāt"}, {"ī́psātaḥ"}, {"ī́psān"} },	optaa = { -- Whitney 1032, but with ḥ for final s		{"ī́pseyam"}, {"ī́pseva"}, {"ī́psema"}, {"ī́pseḥ"}, {"ī́psetam"}, {"ī́pseta"}, {"ī́pset"}, {"ī́psetām"}, {"ī́pseyuḥ"}, },	impra = { -- Whitney 1032, but with ḥ for final s		{"ī́psāni"}, {"ī́psāva"}, {"ī́psāma"}, {"ī́psa", "ī́psatāt"}, {"ī́psatam"}, {"ī́psata"}, {"ī́psatu", why = tat2sonly}, {"ī́psatām"}, {"ī́psantu"}, },	impra_reg = { {"ī́psāni"}, {"ī́psāva"}, {"ī́psāma"}, {"ī́psa"}, {"ī́psatam"}, {"ī́psata"}, {"ī́psatu"}, {"ī́psatām"}, {"ī́psantu"}, },	pap = {"ī́psant", whynot = whyant}, -- Whitney 1032. impfa = { -- Whitney 1032, but with ḥ for final s		{"aípsam"}, {"aípsāva"}, {"aípsāma"}, {"aípsaḥ"},{"aípsatam"}, {"aípsata"}, {"aípsat"}, {"aípsatām"}, {"aípsan"}, }, -- Injunctive form of the aboveː impfja = { -- Whitney Para 742 + 743, but with ḥ for final s.		{"ī́psam"}, {"ī́psāva"}, {"ī́psāma"}, {"ī́psaḥ"},{"ī́psatam"}, {"ī́psata"}, {"ī́psat"}, {"ī́psatām"}, {"ī́psan"}, }, }

titiksate_ref = { presm = { -- Whitney 1032, but with ḥ for final s		{"títikṣe"}, {"títikṣāvahe"}, {"títikṣāmahe"}, {"títikṣase"}, {"títikṣethe"}, {"títikṣadhve"}, {"títikṣate"}, {"títikṣete"}, {"títikṣante"} },	subjm = { -- Whitney 1032, but with ḥ for final s		{"títikṣāi"}, {"títikṣāvahāi"}, {"títikṣāmahāi"}, {"títikṣāse", "títikṣāsai"}, {}, {"títikṣādhvai"}, {"títikṣāte", "títikṣātai"}, {"títikṣaite"}, {"títikṣanta", "títikṣāntai"} },	optam = { -- Whitney 1032, but with ḥ for final s		{"títikṣeya"}, {"títikṣevahi"}, {"títikṣemahi"}, {"títikṣethāḥ"}, {"títikṣeyāthām"}, {"títikṣedhvam"}, {"títikṣeta"}, {"títikṣeyātām"}, {"títikṣeran"}, },	imprm = { -- Whitney 1032, but with ḥ for final s		{"títikṣai"}, {"títikṣāvahai"}, {"títikṣāmahai"}, {"títikṣasva"}, {"títikṣethām"}, {"títikṣadhvam"}, {"títikṣatām"}, {"títikṣetām"}, {"títikṣantām"}, },	pam = {"títikṣamāṇa"}, -- Whitney 11032 impfm = { -- Whitney 1032, but with ḥ for final s		{"átitikṣe"}, {"átitikṣāvahi"}, {"átitikṣāmahi"}, {"átitikṣathāḥ"}, {"átitikṣethām"}, {"átitikṣadhvam"}, {"átitikṣata"}, {"átitikṣetām"}, {"átitikṣanta"}, }, -- Injunctive form of the aboveː impfjm = { -- Whitney Para 742 + 743, but with ḥ for final s.		{"títikṣe"}, {"títikṣāvahi"}, {"títikṣāmahi"}, {"títikṣathāḥ"}, {"títikṣethām"}, {"títikṣadhvam"}, {"títikṣata"}, {"títikṣetām"}, {"títikṣanta"}, }, }

local function by_person(tagged, prefix) local persons = { "_1_s", "_1_d", "_1_p", "_2_s", "_2_d", "_2_p", "_3_s", "_3_d", "_3_p" }	local retval = {} retval[9] = "fred" for i, mark in ipairs(persons) do		local form = tagged[prefix..mark] local nature = type(form) if "nil" == nature then retval[i] = {} -- nil elseif "table" == nature then retval[i] = form elseif "string" == nature then -- Apparently not needed. --			mw.addWarning("Element "..tostring(i).." is "..form) retval[i] = {form} else error('List of forms expressed as "'..nature..'".') end end return retval end

local function strip_accent(str) -- Lazy coding. local si = str str = gasub(str, 'ś', 'C') str = mw.ustring.toNFD(str) str = gasub(str, u(0x301), '') -- Strip udatta str = gasub(str, u(0x300), '') -- Strip svarita, if any str = gasub(str, 'C', 'ś') local so = mw.ustring.toNFC(str) --	mw.addWarning(si.." strips to "..so) return so end

-- deaccent strips the accents from a conjugation table. local function deaccent(conj) local retval = {} for i1, v1 in pairs(conj) do		local elt1 = type(v1) if elt1 == 'table' then retval[i1] = {} for i2, v2 in pairs(v1) do				local elt2 = type(v2) if elt2 == 'table' then retval[i1][i2] = {} for i3, v3 in pairs(v2) do						local elt3 = type(v3) if elt3 ~= 'string' then retval[i1][i2][i3] = v3						elseif i3 == 'why' or i3 == 'whynot' then retval[i1][i2][i3] = v3						else retval[i1][i2][i3] = strip_accent(v3) end end elseif elt2 == 'string' then if i2 == 'why' or i2 == 'whynot' then retval[i1][i2] = v2					else retval[i1][i2] = strip_accent(v2) end else retval[i1][i2] = v2				end end else retval[i1] = conj[i1] end end return retval end

local function regularise(conj) -- Select the regular alternatives in _reg retval = {} for i, v in pairs(conj) do		retval[i] = v		if type(i) == "string" then regname = i .. "_reg" if conj[regname] then retval[i] = conj[regname] end end end return retval end

-- Delete oral stops immediately between nasals and oral stops. local function degemnstr(full) local stop = '[kKgGcCjJwWqQtTdDpPbB]' local regex = "([NYRnm])"..stop.."("..stop..")" local retval = gasub(full, regex, "%1%2") return retval end

-- Added forms with degemination after nasal (Whitney Para 231) to test results. local function adddegem(oldgot) def = {} for i1, v1 in pairs(oldgot) do def[i1] = v1 -- Participles don't need processing. if type(v1) == "table" then def[i1] = {} for i2, v2 in pairs(v1) do				if type(v2) == "table" then def[i1][i2] = {} local contents = {} for _, v3 in ipairs(v2) do						local red = degemnstr(v3) local cands = {red, v3} for _, cand in ipairs(cands) do							if not contents[cand] then contents[cand] = true ti(def[i1][i2], cand) end end end else def[i1][i2] = v2 -- Participles don't need degemination end end else def[i1] = v1		end end return def end -- check_present also handles the future systems. -- label tags the test result -- req is the required conjugation,as in bhavati_def above. -- got is a table in which to store the generated values in data. All results --    are stored, not just those specified by voice. -- voice is voices to check - act / mid / both / none -- optional part_voice allows a different set of voices to be checked for the --                    participles. local function check_present(label, req, got, data, voice, part_voice, detAt, degem) -- First load the generated forms from DATA into GOT. got.presa = by_person(data.forms, "indic_av") got.presm = by_person(data.forms, "indic_mv") got.optaa = by_person(data.forms, "optat_av") got.optam = by_person(data.forms, "optat_mv") got.impra = by_person(data.forms, "imper_av") got.imprm = by_person(data.forms, "imper_mv") if degem then got = adddegem(got) end got.pap = data.forms.part_av got.pmp = data.forms.part_mv -- Now perform required comparisons. if voice == "act" then if req.presa then compare(req, got, label.." pres ", "presa") end if req.optaa then compare(req, got, label.." opt ", "optaa") end if req.impra then compare(req, got, label.." impr ", "impra", nil, detAt) end if got.impfa then compare(req, got, label.." impf ", "impfa") end if got.impfja then compare(req, got, label.." inj ", "impfja") end if got.futua then compare(req, got, label.." fut ", "futua") end if got.conda then compare(req, got, label.." cond ", "conda") end if got.pfuta then compare(req, got, label.." pfut ", "pfuta") end elseif voice == "mid" then if req.presm then compare(req, got, label.." pres ", "presm") end if req.optam then compare(req, got, label.." opt ", "optam") end if req.imprm then compare(req, got, label.." impr ", "imprm") end if got.impfm then compare(req, got, label.." impf ", "impfm") end if got.impfjm then compare(req, got, label.." inj ", "impfjm") end if got.futum then compare(req, got, label.." fut ", "futum") end if got.condm then compare(req, got, label.." cond ", "condm") end if got.pfutm then compare(req, got, label.." pfut ", "pfutm") end elseif voice == "both" then if req.presa or req.presm then compare(req, got, label.." pres ", "presa", "presm") end if req.optaa or req.optam then compare(req, got, label.." opt ", "optaa", "optam") end if req.impra or req.imprm then compare(req, got, label.." impr ", "impra", "imprm", detAt) end if got.impfa or got.impfm then compare(req, got, label.." impf ", "impfa", "impfm") end if got.impfja or got.impfjm then compare(req, got, label.." inj ", "impfja", "impfjm") end if got.futua or got.futum then compare(req, got, label.." fut ", "futua", "futum") end if got.conda or got.condm then compare(req, got, label.." cond ", "conda", "condm") end if got.pfuta or got.pfutm then compare(req, got, label.." pfut ", "pfuta", "pfutm") end elseif voice == "none" then -- Perform no tests. else error("VOICE has unrecognised value "..voice) end part_voice = part_voice or voice if req.pap or req.pmp then if part_voice == "act" then comp_lists(req, got, label.." part ", "pap") elseif part_voice == "mid" then comp_lists(req, got, label.." part ", "pmp") elseif part_voice == "both" then comp_lists(req, got, label.." act part ", "pap") comp_lists(req, got, label.." mid part ", "pmp") elseif part_voice == "none" then -- Perform no tests. else error("PART_VOICE has unrecognised value "..voice) end end if req.fap or req.fmp then if part_voice == "act" then comp_lists(req, got, label.." fut part ", "fap") elseif part_voice == "mid" then comp_lists(req, got, label.." fut part ", "fmp") elseif part_voice == "both" then comp_lists(req, got, label.." fut act part ", "fap") comp_lists(req, got, label.." fut mid part ", "fmp") elseif part_voice == "none" then -- Perform no tests. else error("PART_VOICE has unrecognised value "..voice) end end end

local function sa_verb_data_table return { forms = {}, categories = {}, decl_type = nil, form_notes = {}, form_notes_out = {}, general_notes = {} } end

local function report_args(args, list) local started = false for _, flag in pairs({"set", "j_to_z", "h_to_g", "diaspirate", "no_retroflex_root_s"}) do		if args[flag] then ti(list, flag) started = true end end if args.aor then ti(list, "aor="..args.aor) started = true end if args.class then ti(list, "class="..args.class) started = true end return started end

local function assistance(label, args, spres, wpres, spast, wpast, sinj, winj, fp_pres, fp_past, pfroot, detAt, degem) local started = false local list = {} list[1] = label.." uses" started = report_args(args, list) or started if spres then ti(list, "spres="..spres) started = true end if wpres then ti(list, "wpres="..wpres) started = true end if spast then ti(list, "spast="..spast) started = true end if wpast then ti(list, "wpast="..wpast) started = true end if sinj then ti(list, "sinj="..sinj) started = true end if winj then ti(list, "winj="..winj) started = true end if fp_pres then ti(list, "fp_pres="..fp_pres) -- "extra_1p_stem" started = true end if fp_past then ti(list, "fp_past="..fp_past) started = true end if pfroot then ti(list, "pfroot="..pfroot) started = true end if detAt then ti(list, "detAt") started = true end if degem then ti(list, "adddegem") started = true end if started then local htext = table.concat(list, ' ') htext = gasub(htext, "=<", "=&lt;") -- Prevent inadvertent HTML tags. tests:header(htext) end end

local function aorist_assistance(label, args, aaor, maor, aprec, mprec, ainj, minj) local started = false local list = {} list[1] = label.." uses" started = report_args(args, list) or started if aaor then ti(list, "aaor="..aaor) started = true end if maor then ti(list, "maor="..maor) started = true end if aprec then ti(list, "aprec="..aprec) started = true end if mprec then ti(list, "mprec="..mprec) started = true end if ainj then ti(list, "ainj="..ainj) started = true end if minj then ti(list, "minj="..minj) started = true end if started then local htext = table.concat(list, ' ') htext = gasub(htext, "=<", "=&lt;") -- Prevent inadvertent HTML tags. tests:header(htext) end end

local function perfect_assistance(label, args, sperf, wperf) local started = false local list = {} list[1] = label.." uses" started = report_args(args, list) or started if sperf then ti(list, "sperf="..sperf) started = true end if wperf then ti(list, "wperf="..wperf) started = true end if started then local htext = table.concat(list, ' ') htext = gasub(htext, "=<", "=&lt;") -- Prevent inadvertent HTML tags. tests:header(htext) end end

-- check_present2 also handles the future systems. local function check_present2(arglist) local label = arglist.label or arglist[1] local req = arglist.req or arglist[2] local args = arglist.args or arglist[3] local thematic = arglist.thematic or arglist[4] local accented = arglist.accented or arglist[5] local voice = arglist.voice or arglist[6] local spres = arglist.spres -- explicit roots in angle brackets, best passed by name local wpres = arglist.wpres local spast = arglist.spast local wpast = arglist.wpast local sinj = arglist.sinj local winj = arglist.winj local fp_pres = arglist.fp_pres -- argument "extra_1p_stem" for present, not in brackets local fp_past = arglist.fp_past -- same for imperfect local pfroot = arglist.pfroot local part_voice = arglist.part_voice local detAt = arglist.detAt local degem = arglist.degem

local data local pres, impf, impfj if voice == "both" or voice == "act" then pres = "presa" impf = "impfa" impfj = "impfja" futu = "futua" cond = "conda" pfut = "pfuta" elseif voice == "mid" then pres = "presm" impf = "impfm" impfj = "impfjm" futu = "futum" cond = "condm" pfut = "pfutm" elseif type(voice) == "string" then error("VOICE has bad value "..voice) else error("VOICE has bad value of type "..type(voice)) end local filters if accented == "both" then filters = {pass_through, strip_accent} elseif accented == "yes" then filters = {pass_through} elseif accented == "no" then filters = {strip_accent} elseif type(accented) == "nil" then error("Parameter accented is not defined.") elseif type(accented) == "string" then error("ACCENTED misspecified as "..accented) else error("ACCENTED has bad value.") end for _, filter in pairs(filters) do		local got = {} if type(req[impf]) == "table" and req[impf][7] then data = sa_verb_data_table args.strong_lemma = to_SLP1(filter(req[impf][7][1]..(spast or ""))) if thematic then args.weak_lemma = nil else args.weak_lemma = to_SLP1(filter(req[impf][9][1]..(wpast or ""))) end if fp_past then args.extra_1p_stem = to_SLP1(filter(fp_past or "")) end sa_verb_data["impf"](args, data) got.impfa = by_person(data.forms, "indic_av") got.impfm = by_person(data.forms, "indic_mv") end if type(req[impfj]) == "table" and req[impfj][7] then data = sa_verb_data_table args.strong_lemma = to_SLP1(filter(req[impfj][7][1]..(sinj or ""))) if thematic then args.weak_lemma = nil else args.weak_lemma = to_SLP1(filter(req[impfj][9][1]..(winj or ""))) end sa_verb_data["impf"](args, data) got.impfja = by_person(data.forms, "indic_av") got.impfjm = by_person(data.forms, "indic_mv") end if type(req[cond]) == "table" and req[cond][7] then data = sa_verb_data_table args.strong_lemma = to_SLP1(filter(req[cond][7][1])) args.weak_lemma = nil sa_verb_data["cond"](args, data) got.conda = by_person(data.forms, "indic_av") got.condm = by_person(data.forms, "indic_mv") end if type(req[futu]) == "table" and req[futu][7] then data = sa_verb_data_table args.strong_lemma = to_SLP1(filter(req[futu][7][1])) args.weak_lemma = nil sa_verb_data["fut"](args, data) got.futua = by_person(data.forms, "indic_av") got.futum = by_person(data.forms, "indic_mv") got.fap = data.forms.part_av got.fmp = data.forms.part_mv end if type(req[pfut]) == "table" and req[pfut][7] then data = sa_verb_data_table args.strong_lemma = to_SLP1(filter(req[pfut][7][1]..(pfroot or ""))) args.weak_lemma = nil sa_verb_data["pfut"](args, data) got.pfuta = by_person(data.forms, "indic_av") got.pfutm = by_person(data.forms, "indic_mv") end if type(req[pres]) == "table" then data = sa_verb_data_table args.strong_lemma = to_SLP1(filter(req[pres][7][1]..(spres or ""))) if thematic then args.weak_lemma = nil else args.weak_lemma = to_SLP1(filter(req[pres][9][1]..(wpres or ""))) end if fp_pres then args.extra_1p_stem = to_SLP1(filter(fp_pres or "")) end sa_verb_data["pres"](args, data) end if filter == strip_accent then local newlab = strip_accent(label) local sa = strip_accent assistance(newlab, args,				spres and sa(spres), wpres and sa(wpres),				spast and sa(spast), wpast and sa(wpast),				sinj and sa(sinj),  winj and sa(winj),				fp_pres and sa(fp_pres), fp_past and sa(fp_past),				fproot and sa(fproot), detAt, degem) check_present(newlab, deaccent(req), got, data,       					voice, part_voice, detAt, degem) else assistance(label, args,				spres, wpres, spast, wpast, sinj, winj, fp_pres, fp_past, fproot, detAt, degem) check_present(label, req, got, data, voice, part_voice, detAt, degem) end end end

-- check_aorist handles aorist and precative. local function check_aorist(arglist) local label = arglist.label or arglist[1] local req = arglist.req or arglist[2] local args = arglist.args or arglist[3] local same = arglist.same or arglist[4] local accented = arglist.accented or arglist[5] local voice = arglist.voice or arglist[6] local aaor = arglist.aaor -- explicit roots in angle brackets local maor = arglist.maor local aprec = arglist.aprec local mprec = arglist.mprec local ainj = arglist.ainj local minj = arglist.minj local part_voice = arglist.part_voice

local data local aori, prec, aorij local eaor, eprec, einf if voice == "both" or voice == "act" then aori = "aoria" eaor =  aaor prec = "preca" eprec = aprec aorij = "aorija" einj =  ainj elseif voice == "mid" then aori = "aorim" eaor =  maor prec = "precm" eprec = mprec aorij = "aorijm" einj =  minj elseif type(voice) == "string" then error("VOICE has bad value "..voice) else error("VOICE has bad value of type "..type(voice)) end local filters if accented == "both" then filters = {pass_through, strip_accent} elseif accented == "yes" then filters = {pass_through} elseif accented == "no" then filters = {strip_accent} elseif type(accented) == "nil" then error("Parameter accented is not defined.") elseif type(accented) == "string" then error("ACCENTED misspecified as "..accented) else error("ACCENTED has bad value.") end for _, filter in pairs(filters) do		local got = {} if type(req[aori]) == "table" and req[aori][7] then data = sa_verb_data_table args.strong_lemma = to_SLP1(filter(req[aori][7][1]..(eaor or ""))) if req.aorim and not same then args.weak_lemma = to_SLP1(filter(req.aorim[7][1]..(maor or ""))) else args.weak_lemma = nil end sa_verb_data["aor"](args, data) got.aoria = by_person(data.forms, "indic_av") got.aorim = by_person(data.forms, "indic_mv") got.aap = data.forms.part_av got.amp = data.forms.part_mv end if type(req[prec]) == "table" and req[prec][7] then data = sa_verb_data_table args.strong_lemma = to_SLP1(filter(req[prec][7][1]..(eprec or ""))) if req.precm and not same then args.weak_lemma = to_SLP1(filter(req.precm[7][1]..(mprec or ""))) else args.weak_lemma = nil end sa_verb_data["bene"](args, data) if false then -- Occasionally enable to check data format! mw.addWarning("Precative data.forms has fields:") for n, v in pairs(data.forms) do					mw.addWarning("Field "..tostring(n)) end end got.preca = by_person(data.forms, "optat_av") got.precm = by_person(data.forms, "optat_mv") end if type(req[aorij]) == "table" and req[aorij][7] then data = sa_verb_data_table args.strong_lemma = to_SLP1(filter(req[aorij][7][1]..(einj or ""))) if req.aorijm and not same then args.weak_lemma = to_SLP1(filter(req.aorijm[7][1]..(mprec or ""))) else args.weak_lemma = nil end sa_verb_data["aor"](args, data) if false then -- Occasionally enable to check data format! mw.addWarning("Injunctive data.forms has fields:") for n, v in pairs(data.forms) do					mw.addWarning("Field "..tostring(n)) end end got.aorija = by_person(data.forms, "indic_av") got.aorijm = by_person(data.forms, "indic_mv") end local newlab, curreq if filter == strip_accent then newlab = strip_accent(label) local sa = strip_accent aorist_assistance(newlab, args,				aaor and sa(aaor), maor and sa(maor),				aprec and sa(aprec), mprec and sa(mprec),				ainj and sa(ainj),  minj and sa(minj)) curreq = deaccent(req) else aorist_assistance(label, args, spres, wpres, spast, wpast, sinj, winj) newlab = label curreq = req end -- Now perform required comparisons. -- Note that req and curreq have corresponding tables, which keeps lines shorter. if voice == "act" then if req.aoria then compare(curreq, got, newlab.." aor ", "aoria") end if req.preca then compare(curreq, got, newlab.." prec ", "preca") end if req.aorija then compare(curreq, got, newlab.." inj ", "aorija") end elseif voice == "mid" then if req.aorim then compare(curreq, got, newlab.." aor ", "aorim") end if req.precm then compare(curreq, got, newlab.." prec ", "precm") end if req.aorijm then compare(curreq, got, newlab.." inj ", "aorijm") end elseif voice == "both" then if req.aoria or req.aorim then compare(curreq, got, newlab.." aor ", "aoria", "aorim") end if req.preca or req.precm then compare(curreq, got, newlab.." prec ", "preca", "precm") end if req.aorija or req.aorijm then if false then mw.addWarning("Types of curreq.aorija and aorijm are "..							type(curreq.aorija).." and "..type(curreq.aorijm)) mw.addWarning("Types of got.aorija and aorijm are "..							type(got.aorija).." and "..type(got.aorijm)) end compare(curreq, got, newlab.." inj ", "aorija", "aorijm") end elseif voice == "none" then -- Perform no tests. else error("VOICE has unrecognised value "..voice) end part_voice = part_voice or voice if req.aap or req.amp then if part_voice == "act" then comp_lists(curreq, got, newlab.." part ", "aap") elseif part_voice == "mid" then comp_lists(curreq, got, newlab.." part ", "amp") elseif part_voice == "both" then comp_lists(curreq, got, newlab.." act part ", "aap") comp_lists(curreq, got, newlab.." mid part ", "amp") elseif part_voice == "none" then -- Perform no tests. else error("PART_VOICE has unrecognised value "..voice) end end end end

-- check_perfect handles perfect. local function check_perfect(arglist) local label = arglist.label or arglist[1] local req = arglist.req or arglist[2] local args = arglist.args or arglist[3] local same = arglist.same or arglist[4] local accented = arglist.accented or arglist[5] local voice = arglist.voice or arglist[6] local sperf = arglist.sperf -- explicit roots in angle brackets local wperf = arglist.wperf local part_voice = arglist.part_voice

local data local perf local eaor, eprec, einf if voice == "both" or voice == "act" then perf = "perfa" elseif voice == "mid" then perf = "perfm" elseif type(voice) == "string" then error("VOICE has bad value "..voice) else error("VOICE has bad value of type "..type(voice)) end local filters if accented == "both" then filters = {pass_through, strip_accent} elseif accented == "yes" then filters = {pass_through} elseif accented == "no" then filters = {strip_accent} elseif type(accented) == "nil" then error("Parameter accented is not defined.") elseif type(accented) == "string" then error("ACCENTED misspecified as "..accented) else error("ACCENTED has bad value.") end for _, filter in pairs(filters) do		local got = {} if type(req[perf]) == "table" and req[perf][7] then data = sa_verb_data_table args.strong_lemma = to_SLP1(filter(req[perf][7][1]..(sperf or ""))) if not same then args.weak_lemma = to_SLP1(filter(req[perf][9][1]..(wperf or ""))) else args.weak_lemma = nil end sa_verb_data["perf"](args, data) got.perfa = by_person(data.forms, "indic_av") got.perfm = by_person(data.forms, "indic_mv") got.pfap = data.forms.part_av got.pfmp = data.forms.part_mv end local newlab, curreq if filter == strip_accent then newlab = strip_accent(label) local sa = strip_accent perfect_assistance(newlab, args,				sperf and sa(sperf), wperf and sa(wpert)) curreq = deaccent(req) else perfect_assistance(label, args, sperf, wperf) newlab = label curreq = req end -- Now perform required comparisons. -- Note that req and curreq have corresponding tables, which keeps lines shorter. if voice == "act" then if req.perfa then compare(curreq, got, newlab.." perf ", "perfa") end elseif voice == "mid" then if req.perfm then compare(curreq, got, newlab.." perf ", "perfm") end elseif voice == "both" then if req.perfa or req.perfm then compare(curreq, got, newlab.." perf ", "perfa", "perfm") end elseif voice == "none" then -- Perform no tests. else error("VOICE has unrecognised value "..voice) end part_voice = part_voice or voice if req.pfap or req.pfmp then if part_voice == "act" and req.pfap then comp_lists(curreq, got, newlab.." part ", "pfap") elseif part_voice == "mid" and req.pfam then comp_lists(curreq, got, newlab.." part ", "pfmp") elseif part_voice == "both" then if req.pfap then comp_lists(curreq, got, newlab.." act part ", "pfap") end if req.pfmp then comp_lists(curreq, got, newlab.." mid part ", "pfmp") end elseif part_voice == "none" then -- Perform no tests. else error("PART_VOICE has unrecognised value "..voice) end end end end

function tests:test_class_1 local impl = tests.option.impl or "yes" --	local pacati = to_script("pacati", tests.sc, tests.option) --	local pacati_got = m_conj_verb.special_forms(pacati, --		{augment="with_made", impf_voice="both", impl = impl}) local data = sa_verb_data_table local args = {["strong_lemma"] = to_SLP1("bhávati"), auto_sandhi = true} if false then -- Leave in for future debugging. args.colspan = 7 args.lemma = "bhávati" args.n = "am" args[1] = "pres" args.tense = "pres" args[2] = "bhávati" args.set = false args.note = {} args.o = false args.mono = false args.j_to_z = false args.h_to_g = false args.diaspirate = false args.no_retroflex_root_s = true --		args.ignore_s_allophones = false end local bhavati_got = {} sa_verb_data["pres"](args, data) if false then -- Occasionally enable to check data format! mw.addWarning("data.forms has fields:") for n, v in pairs(data.forms) do			mw.addWarning("Field "..tostring(n)) end end bhavati_got.presa = by_person(data.forms, "indic_av") bhavati_got.presm = by_person(data.forms, "indic_mv") compare(bhavati_ref, bhavati_got, "bhávati pres ", "presa", "presm")

bhavati_got.optaa = by_person(data.forms, "optat_av") bhavati_got.optam = by_person(data.forms, "optat_mv") compare(bhavati_ref, bhavati_got, "bhávati opt ", "optaa", "optam")

bhavati_got.impra = by_person(data.forms, "imper_av") bhavati_got.imprm = by_person(data.forms, "imper_mv") -- Displayed under irregularities.

bhavati_got.pap = data.forms.part_av bhavati_got.pmp = data.forms.part_mv comp_lists(bhavati_ref, bhavati_got, "bhávati act part ", "pap") comp_lists(bhavati_ref, bhavati_got, "bhávati mid part ", "pmp")

args.strong_lemma = "ábhavat" data = sa_verb_data_table sa_verb_data["impf"](args, data) bhavati_got.impfa = by_person(data.forms, "indic_av") bhavati_got.impfm = by_person(data.forms, "indic_mv") compare(bhavati_ref, bhavati_got, "bhávati impf ", "impfa", "impfm")

args.strong_lemma = "bhávat" data = sa_verb_data_table sa_verb_data["impf"](args, data) bhavati_got.impfja = by_person(data.forms, "indic_av") bhavati_got.impfjm = by_person(data.forms, "indic_mv") compare(bhavati_ref, bhavati_got, "bhávati inj ", "impfja", "impfjm")

args = {auto_sandhi = true, detAt = true} check_present2{"Regularised bhávati", regularise(bhavati_ref), args, true, "yes", "both", detAt = true} -- Test derivation from middle. data = sa_verb_data_table args = {strong_lemma = to_SLP1("bhávate"), auto_sandhi = true} local bhavate_got = {} sa_verb_data["pres"](args, data) bhavate_got.presa = by_person(data.forms, "indic_av") bhavate_got.presm = by_person(data.forms, "indic_mv") -- Bits can be interrogated as:	result["indic"]["av"]["1_s"], which yields "bhavāmi" compare(bhavati_ref, bhavate_got, "bhávate pres ", "presa", "presm")

bhavate_got.optaa = by_person(data.forms, "optat_av") bhavate_got.optam = by_person(data.forms, "optat_mv") compare(bhavati_ref, bhavate_got, "bhavate opt ", "optaa", "optam")

bhavate_got.impra = by_person(data.forms, "imper_av") bhavate_got.imprm = by_person(data.forms, "imper_mv") compare(bhavati_ref, bhavate_got, "bhávate impr ", "impra", "imprm")

bhavate_got.pap = data.forms.part_av bhavate_got.pmp = data.forms.part_mv comp_lists(bhavati_ref, bhavate_got, "bhávate act part ", "pap") comp_lists(bhavati_ref, bhavate_got, "bhávate mid part ", "pmp")

args.strong_lemma = "ábhavat" data = sa_verb_data_table sa_verb_data["impf"](args, data) bhavate_got.impfa = by_person(data.forms, "indic_av") bhavate_got.impfm = by_person(data.forms, "indic_mv") compare(bhavati_ref, bhavate_got, "bhávate impf ", "impfa", "impfm")

args.strong_lemma = "bhávata" data = sa_verb_data_table sa_verb_data["impf"](args, data) bhavate_got.impfja = by_person(data.forms, "indic_av") bhavate_got.impfjm = by_person(data.forms, "indic_mv") compare(bhavati_ref, bhavate_got, "bhávate inj ", "impfja", "impfjm")

args = { auto_sandhi = true, no_retroflex_root_s = true} check_present2{"pesati (not a Whitney table)", pesati_ref, args, true, "no", "act", part_voice ="none" }

tests:header("With irregularities:") compare(bhavati_ref, bhavati_got, "bhavati impr ", "impra", "imprm")

end

function tests:test_class_2 local impl = tests.option.impl or "yes" --	local pacati = to_script("pacati", tests.sc, tests.option) --	local pacati_got = m_conj_verb.special_forms(pacati, --		{augment="with_made", impf_voice="both", impl = impl}) local data = sa_verb_data_table -- Implicit weak lemma does not suffice for imperfect - must give stem explicitly. local args = { strong_lemma = to_SLP1(eti_ref.impfa[7][1]), weak_lemma = to_SLP1(eti_ref.impfa[9][1]), auto_sandhi = true} local eti_got = {} sa_verb_data["impf"](args, data) eti_got.impfa = by_person(data.forms, "indic_av") compare(eti_ref, eti_got, "full extracting éti impf ", "impfa")

args = {auto_sandhi = true} check_present2{"explicit weak lemma: éti", eti_ref, args, false, "yes", "act", --					wpres="", --					wpast="", detAt=true}

args = {auto_sandhi = true} check_present2{"Regularised ā́ste", regularise(aste_ref), args, false, "yes", "mid", --					spres="<ā́s>" }

args = {auto_sandhi = true} check_present2{"dvéṣṭi", dvesti_ref, args, false, "yes", "both", --					spres = "", spast = "<ádveṣ>", detAt = true }

args = { h_to_g = true, diaspirate = true, auto_sandhi = true }	check_present2{"Regularised dógdhi", regularise(dogdhi_ref), args, false, "yes", "both", --					spres = "", spast = "<ádoh>", detAt = true }

args = { auto_sandhi = true, }	check_present2{"léḍhi", ledhi_ref, args, false, "yes", "both", --		spres = "", spast = "<áleh>", detAt = true }	args = { auto_sandhi = true, }	check_present2{"ásti", asti_ref, args, false, "both", "act", detAt = true, --					spast = "<ā́s>" }	args = { auto_sandhi = true, }	check_present2{"hánti", hanti_ref, args, false, "both", "both", wpres = "", -- Unprompted. --		spast = "<áhan>", wpast = "<áha>", -- Unprompted fp_pres = "han", fp_past = "áhan" }	tests:header("With irregularities:") data = sa_verb_data_table args = { strong_lemma = to_SLP1("ā́ste"), weak_lemma = to_SLP1("ā́sate"), auto_sandhi = true} local aste_got = {} sa_verb_data["pres"](args, data) aste_got.pmp = data.forms.part_mv comp_lists(aste_ref, aste_got, "ā́ste part ", "pmp")

args = { strong_lemma = to_SLP1("dógdhi"), weak_lemma = to_SLP1("duhánti"), h_to_g = true, diaspirate = true, auto_sandhi = true, }	data = sa_verb_data_table sa_verb_data["pres"](args, data) dogdhi_got = {} assistance("dógdhi", args, "", nil, "<ádoh>") dogdhi_got.pmp = data.forms.part_mv comp_lists(dogdhi_ref, dogdhi_got, "dógdhi mid part ", "pmp")

end

function tests:test_class_3 local args = { auto_sandhi = true, } check_present2{"juhóti", juhoti_ref, args, false, "yes", "both", wpast = "<ájuhu>", detAt = true }

args = { auto_sandhi = true, } check_present2{"bíbharti", bibharti_ref, args, false, "yes", "both", --		spast = "<ábibhar>", --		wpast = "<ábibhṛ>", detAt = true }

args = { auto_sandhi = true} check_present2{"dádāti", dadati_ref, args, false, "yes", "act", --		wpast = "<ádad>" }

args = { auto_sandhi = true} check_present2{"dádāti", dadati_ref, args, false, "yes", "mid", spres = "", --		wpast = "<ádad>" }

args = { auto_sandhi = true} check_present2{"dádāti", dadati_ref, args, false, "no", "both", --		wpast = "<ádad>" }

args = { auto_sandhi = true, diaspirate = true} check_present2{"dádhāti", dadhati_ref, args, false, "yes", "act", --		wpast = "<ádadh>" }

args = { auto_sandhi = true, diaspirate = true} check_present2{"dádhāti", dadhati_ref, args, false, "yes", "mid", spres = "", --		wpast = "<ádadh>" }

args = { auto_sandhi = true, diaspirate = true} check_present2{"dádhāti", dadhati_ref, args, false, "no", "both", --		wpres = " ", wpast = "<ádadh>" }

end

function tests:test_class_4 local args = { auto_sandhi = true} check_present2{"náhyati", nahyati_ref, args, true, "yes", "both", detAt = true }

args = { auto_sandhi = true} check_present2{"kriyáte", kriyate_ref, args, true, "yes", "mid", }	args = { auto_sandhi = true} --	local bits = {} --	bits.presm  = kriyate_ref.presm --	bits.impfjm = kriyate_ref.impfjm --	check_present2{"kriyáte", bits, args, true, "no", "mid",}

end

function tests:test_class_5 local args = { auto_sandhi = true} check_present2{"Regularised sunóti", regularise(sunoti_ref), args, false, "yes", "both", detAt = true }

local args = { auto_sandhi = true} check_present2{"Regularised śṛṇóti", regularise(srnoti_ref), args, false, "yes", "both", detAt = true }	args = { auto_sandhi = true} check_present2{"āpnóti", apnoti_ref, args, false, "yes", "both", --		wpres = "<āpnu>", -- Unprompted. Fixes some problems. --		wpast = "<ā́pnu>", -- Unprompted. Fixes some problems. detAt = true }

tests:header("With irregularities:") args = { auto_sandhi = true} local trimmed = { presa = sunoti_ref.presa, presm = sunoti_ref.presm, impra = sunoti_ref.impra, imprm = sunoti_ref.imprm, }	check_present2{"sunóti", trimmed, args, false, "yes", "both", detAt = true }

args = { auto_sandhi = true} trimmed = { presa = srnoti_ref.presa, presm = srnoti_ref.presm, impra = srnoti_ref.impra, imprm = srnoti_ref.imprm, }	check_present2{"śṛṇóti", trimmed, args, false, "yes", "both", detAt = true } end

function tests:test_class_6 local args = { auto_sandhi = true} check_present2{"viśáti", vishati_ref, args, true, "yes", "both", } --	check_present2{"viśáti", vishati_ref, args, true, "no", "both", --	}	args = { auto_sandhi = true} check_present2{"visṛjati (not a Whitney table)", visrjati_ref, args, true, "no", "act", part_voice ="none", detAt = true } end

function tests:test_class_7 local args = { auto_sandhi = true} check_present2{"yunákti", yunakti_ref, args, false, "yes", "both", --		spres = "", spast = "<áyunaj>", sinj = "", winj = "", detAt = true, degem = true }

local args = { auto_sandhi = true} check_present2{"ruṇáddhi", runaddhi_ref, args, false, "yes", "both", part_voice = "none", --		spres = "", detAt = true, degem = true } end

function tests:test_class_8 local args = { auto_sandhi = true} check_present2{"tanóti", tanoti_ref, args, false, "yes", "both", --		wpres = " ", -- Unprompted. Fixes some problems. --		wpast = "<átanu>", -- Unprompted. Fixes some problems. detAt = true }

args = { auto_sandhi = true, }	check_present2{"karóti", karoti_ref, args, false, "yes", "both", --		wpres = " ", -- Unprompted. Fixes some problems. --		wpast = "<ákuru>", -- Unprompted. Fixes some problems. fp_pres = "kur", fp_past = "ákur", detAt = true } end

function tests:test_class_9 local args = { auto_sandhi = true} check_present2{"krīṇā́ti", krinati_ref, args, false, "yes", "both", --					winj = "" }

args = { auto_sandhi = true} check_present2{"gṛhṇā́ti", grhnati_ref, args, false, "yes", "both", part_voice = "none" } end

function tests:test_class_10 local args = { auto_sandhi = true} check_present2{"cintáyati", cintayati_ref, args, true, "yes", "both", }

args = { auto_sandhi = true} check_present2{"visarjayati (not a Whitney table)", visarjayati_ref, args, true, "no", "act", part_voice ="none" } end

function tests:test_future local args = { auto_sandhi = true} check_present2{"dāsyáti", dasyati_ref, args, true, "yes", "both", }

args = { auto_sandhi = true} check_present2{"kariṣyáti", karisyati_ref, args, true, "yes", "both", }

args = { auto_sandhi = true} check_present2{"dātā́",data_ref, args, true, "yes", "both", } end

function tests:test_aorist local args, data, got

tests:header("Whitney's root aorists (various middles):") args = { auto_sandhi = true} check_aorist{"ádāt", adat_ref, args, true, "yes", "act", }

-- Jiggery pokery because different tenses have different voices. pruned = {} for i, v in pairs(abhut_ref) do pruned[i] = abhut_ref[i] end pruned.preca = nil pruned.precm = nil args = { auto_sandhi = true} check_aorist{"ábhūt", pruned, args, true, "both", "act", }	pruned = {} for i, v in pairs(abhut_ref) do pruned[i] = abhut_ref[i] end pruned.aoria = nil args = { auto_sandhi = true} check_aorist{"ábhūt", pruned, args, false, "both", "both"}

tests:header("Whitney's a-aorists (various middles):") args = { auto_sandhi = true} check_aorist{"ásicat", asicat_ref, args, true, "yes", "both",} --	args = { auto_sandhi = true} --	check_aorist{"ásicat", asicat_ref, args, false, "no", "both",}

args = { auto_sandhi = true} check_aorist{"ávidat", avidat_ref, args, true, "yes", "both",}

tests:header("Whitney's reduplicated aorists:") args = { auto_sandhi = true} check_aorist{"ájījanat", ajijanat_ref, args, true, "yes", "both",}

tests:header("Whitney's s-aorists:") args = { auto_sandhi = true} check_aorist{"ánaiṣīt", anaisit_ref, args, false, "yes", "both",}

args = { auto_sandhi = true} tests:header("For ácchaitsīt, middle 3s on -tta defaults to s-aorist") args.strong_lemma = to_SLP1("ácchaitsīt") args.weak_lemma  = to_SLP1("ácchitta") data = sa_verb_data_table sa_verb_data["aor"](args, data) got = {} got.aoria = by_person(data.forms, "indic_av") got.aorim = by_person(data.forms, "indic_mv") compare(acchaitsit_ref, got, "ácchaitsīt aor ", "aoria", "aorim") tests:header("Whitney's iṣ-aorists:") args = { auto_sandhi = true} check_aorist{"ápāvīt", apavit_ref, args, false, "yes", "both",}

args = { auto_sandhi = true} check_aorist{"ábodhīt", abodhit_ref, args, true, "yes", "both",}

tests:header("Whitney's siṣ-aorists:") args = { auto_sandhi = true, aor = "iṣ"} check_aorist{"áyāsīt", ayasit_ref, args, true, "yes", "act",}

args = { auto_sandhi = true, aor = "iṣ"} check_aorist{"ánaṁsīt", anamsit_ref, args, true, "yes", "act",}

tests:header("Whitney's sa-aorists:") args = { auto_sandhi = true} check_aorist{"ádikṣat", adiksat_ref, args, true, "yes", "both",} end

function tests:test_perfect local args args = { auto_sandhi = true} check_perfect{"bubódha", bubodha_ref, args, false, "yes", "both",}

args = { auto_sandhi = true} check_perfect{"ninā́ya", ninaya_ref, args, false, "yes", "both", wperf = ""}

args = { auto_sandhi = true} check_perfect{"babhū́va", babhuva_ref, args, false, "yes", "act",} --	args = { auto_sandhi = true} --	check_perfect{"babhū́va", babhuva_ref, args, false, "yes", "act", --			sperf = "<babhū́>" --	}

args = { auto_sandhi = true} check_perfect{"dadaú", dadau_ref, args, false, "yes", "act", --			sperf = "<dadā́>" }

args = { auto_sandhi = true} check_perfect{"tatā́na", tatana_ref, args, false, "yes", "act", --			sperf = "<tatán>" }

args = { auto_sandhi = true} check_perfect{"jajā́na", jajana_ref, args, false, "yes", "act", part_voice = "both", --			sperf = "<jaján>" }

args = { auto_sandhi = true} check_perfect{"uvā́ca", uvaca_ref, args, false, "yes", "both", --			sperf = "<uvác>" }

args = { auto_sandhi = true, j_to_z = true} check_perfect{"iyā́ja", iyaja_ref, args, false, "yes", "both", --			sperf = "<iyáj>" }

args = { auto_sandhi = true} check_perfect{"uvóca", uvoca_ref, args, false, "yes", "both", }

args = { auto_sandhi = true} check_perfect{"cakā́ra", cakara_ref, args, false, "yes", "both", --			sperf = "<cakár>", --			wperf = "<cakṛ>" }

args = { auto_sandhi = true, set = true} check_perfect{"dadhā́ra", dadhara_ref, args, false, "yes", "both", --			sperf = "<dadhár>" }	args = { auto_sandhi = true} check_perfect{"dadhā́ra", dadhara_ref, args, false, "yes", "both", --			sperf = "<dadhár>", --			wperf = "<dadhṛ>" }

args = { auto_sandhi = true} check_perfect{"ā́sa", asa_ref, args, false, "yes", "act", }

args = { auto_sandhi = true} check_perfect{"ā́da", ada_ref, args, false, "yes", "act", }

args = { auto_sandhi = true} check_perfect{"jagā́ma", jagama_ref, args, false, "yes", "both", --			sperf = "<jagám>" }

args = { auto_sandhi = true} check_perfect{"jaghā́na", jaghana_ref, args, false, "yes", "both", --			sperf = "<jaghán>" } end

function tests:test_derived local args = { auto_sandhi = true, --		class = "int" }	check_present2{"vévetti", vevetti_ref, args, false, "yes", "act", --					spres = "<véved>", --					spast = "<áveved>" }

local args = { auto_sandhi = true} check_present2{"Regularised ī́psati", regularise(ipsati_ref), args, true, "yes", "act", detAt = true, }

local args = { auto_sandhi = true} check_present2{"títikṣate", titiksate_ref, args, true, "yes", "mid",} end

return tests