+
     ht c                  sJ'  a 0 t $ R t^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
Ht ^ RIHtHtHtHtHtHtHtHtHtHtHtHtHt ^ RIHt ^ RIHt ^RIHt  ! R R	] 4      t! ! R
 R] 4      t" ! R R] 4      t# ! R R] 4      t$ ! R R] 4      t% ! R R] 4      t& ! R R] 4      t'R R lt(ERUR R llt)R R lt*ERVR R llt+RR R!R"R#R$R%R&R'R(R)R*R+R,R-R./t,/ R/R0bR1R2bR3R4bR5R6bR7R8bR9R:bR;R<bR=R>bR?R@bRARBbRCRDbRERFbRGRHbRIRJbRKRLbRMRNbRORPb/ RQRRbRSRTbRURVbRWRXbRYRZbR[R\bR]R^bR_R`bRaRbbRcRdbReRfbRgRhbRiRjbRkRlbRmRnbRoRpbCt-]-P]                  ],4       RqRrRsRtRuRvRwRx/t/RyRz/t0]-Pc                  4        U Uu/ uF  w  rWbK	  	  upp t2]3! ]24       F4  t4R{]49   g   K  ]4Pk                  R{4      w  t6t7]2]4,          ;]2]6&   ]2]7&   ]2]4 K6  	  ]/Pc                  4        U Uu/ uF  w  rWbK	  	  upp t8]0Pc                  4        U Uu/ uF  w  rWbK	  	  upp t9]3! ]94       F4  t4R{]49   g   K  ]4Pk                  R{4      w  t6t7]9]4,          ;]9]6&   ]9]7&   ]9]4 K6  	  ERWt:]*! ]:4      t;ERXt<]*! ]<4      t=. ERYOt>R|.t?])! ERZ]>]? Uu. uF  pR}V 2NK
  	  up,           4      t@]>]?,           tA]+! ]AR~^RR7      w  tBtCtDER[tE]+! ]ER^4      w  tFtGtHtIER\tJ]+! ]JRR4      w  tKtLtMtNER]tO]+! ]ORR4      w  tPtQtRtSER^tT]+! ]TR^4      w  tUtVtWtXER_tY]+! ]YR^4      w  tZt[t\t]ER`t^]+! ]^R^4      w  t_t`tatbERatc]+! ]cR^4      w  tdtetftgERbth]+! ]hR^4      w  titjtktlERctm]*! ]m4      tnERdto]+! ]oR^4      w  tptqtrtsERett]+! ]tR^4      w  tutvtwtx. ERfOty]*! ]y4      tz]*! ]y Uu. uF  q"RERg  R2NK  	  up4      t{])! ERg]y4      t|0 ERhmt}]} Uu0 uF  q" R2kK	  	  upt~. RNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNRNER NERNERNERNERNERNERNERNERNER	NER
NERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNER NER!NER"NER#NER$NER%NER&NER'NER(NER)NER*NER+NER,NER-NER.NER/NER0NER1NER2NER3NER4NER5NER6NER7NER8NER9NER:NER;NER<NER=NER>NER?NER@NERANERBNERCNERDNERENERFNERGNERHNERIN]y,           t]*! ]4      t]*! ] Uu. uF  q" R2NK	  	  up4      tERit]+! ]RR4      w  ttttERjt]+! ]ERJ^4      w  ttttERkt]+! ]ERJ^4      w  ttttERlt]+! ]ERJ^4      w  ttttERmt]+! ]ERJ^4      w  ttttERnt]+! ]RR4      w  ttttERot]+! ]ERKR4      w  ttttERLPk                  4       tERMPk                  4       t]+! ]RRRR7      w  ttt]+! ]RRRR7      w  tttERpt]+! ]ERN^RR7      w  ttt. ERONERPNERQNERRNERSNERTNERUNERVNERWNERXNR*NERYNERZNER[NER\NER]NER^NER_NER`NERaNERbNERcNERdNEReNERfNERgNERhNERiNERjNERkNERlNERmNERnNERoNERpNtERqERr.t]] Uu. uF  pR}V 2NK
  	  up,           tERqt. ERrO],           t. ERsOt. ERtO],           t]*! ]4      t. ERtNERuNERvNERwNERxNERyNERzNER{NER|NER}NER~NERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERNERsNERNERN]>,           tERER.]?,           t]*! ]4      t] Uu. uF  q" ER2NK
  	  upt] Uu. uF  q" ER2NK
  	  upt]*! ]4      tER.t](! R{EP                  ]] Uu. uF  pR}V 2NK
  	  up,           ],           4      4      tERutERvtERwtERxtERytERztER{tER|tER}tER~tERtERtERtERtERtERt](! R{EP                  ].],           ]3! ],4      ,           . ERO,           4      4      tER](! ER4      3ER](! ER4      3ER](! ER4      33tER ] 4       tER]ER&   ERR{EP                  ]4       ER2tERtERPk                  4       t]. ERO,           t]*! ]4      t](! R{EP                  ]4      4      tER] ER2t0 ERmt/ RERbERERbERERbERERbERERbERERbERERbERERbERERbERERbERERbERERbERERbERERbERERbERERbERERbERER/CtER]Pc                  4        U Uu/ uF  w  rWbK	  	  upp /tER]ER&   ER]ER,          ER&   ERERERERERERERERERERERERERERERERERERERERERERERER/t](! R{EP                  ]4      4      t]*! ]4      t]Pc                  4        U Uu/ uF  w  rWbK	  	  upp ]ER&   ER F  w  tttt ]]],          ],          ]&   K  	  ](! R{EP                  ]ER,          4      4      t]*! ]ER,          4      tER ER ltERERERERERERERERERERERERERERERERERER/	t/ ERERbERERbERERbERERbERERbERERbERERbERERbERERbERERbERERbERERbERERbERERbERERbERERbERERbERERERERERERERERERERERERERERERERERERERERERERERERERERERERERER/Ct]	EP                  ! ER](! R{EP                  ]4      4       ER2]	EP                  4      tERt]	EP                  ! ER]	EP                  4      tERtERtERtERtERtRERERERERERERER/t]	EP                  ! ER](! R{EP                  ]4      4       ER2]	EP                  4      tERERERERERERERERERERERER/t]	EP                  ! ER](! R{EP                  ]4      4       ER2]	EP                  4      t]	EP                  ! ER]	EP                  4      t]	EP                  ! ER]	EP                  4      t]	EP                  ! ER]	EP                  4      t]	EP                  ! ER ]	EP                  4      t]	EP                  ! ER]	EP                  4      Et ]	EP                  ! ER]	EP                  4      Et^ ER^ER^ER^ER^ER^ER^ER^ER^ER^	ER^ER^ER^ER/EtE]! E]EP	                  4       4      EtE]! ERERER	ER
ERERERERER7      Et]	EP                  ! ERR{EP                  E]4       ER24      Et. EROEt	. EROEt
. EROEt. EROEtE]! RRRRRRER7      EtE] U u/ uF  q RbK  	  up EtE] U u/ uF  q RbK  	  up EtERRERRERR/Et]	EP                  ! ER4      Et]	EP                  ! ER]	EP                  4      Et]	EP                  ! ER4      Et]	EP                  ! ER] ER2]	EP                  4      Et]	EP                  ! ER] ER2]	EP                  4      Et]	EP                  ! ER4      Et]	EP                  ! ER] ER24      Et]	EP                  ! ER4      Et]	EP                  ! ER]	EP                  4      Et]	EP                  ! ER4      Et]	EP                  ! ER]	EP                  4      Et]	EP                  ! ER]	EP                  4      Et]	EP                  ! ER ]	EP                  4      Et]	EP                  ! ER!]	EP                  4      Et]	EP                  ! ER"]	EP                  4      Et]	EP                  ! ER#]	EP                  4      Et ]	EP                  ! ER$]	EP                  4      Et!]	EP                  ! ER%]	EP                  4      Et"]	EP                  ! ER&]	EP                  4      Et#]	EP                  ! ER']	EP                  4      Et$]	EP                  ! ER(]	EP                  4      Et%]	EP                  ! ER)]	EP                  4      Et&]	EP                  ! ER*4      Et']	EP                  ! ER+]	EP                  4      Et(]	EP                  ! ER,4      Et)]	EP                  ! ER-4      Et*]	EP                  ! ER.4      Et+]	EP                  ! ER/4      Et,]	EP                  ! ER04      Et-]	EP                  ! ER14      Et.]	EP                  ! ER24      Et/]	EP                  ! ER34      Et0]	EP                  ! ER44      Et1]	EP                  ! ER54      Et2]	EP                  ! ER64      Et3]	EP                  ! ER74      ER83]	EP                  ! ER94      ER:3]	EP                  ! ER;4      ER<3]	EP                  ! ER=4      ER>3]	EP                  ! ER?4      ER3]	EP                  ! ER@4      ERA3]	EP                  ! ERB4      ERC3]	EP                  ! ERD4      ER<3]	EP                  ! ERE4      ER<3]	EP                  ! ERF4      ERG3]	EP                  ! ERH4      ERI33Et4]	EP                  ! ERJ4      Et5 ! ERK ERLE]64      Et7]Et8]Et9E]9'       d   ]E]6ERM3,          Et:M  ! ERN EROE];4      Et< ! ERP ERQE]<ERR7      Et: ! ERS ERT4      Et=R# u upp i u upp i u upp i u upi u upi u upi u upi u upi u upi u upi u upi u upp i u upp i   ] d%    / ]],          ]&   ]]],          ],          ]&    E	KZ  i ; iu up i u up i (  a  
inflect: english language inflection
 - correctly generate plurals, ordinals, indefinite articles
 - convert numbers to words

Copyright (C) 2010 Paul Dyson

Based upon the Perl module
`Lingua::EN::Inflect <https://metacpan.org/pod/Lingua::EN::Inflect>`_.

methods:
    classical inflect
    plural plural_noun plural_verb plural_adj singular_noun no num a an
    compare compare_nouns compare_verbs compare_adjs
    present_participle
    ordinal
    number_to_words
    join
    defnoun defverb defadj defa defan

INFLECTIONS:
    classical inflect
    plural plural_noun plural_verb plural_adj singular_noun compare
    no num a an present_participle

PLURALS:
    classical inflect
    plural plural_noun plural_verb plural_adj singular_noun no num
    compare compare_nouns compare_verbs compare_adjs

COMPARISONS:
    classical
    compare compare_nouns compare_verbs compare_adjs

ARTICLES:
    classical inflect num a an

NUMERICAL:
    ordinal number_to_words

USER_DEFINED:
    defnoun defverb defadj defa defan

Exceptions:
 UnknownClassicalModeError
 BadNumValueError
 BadChunkingOptionError
 NumOutOfRangeError
 BadUserDefinedPatternError
 BadRcFileError
 BadGenderError

)annotationsN)Number)TYPE_CHECKINGAnyCallableDictIterableListLiteralMatchOptionalSequenceTupleUnioncast)windowed_complete)typechecked)	Annotatedc                  s    ] tR t^VtRtR# )UnknownClassicalModeError N__name__
__module____qualname____firstlineno____static_attributes__r       H/usr/lib/python3.14/site-packages/setuptools/_vendor/inflect/__init__.pyr   r   V       r   r   c                  s    ] tR t^ZtRtR# )BadNumValueErrorr   Nr   r   r   r   r   r   Z   r   r   r   c                  s    ] tR t^^tRtR# )BadChunkingOptionErrorr   Nr   r   r   r   r   r   ^   r   r   r   c                  s    ] tR t^btRtR# )NumOutOfRangeErrorr   Nr   r   r   r   r   r   b   r   r   r   c                  s    ] tR t^ftRtR# )BadUserDefinedPatternErrorr   Nr   r   r   r   r    r    f   r   r   r    c                  s    ] tR t^jtRtR# )BadRcFileErrorr   Nr   r   r   r   r!   r!   j   r   r   r!   c                  s    ] tR t^ntRtR# )BadGenderErrorr   Nr   r   r   r   r"   r"   n   r   r   r"   c                    V ^8  d   QhRRRR/# )   sstrreturnr   format   "r   __annotate__r+   r   s      s s r   c                s    R V  R2# )z(?:)r   )r%      &r   encloser.   r   s    1:r   c               $    V ^8  d   QhRRRRRR/# )r$   cutpointOptional[int]wordszOptional[Iterable[str]]r'   r&   r   r(   r*   r   r+   r+   v   s(     @ @} @1H @TW @r   c                s`   a  \        RP                  V 3R lT;'       g    .  4       4      4      # )a]  
Join stem of each word in words into a string for regex.

Each word is truncated at cutpoint.

Cutpoint is usually negative indicating the number of letters to remove
from the end of each word.

>>> joinstem(-2, ["ephemeris", "iris", ".*itis"])
'(?:ephemer|ir|.*it)'

>>> joinstem(None, ["ephemeris"])
'(?:ephemeris)'

>>> joinstem(5, None)
'(?:)'
|c              3  s,   <"   T F	  qR S x  K  	  R # 5iNr   ).0wr0   s   & r   	<genexpr>Zjoinstem.<locals>.<genexpr>   s     >+QixL+s   )r.   join)r0   r2   s   f&r   joinstemr9   v   s'    $ 388>%++2+>>??r   c                    V ^8  d   QhRRRR/# )r$   r2   Iterable[str]r'   zDict[int, set]r   r(   r*   r   r+   r+      s      - N r   c                s    \         P                  ! \        4      pV  F$  pV\        V4      ,          P	                  V4       K&  	  V# )z
From a list of words, return a dict of sets sorted by word length.

>>> words = ['ant', 'cat', 'dog', 'pig', 'frog', 'goat', 'horse', 'elephant']
>>> ret = bysize(words)
>>> sorted(ret[3])
['ant', 'cat', 'dog', 'pig']
>>> ret[5]
{'horse'}
)collectionsZdefaultdictsetlenZadd)r2   Zresr6      &  r   bysizer@      s7     &11#6CCF Jr   Tc               (    V ^8  d   QhRRRRRRRR/# )	r$   lstr;   plendingr&   siendingsizer1   
dojoinstemboolr   r(   r*   r   r+   r+      s0     !- !-	!-!-  !- 	!-r   c                s    Ve   V) pV  Uu. uF  qDRV V,           NK  	  pp\        V 4      p\        V4      pV'       d   \        W 4      pWWWh3# WWV3# u upi )a=  
given a list of singular words: lst

an ending to append to make the plural: plending

the number of characters to remove from the singular
before appending plending: siendingsize

a flag whether to create a joinstem: dojoinstem

return:
a list of pluralised words: si_list (called si because this is what you need to
look for to make the singular)

