
    $g,                        d Z ddlZddlZdZg dZg dZh dZdeded	dfd
Zd.dede	d	efdZ
ded	efdZded	efdZded	efdZded	efdZd/deded	efdZded	efdZded	efdZded	efdZded	efdZded	efdZded	efdZ edd            ed d!            ed"d#            ed$d%            ed&d'            ed(d)            ed*d+            ed,d-           dS )0z
    inflection
    ~~~~~~~~~~~~

    A port of Ruby on Rails' inflector to Python.

    :copyright: (c) 2012-2020 by Janne Vanhala

    :license: MIT, see LICENSE for more details.
    Nz0.5.1))z(?i)(quiz)$z\1zes)z(?i)^(oxen)$\1)z
(?i)^(ox)$z\1en)(?i)(m|l)ice$\1ice)z(?i)(m|l)ouse$r   )z(?i)(passer)s?by$z\1sby)z(?i)(matr|vert|ind)(?:ix|ex)$z\1ices)z(?i)(x|ch|ss|sh)$\1es)z(?i)([^aeiouy]|qu)y$z\1ies)z(?i)(hive)$z\1s)z(?i)([lr])f$\1ves)z(?i)([^f])fe$r   )z(?i)sis$ses)(?i)([ti])a$\1a)z(?i)([ti])um$r
   )z(?i)(buffal|potat|tomat)o$z\1oes)z
(?i)(bu)s$z\1ses)z(?i)(alias|status)$r   )z(?i)(octop|vir)i$\1i)z(?i)(octop|vir)us$r   )z(?i)^(ax|test)is$r   )(?i)s$s)$r   )!)z(?i)(database)s$r   )z(?i)(quiz)zes$r   )z(?i)(matr)ices$z\1ix)z(?i)(vert|ind)ices$z\1ex)z(?i)(passer)sby$z\1by)z(?i)^(ox)enr   )z(?i)(alias|status)(es)?$r   )z(?i)(octop|vir)(us|i)$z\1us)z(?i)^(a)x[ie]s$z\1xis)z(?i)(cris|test)(is|es)$z\1is)z(?i)(shoe)s$r   )z
(?i)(o)es$r   )z(?i)(bus)(es)?$r   )r   z\1ouse)z(?i)(x|ch|ss|sh)es$r   )z(?i)(m)ovies$z\1ovie)z(?i)(s)eries$z\1eries)z(?i)([^aeiouy]|qu)ies$z\1y)z(?i)([lr])ves$z\1f)z(?i)(tive)s$r   )z(?i)(hive)s$r   )z(?i)([^f])ves$z\1fe)z(?i)(t)he(sis|ses)$z\1hesis)z(?i)(s)ynop(sis|ses)$z	\1ynopsis)z(?i)(p)rogno(sis|ses)$z
\1rognosis)z(?i)(p)arenthe(sis|ses)$z\1arenthesis)z(?i)(d)iagno(sis|ses)$z
\1iagnosis)z(?i)(b)a(sis|ses)$z\1asis)z(?i)(a)naly(sis|ses)$z	\1nalysis)r	   z\1um)z(?i)(n)ews$z\1ews)z	(?i)(ss)$r   )r    >	   fishricejeansmoneysheepseriesspecies	equipmentinformationsingularpluralreturnc                 2   dt           dt           fd}| d                                         |d                                         k    rt                              dd                    | d         | dd                   d|dd         z   f           t                              dd                    |d         |dd                   d|dd         z   f           t
                              dd                    |d         |dd                   d| dd         z   f           dS t                              dd	                    | d                                          || dd                             |d                                         |dd         z   f           t                              dd	                    | d                                          || dd                             |d                                         |dd         z   f           t                              dd	                    |d                                          ||dd                             |d                                         |dd         z   f           t                              dd	                    |d                                          ||dd                             |d                                         |dd         z   f           t
                              dd	                    |d                                          ||dd                             | d                                         | dd         z   f           t
                              dd	                    |d                                          ||dd                             | d                                         | dd         z   f           dS )
z
    A convenience function to add appropriate rules to plurals and singular
    for irregular words.

    :param singular: irregular word in singular form
    :param plural: irregular word in plural form
    stringr   c                 @    d                     d | D                       S )Nr   c              3   P   K   | ]!}d |z   |                                 z   dz   V  "dS )[]N)upper).0chars     S/var/www/html/netbox-4.1.3/venv/lib/python3.11/site-packages/inflection/__init__.py	<genexpr>z6_irregular.<locals>.caseinsensitive.<locals>.<genexpr>d   s8      JJ4sTzDJJLL036JJJJJJ    )join)r   s    r%   caseinsensitivez#_irregular.<locals>.caseinsensitivec   s#    wwJJ6JJJJJJr'   r   z(?i)({}){}$   Nr   z{}{}$)strr"   PLURALSinsertformat	SINGULARSlower)r   r   r)   s      r%   
