
    j+                       U d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZ d d	 gZ G d
 de          Z edd           G d d                      Z edd           G d d                      Zd&dZ	 d'd(dZ	 d)d*dZd+d Z d,d"Z! e!            Z"d!e#d#<    e$e"%                                          Z&d$e#d%<   dS )-zThe Language class.    )annotationsN)	dataclass)NoReturn   )_PART3_TO_CODES_PART3_TO_NAME_INDEX_PART3_TO_MACROLANGUAGES_PART3_TO_RETIREMENTS_PART2B_TO_PART3_PART2T_TO_PART3_PART1_TO_PART3_REF_NAME_TO_PART3_PRINT_NAME_TO_PART3_INVERTED_NAME_TO_PART3_CodesColumn_NameIndexColumn_RetirementsColumn_MacrolanguagesColumn_COLUMN_TYPEc                *    |                                  S N)lowerxs    Y/lsinfo/ai/hellotax_ai/base_platform/venv/lib/python3.11/site-packages/iso639/language.py<lambda>r      s    AGGII     c                *    |                                  S r   )titler   s    r   r   r      s     r   c                      e Zd ZdS )LanguageNotFoundErrorN)__name__
__module____qualname__ r   r   r!   r!      s        Dr   r!   T)frozenslotsc                  (    e Zd ZU dZded<   ded<   dS )Namez-Represents an alternative name of a language.strprintinvertedN)r"   r#   r$   __doc____annotations__r%   r   r   r)   r)   #   s(         77JJJMMMMMr   r)   c                  P   e Zd ZU dZded<   ded<   ded<   ded<   ded<   ded	<   ded
<   d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Zd&dZeddd'd            Zed(d            Z	ed(d             Z
ed(d!            Zed(d"            Zed(d#            Zd$S ))Languagez.Represents a language in the ISO 639-3 charts.r*   part3
str | Nonepart2bpart2tpart1scopetypestatusnamecommentzlist[Name] | Noneother_namesmacrolanguageretire_reasonretire_change_toretire_remedyzdatetime.date | Noneretire_datereturnintc                *    t          | j                  S r   )hashr1   )selfs    r   __hash__zLanguage.__hash__F   s    DJr   boolc                L    t          |t                    o| j        |j        k    S r   )
isinstancer0   r1   )rE   others     r   __eq__zLanguage.__eq__I   s     %**HtzU[/HHr   T)strict_case
user_inputrL   c                  t           j        t           j        t           j        t           j        t
          j        t           j        t          j        t          j	        g}t          t          |||                   S )a  Return a ``Language`` instance by matching on the user input.

        Parameters
        ----------
        user_input : str
            A language code or name.
        strict_case : bool, optional
            Defaults to ``True``, for enforcing strict case sensitivity.
            If ``False`` and if ``user_input`` doesn't find a match,
            further match attempts will be made with the all-lowercase version of
            ``user_input`` (``"foobar"``) and the title-case version of ``user_input``
            (``"Foobar"``).

        Returns
        -------
        Language

        Notes
        -----
        At a high level, `Language.match` assumes the input is more likely to be
        a language code rather than a language name.
        Beyond that, the precise order in matching is as follows:

        * ISO 639-3 codes (among the active codes)
        * ISO 639-2 (bibliographic) codes
        * ISO 639-2 (terminological) codes
        * ISO 639-1 codes
        * ISO 639-3 codes (among the retired codes)
        * ISO 639-3 reference language names
        * ISO 639-3 alternative language names (the "print" ones)
        * ISO 639-3 alternative language names (the "inverted" ones)
        )r   IDPART2BPART2TPART1r   REF_NAMEr   
PRINT_NAMEINVERTED_NAME_PART3_TO_LANGUAGES
_get_part3)clsrM   rL   query_orders       r   matchzLanguage.matchL   sT    L O!!'*	+
 #:j+{#S#STTr   c               d    t           t          |t          j        t          j        g                   S )z6Return a ``Language`` instance from an ISO 639-3 code.)rV   _get_part3_exactr   rO   r   rX   rM   s     r   
from_part3zLanguage.from_part3}   s)     #Z,/;M;P)QRR
 	