the pluralised words as a dict of sets sorted by word length: si_bysize
the singular words as a dict of sets sorted by word length: pl_bysize
if dojoinstem is True: a regular expression that matches any of the stems: stem
N)r@   r9   )	rB   rC   rD   rE   r6   Zsi_listZ	pl_bysizeZ	si_bysizeZstem	   &&&&     r   make_pl_si_listsrH      sl    0 $}478Cq,(**CG8sIwI*9229,, 9s   AZcorpuszcorpuses|corporaZopuszopuses|operaZgenusZgeneraZmythosZmythoiZpeniszpenises|penesZtestisZtestesZatlaszatlases|atlantesZyesZyesesZchildZchildrenZchilizchilis|chiliesZbrotherzbrothers|brethrenZinfinityzinfinities|infinityZloafZloavesZlorez
lores|loreZhoofzhoofs|hoovesZbeefzbeefs|beevesZthiefzthiefs|thievesZmoneyZmoniesZmongooseZ	mongoosesZoxZoxenZcowz	cows|kineZgraffitograffitiZoctopuszoctopuses|octopodesZgeniezgenies|geniiZganglionzganglions|gangliaZtrilbyZtrilbysZturfzturfs|turvesZnumenZnuminaZatmanZatmasZocciputzocciputs|occipitaZ
sabretoothZsabretoothsZ
sabertoothZsabertoothsZlowlifeZlowlifesZflatfootZ	flatfootsZ
tenderfootZtenderfootsZromanyZromaniesZjerryZjerriesZmaryZmariesZtalouseZtalousesZromZromaZcarmenZcarminaZRomanyZRomaniesZJerryZJerrysZMaryZMarysZRomZRomazprima donnazprima donnas|prime donner3   Zitisz.*idesF)rE   ataeinaair%   Z
aficionadoZaggroZalbinoZallegroZammoZAntananarivoZarchipelagoZ	armadilloZautoZavocadoZBamakoZBarquisimetoZbimboZbingoZBiroZboleroZBolzanoZbongoZBotoZburroZCairoZcantoZ
cappuccinoZcasinoZcelloZChicagoZChimangoZcilantroZcochitoZcocoZColomboZColoradoZcommandoZ
concertinoZcontangoZcredoZ	crescendoZcyanoZdemoZdittoZDracoZdynamoZembryoZ	EsperantoZespressoZeuroZfalsettoZFaroZfiascoZFilipinoZflamencoZfuriosoZgeneralissimoZGestapoZghettoZgigoloZgizmoZ
GreensboroZgringoZ	GuaiaberoZguanoZgumboZgyroZhairdoZhippoZIdahoZimpetigoZinfernoZinfoZ
intermezzoZ
intertrigoZIquicoZjumboZjuntoZKakapoZkiloZ	KinkimavoZKokakoZKosovoZLesothoZliberoZlibidoZlibrettoZlidoZLiloZlimboZlimoZlinenoZlingoZlinoZlivedoZlocoZlogoZlumbagoZmachoZmacroZmafiosoZmagnetoZ	magnificoZMajuroZMalaboZ	manifestoZMaputoZ	MaracaiboZmedicoZmemoZmetroZMexicoZmicroZMilanoZMonacoZmonoZ
MontenegroZMoroccoZMuqdishoZmyoZneutrinoZNingboZoctavoZoreganoZOrinocoZOrlandoZOsloZpantoZ
ParamariboZParduscoZpedaloZphotoZpimentoZpintoZplecoZPlutoZpogoZpoloZponchoz
Porto-NovoZPortoZproZpsychoZpuebloZquartoZQuitoZrepoZrhinoZrisottoZrococoZrondoZ
SacramentoZsaddoZsagoZsalvoZSantiagoZSapporoZSarajevoZ
scherzandoZscherzoZsiloZsiroccoZsombreroZstaccatoZsternoZstuccoZstyloZsumoZTaikoZtechnoZterrazzoZtestudoZtimpanoZtiroZtobaccoZTogoZTokyoZtoreroZTorinoZTorontoZtorsoZtremoloZtypoZtyroZufoZUNESCOZvaqueroZ
vermicelloZversoZvibratoZvioloncelloZVirgoZweirdoZWHOZWTOZYamoussoukrozyo-yozeroZZiboicesimzq
    ataman caiman cayman ceriman
    desman dolman farman harman hetman
    human leman ottoman shaman talisman
z
    Alabaman Bahaman Burman German
    Hiroshiman Liman Nakayaman Norman Oklahoman
    Panaman Roman Selman Sonaman Tacoman Yakiman
    Yokohaman Yuman
liceZbreechesZbritchesZpajamasZpyjamasZclippersZgallowsZhijinksZheadquartersZpliersZscissorsZherpesZpincersZshearsZproceedingsZtrousersZcantusZcoitusZnexusZcontretempsZcorpsZdebrisZsiemensZmumpsZdiabetesZ
jackanapesZseriesspeciesZ
subspeciesZrabiesZchassisZinningsZnewsZmewsZhaggisZoisZmeasles
rhinocerosZ	acropolisZaegisZaliasZasbestosZbathosZbiasZ
bronchitisZbursitisZcaddisZcannabisZcanvasZchaosZcosmosZdaisZ	digitalisZ	epidermisZethosZeyasZgasZglottisZhubrisZibisZlensZmantisZmarquisZ
metropolisZpathosZpelvisZpolisZ	sassafrasZtrellisssusesz	[A-Z].*esdoesZgeneralz1(?!major|lieutenant|brigadier|adjutant|.*star)\S+ZmartialZcourtZforceZpoundc              #  sR   "   T F  w  r\        VR V R2,           4      x  K  	  R# 5i)z(?=(?:-|\s+)r,   N)r.   )r5   Zkeyvalr?   r   r7   r7     s,      $:QhcGCM#a(()):Qs   %'r;   pl_sb_postfix_adj(z)(.*)z
    about above across after among around at athwart before behind
    below beneath beside besides between betwixt beyond but by
    during except for from in into near of off on onto out over
    since till to under until unto upon withz(.*?)((?:-|\s+)(?:z)(?:-|\s+))a(?:-|\s+)(.*)ZweZmyselfZ	ourselvesZyouZyourselfZ
yourselvesshetheyherself
themselveshehimselfititselfthemselfZmineZoursZyoursherstheirshisitsnomz0Dict[str, Dict[str, Union[str, Dict[str, str]]]]si_pronIZmeherthemhimaccc                   V ^8  d   QhRR/# r$   r'   r&   r   r(   r*   r   r+   r+     s      # r   c                s     \         V ,          V,          p Y2,          #   \         d    h i ; i  \         d    \        \        T4      u # i ; ir4   )rk   KeyError	TypeErrorr   r&   )Zthecasewordgendersing   &&& r   get_si_pronry     sS    w%|    Cs    / ,AAZamZareisZwasZwereZhaveZhasZdoZactZactsZblameZblamesZcanZmustZflyZfliescopyZcopiesZdrinkZdrinksZfightZfightsZfireZfiresZlikeZlikesZlookZlooksZmakeZmakesZreachZreachesZrunZrunsZsinkZsinksZsleepZsleepsZviewZviewsz^(z)((\s.*)?)$z0^((?:thought|saw|bent|will|might|cut))((\s.*)?)$anthisthatZsomeZtheseZthosez)$ZmyZourZyourZtheirz~
^(?! FJO | [HLMNS]Y.  | RY[EO] | SQU
  | ( F[LR]? | [HL] | MN? | N | RH? | S[CHKLMNPTVW]? | X(YL)?) [AEIOU])
[FHLMNRSX][A-Z]
z)^(y(b[lor]|cl[ea]|fere|gg|p[ios]|rou|tt))z^((?:unabomber|unanimous|US))z0^((?:euler|hour(?!i)|heir|honest|hono[ur]|mpeg))z^([aefhilmnorsx]-?th)z^([bcdgjkpqtuvwyz]-?th)thZstZndZrdZtiethfirstZsecondZthirdZfifthZeighthZninthZtwelfth)Ztyonetwothreefiveeightninetwelvez)\Z )allrP   herdnamespersonsancientZTrueZFalseNonez\$(\d+)z((\w+)\([^)]*\)*)z\A(\s*)(.+?)(\s*)\Zz^(?:z (?P<denominator>.+)( (per|a) .+)z\sz^(.*[^s])s$z	^(.*)'s?$z\A(\s*)(?:an?\s+)?(.+?)(\s*)\Zz^[aefhilmnorsx]$z^[bcdgjkpqtuvwyz]$z^[aefhilmnorsx][.-]z
^[a-z][.-]z
^[^aeiouy]z^e[uw]z^onc?e\bz
^onetime\bz^uni([^nmd]|mo)z^u[bcfghjkqrst][aeiou]z^ukrz^U[NK][AIEO]?z^[aeiou]z(\d)z(\d)(\d)z(\d)(\d)(\d)z(\d)(\d)(\d)(?=\D*\Z)z(\d)(\d)(?=\D*\Z)z(\d)(?=\D*\Z)z(\d)(\d{3}(?:,|\Z))z\Dz\s+,z, (\S+)\s+\Zz\s+zie$yzue$Zuz	([auy])e$z\g<1>zski$Zskiz[^b]i$z^(are|were)$Zbez^(had)$Zhavz^(hoe)$z([^e])e$zer$Zerz ([^aeiou][aeiouy]([bdgmnprst]))$z
\g<1>\g<2>z\dc                  sL    ] tR tRt$ R]R&   R]R&   R]R&   R]R&   R R	 ltR
tR# )Wordsi  r&   loweredz	List[str]split_r   lastc               rq   r$   r'   r   r   r(   r*   r   r+   ZWords.__annotate__  s     $ $ $r   c                	s    V P                  4       V n        V P                  4       V n        V P                  ^ ,          V n        V P                  R,          V n        R# )    N)lowerr   splitr   r   r   )selforig   &&r   __init__ZWords.__init__  s:    zz|jjl[[^
KKO	r   )r   r   r   r   N)r   r   r   r   __annotations__r   r   r   r   r   r   r     s!    LJ
I$ $r   r    String with at least 1 characterc                  s"    ] tR tRtR R ltRtR# )	_WordMetai  c               r:   )r$   instancer   r'   rF   r   r(   r*   r   r+   Z_WordMeta.__annotate__  s     	D 	Dc 	Dd 	Dr   c                	sN    \        V\        4      ;'       d    \        V4      ^8  #    )
isinstancer&   r>   )r   r   r   r   __instancecheck__Z_WordMeta.__instancecheck__  s     h,CCX!1CCr   r   N)r   r   r   r   r   r   r   r   r   r   r     s    	D 	Dr   r   c                  s    ] tR tRtRtRtR# )Wordi  r   r   N)r   r   r   r   __doc__r   r   r   r   r   r     s    .r   r   )Z	metaclassc                  s   ] tR tRtR R lt]R 4       t]P                  R 4       t]R R l4       t	]R R	 l4       t
]R
 R l4       t]R R l4       t]R R l4       tR R ltR R lt]R R l4       tR R ltR~R R lltR R ltR tR R lt]R  R! l4       tR" R# ltR$ R% lt]RR& R' ll4       t]RR( R) ll4       t]RR* R+ ll4       t]RR, R- ll4       t]R. R/ l4       t]R0 R1 l4       t]R2 R3 l4       t]R4 R5 l4       t ]R~R6 R7 ll4       t!R8 R9 lt"R: R; lt#R< R= lt$R> R? lt%RR@ RA llt&RRB RC llt'](RD 4       t)RE RF lt*]+RG 4       t,RRH RI llt-RRJ RK llt.RRL RM llt/R~RN RO llt0]RRP RQ ll4       t1]1t2]3RR3]4RS3]5RS3]6RS3]7RR3]8RS3]9RS3]:RR3];RR3]<RR3]=RR3]>RR3]?RR3]@RR3]ARR3]BRR3]CRR3]DRS3]ERS33tFRT RU ltG]RRV RW ll4       tH]RX RY l4       tI]RZ R[ l4       tJRR\ R] lltKRR^ R_ lltLRR` Ra lltMRb Rc ltNRd Re ltORf Rg ltPRh Ri ltQRj Rk ltRRl Rm ltSRn Ro ltTRp Rq ltURr Rs ltV]+Rt 4       tW](Ru 4       tX]+Rv 4       tY]+Rw 4       tZ]RRx Ry ll4       t[]+Rz 4       t\]RR{ R| ll4       t]R}t^R# )enginei  c               rq   r   r   r(   r*   r   r+   engine.__annotate__  s     
< 
<$ 
<r   c                	s    \         P                  4       V n        R V n        ^ V n        . V n        . V n        . V n        . V n        . V n	        RV n
        R V n        R # )Nneuter)def_classicalr{   classical_dictpersistent_count
mill_countpl_sb_user_definedpl_v_user_definedpl_adj_user_definedsi_sb_user_definedA_a_user_defined	thegender_engine__number_argsr   r-   r   r   Zengine.__init__  sY    +002/38:799; 8:68!7;r   c                	sX    \        \        \        \        3,          V P                  4      # r4   )r   r   r&   r   r   r-   r   _number_argsengine._number_args
  s    DcND$6$677r   c                	s    Wn         R # r4   )r   )r   rZ   r   r   r   r     s     r   c               $    V ^8  d   QhRRRRRR/# r$   singularOptional[Word]pluralr'   intr   r(   r*   r   r+   r     s!     	 	 	 	3 	r   c                s    V P                  V4       V P                  V4       V P                  P                  W34       V P                  P                  W!34       ^# )z-
Set the noun plural of singular to plural.

)checkpatcheckpatpluralr   extendr   r   r   r      &&&r   defnounZengine.defnoun  sO     	hF#&&'9:&&'9:r   c               s4    V ^8  d   QhRRRRRRRRRRRRRR	/# )
r$   s1r   p1s2p2s3p3r'   r   r   r(   r*   r   r+   r     sP        	
    
r   c                s   V P                  V4       V P                  V4       V P                  V4       V P                  V4       V P                  V4       V P                  V4       V P                  P                  WW4WV34       ^# )z
Set the verb plurals for s1, s2 and s3 to p1, p2 and p3 respectively.

