From 2f1145f9ce59024a5cf773acd69939ead2654aab Mon Sep 17 00:00:00 2001 From: Francisco Alcaraz Date: Sat, 25 Jul 2026 13:30:31 +0400 Subject: [PATCH 1/2] tests: add lemma-assertion regression harness Add run_assert_test(), which checks that a surface form resolves (via -Ll) to an exact set of expected lemmas. Assertions live in tests/latin_assertions*.txt: form, tab, one or more expected lemmas, with optional "(...)" commentary stripped before comparison. Multiple lines for the same form are unioned into one expected set. The harness globs for any matching file, so adding a new assertion file needs no code change here. This is orthogonal to the existing baseline-diff tests: it checks lemma disambiguation (which L&S sense a form resolves to), not full morphological output, and has no --update mode (expected values are hand-written against the L&S dictionary, not captured from a prior run). --- tests/README_ASSERTIONS.md | 22 +++++++++++++ tests/run_tests.sh | 64 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 tests/README_ASSERTIONS.md diff --git a/tests/README_ASSERTIONS.md b/tests/README_ASSERTIONS.md new file mode 100644 index 00000000..12fb27ed --- /dev/null +++ b/tests/README_ASSERTIONS.md @@ -0,0 +1,22 @@ +## Lemma assertion tests (latin_assertions_*.txt) + +Format: `form lemma1 lemma2 ...`, optional trailing +`(commentary)` ignored by the harness. Multiple lines for the +same form are unioned into one expected set. + +File names reflect which stemsrc file was under investigation +when the regression was found and NOT which file the underlying +fix lives in. A single word's analysis is often split across +several stemsrc files (nom.latin.bas, ls.nom, vbs.latin, ...), +so there is no clean one-file-per-source mapping. + +Before adding a new assertion, grep all existing +latin_assertions_*.txt for the headword -- it may already be +tracked under a different file's name. Occasionally run: +```bash + awk '/^#|^$/{next} { sub(/\(.*/,""); if (NF<2) next; if (!seen[$1 SUBSEP FILENAME]++) filecount[$1]++ } END { for (w in filecount) if (filecount[w]>1) print w }' tests/latin_assertions*.txt +``` +to catch a form asserted in more than one file. + +New investigative work gets its own new latin_assertions_.txt +-- the run_tests.sh loop picks up any matching file automatically. \ No newline at end of file diff --git a/tests/run_tests.sh b/tests/run_tests.sh index 548e9d3a..aa39acc8 100755 --- a/tests/run_tests.sh +++ b/tests/run_tests.sh @@ -69,6 +69,70 @@ run_cruncher_test() { rm -f /tmp/morpheus_test_$$.txt } +run_assert_test() { + local flags="$1" file="$2" + [ -f "$file" ] || return + + local filename + filename=$(basename "$file") + echo "=== Assertions: $filename ===" + + # AWK: Group lemmas, skip comments, chop '(', and handle "" for empty sets + local aggregated + aggregated=$(awk '/^#|^$/ {next} { + + # 1. Ignore everything from "(" to the end of the line + sub(/\(.*/, "") + + if (NF < 2) next + + word = $1 + if (!(word in map)) { + order[++count] = word + map[word] = "" # Initialize empty in case it is just "" + } + for(i=2; i<=NF; i++) { + # Skip arrow and our empty set marker + if ($i == "->") continue + if ($i == "\"\"") continue + + map[word] = map[word] " " $i + } + } END { + for(i=1; i<=count; i++) { + print order[i] map[order[i]] + } + }' "$file") + + # Loop through the grouped data + while read -r form expected_str; do + [ -z "$form" ] && continue + + # Get actual output, remove 'form:', sort alphabetically, format as one line + actual=$(echo "$form" | "$CRUNCHER" $flags 2>/dev/null | grep -v '^form:' | sort | tr '\n' ' ' | sed 's/ *$//') + + # Format the expected string (sort alphabetically and remove duplicates) + expected=$(echo "$expected_str" | tr ' ' '\n' | sort | uniq | tr '\n' ' ' | sed 's/ *$//') + + # Format for display so empty strings show up as "" in the terminal logs + disp_expected=${expected:-\"\"} + disp_actual=${actual:-\"\"} + + if [ "$actual" = "$expected" ]; then + echo "PASS: '$form' -> $disp_expected" + else + echo "FAIL: $form" + echo " expected: [$disp_expected]" + echo " got: [$disp_actual]" + FAILURES=$((FAILURES + 1)) + fi + done <<< "$aggregated" + echo "" +} + +for assert_file in "$SCRIPT_DIR"/latin_assertions*.txt; do + run_assert_test "-Ll" "$assert_file" +done GP="$SCRIPT_DIR/greek_probe.txt" LP="$SCRIPT_DIR/latin_probe.txt" From 0ee1302c4d3822d17912950c3cd1d46715185661 Mon Sep 17 00:00:00 2001 From: Francisco Alcaraz Date: Sat, 25 Jul 2026 13:32:10 +0400 Subject: [PATCH 2/2] stemsrc: fix missing/wrong sense numbers and several missing entries Several homograph lemmas compiled without the #N that downstream code needs to match against a specific L&S entry, so distinct senses collapsed into one ambiguous lemma after case-folding (canis "dog" vs Canis "river", dis "rich" vs Dis "Pluto", etc.). Adds #N to: an, assiduus, canis/Canis, casus/Casus, celer/Celer, celsus/Celsus, dido/Dido, dis/Dis, fides, Hortensius, in, laus/Laus, lupus/Lupus, magnus/Magnus, niger/Niger, pax/Pax, polus/Polus, princeps/Princeps, quies, quinque, rex/Rex, secus, sed, tigris/Tigris. Also: - adds coeo and dido (verbs), previously entirely absent, so their participle/noun derivatives resolve to a verb origin - fixes wrong declension codes: pecus#1 (or_oris -> us_oris), Niger#2/#3 (was 3rd-decl er_ris on both; #2 is 2nd-decl er_ri), quies (custom es_eLtis/eLs_etis -> long vowel in the stem + s_tis) - fixes dis#1's hidden default-comparative collision (s_tis_adj needs no_comp since ior_ius_comp already supplies ditior) - adds vowel-length marks surfaced along the way: canis#1, niger#1, dis#3, super#1, secus#2's comparative stem Adds tests/latin_assertions_nom_lat_bas.txt asserting the above. --- stemlib/Latin/stemsrc/irreg.nom.src | 4 + stemlib/Latin/stemsrc/ls.nom | 131 ++++++++++------------ stemlib/Latin/stemsrc/nom.01 | 4 +- stemlib/Latin/stemsrc/nom.latin.bas | 74 ++++++------ stemlib/Latin/stemsrc/nom.smithgeo | 2 +- stemlib/Latin/stemsrc/vbs.latin | 11 ++ tests/latin_assertions_nom_lat_bas.txt | 149 +++++++++++++++++++++++++ 7 files changed, 269 insertions(+), 106 deletions(-) create mode 100644 tests/latin_assertions_nom_lat_bas.txt diff --git a/stemlib/Latin/stemsrc/irreg.nom.src b/stemlib/Latin/stemsrc/irreg.nom.src index 13f6e7d2..a3031f81 100755 --- a/stemlib/Latin/stemsrc/irreg.nom.src +++ b/stemlib/Latin/stemsrc/irreg.nom.src @@ -776,6 +776,10 @@ se_ pron3 masc fem abl pl se_se_ pron3 masc fem abl pl se_cum pron3 masc fem abl pl +:le:sed#3 +:wd:se_d pron3 masc fem acc sg +:wd:se_d pron3 masc fem abl sg + :le:lac lac irreg_nom3 neut nom voc acc sg lact@decl3 irreg_nom3 neut diff --git a/stemlib/Latin/stemsrc/ls.nom b/stemlib/Latin/stemsrc/ls.nom index dd8d0bc7..b81d5603 100755 --- a/stemlib/Latin/stemsrc/ls.nom +++ b/stemlib/Latin/stemsrc/ls.nom @@ -30181,9 +30181,8 @@ ca_ni^pa :no:ca_ni^p a_ae fem -ca^nis#1 ca^nes comm. Ca^nis#2 -:le:Canis +:le:Canis#2 :no:Ca^n is_is masc @@ -32885,9 +32884,8 @@ ca_sus#1 cassus -casu adverbially Ca_sus#2 -:le:Casus +:le:Casus#2 :no:Ca_s us_i masc @@ -34256,10 +34254,8 @@ Ce^lende^ri_-tis :no:Ce^lende^ri_-ti s_dis fem -ce^ler#1 e^ris, e -ce^leris ce^le^re^ ce^le^ri^ter Ce^ler#2 -:le:Celer +:le:Celer#2 :no:Ce^l er_eris masc @@ -34273,9 +34269,8 @@ ce^le^ra_tim :wd:ce^le^ra_tim adverb -Ce^le^res um -Ce^ler -:le:Celer +Ce^le^res +:le:Celer#3 :no:Ce^l er_eris masc @@ -34401,9 +34396,8 @@ celsi^tu_do :no:celsi^tu_d o_inis fem -celse_ Celsus#2 -:le:Celsus +:le:Celsus#2 :no:Cels us_i masc @@ -41212,6 +41206,10 @@ co^i^ti^o :no:co^i^ti^ o_oLnis fem +co^i^tus#1 +:le:coitus#1 +:aj:co^i^t us_a_um + co^i^tus#2 coetus :le:coitus#2 :no:co^i^t us_us masc @@ -61773,18 +61771,19 @@ di_versi^tas di_-verse di_vorse + di_ves :le:dives :aj:di_v es_itis -:aj:di_ s_tis_adj orth -:aj:di_t ior_ius_comp :aj:di_vi^t ior_ius_comp -:aj:di_tissi^m us_a_um irreg_superl :aj:di_vi^tissi^m us_a_um irreg_superl -di_s di_te adj. -di_ves -di_s#II di_vi^-tior di_tior di_vi^tissi-mus di_tissimus di_ti^us +di_s +:le:dis#1 +:aj:di_ s_tis_adj no_comp +:aj:di_t ior_ius_comp +:aj:di_tissi^m us_a_um irreg_superl + di_vexus :le:divexus :aj:di_vex us_a_um @@ -77814,13 +77813,8 @@ Fo^ru^li#2 :no:Fo^ru^l us_i masc pl -fo^rum#1 -:le:forum#1 -:no:fo^r us_i neut - - fo^rus -:le:forus +:le:forus#1 :no:fo^r us_i masc n. @@ -77830,7 +77824,7 @@ Forum A^lie_ni Forum Appii Forum Aure_lium Foru Forum Gallo_rum Forum Ju_lii Forojulien-sis e adj. Forojulien-ses Forum Vo^co_nii fo^rus#1 -:le:forus#1 +:le:forus#2 :no:fo^r us_i masc @@ -78142,8 +78136,10 @@ fraudu^lo_sus :aj:fraudu^lo_s us_a_um -fraus fraudis f. -Fraus#III personified +Fraus +:le:Fraus#2 +:no:Frau s_dis fem + fraxa_re vigiliam circuire fraxi^ne^us :le:fraxineus @@ -89257,11 +89253,6 @@ Hortensi^a :no:Hortensi^ a_ae fem -Hortensi^us -:le:Hortensius -:aj:Hortens ius_ia_ium - - Hortensi^a_nus :le:Hortensianus :aj:Hortensi^a_n us_a_um @@ -118501,7 +118492,7 @@ maxi^me_ maxu^me_ magi^s ma^ge^ Magnus#2 -:le:Magnus +:le:Magnus#2 :no:Magn us_i masc @@ -134288,14 +134279,17 @@ Ni^gellus#2 Ni^gella -ni^ger#1 gra, grum -ni^grum -:le:nigrum -:no:ni^gr us_i neut -Ni^ger#2 gri m. -Ni^ger#3 gris m. +Ni^ger#2 +:le:Niger#2 +:no:Ni^g er_ri masc + +Ni^ger#3 +:le:Niger#3 +:no:Ni^g er_ris masc + + Ni^gi^di^us :le:Nigidius :no:Ni^gi^d ius_i masc @@ -140298,8 +140292,8 @@ olla :no:o_ll a_ae fem -aula -:le:aula +aula#2 +:le:aula#2 :no:aul a_ae fem @@ -148443,12 +148437,12 @@ paulus#1 paull- pau-lum :le:paulum -:no:pau-l us_i neut +:wd:paulu^m adverb paulo paulum Paulus#2 Paull- -:le:Paulus +:le:Paulus#2 :no:Paul us_i masc :no:Paull us_i masc orth @@ -148694,8 +148688,11 @@ pa^vor Pa^vor personified -pax#1 pa_cis f. -Pax#2 Pa_cis m. + +Pax#2 +:le:Pax#2 +:no:Pa_ x_cis masc + paxillus :le:paxillus :no:paxill us_i masc @@ -148958,10 +148955,6 @@ pe^cu_ni^o_sus :aj:pe^cu_ni^o_s us_a_um -pe^cus#1 peco^ris n. -pe^cus#1 pecus f. -pe^cus#1 pecus n. -pe^cus#2 u^dis f. pe^cus#3 :le:pecus#3 :no:pe^c us_us masc @@ -159878,7 +159871,7 @@ po^lus#1 Po^lus#2 -:le:Polus +:le:Polus#2 :no:Po^l us_i masc pers_name @@ -165186,14 +165179,12 @@ pri_mo_ pri_mum pri-mumdum pri_me_ pri_mi^ter -princeps#1 ci^pis adj. -princeps ci^pis m. -princi^pes -:le:principes -:no:pri_nci^p 0_is masc pl -Princeps#2 ci^pis m. +:le:Princeps#2 +:no:Pri_nc eps_ipis masc + + princi^pa_lis :le:principalis :aj:pri_nci^pa_l is_e @@ -172312,12 +172303,10 @@ qui^dem :wd:qui^dem adverb -qui^es#1 -:le:quies#1 -:no:qui^ es_eLtis fem +:le:quies#2 +:aj:qui^e_ s_tis_adj -qui^es#2 e_tis adj. qui^escenti^a :le:quiescentia :no:qui^escenti^ a_ae fem @@ -172777,14 +172766,6 @@ quintus#1 quinctus num. adj. quintum quinto_ -Quintus#2 -:le:Quintus -:no:Qui_nt us_i masc pers_name - - -Quinta -:le:Quinta -:no:Qui_nt a_ae fem quintus-de^ci^mus @@ -176883,6 +176864,8 @@ re^vulsi^o re^vols- rex#1 re_gis m. adj. Rex#2 re_gis m. + + Rha indecl. rhabdo^s :le:rhabdos @@ -184748,8 +184731,13 @@ se_-cu_rus :aj:se_-cu_r us_a_um +:le:secus#2 +:aj:se^qui^ or_us_comp irreg_comp +:wd:se^cus adverb +:wd:se^cus prep + + se_-cu_re_ se_cu_ri^ter -se^cus#2 Adj. se^qui^or us, o_ris se^qui^us but with negatives or quo, eo, nihilo se_ti^us se_-ci^us secti^us @@ -198668,6 +198656,9 @@ su^pellex :no:suppellectil is_is fem orth :no:suppellectil 0_is fem abl orth + +:le:super#1 +:wd:su^per irreg_adj1 su^per#2 :le:super#2 @@ -206620,7 +206611,7 @@ ti_^gri_nus ti_^gris#1 is or i^dis Ti_^gris#2 -:le:Tigris +:le:Tigris#2 :no:Ti_^gr is_idis masc diff --git a/stemlib/Latin/stemsrc/nom.01 b/stemlib/Latin/stemsrc/nom.01 index 22eb76ff..7345dd26 100755 --- a/stemlib/Latin/stemsrc/nom.01 +++ b/stemlib/Latin/stemsrc/nom.01 @@ -10,8 +10,8 @@ :le:pulcher#1 :no:pulch er_ra_rum -:le:rex -:no:re_ x_gis masc +:le:rex#1 +:no:re_ x_gis masc :le:corpus :no:corp or_oris neut diff --git a/stemlib/Latin/stemsrc/nom.latin.bas b/stemlib/Latin/stemsrc/nom.latin.bas index b2f2b9be..01922b69 100755 --- a/stemlib/Latin/stemsrc/nom.latin.bas +++ b/stemlib/Latin/stemsrc/nom.latin.bas @@ -211,7 +211,7 @@ :le:compes1 :no:compe s_dis fem -:le:conge^ri^es +:le:congeries :no:conge^ri^ es_eLi fem :no:conge^ri^ a_ae fem @@ -271,7 +271,7 @@ :le:amens :aj:a_m ens_adj -:le:an +:le:an#1 :wd:an conj :le:ante @@ -311,7 +311,7 @@ :le:assiduus#1 :no:ad-sidu us_i masc -:le:assiduus#1 +:le:assiduus#2 :aj:assidu us_a_um :aj:ad-sidu us_a_um @@ -360,13 +360,13 @@ :le:Calidius :aj:Calid ius_ia_ium -:le:canis -:no:can is_is_C masc fem +:le:canis#1 +:no:ca^n is_is_C masc fem :le:celeber :aj:celeb er_ris_re -:le:celer +:le:celer#1 :aj:cel er_era_erum superl @ comp :aj:celer 0_adj3 @@ -377,7 +377,7 @@ :le:celere :wd:celere adverb -:le:celsus +:le:celsus#1 :aj:cels us_a_um :le:centum @@ -497,7 +497,7 @@ :le:dibaphus :aj:dibaph us_a_um -:le:Dido +:le:Dido#2 :no:Di_d o_oLnis fem :no:Di_d o_us fem @@ -510,7 +510,7 @@ :le:dioecesis :no:dioece_s is_eos fem -:le:Dis +:le:Dis#2 :no:Di_ s_tis masc sg :le:disjunctio @@ -614,6 +614,9 @@ :no:fid es_ei fem :no:fid is_is fem poetic +:le:fides#2 +:no:fid is_is fem + :le:fors :no:for s_tis fem @@ -623,7 +626,7 @@ :le:frater :no:fra_t er_ris masc -:le:fraus +:le:fraus#1 :no:frau s_dis fem :le:Frugi @@ -681,7 +684,7 @@ :no:ho^n or_oLris masc :wd:hono_s irreg_nom3 masc nom sg -:le:Hortensius +:le:Hortensius#2 :no:Hortens ius_i masc :no:Horte_s ius_i masc @@ -700,7 +703,7 @@ :wd:imbri er_ris masc abl sg :wd:imbrium er_ris masc gen pl -:le:in +:le:in#1 :wd:in prep :le:iners @@ -760,7 +763,7 @@ :le:Laevus :no:Laev us_i masc pers_name -:le:laus +:le:laus#1 :no:lau s_dis fem :le:lex @@ -773,7 +776,7 @@ :le:Libya :no:Liby a_es fem -:le:Lupus +:le:Lupus#2 :no:Lup us_i masc :le:Luscius @@ -882,8 +885,8 @@ :le:necdum :wd:necdum conj -:le:niger -:aj:nig er_ra_rum +:le:niger#1 +:aj:ni^g er_ra_rum :le:nihil :wd:nihil irreg_decl3 neut sg indecl @@ -970,17 +973,17 @@ :no:Paul a_ae fem pers_name :no:Paull a_ae fem pers_name -:le:pax +:le:pax#1 :no:pa_ x_cis fem :le:pater :no:pa^t er_ris masc :le:pecus#1 -:no:pec or_oris neut +:no:pe^c us_oris neut :le:pecus#2 -:no:pecu s_dis masc fem +:no:pe^cu s_dis masc fem :le:Penates :no:pena_t is_is masc pl @@ -1058,8 +1061,9 @@ :le:prex :no:pre^ x_cis fem -:le:princeps -:no:pri_nc eps_ipis masc +:le:princeps#1 +:no:pri_nc eps_ipis masc fem +:aj:pri_nc eps_ipis :le:prior :wd:priusquam adverb @@ -1099,6 +1103,7 @@ :wd:quia conj :le:quies#1 +:no:qui^e_ s_tis fem :wd:quie irreg_nom3 abl fem sg early :le:quin @@ -1110,12 +1115,12 @@ :le:quinquaginta :wd:qui_nqua_ginta_ numeral -:le:quinque +:le:quinque#1 :wd:qui_nque numeral -:le:quintus#2 -:no:Qui_nt us_i masc -:no:Qui_nt a_ae fem +:le:Quintus#2 +:no:Qui_nt us_i masc pers_name +:no:Qui_nt a_ae fem pers_name :le:quodsi :wd:quodsi_ conj @@ -1135,7 +1140,7 @@ :le:res :no:r es_ei fem -:le:Rex +:le:Rex#2 :no:Re_ x_gis masc pers_name :le:robur @@ -1161,16 +1166,18 @@ :wd:sexa_gie_s numeral :wd:sexa_giens numeral -:le:secus -:wd:secus adverb -:aj:sequi or_us_comp irreg_comp +:le:secus#1 +:wd:se^cus indecl neut :le:setius :wd:se_tius adverb comp -:le:sed -:wd:sed conj -:wd:set conj +:le:sed#1 +:wd:se^d conj +:wd:se^t conj + +:le:sed#2 +:wd:se_d prep :le:semel :wd:semel adverb @@ -1204,6 +1211,7 @@ :le:si :wd:si_ conj +:wd:sei_ conj orth :le:sive :wd:si_ve conj @@ -1273,7 +1281,7 @@ :no:Tiber is_idis masc :no:Tibr is_idis masc -:le:tigris +:le:tigris#1 :no:tigr is_idos masc fem :no:tigr is_is masc fem diff --git a/stemlib/Latin/stemsrc/nom.smithgeo b/stemlib/Latin/stemsrc/nom.smithgeo index 02167d59..d457e941 100755 --- a/stemlib/Latin/stemsrc/nom.smithgeo +++ b/stemlib/Latin/stemsrc/nom.smithgeo @@ -8895,7 +8895,7 @@ :le:Laurium :no:Laur ius_i neut -:le:Laus +:le:Laus#2 :no:La us_i masc :le:Lausonius diff --git a/stemlib/Latin/stemsrc/vbs.latin b/stemlib/Latin/stemsrc/vbs.latin index 229271ba..868e1db1 100755 --- a/stemlib/Latin/stemsrc/vbs.latin +++ b/stemlib/Latin/stemsrc/vbs.latin @@ -2365,6 +2365,10 @@ :de:co^ax are_vb :le:cocionor :de:co_ci^o_n are_vb dep +:le:coeo +:vs:co^- conj4 +:vs:co^-i^ perfstem +:vs:co^-i^t pp4 :le:coemo :vs:co^-e^m conj3 :vs:co^-e_m perfstem @@ -4959,6 +4963,13 @@ :de:dict are_vb :le:dicturio :de:dictu^r ire_vb +:le:dido#1 +:vs:di_-d conj3 +:vs:dis-d conj3 orth +:vs:di_-di^d perfstem +:vs:dis-di^d perfstem orth +:vs:di_-di^t pp4 +:vs:dis-di^t pp4 orth :le:diduco :vs:di_-du_c conj3 :vs:di_-du_x perfstem diff --git a/tests/latin_assertions_nom_lat_bas.txt b/tests/latin_assertions_nom_lat_bas.txt new file mode 100644 index 00000000..f8dfa016 --- /dev/null +++ b/tests/latin_assertions_nom_lat_bas.txt @@ -0,0 +1,149 @@ +# form required lemma + +acer acer#1 (maple-tree) +acer acer#2 (m. acris, Enn.) + +an an#1 + +assiduus assiduus#1 (from as-do) +assiduus assiduus#2 (from assideo) + +aula aula#1 (front court of a Grecian house) +aula aula#2 (old form for 'olla', 'pot') + +canibus canis#1 +Canibus Canis#2 (a small river tributary to the Po) +Canis Canis#2 Cana Canae + +casuum casus#1 +Casus Casus#2 (a river of Albania) + +celer celo (to hide) +celer celer#1 +Celer Celer#2 (Roman cognomen) +Celer Celer#3 (v. Celeres) + +celsus celsus#1 (of old cello "to rise high") +Celsus Celsus#2 (Roman cognomen) + +coitus coeo (to assemble/meet) +coitus coitus#1 (assembled) +coitus coitus#2 (a meeting) + +congeries congeries + +disdo dido#1 (to give out, spread abroad) +dido dido#1 (to give out, spread abroad) +Dido Dido#2 (foundress of Carthage) + +#dis#3, the inseparable particule is not analyzed on its own +Dis Dis#2 (name) +dis deus (god) +dis dis#1 (rich, alternate of 'dives') +ditior dis#1 +ditissimus dis#1 +dives dives +divitior dives +divitissimus dives + +fides fido +fides fides#1 +fides fides#2 (instrument) + +foris forio (to defecate/shit) +foris foris#1 (door) +foris foris#2 (outdoors) +foris forum (open space) +foris forus#2 (old form for 'forum') +foris fori (another form for 'forus') +foris forus#1 (nautical gangway) + +fraudis fraus#1 (fraud) +Fraus Fraus#2 (goddess mentioned once in Cicero) + +hortensius hortensis (belonging to a garden) +hortensius hortensius#1 (belonging to a garden) +Hortensius Hortensius#2 (Roman gens) + +in in#1 (preposition; in#2 the negation prefix is not analyzed copying the -ne behavior and others) + +inter inter#1 (there is no inter2 in the L&S dictionary, it's a source file error) + +laus laus#1 (praise) +Laus Laus#2 (name of a few cities) + +lupus lupus#1 +Lupus Lupus#2 (surname in gens Rutilia) + +magnus magnus#1 +Magnus Magnus#2 (Roman surname) + +ne ne#1 (adv.; interrogative/enclitic particle not analyzed) +ne ne#3 (incorrect for 'nae') +ne neo#1 (to spin) + +nigrum niger#1 (black) +Niger Niger#2 (Roman surname) +Niger Niger#3 (African river) + +parens pareo +parens parens#1 (appearing) +parens parens#2 (parent) + +paulum paulum (adverb 'a little') +paulum paulus#1 (small) +Paulum Paulus#2 (Roman surname) + +pacis pax#1 (peace) +Pax Pax#2 (a slave in Plautus' Trinummus) + +pecus pecus#1 (cattle) +pecus pecus#2 (herd animal) +pecus pecus#3 (= pecus#1, rare masc. u-stem variant) + +per per#1 (there is no per2 in the L&S dictionary, it's a source file error) + +polus polus#1 +Polus Polus#2 (Greek tragic actor) + +princeps princeps#1 (foremost) +Princeps Princeps#2 (flute player in Phaedr.) + +pro pro#1 (for) +pro pro#2 (alas!) + +promptus promptus#1 (manifest) +promptus promptus#2 (readiness) + +pubes pubes#1 (adult) +pubes pubes#2 (adulthood) + +quies quies#1 (quietness) +quies quies#2 (quiet, alternative of 'quietus') + +quinque quinque#1 (L&S quinque#2 for Plautus' Casina meaning 'et quin', probably better NOT added as analysis) + +quintus quintus#1 +Quintus Quintus#2 (Roman praenomen) +Quinta Quintus#2 + +rex rex#1 (king) +Rex Rex#2 (Roman surname) + +secus secus#1 (indeclinable for 'sexus') +secus secus#2 (adverb and prep) + +sed sed#1 (conj) +sed sed#2 (prep. 'without') +sed sed#3 (alternative form of pronoun 'sē') + +super supo (to throw/scatter) +super super#1 (L&S refers to superus) +super super#2 (on top) + +tigridis tigris#1 (tiger) +tigris tigris#1 (tiger) +Tigridis Tigris#2 (the Asian river) + +uber uber#1 (lactating breast) +uber uber#2 (fruitful) \ No newline at end of file