r   c               N    t           t          |t          j        g                   S )zFReturn a ``Language`` instance from an ISO 639-2 (bibliographic) code.)rV   r\   r   rP   r]   s     r   from_part2bzLanguage.from_part2b         ##3JAT@U#V#VWWr   c               N    t           t          |t          j        g                   S )zGReturn a ``Language`` instance from an ISO 639-2 (terminological) code.)rV   r\   r   rQ   r]   s     r   from_part2tzLanguage.from_part2t   ra   r   c               N    t           t          |t          j        g                   S )z6Return a ``Language`` instance from an ISO 639-1 code.)rV   r\   r   rR   r]   s     r   
from_part1zLanguage.from_part1   s      ##3JAS@T#U#UVVr   c               ~    t           j        t          j        t          j        g}t
          t          ||                   S )zIReturn a ``Language`` instance from an ISO 639-3 reference language name.)r   rS   r   rT   rU   rV   r\   )rX   rM   rY   s      r   	from_namezLanguage.from_name   s5     !'*+

 ##3J#L#LMMr   N)rA   rB   )rA   rG   )rM   r*   rL   rG   rA   r0   )rM   r*   rA   r0   )r"   r#   r$   r-   r.   rF   rK   classmethodrZ   r^   r`   rc   re   rg   r%   r   r   r0   r0   +   s        88 JJJJJJKKKIII #"""      %%%%       I I I I >B .U .U .U .U .U [.U` 
 
 
 [
 X X X [X X X X [X W W W [W N N N [N N Nr   r0   rM   r*   rA   r   c                &    t          | d          )Nz# isn't an ISO language code or name)r!   )rM   s    r   _raise_language_not_found_errorrj      s    
: T T T
U
UUr   rY   list[_COLUMN_TYPE]rL   rG   c                    	 t          | |          S # t          $ rY}|r|t          D ]3}	 t           ||           ||           c cY d}~S # t          $ r Y 0w xY wt          |            Y d}~dS d}~ww xY w)a  Get the part 3 code of a language.

    Parameters
    ----------
    user_input : str
        The user-provided language code or name.
    query_order : List[_COLUMN_TYPE]
        A list of columns to specify query order.
    strict_case : bool, optional
        Defaults to ``True``, for enforcing strict case sensitivity.
        If ``False`` and if ``user_input`` doesn't find a match,
        further match attempts will be made with the all-lowercase version of
        ``user_input`` (``"foobar"``) and the title-case version of ``user_input``
        (``"Foobar"``).

    Returns
    -------
    str

    Raises
    ------
    LanguageNotFoundError
        If `part3` isn't a language name or code
    N)r\   r!   _STRING_CLEANING_FUNCSrj   )rM   rY   rL   efuncs        r   rW   rW      s    6<
K888  
< 
< 
< 		<G. < <+DD,<,<k:VVVVVVVVVV,   H 0
;;;;;;;;;
<s=    
A5A0AA0A5
AA0AA00A5original_user_inputr2   c                   |                                  } d}|D ]4}|t          j        k    r| t          v r| c S n|t          j        k    rt          j        |           }n|t          j        k    rt          j        |           }n|t          j	        k    rt          j        |           }n|t          j        k    r| t          v r| c S n|t          j        k    rt          j        |           }n\|t          j        k    rt#          j        |           }n7|t          j        k    rt'          j        |           }nt)          d|           | n6|t+          |p|            |S )a  Get the part 3 code of a language.

    Parameters
    ----------
    user_input : str
        The user-provided language code or name.
    query_order : list[_COLUMN_TYPE]
        A list of columns to specify query order.
    original_user_input : str, optional
        The original user input. Default is `None`.
        This argument is used when the user input has been cleaned.

    Returns
    -------
    str

    Raises
    ------
    LanguageNotFoundError
        If `part3` isn't a language name or code
    NzInvalid column: )stripr   rO   r   rP   r   getrQ   r   rR   r   r   r
   rS   r   r   rT   r   rU   r   
ValueErrorrj   )rM   rY   rp   r1   columns        r   r\   r\      s   4 !!##JE  \_$$_,,!!!! -|***$(44EE|***$(44EE|)))#'
33EE),,,222!!!! 3|,,,&*:66EE'222(,Z88EE'555+/
;;EE888999E  }'(;(IzJJJLr   r1   c                   t          j        |           }t          j        |           }t          j        |           }|r|t          j                 n|t          j                 }g }t          j        | g           D ]X}|t          j	                 |t          j
                 }}||cxk    r|k    s%n |                    t          ||                     Y|pd}|pi                     t          j                  }	|pi                     t          j                  }
|pi                     t          j                  }|pi                     t          j                  }|rBt$          j                            |t          j                 d                                          nd}|rq|t          j                 }|t          j                 }|t          j                 }|t          j                 }|t          j                 }d}|}|t          j                 }nd}d}d}d}d}d}|}d}t9          | |pd|pd|pd||pd|||pd|pd|	pd|
pd|pd|pd|pd          }|S )zCreate a ``Language`` instance.

    Parameters
    ----------
    part3 : str
        Part 3 code of the language.

    Returns
    -------
    Language
    Nz%Y-%m-%dAIR)r1   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   )r   rs   r	   r
   r   rS   r   r   r   rT   rU   appendr)   r   MID
RET_REASON	CHANGE_TOREMEDYdatetimestrptime	EFFECTIVEdaterP   rQ   rR   SCOPETYPECOMMENTr0   )r1   
from_codesfrom_macrolanguagesfrom_retirementsref_namer;   rowpir<   r=   r>   r?   r@   r3   r4   r5   r6   r7   r8   r:   languages                         r   _get_languager     s    !$U++J26u==,077 	;
<())09:  &(K#'r22 + +#./5E5S1T11!!!!!!!!tAqzz***%K(.B334I4MNNM%+001C1NOOM(.B334F4PQQ%+001C1JKKM 	""/9:J	
 	

$&&&   L/0L/0<-.<-.,+,\12 ~~mt\T4'4#+t#+t)1T#+t'4  H$ Or   dict[str, Language]c                 z    i } t           D ]}t          |          | |<   t          D ]}t          |          | |<   | S r   )r   r   r
   )	languagesr1   s     r   _get_all_languagesr   [  sU    I  0 0(//	%& 0 0(//	%r   rV   zset[Language]ALL_LANGUAGES)rM   r*   rA   r   )T)rM   r*   rY   rk   rL   rG   rA   r*   r   )rM   r*   rY   rk   rp   r2   rA   r*   )r1   r*   rA   r0   )rA   r   )'r-   
__future__r   r   dataclassesr   typingr   _datar   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   rm   	Exceptionr!   r)   r0   rj   rW   r\   r   r   rV   r.   setvaluesr   r%   r   r   <module>r      s      " " " " " "  ! ! ! ! ! !                                       $ .-/B/BC 	 	 	 	 	I 	 	 	 $d###       $# $d###oN oN oN oN oN oN oN $#oNdV V V V
 KO'< '< '< '< '<Z '+7 7 7 7 7tR R R Rj    ,>+=+?+?  ? ? ? ?"s#6#=#=#?#?@@ @ @ @ @ @ @r   