Where 1, 2 and 3 represent the 1st, 2nd and 3rd person forms of the verb.

)r   r   r   r   )r   r   r   r   r   r   r      &&&&&&&r   defverbZengine.defverb  sp      	bbbBBB%%rrr&>?r   c               r   r   r   r(   r*   r   r+   r   8  s!      ~ ~ # r   c                s    V P                  V4       V P                  V4       V P                  P                  W34       ^# )z2
Set the adjective plural of singular to plural.

)r   r   r   r   r   r   r   defadjZengine.defadj7  s8     	hF#  ''(:;r   c               r:   r$   patternr   r'   r   r   r(   r*   r   r+   r   C  s      N s r   c                b    V P                  V4       V P                  P                  VR34       ^# )zC
Define the indefinite article as 'a' for words matching pattern.

rN   r   r   r   r   r   r   r   defaZengine.defaB  s+     	g$$gs^4r   c               r:   r   r   r(   r*   r   r+   r   M  s      ^  r   c                r   )zD
Define the indefinite article as 'an' for words matching pattern.

r|   r   r   r   r   defanZengine.defanL  s+     	g$$gt_5r   c               r:   r$   r   r   r'   r   r   r(   r*   r   r+   r   V  s     	? 	? 	?4 	?r   c                s    Vf   R#  \         P                  ! VR4       R#   \         P                   d   p\        T4      ThRp?ii ; i)z%
check for errors in a regex pattern
Nr   )rematchZerrorr    )r   r   err   && r   r   Zengine.checkpatV  s@     ?	?HHWb!xx 	?,W53>	?s   ! AAAc               r:   r   r   r(   r*   r   r+   r   a  s      n  r   c                s    R# )z-
check for errors in a regex replace pattern
Nr   r   r   r   r   Zengine.checkpatplurala  s     	r   c               r/   )r$   ru   r   wordlistzSequence[Optional[Word]]r'   Optional[str]r   r(   r*   r   r+   r   h  s"     
 
T 
-E 
- 
r   c           
     	sn   \        \        V4      ^,
          RR4       F  p\        P                  ! RW#,           R2V\        P                  4      pV'       g   K=  W#^,           ,          f    R# \
        P                  R\        \        W#^,           ,          4      4      pVP                  V4      u # 	  R# )r$   Z^Z$Nz\\1)
ranger>   r   search
IGNORECASEDOLLAR_DIGITSsubr   r   Zexpand)r   ru   r   rO   mopl   &&&   r   ud_matchZengine.ud_matchg  s    s8}q("b1Aa}A.bmmDBrE?*"&&DxA7 yy}$ 2 r   c               rq   r   r   r(   r*   r   r+   r   t  s      0  0T  0r   c                sN   V'       g   \         P                  4       V n        R# RV9   dC   VR,          '       d   \         P                  4       V n        M\        P                  4       V n        VP	                  4        F$  w  r#V\
        9   d   W0P                  V&   K   \        h	  R# )a[  
turn classical mode on and off for various categories

turn on all classical modes:
classical()
classical(all=True)

turn on or off specific claassical modes:
e.g.
classical(herd=True)
classical(names=False)

By default all classical modes are off except names.

unknown value in args or key in kwargs raises
exception: UnknownClasicalModeError

Nr   )all_classicalr{   r   no_classicalitemsr   r   )r   Zkwargskvs   &,  r   	classicalZengine.classicalt  s{    & "/"4"4"6DF?e}}&3&8&8&:#&2&7&7&9#LLNDAM!)*##A&//	 #r   Nc               r   )r$   countr1   showr'   r&   r   r(   r*   r   r+   r     s$      "1>	r   c                s    Ve,    \        V4      V n        Te	   T'       d   \	        T4      #  R# RV n        R#   \         d   p\        ThRp?ii ; i)zl
Set the number to be used in other method calls.

Returns count.

Set show to False to return '' instead.

Nr   )r   r   
ValueErrorr   r&   )r   r   r   r   rx   r   numZ
engine.num  s_     0(+E
% 5z! "&  %)D!  0&C/0s   9 AAAc               r:   )r$   rv   r&   r'   r   r   r(   r*   r   r+   r     s     ! !S !T !r   c                s4    V\         9   d	   Wn        R# \        h)aK  
set the gender for the singular of plural pronouns

can be one of:
'neuter'                ('they' -> 'it')
'feminine'              ('they' -> 'she')
'masculine'             ('they' -> 'he')
'gender-neutral'        ('they' -> 'they')
'feminine or masculine' ('they' -> 'she or he')
'masculine or feminine' ('they' -> 'he or she')
N)singular_pronoun_gendersr   r"   )r   rv   r   r   rv   Zengine.gender  s     --#N  r   c                s   \        V\        P                  4      '       d   VP                  # \        V\        P                  4      '       d   VP
                  # \        V\        P                  4      '       d+   VP                   Uu. uF  q P                  V4      NK  	  up# \        V\        P                  4      '       d4   \        VP                   Uu. uF  q P                  V4      NK  	  up4      # \        V\        P                  4      '       d   VP                  # \        RVP                   R24      hu upi u upi )z%
Return the value of the ast object.
zname 'z' is not defined)r   astZNumnZStrr%   r   Zelts_get_value_from_astr   ZtupleZNameConstantvalueZ	NameErrorZid)r   ZobjrL   r   r   r   Zengine._get_value_from_ast  s     c377##55LSWW%%55LSXX&&9<BA,,Q/BBSYY''sxxHx!2215xHII S--..99
 &(89:: CHs   D;E c               r/   )r$   r   r	   methods_dictzDict[str, Callable]r'   r&   r   r(   r*   r   r+   r     s$     ? ??':?	?r   c                s   VP                  4       w  r4WB9  d   V# \        P                  ! V4      pVP                  ^ ,          P                  P
                   Uu. uF  pV P                  V4      NK  	  ppVP                  ^ ,          P                  P                   Uu/ uF)  pVP                  V P                  VP                  4      bK+  	  p	pW$,          ! V/ V	B # u upi u upi )z4
Return the string to be substituted for the match.
)	Zgroupsr   ZparseZbodyr   Zargsr   ZkeywordsZarg)
r   r   r   Zmatched_textZf_nameZa_treerN   Z	args_listZkwZkwargs_lists
   &&&       r   _string_to_substituteZengine._string_to_substitute  s      "yy{
 % <(
 [[^))..
. $$Q'. 	 
 kk!n**33
3 FFD,,RXX663 	 
 #Y>+>>

s   C/C#c               r:   )r$   textr   r'   r&   r   r(   r*   r   r+   r     s     # #D #S #r   c                s  a a S P                   pRS P                  RS P                  RS P                  RS P                  RS P
                  RS P                  RS P                  RS P                  R	S P                  R
S P                  RS P                  RS P                  /o\        P                  VV 3R lV4      pVS n         V# )z
Perform inflections in a string.

e.g. inflect('The plural of cat is plural(cat)') returns
'The plural of cat is cats'

can use plural, plural_noun, plural_verb, plural_adj,
singular_noun, a, an, no, ordinal, number_to_words,
and prespart

r   
plural_adjplural_nounplural_verbsingular_nounrN   r|   noordinalnumber_to_wordspresent_participler   c                s(   < SP                  V S4      # r4   )r   )r   r   r   s   &r   <lambda>Z engine.inflect.<locals>.<lambda>	  s    t11"lCr   )r   r   r   r   r   r   rN   r   r   r   r   r   FUNCTION_CALLr   )r   r   Zsave_persistent_countZoutputr   s   f&  @r   inflectZengine.inflect  s     !% 5 5 dkk$//4++4++T//$&&$''t||t33 $"9"9488-
  ""CT
 !6r   c               r#   )r$   r   r&   r'   r   r(   r*   r   r+   r   	  s          3  r   c                	sJ   \        V4      pR V9   d   VP                  R 4      p\        V^ ,          P                  R4      4      \        V^,          P                  R4      4      8X  d:   VP                  R 4      V P                  R,          ,          P                  R4      pMkVP                  R4      p\	        V4       F9  w  rVR V9   g   K  VP                  R 4      V P                  R,          ,          WE&   K;  	  MVP                  R4      p\	        VP                  R4      4       Fi  w  rVVR8X  d   K  VP                  4       V8X  d   WE,          P                  4       WE&   WfP                  4       8X  g   KQ  WE,          P                  4       WE&   Kk  	  RP                  V4      # )r3    r   rl   )r&   r   r>   r   Z	enumerateZ
capitalizeupperr8   )r   r   Z	inflectedZword_optionsresultindexru      &&&    r   postprocessZengine.postprocess	  sI   	N	)$??3/L<?((-.#l1o6K6KC6P2QQ"-d.A.A%.HIOOPST #-#,V#4KEd{(,

38K8KE8R(S $5 __S)F %TZZ_5KEs{
  D( & 8 8 :zz|# & 3 3 5 6 xxr   c               r:   )r$   r   r&   r'   zTuple[str, str, str]r   r(   r*   r   r+   r   9	  s      3 +? r   c                	s    \         P                  V4      pV'       d3   VP                  ^4      VP                  ^4      VP                  ^4      3# R# )r   )r   r   r   )PARTITION_WORDr   group)r   r   r   r   r   partition_wordZengine.partition_word9	  s@    ""4(88A;RXXa[88r   c               r/   r$   r   r   r   zOptional[Union[str, int, Any]]r'   r&   r   r(   r*   r   r+   r   A	  s#     & &4 &(F &RU &r   c                s    V P                  V4      w  r4pV'       g   V# T P                  TV P                  WB4      ;'       g+    V P                  WB4      ;'       g    V P	                  WB4      4      pV V V 2# )z
Return the plural of text.

If count supplied, then return text if count is one of:
    1, a, an, one, each, every, this, that

otherwise return the plural.

Whitespace at the start and end is preserved.

)r
  r  _pl_special_adjective_pl_special_verb_plnounr   r   r   preru   postr   r  r   r   Zengine.plural@	  s     --d34K!!&&t3 ) )$$T1) )||D(	
 vhtf%%r   c               r/   r  r   r(   r*   r   r+   r   Y	  $     & &&!?&	&r   c                s    V P                  V4      w  r4pV'       g   V# V P                  W@P                  WB4      4      pV V V 2# )z
Return the plural of text, where text is a noun.

If count supplied, then return text if count is one of:
    1, a, an, one, each, every, this, that

otherwise return the plural.

Whitespace at the start and end is preserved.

)r
  r  r  r  r  r   r   Zengine.plural_nounX	  sL     --d34K!!$T(ABvhtf%%r   c               r/   r  r   r(   r*   r   r+   r   n	  s$     & &&!?&	&r   c                s    V P                  V4      w  r4pV'       g   V# T P                  TV P                  WB4      ;'       g    V P                  WB4      4      pV V V 2# )z
Return the plural of text, where text is a verb.

If count supplied, then return text if count is one of:
    1, a, an, one, each, every, this, that

otherwise return the plural.

Whitespace at the start and end is preserved.

)r
  r  r  _pl_general_verbr  r  r   r   Zengine.plural_verbm	  si     --d34K!!!!$.TT$2G2G2T
 vhtf%%r   c               r/   r  r   r(   r*   r   r+   r   	  r  r   c                s    V P                  V4      w  r4pV'       g   V# T P                  Y@P                  WB4      ;'       g    T4      pV V V 2# )z
Return the plural of text, where text is an adjective.

If count supplied, then return text if count is one of:
    1, a, an, one, each, every, this, that

otherwise return the plural.

Whitespace at the start and end is preserved.

)r
  r  r  r  r  r   r   Zengine.plural_adj	  sW     --d34K!!$(B(B4(O(W(WSWXvhtf%%r   c               r   r$   word1r   word2r'   Union[str, bool]r   r(   r*   r   r+   r   	  s"     2 2T 2$ 23C 2r   c                s   a aa S P                   S P                  S P                  3pV VV3R lV 4       p\        \	        RV4      R4      # )a   
compare word1 and word2 for equality regardless of plurality

return values:
eq - the strings are equal
p:s - word1 is the plural of word2
s:p - word2 is the plural of word1
p:p - word1 and word2 are two different plural forms of the one word
False - otherwise

>>> compare = engine().compare
>>> compare("egg", "eggs")
's:p'
>>> compare('egg', 'egg')
'eq'

Words should not be empty.

>>> compare('egg', '')
Traceback (most recent call last):
...
typeguard.TypeCheckError:...is not an instance of inflect.Word
c              3  sJ   <"   T F  pSP                  SSV4      x  K  	  R # 5ir4   )_plequal)r5   Znormr   r  r  s   & r   r7   Z!engine.compare.<locals>.<genexpr>	  s!     G4==t44s    #NF)r   r   r   nextZfilter)r   r  r  ZnormsZresultss   fff  r   compareZengine.compare	  s?    2   $"2"2DOOCGGF4)511r   c               r   r  r   r(   r*   r   r+   r   	  "     = =4 = =9I =r   c                :    V P                  WV P                  4      # )a2  
compare word1 and word2 for equality regardless of plurality
word1 and word2 are to be treated as nouns

return values:
eq - the strings are equal
p:s - word1 is the plural of word2
s:p - word2 is the plural of word1
p:p - word1 and word2 are two different plural forms of the one word
False - otherwise

)r  r   r   r  r  r   r   compare_nounsZengine.compare_nouns	       }}U4+;+;<<r   c               r   r  r   r(   r*   r   r+   r   	  r  r   c                r  )a2  
compare word1 and word2 for equality regardless of plurality
word1 and word2 are to be treated as verbs

return values:
eq - the strings are equal
p:s - word1 is the plural of word2
s:p - word2 is the plural of word1
p:p - word1 and word2 are two different plural forms of the one word
False - otherwise

)r  r   r  r   r   compare_verbsZengine.compare_verbs	  r  r   c               r   r  r   r(   r*   r   r+   r   	  s"     < <$ <t <8H <r   c                r  )a7  
compare word1 and word2 for equality regardless of plurality
word1 and word2 are to be treated as adjectives

return values:
eq - the strings are equal
p:s - word1 is the plural of word2
s:p - word2 is the plural of word1
p:p - word1 and word2 are two different plural forms of the one word
False - otherwise

)r  r   r  r   r   compare_adjsZengine.compare_adjs	  s     }}U4??;;r   c               rA   )	r$   r   r   r   Optional[Union[int, str, Any]]rv   r   r'   zUnion[str, Literal[False]]r   r(   r*   r   r+   r   	  s2     ' '' .' 	'
 
$'r   c                s    V P                  V4      w  rEpV'       g   V# V P                  WRVR7      pVRJd   V P                  WW4      pV V V 2# R# )a	  
Return the singular of text, where text is a plural noun.

If count supplied, then return the singular if count is one of:
    1, a, an, one, each, every, this, that or if count is None

otherwise return text unchanged.

Whitespace at the start and end is preserved.

>>> p = engine()
>>> p.singular_noun('horses')
'horse'
>>> p.singular_noun('knights')
'knight'