_irregularr1   [   s   K K K K K K {fQioo////q!!(1+x|<<F122J
 	 	 	 	q!!&)VABBZ88F122J
 	 	 	 	!!&)VABBZ88HQRRL 
 	 	 	 	 	
 	qOOHQK--//+OHQRRL99; ;1IOOqrr
*
 	 	 	
 	qOOHQK--//+OHQRRL99; ;1IOOqrr
*
 	 	 	
 	qOOF1IOO--vabbz/J/JKK1IOOqrr
*
 	 	 	 	qOOF1IOO--vabbz/J/JKK1IOOqrr
*
 	 	 	 	OOF1IOO--vabbz/J/JKKQK(122,.
 	 	 	 	OOF1IOO--vabbz/J/JKKQK(122,.
 	 	 	 	 	r'   Tr   uppercase_first_letterc                     |rt          j        dd |           S | d                                         t          |           dd         z   S )aC  
    Convert strings to CamelCase.

    Examples::

        >>> camelize("device_type")
        'DeviceType'
        >>> camelize("device_type", False)
        'deviceType'

    :func:`camelize` can be thought of as a inverse of :func:`underscore`,
    although there are some cases where that does not hold::

        >>> camelize(underscore("IOError"))
        'IoError'

    :param uppercase_first_letter: if set to `True` :func:`camelize` converts
        strings to UpperCamelCase. If set to `False` :func:`camelize` produces
        lowerCamelCase. Defaults to `True`.
    z
(?:^|_)(.)c                 P    |                      d                                          S Nr*   groupr"   ms    r%   <lambda>zcamelize.<locals>.<lambda>       qwwqzz/?/?/A/A r'   r   r*   N)resubr0   camelize)r   r2   s     r%   r>   r>      sN    *  8vm%A%A6JJJay  8F#3#3ABB#777r'   wordc                 .    |                      dd          S )z{Replace underscores with dashes in the string.

    Example::

        >>> dasherize("puni_puni")
        'puni-puni'

    _-)replacer?   s    r%   	dasherizerE      s     <<S!!!r'   c                     t          j        dd|           } |                     dd          } t          j        dd |           } t          j        dd |           } | S )	a<  
    Capitalize the first word and turn underscores into spaces and strip a
    trailing ``"_id"``, if any. Like :func:`titleize`, this is meant for
    creating pretty output.

    Examples::

        >>> humanize("employee_salary")
        'Employee salary'
        >>> humanize("author_id")
        'Author'

    z_id$r   rA    z(?i)([a-z\d]*)c                 P    |                      d                                          S r5   )r7   r0   r8   s    r%   r:   zhumanize.<locals>.<lambda>   r;   r'   z^\wc                 P    |                      d                                          S )Nr   r6   r8   s    r%   r:   zhumanize.<locals>.<lambda>   s    AGGAJJ$4$4$6$6 r'   )r<   r=   rC   rD   s    r%   humanizerJ      s^     6'2t$$D<<S!!D6#%A%A4HHD6&66==DKr'   numberc                     t          t          |                     } | dz  dv rdS dddd                    | dz  d          S )	a  
    Return the suffix that should be added to a number to denote the position
    in an ordered sequence such as 1st, 2nd, 3rd, 4th.

    Examples::

        >>> ordinal(1)
        'st'
        >>> ordinal(2)
        'nd'
        >>> ordinal(1002)
        'nd'
        >>> ordinal(1003)
        'rd'
        >>> ordinal(-11)
        'th'
        >>> ordinal(-1021)
        'st'

    d   )         thstndrd)r*         
   )absintgetrK   s    r%   ordinalr\      sZ    * VF||##t 
 
 #frk4
 
 		!r'   c                 H    d                     | t          |                     S )a  
    Turn a number into an ordinal string used to denote the position in an
    ordered sequence such as 1st, 2nd, 3rd, 4th.

    Examples::

        >>> ordinalize(1)
        '1st'
        >>> ordinalize(2)
        '2nd'
        >>> ordinalize(1002)
        '1002nd'
        >>> ordinalize(1003)
        '1003rd'
        >>> ordinalize(-11)
        '-11th'
        >>> ordinalize(-1021)
        '-1021st'

    z{}{})r.   r\   r[   s    r%   
ordinalizer^      s    * ==111r'   rB   	separatorc                 &   t          |           } t          j        d||           } |rWt          j        |          }t          j        d|z  ||           } t          j        d                    |          d|           } |                                 S )z
    Replace special characters in a string so that it may be used as part of a
    'pretty' URL.

    Example::

        >>> parameterize(u"Donald E. Knuth")
        'donald-e-knuth'

    z(?i)[^a-z0-9\-_]+z%s{2,}z(?i)^{sep}|{sep}$)sepr   )transliterater<   r=   escaper.   r0   )r   r_   re_seps      r%   parameterizere     s     6""FV()V<<F M9%%	F*Iv>>,333??VLL<<>>r'   c                     | r|                                  t          v r| S t          D ]2\  }}t          j        ||           rt          j        |||           c S 3| S )a	  
    Return the plural form of a word.

    Examples::

        >>> pluralize("posts")
        'posts'
        >>> pluralize("octopus")
        'octopi'
        >>> pluralize("sheep")
        'sheep'
        >>> pluralize("CamelOctopus")
        'CamelOctopi'

    )r0   UNCOUNTABLESr,   r<   searchr=   )r?   rulereplacements      r%   	pluralizerk     so       4::<<<//!( 	7 	7D+yt$$ 7vdK666667r'   c                     t           D ]}t          j        d|z  |           r| c S t          D ]2\  }}t          j        ||           rt          j        |||           c S 3| S )ac  
    Return the singular form of a word, the reverse of :func:`pluralize`.

    Examples::

        >>> singularize("posts")
        'post'
        >>> singularize("octopi")
        'octopus'
        >>> singularize("sheep")
        'sheep'
        >>> singularize("word")
        'word'
        >>> singularize("CamelOctopi")
        'CamelOctopus'

    z(?i)\b(%s)\Z)rg   r<   rh   r/   r=   )r?   