Returns False when a singular noun is passed.

>>> p.singular_noun('horse')
False
>>> p.singular_noun('knight')
False
>>> p.singular_noun('soldier')
False

r   rv   F)r
  _sinounr  )	r   r   r   rv   r  ru   r  rw   r   rG   r   r   Zengine.singular_noun	  sa    B --d34K||Df|=u%%d1FU6(4&))r   c               r   )r$   r  r&   r  r'   r  r   r(   r*   r   r+   r   
  s"      c # 6F r   c                	sb   V P                   P                  4       p\        P                  4       V n         W8X  d   R # W! V4      8X  d   R# V! V4      V8X  d   R# \        P                  4       V n         W! V4      8X  d   R# V! V4      V8X  d   R# VP                  4       V n         W0P                  8X  g   W0P
                  8X  d3   V P                  W4      '       d   R# V P                  W!4      '       d   R# W0P                  8X  g   W0P                  8X  d   V P                  W4      '       d   R# R# )Zeqzp:szs:pzp:pF)	r   r{   r   r   r   r   _pl_check_plurals_Nr   _pl_check_plurals_adj)r   r  r  r   Zclassvals   &&&& r   r  Zengine._plequal
  s    &&++-+002>BuIe9*//1BuIe9&mmo&6&6 6''55''55oo 5))%77r   c          
     ,    V ^8  d   QhRRRRRRRRRR/# )r$   pairr&   stemsend1end2r'   rF   r   r(   r*   r   r+   r   +
  s/     . .C . .3 .c .d .r   c                	sd    R V RV RV RV RV R2p\        \        P                  ! WQ4      4      # )r\   z)(z\|\1r3   r,   )rF   r   r   )r   r(  r)  r*  r+  r      &&&&& r   _pl_reg_pluralsZengine._pl_reg_plurals+
  s<    ugRvT$qd4&BBIIg,--r   c               r   r$   r  r&   r  r'   rF   r   r(   r*   r   r+   r   /
  s!     
 
 
S 
T 
r   c                	sV  a a \         R R3\        RR3\        RR3\        RR3\        RR	3\
        R
R3\        RR	3\        RR3\        RR3\        RR3\        RR3\        RR3RRRR3p\        \        W34      pRP                  R V 4       4      oS\        P!                  4       9   ;'       g{    S\"        P!                  4       9   ;'       g\    S\$        P!                  4       9   ;'       g=    \&        ;QJ d     VV 3R lV 4       F  '       g   K   R# 	  R# ! VV 3R lV 4       4      # )ZasrK   rz   rJ   r%   rL   ZensrM   ZumsrN   usesrO   ZonsosZexesrQ   ZixesrR   r3   c              3  s8   "   T F  qP                   x  K  	  R # 5ir4   )r   )r5   ru      & r   r7   -engine._pl_check_plurals_N.<locals>.<genexpr>D
  s     4ed		es   c              3  sP   <"   T F  w  rpSP                  SWV4      x  K  	  R # 5ir4   )r-  )r5   r)  r*  r+  r(  r   s   &   r   r7   r2  J
  s/      )5%E $$T5==)5s   #&TF)z.*eaur%   x)z.*ieur%   r3  )z.*trixesces)z.{2,}[yia]nr4  ges)pl_sb_C_a_atapl_sb_C_is_idespl_sb_C_a_aepl_sb_C_en_inapl_sb_C_um_apl_sb_C_us_ipl_sb_C_on_apl_sb_C_o_i_stemspl_sb_C_ex_icespl_sb_C_ix_ices	pl_sb_C_i
pl_sb_C_immapr   r8   pl_sb_irregular_svaluespl_sb_irregularpl_sb_irregular_capsZany)r   r  r  Zstem_endingsr2   r(  s   f&&  @r   r%  Zengine._pl_check_plurals_N/
  sJ   D%(dF+3$UE*5#&63'5#&c*ff-ff-S!d##)!
& EE>*xx4e44 %,,..  --// +2244  s )5ss		
 		
  )5 		
r   c               r   r.  r   r(   r*   r   r+   r   P
  s!     
 
3 
s 
t 
r   c                	sV   VP                  R4      '       d   VRVP                  R4       MRpVP                  R4      '       d   VRVP                  R4       MRp\        V4      ;'       d>    \        V4      ;'       d+    V P                  W44      ;'       g    V P                  WC4      # )'s'Nr   )rH  rI  )endswithZrfindrF   r%  )r   r  r  Zword1aZword2as   &&&  r   r&  Zengine._pl_check_plurals_adjP
  s    .3nn[.I.I)S)*r.3nn[.I.I)S)*r L  V  ((8 < <++F;	
r   c               r:   )r$   r   Optional[Union[str, int]]r'   zUnion[str, int]r   r(   r*   r   r+   r   ]
  s      8 O r   c                	s    Vf   V P                   e   V P                   pVeX   \        V4      \        9   g<   V P                  R,          '       d'   \        V4      P	                  4       \
        9   d   ^pV# ^pV# RpV# )NrP   r   )r   r&   pl_count_oner   r   pl_count_zero)r   r   r   r   	get_countZengine.get_count]
  s    =T22>))E Z</++F33J,,.-?   	    Er   c               $    V ^8  d   QhRRRRRR/# r$   ru   r&   r   rK  r'   r   r(   r*   r   r+   r   r
  s)     _ __ 9_	_r   c                	s2   V P                  V4      pV^8X  d   V# V P                  WP                  4      pVe   V# VR8X  d   V# \        V4      pVP                  P                  4       \        9   d:   \        VP                  4      ^8  d   V P                  V^R7      ;'       g    T# V# V\        9   d   V# \        P                  4        F  w  rEVP                  V) R V9   g   K  Vu # 	  V P                  R,          '       d&   VP                  P                  4       \        9   d   V# \         P#                  V4      pV'       dK   VP%                  ^4      R8w  d5   V P'                  VP%                  ^4      ^4       VP%                  ^4       2# RVP                  9   g   RVP                  9   d   \(        P#                  V4      pV'       d   VP%                  ^4      R8w  dk   VP%                  ^4      R8w  dU   V P'                  VP%                  ^4      ^4       VP%                  ^4       V P'                  VP%                  ^4      4       2# \        VP                  4      ^8  d   V P                  V^R7      pVe   V# \*        P#                  VP                  4      pV'       d5   \        VP%                  R4      4      pV P'                  VRV 4       WR  2# \        VP                  4      ^8  d\   VP                  R@,          R8X  dD   R	P-                  V P'                  VP.                  4      .VP                  R
,          ,           4      # \0        P2                  ! \4        4      ;_uu_ 4        V P7                  VP                  \8        P:                  ! V P&                  ^R7      R4      uuRRR4       #   + '       g   i     M; i\<        P                  4        F  w  rETP                  T) R T9   g   K  \>        P                  4        F  w  rTP                  RT	 T
9   g   K  TP                  PA                  4       TP                  RT	 TP                  T) R .8X  g   KY  TP                  RT)  \B        TP                  T) R ,          ,           u u # 	  K  	   \D        TP                  ,          #   \F         d     Mi ; i \B        TP                  ,          #   \F         d     Mi ; iTP                  \H        9   d5   \        TP                  4      pTRT)   \H        TP                  ,           2# TP                  P                  4       pT\J        9   d!   \        T4      pTRT)   \J        T,           2# TP                  PA                  R4      pR	P-                  TR@R 4      P                  4       \L        9   dS   \        R	P-                  TR@R 4      4      pTRT)   \L        R	P-                  TR@R 4      P                  4       ,           2# TP                  RAR R8X  d	   TRRB  R2# TP                  RCR R8X  d'   T P                  R,          '       d   T R2# TRRD  R2# TP                  RAR R8X  dp   \N        P                  4        F!  w  rETP                  T) R T9   g   K  T R2u # 	  \P        P                  4        F  w  rEY) R T9   g   K  T R2u # 	  TRRA  R2# TP                  RER R8X  d	   TRRE  R2# TP                  RER R8X  dE   \R        PU                  \        T4      4      pT'       d   TP                  T9   d	   TRRE  R2# T R2# TP                  RER R8X  d	   TRRE  R2# TP                  RER R8X  d	   TRRE  R2# TP                  RDR R8X  d	   TRRD  R2# TP                  RDR R8X  d	   TRRE  R2# TP                  R 8X  d   R!# TP                  RDR R"8X  d   T# TP                  RDR R#8X  d	   TRR@  R$2# TP                  RAR RF9   d	   TRR@  R%2# R&\V        RR3R'\X        R@R(3R'\Z        R@R(3R)\\        R@R$3R\^        R@R*3R+\`        R@R$3R$\b        RR,33 F_  w  rppTP                  RB,          T8X  g   K!  TP                  4        F*  w  rETP                  T) R T9   g   K  TRT T,           u u # 	  Ka  	  T P                  R-,          '       Ed   TP                  RDR R.8X  d	   TRRB  R/2# TP                  RAR RG9   d   T R'2# TP                  RAR RH9   d   \        T4      ^8  d	   TRRB  R02# R+\d        R@R13R'\f        R@R(3R'\h        R@R(3R)\j        R@R$3R\l        R@R*3R\n        RR3R$\p        RR,3R$\r        RR23R\t        RBR33R4\v        RBR*3R+\x        R@R$33 F_  w  rppTP                  RB,          T8X  g   K!  TP                  4        F*  w  rETP                  T) R T9   g   K  TRT T,           u u # 	  Ka  	  \z        RR*3\|        RR533 FE  w  pppTP                  4        F*  w  rETP                  T) R T9   g   K  TRT T,           u u # 	  KG  	  T\~        9   d   T R%2# \        P                  4        F!  w  rETP                  T) R T9   g   K  T R%2u # 	  TP                  R@R R%8X  d)   T^ ,          T^ ,          P                  4       8X  d   T R%2# TP                  RB,          R68X  dS   \        P                  4        F!  w  rETP                  T) R T9   g   K  T R%2u # 	  TP                  R@RB R68w  d   T R72# TP                  R@R R88X  d:   \        P                  4        F!  w  rETP                  T) R T9   g   K  T R2u # 	  TP                  R@R RI9   g   TP                  RB,          R'8X  d   T R%2# TP                  RAR RJ9   d	   TRRB  R92# TP                  RAR R:8X  d   TP                  RDRA R;8w  d	   TRRB  R92# TP                  RDR RK9   d	   TRR@  R92# TP                  RAR R<8X  d	   TRRB  R92# TP                  RB,          R=8X  d   TP                  R@RB R>9   g   \        T4      ^8X  d   T R2# T P                  R?,          '       dA   TP                  RB,          R=8X  d)   T^ ,          T^ ,          P                  4       8X  d   T R2# TRRB  R2# T\        9   d   T R2# \        P                  4        F!  w  rETP                  T) R T9   g   K  T R2u # 	  TP                  R@R RL9   d   T R2# TP                  RB,          R48X  d   T R%2# T R2# )Mr   Nr   r   r   z a z-a-ZdenominatorZdegreer  r   NN-ZquyiesZpersonr   r%   ZoplemanmenmousemicelouserS   goosegeesetoothteethfootfeetZtacoZtacosdiedicecepsZzoonrN   rX   Zhr3  rQ   mrO   r   rL   r   Ztrixr5  r6  rM   ZtaZdesorR   ZzZzesZzevesZeafdZarfr   aeiour   r   r   )ZcisZsisZxis)ZeauZieu)ZynxZinxZanx)ZchZshZzzrV   )ZelfZalfZolf)ZnifeZlifeZwife)ZaoZeoZioZooZuo)FrN  r   r   r   r   r   pl_sb_uninflected_completer>   r   _handle_long_compoundspl_sb_uninflected_capspl_sb_uninflected_bysizer   r   r   pl_sb_uninflected_herdPL_SB_POSTFIX_ADJ_STEMS_REr   r	  r  PL_SB_PREP_DUAL_COMPOUND_REDENOMINATORr8   r   
contextlibsuppressr   _handle_prepositional_phrase	functoolspartialpl_pron_acc_keys_bysizepl_prep_bysizer   pl_pron_accpl_pron_nomrs   rG  rF  pl_sb_irregular_compoundpl_sb_U_man_mans_bysizepl_sb_U_man_mans_caps_bysizepl_sb_U_louse_lice_bysizegetpl_sb_U_ch_chs_bysizepl_sb_U_ex_ices_bysizepl_sb_U_ix_ices_bysizepl_sb_U_um_a_bysizepl_sb_U_us_i_bysizepl_sb_U_on_a_bysizepl_sb_U_a_ae_bysizepl_sb_C_en_ina_bysizepl_sb_C_ex_ices_bysizepl_sb_C_ix_ices_bysizepl_sb_C_um_a_bysizepl_sb_C_us_i_bysizepl_sb_C_us_us_bysizepl_sb_C_a_ae_bysizepl_sb_C_a_ata_bysizepl_sb_C_is_ides_bysizepl_sb_C_o_i_bysizepl_sb_C_on_a_bysizepl_sb_C_i_bysizepl_sb_C_im_bysizepl_sb_singular_s_completepl_sb_singular_s_bysizer  pl_sb_z_zes_bysizepl_sb_ze_zes_bysizepl_sb_U_o_os_completepl_sb_U_o_os_bysize)r   ru   r   r   r   r   r   Zhandled_wordsr  pkpvllenZlowered_last
dash_splitlastletrf  Znumendr  s   &&&               r   r  Zengine._plnounr
  sm    u% A:K d$;$;<L 2:KT{99?? ::4;;1$224q2AIITIK))K,224DA||QBC A% 5 v&&499??+<@V+VK (..t4"((1+#ll288A;23BHHQK=AADLL ET\\$9,33D9BbhhqkR'BHHQK2,=||BHHQK34xx{m||BHHQK013 t{{q  77A7FM($$ -/0Ell4<01$v,@@ t{{q T[[_%@88T\\$**56RHII  ,,44!!$,,a8 -,,, ,113DA||QBC A%,224FB||CR(B.<<--/ LL"- LL!-4 
 $(<<!#4{4<<QRPRPSCT7U#UU 5 4	t||,, 			t||,, 		
 99,,tyy>D6TEl^$8$C#DEEyy(?*|$D6TEl^OL$A#BCC\\'',
HHZ_%,,.2JJBC)D $<.+SXXjo-F,M,M,OPQS
 <<%3Bi[$$<<(""9--qz!s)D)) <<%/557<<$)"V1:% 8 5::<9>"V1:% = 3Bi[$$<<'3Bi[%%<<')--c$i8AT\\Q&s)D))V1:<<'3Bi[&&<<'3Bi[&&<<&3Bi[%%<<&3Bi[&&<<5  <<&K<<&3Bi[?"<< 553Bi[## 's3("f5("f5%r3/%r3/%r3/%tS1)
$G ||B7*GGIDA||QBC(A-#GV}t33 &)
  y))||BC F*s)C((||BC N2qz!||BC $99c$i!ms)C(( +R7,b&9,b&9)2s3)2s3*D"5)45*D$7,b%8("c2)2s3-(FD <<#w. !	<<,1#'=4#77 !*-& "4-"D$/$64 GGIDA||QBC(A-#GV}t33 &	$ 44V2;+113DA||QBC A%r{" 4 <<$aDGMMO)CV2;<<s"*002<<$)"V2;& 3 ||Br"c)s|#<<$+113<<$)"V1:% 4 << 88DLL<LPS<SV2; << 553Bi[$$<<%$,,r"*=*D3Bi[$$<< 883Bi[$$<<%3Bi[$$ <<s"||Br"g-Taqz!""7++<<#s*tAw$q'--//I"V1:%3Bi[$$ 00V1:'--/DA||QBC A%qz! 0 << >>V1:<<s"V2; qzs0   8=O  O	+S SSS+ +S98S9c                s   VP                  V4      p\        V4      ^8  d   \        R4      hV P                  V\        4      pV! WE^,
          ,          4      ;'       g    WE^,
          ,          pRP                  VRV^,
           VP                  WdV,          R.4      .,           4      RP                  WE^,           R 4      ,           # )a  
Given a word or phrase possibly separated by sep, parse out
the prepositional phrase and apply the transform to the word
preceding the prepositional phrase.

Raise ValueError if the pivot is not found or if at least two
separators are not found.

>>> engine._handle_prepositional_phrase("man-of-war", str.upper, '-')
'MAN-of-war'
>>> engine._handle_prepositional_phrase("man of war", str.upper, ' ')
'MAN of war'
z2Cannot handle words with fewer than two separatorsr  Nr   )r   r>   r   _find_pivotpl_prep_list_dar8   )clsZphraseZ	transformsepZpartsZpivotZtransformeds   &&&&   r   rv  Z#engine._handle_prepositional_phrase  s     S!u:>QRR7ai 01EEU195Exx+EAI#((Kur+J"K!LL
HHUAI=)*+ 	+r   c               r/   )r$   ru   r   r   r   r'   zUnion[str, None]r   r(   r*   r   r+   r     s"     % %5 % %AQ %r   c                s   aa S^8X  d   V P                   MV P                  oVV3R l\        VP                  ^4       4       p\	        VR4      # )a  
Handles the plural and singular for compound `Words` that
have three or more words, based on the given count.