inflectionri   rj   s       r%   singularizern   5  s    $ #  
9_z1488 	KKK	 ' 3 3k9T4   	36$T22222	3Kr'   c                 :    t          t          |                     S )as  
    Create the name of a table like Rails does for models to table names. This
    method uses the :func:`pluralize` method on the last word in the string.

    Examples::

        >>> tableize('RawScaledScorer')
        'raw_scaled_scorers'
        >>> tableize('egg_and_ham')
        'egg_and_hams'
        >>> tableize('fancyCategory')
        'fancy_categories'
    )rk   
underscorerD   s    r%   tableizerq   Q  s     Z%%&&&r'   c           	          t          j        dd t          t          |                                                               S )a  
    Capitalize all the words and replace some characters in the string to
    create a nicer looking title. :func:`titleize` is meant for creating pretty
    output.

    Examples::

      >>> titleize("man from the boondocks")
      'Man From The Boondocks'
      >>> titleize("x-men: the last stand")
      'X Men: The Last Stand'
      >>> titleize("TheManWithoutAPast")
      'The Man Without A Past'
      >>> titleize("raiders_of_the_lost_ark")
      'Raiders Of The Lost Ark'

    z\b('?\w)c                 P    |                      d                                          S r5   )r7   
capitalize)matchs    r%   r:   ztitleize.<locals>.<lambda>v  s    ekk!nn//11 r'   )r<   r=   rJ   rp   titlerD   s    r%   titleizerw   b  s@    $ 611D!!""((**  r'   c                 ~    t          j        d|           }|                    dd                              d          S )u5  
    Replace non-ASCII characters with an ASCII approximation. If no
    approximation exists, the non-ASCII character is ignored. The string must
    be ``unicode``.

    Examples::

        >>> transliterate('älämölö')
        'alamolo'
        >>> transliterate('Ærøskøbing')
        'rskbing'

    NFKDasciiignore)unicodedata	normalizeencodedecode)r   
normalizeds     r%   rb   rb   {  s:     &vv66JWh//66w???r'   c                     t          j        dd|           } t          j        dd|           } |                     dd          } |                                 S )aq  
    Make an underscored, lowercase form from the expression in the string.

    Example::

        >>> underscore("DeviceType")
        'device_type'

    As a rule of thumb you can think of :func:`underscore` as the inverse of
    :func:`camelize`, though there are cases where that does not hold::

        >>> camelize(underscore("IOError"))
        'IoError'

    z([A-Z]+)([A-Z][a-z])z\1_\2z([a-z\d])([A-Z])rB   rA   )r<   r=   rC   r0   rD   s    r%   rp   rp     sM      6)8T::D6%x66D<<S!!D::<<r'   personpeoplemanmenhumanhumanschildchildrensexsexesmovemovescowkinezombiezombies)T)rB   )__doc__r<   r|   __version__r,   r/   rg   r+   r1   boolr>   rE   rJ   rY   r\   r^   re   rk   rn   rq   rw   rb   rp    r'   r%   <module>r      s  	 	 
			      4" " "	H	 	 	2 2c 2d 2 2 2 2j8 8S 8$ 8# 8 8 8 86	"C 	"C 	" 	" 	" 	"3 3    *!C !C ! ! ! !@2s 2s 2 2 2 20   s    0C C    2c c    8'3 '3 ' ' ' '"3 3    2@# @# @ @ @ @$S S    , 
8X    

5%    

7H    

7J    

5'    

67    

5&    

8Y     r'   