>>> engine()._handle_long_compounds(Words("pair of scissors"), 2)
'pairs of scissors'
>>> engine()._handle_long_compounds(Words("men beyond hills"), 1)
'man beyond hills'
c           
   3  s   <"   T FH  w  pw  r#pV\         9   g   K  R P                  \        P                  ! VS! VS4      V.V4      4      x  KJ  	  R# 5ir  N)r  r8   	itertoolsZchain)r5   ZleaderZcandZprepZtrailerr   
inflections   &    r   r7   Z0engine._handle_long_compounds.<locals>.<genexpr>  s`      

 2S-g&CHHe,d3  2Ss
   A8AN)r$  r  r   r   r  )r   ru   r   Z	solutionsr  s   &&f @r   rm  Zengine._handle_long_compounds  sG     &+aZT\\T\\


 2C4;;PQ1R

	 It$$r   c                	s   a a VV 3R  l\        ^\        S 4      ^,
          4       4       p \        V4      #   \         d    \	        R4      Rhi ; i)c              3  sH   <"   T F  pSV,          S9   g   K  Vx  K  	  R # 5ir4   r   )r5   r  
candidatesr2   s   & r   r7   Z%engine._find_pivot.<locals>.<genexpr>  s"      
7e5<:;UEE7s   "
"zNo pivot foundN)r   r>   r  ZStopIterationr   )r2   r  Zpivotss   ff r   r  Zengine._find_pivot  sM    
$QE
Q7
	9< 	9-.D8	9s	   
6 Ac               r/   r$   ru   r&   r   rK  r'   r  r   r(   r*   r   r+   r     s)     P PP 9P	Pr   c                	s   V P                   R ,          '       d%   \        V4      P                  4       \        9   d   R# V P	                  V4      pV^8X  d   V# V P                  WP                  4      pVe   V#  \        V4      pTP                  \        9   d2   \        TP                  ,           T\        TP                  4      R  2# TP                  \        9   d   T# TP                  P                  R4      '       dN   TP                  RR
 \        9   d6   \        TP                  RR
 ,           RT\        TP                  4      R  2# TP                  P                  R4      '       d   T# \        P                  T4      pT'       d   R# \         P                  T4      '       d   R# TP"                  R8X  d   R# TP"                  RR R9   g   TP"                  R
R R8X  d   TRR # TP"                  R
R R8X  d'   \        T4      ^8  d   TP"                  RR
 R,           # TP$                  P                  4       \&        9   g1   TP"                  RR \(        9   g   TP"                  RR \*        9   d   TRR # TP"                  P                  R	4      '       d    \        T4      ^8  d   TP"                  RR # \,        P                  T4      pT'       d   TP/                  ^4      # R#   \         d     R# i ; i)rP   FNzn'tZquizzesZquizr4  rT  r   oesrh  rj  )chessheszzesZssesr   rk  r   )r   r&   r   rM  rN  r   r   r   
IndexErrorr   plverb_irregular_presr>   plverb_irregular_non_presrJ  PLVERB_SPECIAL_S_REr   
WHITESPACEr   r   pl_v_oes_oepl_v_oes_oe_endings_size4pl_v_oes_oe_endings_size5ENDS_WITH_Sr	  )r   ru   r   r   r2   r   r   r   r  Zengine._pl_special_verb  s    v&&3u:+;+;+=+Nu%A:K d$:$:;L	$KE ;;//+EKK89%EKK@P@R:S9TUU ;;33K ;;&&5;;s+;?T+T(Sb)9:;3U[[)+,-/
 ;;&&K !''-T""==I%
 MM"#"BB}}RS!U*":==&3u:>=="%++ JJ+-}}RS!%>>}}RS!%>>":==!!%((SZ!^=="%%&88A; y  		s   :K1 1L ?L c               rO  rP  r   r(   r*   r   r+   r   !  s$       9	r   c                	s,   V P                  V4      pV^8X  d   V# \        P                  V4      pV'       d>   \        VP	                  ^4      P                  4       ,           VP	                  ^4       2# \        P                  V4      pV'       d   V# V# r   )rN  plverb_ambiguous_pres_keysr   plverb_ambiguous_presr	  r   plverb_ambiguous_non_pres)r   ru   r   r   rx   r   r  Zengine._pl_general_verb!  s     u%A:K (..t4+BHHQK,=,=,?@A"((1+OO '--d3K r   c               r/   r  r   r(   r*   r   r+   r   9  s$     " "" 9"	"r   c                	sD   V P                  V4      pV^8X  d   V# V P                  WP                  4      pVe   V# \        P	                  V4      pV'       d+   \
        VP                  ^4      P                  4       ,          # \        P	                  V4      pV'       d+   \        VP                  ^4      P                  4       ,          # \        P	                  V4      pV'       d:   V P                  VP                  ^4      4      pVR,          R8X  d   RMRpV RV 2# R# )r   r%   r   rI  Fr   )rN  r   r   pl_adj_special_keysr   pl_adj_specialr	  r   pl_adj_poss_keyspl_adj_possENDS_WITH_APOSTROPHE_Sr   )r   ru   r   r   r   r   Z
trailing_sr  r   r  Zengine._pl_special_adjective9  s     u%A:K d$<$<=L !''-!"((1+"3"3"566 $$T*rxx{00233#**40!!"((1+.B!"v}#JT:,'' r   c               rA   )	r$   ru   r&   r   rK  rv   r   r'   r  r   r(   r*   r   r+   r   ^  s8     C CC )C 	C
 
Cr   c                	sr   V P                  V4      pV^8X  d   V#  Vf   V P                  pMV\        9  d   \        h V P                  WP                  4      pVe   V# VR8X  d   V# V\        9   d   VRRD # \        V4      pVP                  P                  4       \        9   d:   \        VP                  4      ^8  d   V P                  V^R7      ;'       g    T# V# V\         9   d   V# \"        P%                  4        F  w  rxVP&                  V) R V9   g   K  Vu # 	  V P(                  R,          '       d&   VP                  P                  4       \*        9   d   V# VP                  P                  4       \,        9   d   V P(                  R,          '       d   V# R# \.        P1                  V4      p	V	'       dM   V	P3                  ^4      R8w  d7   V P5                  V	P3                  ^4      ^VR7       V	P3                  ^4       2# \6        P8                  ! \:        4      ;_uu_ 4        V P=                  VP&                  \>        P@                  ! V P4                  ^VR7      R	4      uuRRR4       #   \        \
        3 d   p\        ThRp?ii ; i  + '       g   i     M; i\6        P8                  ! \:        4      ;_uu_ 4        T P=                  TP&                  \>        P@                  ! T P4                  ^TR7      R
4      uuRRR4       #   + '       g   i     M; i\B        P%                  4        F  w  rxTP&                  T) R T9   g   K  \D        P%                  4        F  w  rTP&                  RT
 T9   g   K  TP&                  PG                  4       TP&                  RT
 TP&                  T) R .8X  g   KY  TP&                  RT)  \I        RTP&                  T) R T4      ,           u u # 	  K  	   \I        RTP&                  T4      #   \J         d     Mi ; i \I        RTP&                  T4      #   \J         d     Mi ; iTP                  \L        9   d5   \        TP                  4      pTRT)   \L        TP                  ,           2# TP                  P                  4       \N        9   dQ   \        TP                  P                  4       4      pTRT)   \N        TP                  P                  4       ,           2# TP&                  PG                  R
4      pR	PQ                  TRER 4      P                  4       \R        9   d_   \        R	PQ                  TRER 4      4      pRPU                  TRT)  \R        R	PQ                  TRER 4      P                  4       ,          4      # TP&                  RFR R8X  d   TRRG R,           # TP&                  RHR R8X  d   TRRD # TP&                  RIR R8X  d   TRRJ R,           # TP&                  RJR R8X  dh   \V        P%                  4        F!  w  rxTP&                  T) R T9   g   K  TRRD u # 	  \X        P%                  4        F  w  rxY) R T9   g   K  TRRD u # 	  TP&                  RGR R8X  d   TRRG R,           # TP&                  RJR R8X  d   TRRJ R,           # TP&                  RJR R8X  dD   \Z        P]                  \        T4      4      pT'       d   TP&                  T9   d   TRRJ R,           # TP&                  RFR R8X  d   TRRF R,           # TP&                  RFR R8X  d   TRRF R,           # TP&                  RJR R8X  d   TRRJ R,           # TP&                  R 8X  d   R!# TP&                  RJR R"8X  d   T# TP&                  RGR R#8X  d   TRRD R$,           # R%\^        RDR3R%\`        RJR&3R%\b        RJR'3R(\d        RDR)3R*\f        RDR+3R(\h        RDR$3R,\j        RDR33 F_  w  rppTP&                  RD,          T8X  g   K!  TP%                  4        F*  w  rxTP&                  T) R T9   g   K  TRT T,           u u # 	  Ka  	  T P(                  R,          '       EdD   TP&                  RIR R-8X  d   TRRG R.,           # TP&                  RJR RK9   d   TRRD # TP&                  RFR RL9   d   \        T4      ^8  d   TRRG R.,           # R(\l        RGR/3R%\n        RJR&3R%\p        RJR'3R(\r        RDR)3R*\t        RDR+3R%\v        RR3R,\x        RDR3R(\z        RER3R%\|        RGR%3R*\~        RDR03R(\        RDR$3R1\        RER3R*\        RDR33 F_  w  rppTP&                  RD,          T8X  g   K!  TP%                  4        F*  w  rxTP&                  T) R T9   g   K  TRT T,           u u # 	  Ka  	  TP&                  RIR R28X  g/   T\        9   g$   TP                  P                  4       \        9   d   TRRD # T\        9   g$   TP                  P                  4       \        9   d   TRRD # TP&                  RFR R38X  g/   T\        9   g$   TP                  P                  4       \        9   d   TRRD # T\        9   g$   TP                  P                  4       \        9   d   TRRD # TP                  P                  4       \        9   d   TRRE # \        P%                  4        F!  w  rxTP&                  T) R T9   g   K  TRRE u # 	  TP&                  RJR R48X  d)   T^ ,          T^ ,          P                  4       8X  d   TRRE # TP                  P                  4       \        9   d   TRRE # TP                  P                  4       \        9   d   TRRE # TP&                  RJR R58X  d   TRRG # T\        9   g$   TP                  P                  4       \        9   d   TRRD # TP&                  RJR RM9   d   TRRE # TP                  P                  4       \        9   d   TRRD # TP&                  RGR R68X  d   TRRE # T\        9   g$   TP                  P                  4       \        9   d   TRRD # TP&                  RGR R78X  d   TP&                  RFRG RN9   d   TRRG R8,           # TP&                  RFRG R98X  d   TRIRF R:8w  d   TRRG R8,           # TP&                  RFRG RO9   d   TRRG R;,           # TP&                  RFRG R<8X  d   TRRG R8,           # TP&                  RER R=8X  d   \        TP&                  4      ^8  d   TP&                  RG,          R>9   d   TRRD # T P(                  R?,          '       d=   TP&                  RER R=8X  d)   T^ ,          T^ ,          P                  4       8X  d   TRRD # TP&                  RGR R@8X  d   TRRG R,           # TP&                  RER RA8X  d{   TP                  P                  4       \        9   d   TRRD # \        P%                  4        F!  w  rxTP&                  T) R T9   g   K  TRRD u # 	  TP&                  RGR RP9   d   TRRD # TP&                  RGR RB8X  d   TRRE # T\        9   d   TRRE RC,           # TP&                  RD,          R%8X  d   TRRD # R# )Qr$   Nr   rQ  r   r   F)rv   r#  r  rS  rp   rj   z{}{}Zquiesr   r   ZpeopleZrsonZmansrV  rU  rX  rW  rS   rY  r[  rZ  r]  r\  r_  r^  ra  r`  rb  ZzoaZonr%   ZexZixrN   ZumrO   rW   rL   Ztricesr3  Zenrd  rc  ZhousesshoesZesesr  r4  re  ZfZearf  ZfeZarZysrg  r   rT  r0  r  rz   r   r   rk  rh  iri  rj  )ZeauxZieux)ZyngesZingesZanges)r  r  )ZelZalZol)ZniZliZwi)ZaosZeosZiosZoosZuos)XrN  r   r   r"   rt   r  r   r   si_sb_ois_oi_caser   r   r   rl  r>   r   rm  rn  ro  r   r   r   rp  pl_sb_C_us_usrq  r   r	  r$  rt  ru  r   rv  rw  rx  si_pron_acc_keys_bysizerz  r   ry   rs   si_sb_irregular_capssi_sb_irregularr8   si_sb_irregular_compoundr)   si_sb_U_man_mans_bysizesi_sb_U_man_mans_caps_bysizesi_sb_U_louse_lice_bysizer  si_sb_U_ch_chs_bysizesi_sb_U_ex_ices_bysizesi_sb_U_ix_ices_bysizesi_sb_U_um_a_bysizesi_sb_U_us_i_bysizesi_sb_U_on_a_bysizesi_sb_U_a_ae_bysizesi_sb_C_en_ina_bysizesi_sb_C_ex_ices_bysizesi_sb_C_ix_ices_bysizesi_sb_C_um_a_bysizesi_sb_C_us_i_bysizer  si_sb_C_a_ae_bysizesi_sb_C_a_ata_bysizesi_sb_C_is_ides_bysizesi_sb_C_o_i_bysizesi_sb_C_on_a_bysizesi_sb_C_im_bysizesi_sb_C_i_bysizesi_sb_uses_use_casesi_sb_uses_usesi_sb_ies_ie_casesi_sb_ies_iesi_sb_oes_oe_casesi_sb_oes_oesi_sb_sses_sse_casesi_sb_sses_ssesi_sb_singular_s_completesi_sb_singular_s_bysizer  si_sb_z_zessi_sb_zzes_zzsi_sb_ches_che_casesi_sb_ches_chesi_sb_xes_xesi_sb_ves_ve_casesi_sb_ves_vesi_sb_U_o_os_completesi_sb_U_o_os_bysizesi_sb_es_is)r   ru   r   rv   r   r   r2   r   r   r   r  r  r  r  r  rf  Zunass_numendr  Zclass_numends   &&&&               r   r$  Zengine._sinoun^  s    u% A:K	*~77$$ 8 d$;$;<L 2:K$$9d::!;;5<< A%2252BJJdJK))K,224DA}}aRS!Q& 5 v&&5::+;+;+=AW+WK::...y994DuD (..t4"((1+#ll288A;&lAB288A;-PP  ,,44!!$,,aG -,W :& 	* c)	*V -,   ,,44!!$,,aG -,,, ,113DA}}aRS!Q&,224FB}}Sb)R/ ==..0!MM#2.!MM1"#.5 
 $)==1"#5 %u}}aRS'969 $  5 4	uemmV<< 			uemmV<< 		
 ::--uzz?D6TEl^$8$D#EFF::0uzz'')*D6TEl^OEJJ4D4D4F$G#HII]]((-
HHZ_%,,.2JJBC)D ==Vte(#((:bc?*C)J)J)LM 
 ==(9s?"==*9==)9v%% =='/557==!%*9$ 8 5::<9>9$ = ==&9u$$=='9w&&==')--c$i8AU]]a'CRy7**==(9w&&==(9w&&=='9v%%==F" =='K==&9t## 'R0("d3("d3%r40%r40%r40%r2./
*Gd }}R G+GGIDA}}aRS)Q.#M\2T99 &/
  y))}}RS!X-CRy3&}}RS!%55CRy }}RS!%@@SYQR]CRy3& +R6,b$7,b$7)2t4)2t4*D"5)2r2*B3,b#6("c2)2t4'R0&B/3.L$ ==$/ !	 ==!-2#'#6#== !*!3. MM"#(***zz!^39 $$

(8(8(:l(J9
 MM"#')((zz!\19 &&%***:*:*<*N9::!::9+113DA}}aRS!Q&CRy  4 =='DGtAw}},F9::,9::.9=='9&&%***:*:*<*N9==!119::-9==&9 $$

(8(8(:l(J9==&}}R#'99CRy3&}}R#t+Rs0BCRy3&}}R#'99CRy4''}}R#t+CRy3& ==%5==!A%%--*;w*FCRy ""7++==%-$q'T!W]]_2L9$==&9s?" ==%zz!%::CRy +113==!%*9$ 4 }}RS!%HHCRy ==&9 ;9t## ==#9 sX   I5 I5 ,>J5JJJJ%	
>LL#	>P P#"P#'P> >QQc               r/   )r$   r   r   r   r"  r'   r&   r   r(   r*   r   r+   r     s"      d #A # r   c                s    \         P                  V4      pV'       dW   VP                  ^4      pV'       g   V# VP                  ^4      pVP                  ^4      pV P                  WB4      pV V V 2# R# )z
Return the appropriate indefinite article followed by text.

The indefinite article is either 'a' or 'an'.

If count is not one, then return count followed by text
instead of 'a' or 'an'.

Whitespace at the start and end is preserved.

r   )INDEFINITE_ARTICLE_TESTr   r	  _indef_article)r   r   r   r   ru   r  r  r  s   &&&     r   rN   Zengine.a  sl     %++D188A;D((1+C88A;D((5FU6(4&))r   rN   r|   c               rO  )r$   ru   r&   r   zUnion[int, str, Any]r'   r   r(   r*   r   r+   r     s"     ' '3 '/C ' 'r   c                	s   a V P                  V4      pV^8w  d   V RS 2# V P                  SV P                  4      pVe   V RS 2# V3R lV P                   4       pRS 2p\	        WV4      # )r   r  c              3  sh   <"   T F'  w  rVP                  S4      '       g   K  V R S 2x  K)  	  R# 5ir  )r   )r5   regexenZarticleru   s   &  r   r7   Z(engine._indef_article.<locals>.<genexpr>  s4      
$= ~~d#  wiq$=s   22za )rN  r   r   _indef_article_casesr  )r   ru   r   Zmycountr   ZmatchesZfallbacks   &f&    r   r  Zengine._indef_article  s    ..'a<WAdV$$ dD$9$9:WAdV$$
$($=$=
 v;G&&r   c               r/   )r$   r   r   r   zOptional[Union[int, str]]r'   r&   r   r(   r*   r   r+   r     s'     !@ !@t !@$= !@ !@r   c                st   Vf   V P                   e   V P                   pVf   ^ p\        P                  V4      pV'       d5   VP                  ^4      pVP                  ^4      pVP                  ^4      pMRpRpRp\	        V4      P                  4       \        9   d   RpV V RV P                  WR4       V 2# )aP  
If count is 0, no, zero or nil, return 'no' followed by the plural
of text.

If count is one of:
    1, a, an, one, each, every, this, that
    return count followed by text.

Otherwise return count follow by the plural of text.

In the return value count is always followed by a space.

Whitespace at the start and end is preserved.

r   r   r  )r   r  r   r	  r&   r   rM  r   )r   r   r   r   r  ru   r  r  r   r   Z	engine.no  s    " =T22>))E=E""4(((1+C88A;D88A;DCDDu:.EugQt{{478??r   c               r:   )r$   ru   r   r'   r&   r   r(   r*   r   r+   r     s      t  r   c                s    V P                  V^4      pTp\         F'  w  rEVP                  WR4      w  r6V'       g   K"  V R2u # 	  V R2# )zQ
Return the present participle for word.

word is the 3rd person singular verb.

Zing)r   PRESENT_PARTICIPLE_REPLACEMENTSsubn)r   ru   ZplvZansr  Zreplr      &&     r   r   Zengine.present_participle  sV     tQ'<MG||D.HCsc{" = c{r   c               r:   )r$   r   Union[Number, Word]r'   r&   r   r(   r*   r   r+   r   0  s     & &. &3 &r   c                s   \         P                  \        V4      4      '       d   \        V\        \
        34      '       d   \        V4      V8X  d   \        V4      pM8R\        V4      9   d    \        \        V4      R,          4      pM\        V4      p \        V^d,          ,          pV V 2# V P                  V4      #   \         d    \        \        T4      RR 4      p LPi ; i  \         d    \        T^
,          ,          p L`i ; i)zl
Return the ordinal of num.

>>> ordinal = engine().ordinal
>>> ordinal(1)
'1st'
>>> ordinal('one')
'first'
.Nr   )
DIGITr   r&   r   floatr   r   nthrs   _sub_ord)r   r   r   r     &&  r   r   Zengine.ordinal/  s     ;;s3x  #s|,,SSH#c(?/  C-
 CA#1s7| U4&>!==%% & /C"./  #1r6{#s$   .C C) "C&%C&)D
Dc               r:   )r$   indr   r'   r&   r   r(   r*   r   r+   r   P  s      # c r   c                	s^    V\        \        4      ^,
          8  d   \        h\        V,          # r   )r>   millr   )r   r  r   r   millfnZengine.millfnP  s"    TQ$$Cyr   c               r   )r$   unitsr   mindexr'   r&   r   r(   r*   r   r+   r   U  s!     5 5C 5 5S 5r   c                	sB    \         V,           V P                  V4       2# r4   )unitr   )r   r  r  r   r   unitfnZengine.unitfnU  s    u+t{{62344r   c               rq   rr   r   r(   r*   r   r+   r   X  s     
. 
.c 
.r   c                	s    V^8w  dK   \         V,          pV'       d   V'       d   RpMRp\        V,          pV P                  V4      pV V V V 2# \        V,           \        V,           2# )r   rS  r   )tenr  r   teenr  )r   tensr  r  Z	tens_partZhyphenZ	unit_partZ	mill_parts   &&&&    r   tenfnZengine.tenfnX  sf    19D	IUIF+I[I;??u+tF|n--r   c          
     r'  )r$   hundredsr   r  r  r  r'   r&   r   r(   r*   r   r+   r   d  s/     
 
s 
# 
c 
3 
3 
r   c                	s<   V'       d_   V'       g	   V'       d   R V P                   R,           R 2MRp\        V,           RV V P                  W#4       V P                  V4       R2# V'       g	   V'       d&   V P                  W#4       V P                  V4       R2# R# )r  andwordr   z hundred, )r   r  r  r   )r   r	  r  r  r  r
  r,  r   hundfnZengine.hundfnd  s    =AU$++I67q9PRG >"(7)::d*+DKK,?+@D 5jj-.t{{6/B.C2FFr   c               r:   r$   r   r	   r'   r&   r   r(   r*   r   r+   r   p  s     5 5E 5c 5r   c                	s    \        VP                  ^4      4      pV^8X  d   RV P                  R,           R2# V'       d   \        V,           R2# RV P                  R,           R2# )r   r  r   r  rP   )r   r	  r   r  r   r   r  r   r   	group1subZengine.group1subp  se    BHHQK A:t((/0335k]"%%t((0144r   c               r:   r  r   r(   r*   r   r+   r   y  s     5 5U 5s 5r   c                	s    \        VP                  ^4      4      pV'       d   \        V,           R2# RV P                  R,           R2# r   r  r  rP   )r   r	  r  r   r  r   r   
group1bsubZengine.group1bsuby  sC    BHHQK 5k]"%%t((0144r   c               r:   r  r   r(   r*   r   r+   r     s     M ME Mc Mr   c                	sR   \        VP                  ^4      4      p\        VP                  ^4      4      pV'       d   V P                  W#4       R2# V'       d&   RV P                  R,           R\        V,           R2# RV P                  R,           RV P                  R,           R2# r  )r   r	  r  r   r  )r   r   r  r  r  r   	group2subZengine.group2sub  s    288A;BHHQK jj-.b11t((014;-rBB4$$V,-Qt/@/@/H.ILLr   c               r:   r  r   r(   r*   r   r+   r     s     ( (E (c (r   c                	s6   \        VP                  ^4      4      p\        VP                  ^4      4      p\        VP                  ^4      4      pV^8X  d   RV P                  R,           2pM5V'       d   \        \        V,          4      pMRV P                  R,           2pV'       d   V P                  W44      pMWV'       d&   RV P                  R,           R\        V,           2pM*RV P                  R,           RV P                  R,           2pV RV R2# )r   r  r   rP   r  )r   r	  r   r&   r  r  )r   r   r	  r  r  ZhunwordZtenwordr  r   	group3subZengine.group3sub  s    rxx{#288A;BHHQK q=$++E234G$x.)G$++F345Gjj-G$++F34Ad5k]CG$++F34Ad6G6G6O5PQG!G9B''r   c               r:   r  r   r(   r*   r   r+   r     s      % C r   c           	     	s   V P                  \        VP                  ^4      4      \        VP                  ^4      4      \        VP                  ^4      4      V P                  4      pV ;P                  ^,          un        V# r   )r  r   r	  r   )r   r   Zretr   r   hundsubZengine.hundsub  sY    kkc"((1+.BHHQK0@$//
 	1
r   c               r:   r  r   r(   r*   r   r+   r     s     V V V3 Vr   c                	s    V P                  \        VP                  ^4      4      \        VP                  ^4      4      V P                  4       R2# r   r  )r  r   r	  r   r   r   r   r   tensubZengine.tensub  s<    **S!-s288A;/?QRRTUUr   c               r:   r  r   r(   r*   r   r+   r     s     E E% EC Er   c                	sp    V P                  \        VP                  ^4      4      V P                  4       R2# r  )r  r   r	  r   r  r   r   unitsubZengine.unitsub  s,    ++c"((1+.@ADDr   c               rO  )r$   r   r&   r	  r   r'   r   r(   r*   r   r+   r     s!      # c c r   c                	s   V^8X  d#   \         P                  V P                  V4      pV# V^8X  dD   \        P                  V P                  V4      p\         P                  V P
                  V^4      pV# V^8X  de   \        P                  V P                  V4      p\        P                  V P                  V^4      p\         P                  V P                  V^4      pV# \        V4      ^ 8X  d   V P                  R,          pV# \        V4      ^8X  d   V P                  R,          pV# VP                  4       P                  R4      p^ V n        \        P                  V4      pV'       d9   \        P                  V P                  V^4      p\        P                  V4      pK@  \        P                  V P                   V^4      p\"        P                  V P$                  V^4      pV# )r   rP   r   0)DIGIT_GROUPr   r  
TWO_DIGITSr  r  THREE_DIGITSr  r   r   lstripr   THREE_DIGITS_WORDr   r  TWO_DIGITS_WORDr  ONE_DIGIT_WORDr  )r   r   r	  r   rx   r   enwordZengine.enword  s    A://$..#6C, 
+ aZ..5C//$//3:C& 
% aZ""4>>37C..a8C//$..#q9C 
 X]##F+C 
 X]##E*C 
 **,%%c*CDO"))#.B'++DLL#qA&--c2!%%dkk3:C $$T\\3:C
r   c                	sT    \         P                  R  V 4      pVRW8H  ,          ,           # )c                s:    \         V P                  ^4      ,          # r   )r   r	  )r   r-   r   r   Z!engine._sub_ord.<locals>.<lambda>  s    WU[[^-Dr   r   )ordinal_suffr   )rZ   Znewr1  r   r  Zengine._sub_ord  s'    DcJTSZ(((r   c                	sv    V'       d   V^ 8w  d   RM^pVP                  RV4      pMV.pV P                  V4      # )r   r  r   )r   _remove_last_blank)r  r   decimalr	  Z	max_splitchunkss   &&&&  r   
_chunk_numZengine._chunk_num  s:    #qjaIYYsI.FUF%%f--r   c                s>    V R,          R8H  pV'       d   V RR MT pW!3# )z~
Remove the last item from chunks if it's a blank string.

Return the resultant chunks and whether the last item was removed.
r   Nr   r   )r%  Zremovedr  r?   r   r#  Zengine._remove_last_blank  s)     *" 'Vr   c                	sX    R RRR/P                  V P                  4       ^ ,          R4      # )Z+ZplusrS  Zminusr   )r  r  )r   r-   r   	_get_signZengine._get_sign  s(    VS'*..szz|ACCr   c               s@    V ^8  d   QhRRRRRRRRR	R
RR
RR
RRRRRR/
# )r$   r   r  wantlistrF   r	  r   commazUnion[Falsish, str]r
  r&   rP   r   r$  	thresholdr1   r'   zUnion[str, List[str]]r   r(   r*   r   r+   r     sz     p  p  p  p  	p 
 #p  p  p  p  %p  !p  
p r   c
                s  a aaa RSRVRV/S n         \        V4      pV	en   \        V4      V	8  d^   VP                  R^4      p
V'       d.   \        P                  RV
^ ,          4      w  V
^ &   pV^ 8X  g   K4    V
^ ,           RV
^,           2# S^ 8  g   S^8  d   \        hS P                  V4      pV\        9   d   TpVRR \        9   pV'       d   VRR pS P                  WS4      w  rV^ ,          R8H  pV'       * oVVVV 3R lp\        VVVR 4      VVR% . pS^ 8w  d   V^ ,          P                  V R	24      pV'       d$   V'       d   S P                  VR,          4      VR&   VR
,           F7  pVP                  V4       VP                  VP                  V R	24      4       K9  	  V'       d   VP                  V4       V'       d   V.\        V4      ,          V,           # V'       d   V R	2MRpS'       d   RP!                  V4      M RP!                  S P#                  VW4      4      pVV,           #   \         d    \        T
^ ,          4      u # i ; i)a  
Return a number in words.

group = 1, 2 or 3 to group numbers before turning into words
comma: define comma

andword:
    word for 'and'. Can be set to ''.
    e.g. "one hundred and one" vs "one hundred one"

zero: word for '0'
one: word for '1'
decimal: word for decimal point
threshold: numbers above threshold not turned into words

parameters not remembered from last call. Departure from Perl version.
r
  rP   r   Nr  z\1,\2r   c                s  < \         P                  R V 4      p V R 8X  d   Rp S^ 8X  d   S'       g   SP                  V ^4      p MSP                  V S4      p V RR R8X  d   V RR p \        P                  RV 4      p S^ 8X  d#   S'       d   \        P                  RS R2V 4      p \
        P                  RV 4      p V P                  4       p S'       d   RoV # )r   r  Nr  ,r  z \1r   )	NON_DIGITr   r!  WHITESPACES_COMMA
COMMA_WORDWHITESPACESZstrip)chunkr
  r   r	  r   s   &r   _handle_chunkZ-engine.number_to_words.<locals>._handle_chunk   s     MM"e,E{z%E1-E51RSzT!cr
%))#u5Eze"7)4'8%@OOC/EKKMELr   r  rR  r  r   r   )r   r&   r  r   FOUR_DIGIT_COMMAr  r  r   r'  nth_suffr&  rC  r  Zappendr   rF   r8   _render)r   r   r(  r	  r)  r
  rP   r   r$  r*  Zspnumr   ZsignZmyordr%  Z
finalpointZ	loopstartr1  Z	numchunksr0  ZsignoutZvaloutr   s   f&&f&f&&&&            @r   r   Zengine.number_to_words  s:   < 'ucJ#h  U3Z)%;IIc1%E 0 5 5ha Iq16%(1U1XJ// 19	((~~c"(?CBCH$cr(C!__S5A1IO	!*]	 	4 !yz0BCyz	A:q	5'4IY MM)B-8IbMBZZEW%U[[E7!56   W%6DJ&22 $TF!*"  IIi i@A 	
 O  %58}$%s   9H; ;IIc              #  	s   "   V P                  ^ 4      pVx  VRJ ;'       g    VP                  V4      '       * pV  F  pWQ8X  d   RpMV'       d   Vx  RV 2x  K!  	  R# 5i)r   NFr  )ZpoprJ  )r%  r$  r)  Z
first_itemr   Zncr   r   r4  Zengine._renderU  s^     ZZ]
4CCz':':7'C#CB}bT(N s   AA!A!c               s4    V ^8  d   QhRRRRRRRRRR	R
RRR	/# )r$   r2   zOptional[Sequence[Word]]r  r   
sep_spacedrF   	final_sepconjr&   conj_spacedr'   r   r(   r*   r   r+   r   b  sY     0@ 0@'0@ 0@ 	0@
 !0@ 0@ 0@ 
0@r   c                s~   V'       g   R# \        V4      ^8X  d
   V^ ,          # V'       d   VR8X  d   RpMRV R2p\        V4      ^8X  d   V^ ,           V V^,           2# Vf   RRP                  V4      9   d   RpMRpVf   TpV V 2pV'       d
   VR,          pVP                  V^ R 4       V VR,           2# )aB  
Join words into a list.

e.g. join(['ant', 'bee', 'fly']) returns 'ant, bee, and fly'

options:
conj: replacement for 'and'
sep: separator. default ',', unless ',' is in the list then ';'
final_sep: final separator. default ',', unless ',' is in the list then ';'
conj_spaced: boolean. Should conj have spaces around it

r   r  r+  Z;r   )r>   r8   )r   r2   r  r5  r6  r7  r8  r   r   r8   Zengine.joina  s    , u:?8Orz4&{u:?AhZveAhZ00;bggen$I k$(	3JC((52;'(E"I;??r   )r   Z__number_argsr   r   r   r   r   r   r   r   r   )NNr4   r   )r   )Fr   r+  andrP   r   ZpointN)NTNr9  T)_r   r   r   r   r   Zpropertyr   Zsetterr   r   r   r   r   r   r   r   r   r   r   rv   r   r   r  r  r
  r   r   r   r   r  r  r   r!  r   r  r-  r%  r&  rN  r  Zclassmethodrv  rm  Zstaticmethodr  r  r  r  r$  rN   r|   A_ordinal_aA_ordinal_anA_explicit_an
SPECIAL_AN	SPECIAL_AA_abbrevSPECIAL_ABBREV_ANSPECIAL_ABBREV_A
CONSONANTSARTICLE_SPECIAL_EUARTICLE_SPECIAL_ONCEARTICLE_SPECIAL_ONETIMEARTICLE_SPECIAL_UNITARTICLE_SPECIAL_UBAARTICLE_SPECIAL_UKRA_explicit_aSPECIAL_CAPITALSVOWELSA_y_consr  r  r   r   r   r   r  r  r  r  r  r  r  r  r  r  r!  r  r&  r#  r'  r   r4  r8   r   r   r   r   r   r     s   
< 8 8 ! ! 	 	  0      	? 
 
 0D,!";,?@ # #N < & &. & &( & &. & &( 2 28 = = = = < < ' 'R4.
B
*_B	 + +2%0 9 9Pd0"JCN
  . 
B 
c	t		T	C	4	D!	3	S	S!	s#	 #&	s#	c"	c"	s	3	 
49>'0 !@ !@J  $ & &@
5
.
55M($VE: ) ) . .   D D p  p d 	 	 0@ 0@r   r   )r   N)T)ZquartzZtopaz)Zsnooze)Z	ephemerisZirisZclitorisZ	chrysalisZ
epididymisr   )ZanathemaZbemaZ	carcinomaZcharismaZdiplomaZdogmaZdramaZedemaZenemaZenigmaZlemmaZlymphomaZmagmaZmelismaZmiasmaZoedemaZsarcomaZschemaZsomaZstigmaZstomaZtraumaZgummaZpragma)ZalumnaZalgaZvertebraZpersonaZvita)ZamoebaZantennaZformulaZ	hyperbolaZmedusaZnebulaZparabolaZabscissaZhydraZnovaZlacunaZauroraZumbraZfloraZfauna)ZstamenZforamenZlumen)	Z	bacteriumZagendumZdesideratumZerratumZstratumZdatumZovumZextremumZcandelabrum)ZmaximumZminimumZmomentumZoptimumZquantumZcraniumZ
curriculumZdictumZphylumZaquariumZ
compendiumZemporiumZencomiumZ	gymnasiumZ
honorariumZinterregnumZlustrumZ
memorandumZ
millenniumZrostrumZspectrumZspeculumZstadiumZ	trapeziumZ	ultimatumZmediumZvacuumZvelumZ
consortiumZ	arboretum)	ZalumnusZalveolusZbacillusZbronchusZlocusZnucleusZstimulusZmeniscusZsarcophagus)ZfocusZradiusZgeniusZincubusZsuccubusZnimbusZfungusZ	nucleolusZstylusZtorusZ	umbilicusZuterusZhippopotamusZcactus)ZstatusZ	apparatusZ
prospectusZsinusZhiatusZimpetusZplexus)	Z	criterionZ
perihelionZaphelionZ
phenomenonZprolegomenonZnoumenonZorganonZ	asyndetonZ
hyperbaton)Zoxymoron)ZsoloZsopranoZbassoZaltoZ	contraltoZtempoZpianoZvirtuosor   >   ZISOZNCOZNGOZadoZotoZNATO)ZczechZeunuchZstomach)ZcodexZmurexZsilex)ZradixZhelix)ZvortexZvertexZcortexZlatexZpontifexZapexr  Zsimplex)Zappendix)ZafritZafreetZefreet)ZgoyZseraphZcherub)Z	booklouseZ
grapelouserY  Z	woodlouse)Z
wildebeestZswineZelandZbisonZbuffaloZcattleZelkrU   ZzucchiniZcaribouZdaceZgrousezguinea fowlzguinea-fowlZhaddockZhakeZhalibutZherringmackerelZpickerelZpikeZroeZseedZshadZsnipeZtealZturbotz
water fowlz
water-fowl)ZtunaZsalmonrM  ZtroutZbreamzsea-basszsea bassZcarpZcodZflounderZwhitingZmooserI   ZdjinnZsamuriZ	offspringZpenceZquidZhertz)Z
PortugueseZAmoyeseZBorgheseZCongoeseZFaroeseZ
FoochoweseZGeneveseZGenoeseZ
GilberteseZHottentoteseZ
KiplingeseZKongoeseZLuccheseZMalteseZ
NankingeseZNiaseseZ	PekingeseZPiedmonteseZ	PistoieseZ
SarawakeseZShaveseZ
VermonteseZ
WenchoweseZYengeese)ZbutterZcashZ	furnitureZinformationZfishZdeerZsheepZneseZreseZleseZmeseZpoxZcraft)ZBolshoisZHanois)ZBetelgeusesZDusesZMeusesZ	SyracusesZ	Toulouses)ZabusesZ	applausesZblousesZcarousesZcausesZchartreusesZclausesZcontusesZdousesZexcusesZfusesZgrousesZhypotenusesZ	masseusesZ
menopausesZmisusesZmusesZoverusesZpausesZperusesZprofusesZreclusesZreusesZrusesZsousesZspousesZsuffusesZ
transfusesr/  )ZAddiesZAggiesZAlliesZAmiesZAngiesZAnniesZ	AnnmariesZArchiesZArtiesZAussiesZBarbiesZBarriesZBasiesZBenniesZBerniesZBertiesZBessiesZBettiesZBilliesZBlondiesZBobbiesZBonniesZBowiesZBrandiesZBriesZBrowniesZCalliesZ	CarnegiesZCarriesZCassiesZCharliesZCheriesZ	ChristiesZConniesZCuriesZDanniesZDebbiesZDixiesZDolliesZDonniesZ	DrambuiesZEddiesZEffiesZElliesZElsiesZEriesZErniesZEssiesZEugeniesZFanniesZFlossiesZFrankiesZFreddiesZ
GillespiesZGoldiesZGraciesZGuthriesZHalliesZHattiesZHettiesZHolliesZJackiesZJamiesZJaniesZJanniesZJeaniesZJeanniesZJenniesZJessiesZJimmiesZJodiesZJohniesZJohnniesZJosiesZJuliesZKalgoorliesZKathiesZKatiesZKelliesZKewpiesZKristiesZLaramiesZLassiesZLauriesZLesliesZLessiesZLilliesZLizziesZLonniesZLoriesZLorriesZLottiesZLouiesZ
MackenziesZMaggiesZMaisiesZMamiesZMarciesZMargiesZMariesZ	MarjoriesZMattiesZ	McKenziesZMelaniesZMickiesZMilliesZMinniesZMolliesZMountiesZNanniesZNataliesZNelliesZNettiesZOlliesZOzziesZPearliesZPottawatomiesZReggiesZRichiesZRickiesZRobbiesZRonniesZRosaliesZ
RosemariesZRosiesZRoxiesZRushdiesZRuthiesZSadiesZSalliesZSammiesZScottiesZ	SelassiesZSherriesZSophiesZStaciesZ	StefaniesZ
StephaniesZSteviesZSusiesZSylviesZTammiesZTerriesZTessiesZTommiesZTraciesZTrekkiesZValariesZValeriesZ	ValkyriesZVickiesZVirgiesZWilliesZWinniesZWyliesZYorkies)GZaeriesZbaggiesZbeliesZbiggiesZbirdiesZbogiesZbonniesZboogiesZbookiesZbourgeoisiesZbrowniesZbudgiesZcaddiesZcaloriesZcamaraderiesZcockamamiesZcolliesZcookiesZcooliesZcootiesZcoteriesZcrappiesZcuriesZcutesiesZdogiesZeyriesZflooziesZfootsiesZfreebiesZgeniesZgoaliesZgroupiesZhiesZ	jalousiesZjunkiesZkiddiesZladdiesZlassiesZliesZ	lingeriesZmagpiesZ
menageriesZmommiesZmoviesZnecktiesZnewbiesZnightiesZoldiesZ	organdiesZoverliesZpiesZpinkiesZpixiesZpotpiesZprairiesZquickiesZreveriesZrookiesZrotisseriesZsoftiesZsortiesrT   ZstymiesZsweetiesZtiesZ	underliesZuntiesZveggiesZviesZyuppiesZzombies)ZChloesZCrusoesZDefoesZFaeroesZIvanhoesZJoesZMcEnroesZMoesZMonroesZNoesZPoesZRoscoesZTahoesZTippecanoesZZoes)ZaloesZbackhoescanoesrY   floesZfoeshoesZ
mistletoesoboesZpekoesroesZsloesthroesZtiptoestoeswoes)ZquartzesZtopazes)ZbuzzesZfizzesZfrizzesZrazzes)ZAndromachesZApachesZBlanchesZ	ComanchesZ
NietzschesZPorschesZRoches)ZachesZ
avalanchesZ	backachesZ
bellyachesZcachesZclochesZcrechesZdouchesZearachesZfichesZ	headachesZ
heartachesZmicrofichesZnichesZ	pastichesZpsychesZquichesZstomachachesZ
toothachesZtranches)ZannexesaxesZdeluxesZpickaxes)ZHessesZJessesZ	LaroussesZMatisses)ZbouillabaissesZ	crevassesZ
demitassesZimpassesZmoussesZposses)ZClivesZ
Palmolives)	ZinterweavesZweavesZolivesZbivalvesZ	dissolvesZresolvesZsalvesZtwelvesZvalves)z(.*[csx])isz(.*)cepsz[A-Z].*s)AZ
amanuensesZamniocentesesZanalysesZ
antithesesZ
apotheosesZarteriosclerosesZatherosclerosesrV  Z	catalysesZ	catharsesZchassesZ	cirrhosesZcoccesZcrisesZ	diagnosesZdialysesZdieresesZelectrolysesZemphasesZexegesesZgenesesZ	halitosesZ
hydrolysesZhypnosesZ
hypothesesZ
hysteresesZmetamorphosesZ
metastasesZmisdiagnosesZmitosesZmononucleosesZnarcosesZnecrosesZnemesesZneurosesZoasesZosmosesZosteoporosesZ	paralysesZparenthesesZparthenogenesesZperiphrasesZphotosynthesesZ	proboscesZ	prognosesZprophylaxesZ
prosthesesZprecesZ	psoriasesZpsychoanalysesZpsychokinesesZ	psychosesZ	sclerosesZ	scoliosesZsepsesZ	silicosesZ	symbiosesZsynopsesZ	synthesesZtaxesZtelekinesesZthesesZ
thrombosesZtuberculosesZ
urinalyses)ZdeZduZda>   r   feminine	masculinegender-neutralfeminine or masculinemasculine or feminine))rj   r^   r   rc   )rj   r^   rW  r]   )rj   r^   rX  ra   )rj   r^   rY  r^   )rj   r^   rZ  z	she or he)rj   r^   r[  z	he or she)rj   r`   r   rd   )rj   r`   rW  r_   )rj   r`   rX  rb   )rj   r`   rY  re   )rj   r`   rZ  herself or himself)rj   r`   r[  himself or herself)rj   rg   r   ri   )rj   rg   rW  rf   )rj   rg   rX  rh   )rj   rg   rY  rg   )rj   rg   rZ  zhers or his)rj   rg   r[  zhis or hers)rp   rn   r   rc   )rp   rn   rW  rm   )rp   rn   rX  ro   )rp   rn   rY  rn   )rp   rn   rZ  z
her or him)rp   rn   r[  z
him or her)rp   r`   r   rd   )rp   r`   rW  r_   )rp   r`   rX  rb   )rp   r`   rY  re   )rp   r`   rZ  r\  )rp   r`   r[  r]  )ZdidZhadZateZmadeZputZspentZfoughtZsankZgaveZsoughtZshallZcouldZoughtZshould)rN  rO  rQ  rR  rS  rU  )rP  rT  )r  )r  r   rP   Znil)Z1rN   r|   r   ZeachZeveryr}   r~   )
r   r   r   r   Zfourr   ZsixZsevenr   r   )
r  Zelevenr   ZthirteenZfourteenZfifteenZsixteenZ	seventeenZeighteenZnineteen)
r   r   ZtwentyZthirtyZfortyZfiftyZsixtyZseventyZeightyZninety)r  z	 thousandz millionz billionz	 trillionz quadrillionz quintillionz sextillionz septillionz
 octillionz
 nonillionz
 decillion(>  __conditional_annotations__r   Z
__future__r    r   r<   rt  rw  r  r   Znumbersr   Ztypingr   r   r   r   r   r   r   r	   r
   r   r   r   r   Zmore_itertoolsr   Z	typeguardr   Zcompat.py38r   Z	Exceptionr   r   r   r   r    r!   r"   r.   r9   r@   rH   rD  rF  ZupdaterG  r}  r   r  Zlistr   r   Zk1Zk2r  r  Zpl_sb_z_zes_listr  Zpl_sb_ze_zes_listr  Zpl_sb_C_is_ides_completeZpl_sb_C_is_ides_endingsr8  Zpl_sb_C_is_ides_listZsi_sb_C_is_ides_listr  r  Zpl_sb_C_a_ata_listZsi_sb_C_a_ata_listr  r  r7  Zpl_sb_U_a_ae_listZsi_sb_U_a_ae_listr  r  Zpl_sb_U_a_aeZpl_sb_C_a_ae_listZsi_sb_C_a_ae_listr  r  r9  Zpl_sb_C_en_ina_listZsi_sb_C_en_ina_listr  r  r:  Zpl_sb_U_um_a_listZsi_sb_U_um_a_listr  r  Zpl_sb_U_um_aZpl_sb_C_um_a_listZsi_sb_C_um_a_listr  r  r;  Zpl_sb_U_us_i_listZsi_sb_U_us_i_listr  r  Zpl_sb_U_us_iZpl_sb_C_us_i_listZsi_sb_C_us_i_listr  r  r<  r  r  Zpl_sb_U_on_a_listZsi_sb_U_on_a_listr  r  Zpl_sb_U_on_aZpl_sb_C_on_a_listZsi_sb_C_on_a_listr  r  r=  Zpl_sb_C_o_ir  r  r>  r  r  Zpl_sb_U_o_os_endingsr  r  Zpl_sb_U_ch_chs_listZsi_sb_U_ch_chs_listr  r  Zpl_sb_U_ch_chsZpl_sb_U_ex_ices_listZsi_sb_U_ex_ices_listr  r  Zpl_sb_U_ex_icesZpl_sb_U_ix_ices_listZsi_sb_U_ix_ices_listr  r  Zpl_sb_U_ix_icesZpl_sb_C_ex_ices_listZsi_sb_C_ex_ices_listr  r  r?  Zpl_sb_C_ix_ices_listZsi_sb_C_ix_ices_listr  r  r@  Zpl_sb_C_i_listZsi_sb_C_i_listr  r  rA  Zpl_sb_C_im_listZsi_sb_C_im_listr  r  rB  Zpl_sb_U_man_mans_listZpl_sb_U_man_mans_caps_listZsi_sb_U_man_mans_listr  r~  Zsi_sb_U_man_mans_caps_listr  r  Zpl_sb_U_louse_lice_listZsi_sb_U_louse_lice_listr  r  Zpl_sb_uninflected_s_completeZpl_sb_uninflected_s_endingsZpl_sb_uninflected_srp  rl  rn  Zpl_sb_uninflected_endingsro  r  Zpl_sb_singular_s_endingsr  r  Zsi_sb_singular_s_endingsr  Zpl_sb_singular_s_esr8   Zpl_sb_singular_sr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  Zplverb_special_sZ_pl_sb_postfix_adj_defnr[   r   Zpl_sb_postfix_adj_stemsr  Zpl_prep_listr  rz  Zpl_prepZpl_sb_prep_dual_compoundr   r|  rk   r{  Zpl_pron_acc_keysry  Z_thecaseZ_plurZ_gendZ_singrt   Zsi_pron_acc_keysr  ry   r  r  Zcompiler   r  r  r  r  r  r  rM  rL  r  r  r  r  ZVERBOSEr?  rL  rI  r<  r;  r:  r  r=   rE  r3  Zdictr   r"  r  r  r  r  r   r   r   Zstring_to_constantr   r   r  rq  rr  rs  r  r  r  r  r  r=  r>  r@  rA  rB  rC  rD  rE  rF  rG  rH  rJ  rK  r  r  r  r  r  r   r2  r,  r-  r.  r/  r  r  r&   r   ZFalsishZ_STATIC_TYPE_CHECKINGr   Ztyper   r   )r   r   r6   r^  s   000@r   <module>r_     s!  4l # 
     	      - ! "		 		y 		Y 		 		 		Y 		Y 	@ @*"!- !-N  
NXh_h	7	 "Z"" "" %	"
 H" L" N" N" " X" " 	&" 
;" 
" $"  ^!"" ##"$ i%"& N'"( X)"* W+", "-". -/"0 -1"2 z3"4 5"6 -7"8 j9": Y;"< H="> z?"@ 
6A"B iC"H   ( ) jX
G	6	  *+EF &5&;&;&=>&=FQ14&=>	o	A
axB4CA4FFob1A	 

 ,@+E+E+GH+G!+GH /G/M/M/OP/OVaAD/OP 	&	'A
axB$Q'	
 $'?'C %Q' 
( ' ,-  ./ 
   
  6M#N6MbH6M#NN 02II  )61G	 @ '2
  &T2
 , &T2 5  (%3
   &Q/
 L &Q/
   &Q/
 , &Q/ m, 
   &Q/
 "  &Q/	 K( ;?;a#2xq\;?@ R-  D *?@*?Q3a*?@ DDD D 	D
 D D D D D D D D D D D  !D" #D$ %D& 'D( )D* +D, -D. /D0 1D2 3D4 5D6 7D8 9D: ;D< =D> ?D@ ADB CDD EDF GDH IDJ KDL MDN ODP QDR SDT UDV WDX YDZ [D\ ]D^ _D` aDb cDd eDf gDh iDj kDl mDn oDp qDr sDt uDv wDx yDz {D| }D~ D@ ADB CDD EDF GDH IDJ KDL MDN ODP QDR SDT UDV WDX YDZ [D\ ]D^ _D` aDb cDd eDf gDh iDj kDl mDn oDp qDr sDt uDv wDx yDz {D| }D~ D@ ADB CDD EDF GDH IDJ KDL MDN ODP QDR SDT UDV WDX YDZ [D\ ]D^ _D` aDb cDd eDf gDh 
iDj kDl mDn oDp qDr sDt uDv wDx yDz {D| }D~ D@ ADB CDD EDF GDH IDJ KDL MDN ODP QDR SDT 
UDV WDX YDZ [D\ ]D^ _D` aDb cDd eDf gDh iDj kDl mDn oDp qDr sDt uDv wDx yDz {D| }D~ D@ ADB CDD EDF GDH IDJ KDL MDN ODP QDR SDT UDV WDX YDZ [D\ ]D^ _D` aDb cDd eDf gDh iDj 
kDl mDn oDp qDr sDt uDv wDx yDz {D| 
}D~ 
D@ ADB CDD EDF GDH ID L 12 /CD/C!1g/CDE 
 5  (#t4 3  )615 *  )615
	   )615 %  )615 /BRCC ?!#3Y .FVT4G C#%6
 
EG	 

 
EG  *C%H	 /duM	   L  ,faEJ	) )  )  	) 
 )  )  )  )  )  )  )  )  )  )  )   !) " #) & ') ( )) * +) . /) 0 1) 2 3) 4 5) 8 9) < =) > ?) @ A) B C) D E) F G) H I) J K) L M) N O) P Q)  Z 
	  3161bH16   B, !-! 2 :&  '  . "";< 
!!! ! 	!
 ! ! ! ! ! ! ! ! ! ! !  !!" #!$ %!& 
'!( )!* +!, -!. /!0 1!2 3!4 5!6 7!8 9!: ;!< =!> ?!@ A!B C! H !$<*AA  !9: /HI/H!s"X/HI .FG.FcH.FG  !9: "m HH!5
65Rs85
6	7
	  + R @] ~HV $& &9 . :C  
  HH	
	
 
!	" 2	2  LMN !gg $:Q$ =  chh'89:%@ 
CJ0 16	  !33(
#((?+
,0	9RS   k 
5	
  
6 | 	& | 	& l F  F  W!" H#$ 
8%& 
8'( h)0 
{00232VaAD23=	9  t 
 	$k	5	6|	6|&l
F  388K01  - %0%6%6%89%86A!$%89&!HeUE@0*/% 'C&N 388GEN34  0  	%	5%	6
F
F	6$
D
 !	5!
E! W! g	!
 
5! F! 
5! U! F! f! W! g! W! g! F!  V!!" F#!$ V
FV
FVWw	5
E
FVWg
FVA! F  ZZ	'#((01
2	3;? 
 " JJ7  E, &  + HvtVVWfgNjj	'#((>*
+	,B/ 
 	%
F	7	7	7W ::GCHH[,A$B#C2FV  ::
 JJ ::BBMMR zz:BMMJ

7 zz2BMMBjj3R]]C tttttttttt szz|

	
		 zzQsxx0156
 T$ ET5% #00-QD-0"/0-Q5-0 dGUFDA  

:&

/?23ZZ#$B'  !jj$%R("--  jj<=jjB'7&8!;< ZZ
jj7L1 **%FV ZZ+R]];
JJ,bmm<	JJ5r}}E ::mR]]; ZZr}}5
ZZ	2==9 zz+r}}= **]BMMB zz"4bmmD jj!:BMMJ jj"--8 ::./ 	K	/jj!ZZ$
zz/*JJ78 **12,-::45 JJu	JJw' ZZ(
jj  ZZ


6 ZZx(ZZ&!ZZ	C ZZ %(ZZ
V$ZZ
X&ZZh'ZZZZ34mD# " 	

5
$C 
$  &  S<<=DDD D/ /U@ U@A8 ? IPJ $O` @ AT EL6~ JG 7^ 40 :H  0#%% */% '0d 10s   1AL'AL-9AL31AL97AL>"AMAM;AM<AMAMAMAM!%AM'AM-AN,AN M-&ANNAN