§
    i˜ºhmn  ã                   óˆ  — d Z ddlZddlZddlZddlZddlmZ dej        dd…         cxk    rdk     r
n nddlmZ	 n=ej        dd…         dk    r	 ddlmZ	 n"# e
$ r	 ddlmZ	 Y nw xY wddlmZ  ee¦  «        Z	ej        dd…         dk    ZerddlZd	Zd	Zd	Zd	Zd
ZerFddlmZmZmZmZmZmZmZmZmZ ddlmZmZ ej        dd…         dk    rddlm Z  ee ej!        fZ"n´efZ"n°ddlmZm#Z#mZmZm$Z$mZm%Z%m&Z& 	 ddlm'Z'm(Z( n# e
$ r  ee¦  «        Z'd
Zd	ZY nw xY w	 ddlm)Z) n # e
$ r 	 ddlm)Z) n# e
$ r d
ZY nw xY wY nw xY w	 ddlmZ n # e
$ r 	 ddlmZ n# e
$ r d
ZY nw xY wY nw xY w	 ddlmZ n # e
$ r 	 ddlmZ n# e
$ r d
ZY nw xY wY nw xY wd„ Z*d„ Z+d„ Z,d„ Z-d„ Z.d„ Z/	 ej0        Z1n# e2$ r dZ1Y nw xY wd„ Z3ehZ4 e5ed¦  «        re4 6                    ej        ¦  «         d„ Z7d„ Z8d„ Z9d„ Z:d „ Z;d!„ Z<d"„ Z=d#„ Z>d$„ Z?d%„ Z@d8d&„ZAd'„ ZBd(„ ZCd)„ ZDd*„ ZEd+„ ZFd,„ ZGd-„ ZHd.„ ZId9d/„ZJd9d0„ZKd9d1„ZLd9d2„ZMd3„ ZNd4„ ZOd5„ ZPd6„ ZQd7„ ZRdS ):z¢Defines experimental API for runtime inspection of types defined
in the standard "typing" module.

Example usage::
    from typing_inspect import is_generic_type
é    N)Ú_TypedDictMeta)é   é   r   r   )r   é	   é   )Ú	TypedDict)r   é   r   TF)	ÚGenericÚCallableÚUnionÚTypeVarÚClassVarÚTupleÚ_GenericAliasÚ
ForwardRefÚNewType)ÚFinalÚLiteral)r   r   r   )Ú_SpecialGenericAlias)r   ÚCallableMetar   r   Ú	TupleMetar   ÚGenericMetaÚ_ForwardRef)Ú_UnionÚ	_ClassVar)Ú_Final)r   )r   c                 óŒ   — t          | t          ¦  «        sJ ‚t          | d¦  «        r| j        S | j        �| j        } | j        ­| S )z@This function exists for compatibility with old typing versions.Ú_gorg)Ú
isinstancer   Úhasattrr   Ú
__origin__©Úclss    úV/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/typing_inspect.pyr   r   \   sP   € å�c�;Ñ'Ô'Ð'Ð'Ð'Ýˆs�GÑÔð ØŒyÐØ
Œ.Ð
$ØŒnˆð Œ.Ð
$à€Jó    c                 óH  — t           rjt          | t          ¦  «        rt          | t          ¦  «        p?t          | t
          ¦  «        o*| j        t          t          t          t          j        j        fvS t          | t          ¦  «        ot          | t          t          f¦  «         S )aË  Test if the given type is a generic type. This includes Generic itself, but
    excludes special typing constructs such as Union, Tuple, Callable, ClassVar.
    Examples::

        is_generic_type(int) == False
        is_generic_type(Union[int, str]) == False
        is_generic_type(Union[int, T]) == False
        is_generic_type(ClassVar[List[int]]) == False
        is_generic_type(Callable[..., T]) == False

        is_generic_type(Generic) == True
        is_generic_type(Generic[T]) == True
        is_generic_type(Iterable[int]) == True
        is_generic_type(Mapping) == True
        is_generic_type(MutableMapping[T, List[int]]) == True
        is_generic_type(Sequence[Union[str, bytes]]) == True
    )Ú
NEW_TYPINGr   ÚtypeÚ
issubclassr
   ÚtypingGenericAliasr!   r   Útupler   ÚcollectionsÚabcr   r   r   r   ©Útps    r$   Úis_generic_typer0   f   s‘   € õ$ ð YÝ˜2�tÑ$Ô$Ð@­°B½Ñ)@Ô)@ð XÝ˜2Õ1Ñ2Ô2ð XØ”¥e­UµH½k¼oÔ>VÐ%WÐWð	Yõ �r�;Ñ'Ô'ð 6Ý�r�L­)Ð4Ñ5Ô5ð-6ð 7r%   c                 ó:  — t           r| t          u put          | t          ¦  «        r| j        t
          j        j        u pHt          | t          ¦  «        o3t          | t          ¦  «        ot          | t
          j        j        ¦  «        S t          | ¦  «        t          u S )a˜  Test if the type is a generic callable type, including subclasses
    excluding non-generic types and callables.
    Examples::

        is_callable_type(int) == False
        is_callable_type(type) == False
        is_callable_type(Callable) == True
        is_callable_type(Callable[..., int]) == True
        is_callable_type(Callable[[int, int], Iterable[str]]) == True
        class MyClass(Callable[[int], int]):
            ...
        is_callable_type(MyClass) == True

    For more general tests use callable(), for more precise test
    (excluding subclasses) use::

        get_origin(tp) is collections.abc.Callable  # Callable prior to Python 3.7
    )r'   r   r   r*   r!   r,   r-   r(   r)   r
   r   r.   s    r$   Úis_callable_typer2   €   s‹   € õ& ð :Ø•h�ð 9¥*¨RÕ1CÑ"DÔ"Dð #:Ø”¥¤Ô!9Ð9ð9å˜2�tÑ$Ô$ð 9­°B½Ñ)@Ô)@ð 9Ý˜2�{œÔ7Ñ8Ô8ð	:õ �‰8Œ8•|Ð#Ð#r%   c                 ó  — t           rk| t          u pat          | t          ¦  «        r| j        t
          u p>t          | t          ¦  «        o)t          | t          ¦  «        ot          | t
          ¦  «        S t          | ¦  «        t          u S )a   Test if the type is a generic tuple type, including subclasses excluding
    non-generic classes.
    Examples::

        is_tuple_type(int) == False
        is_tuple_type(tuple) == False
        is_tuple_type(Tuple) == True
        is_tuple_type(Tuple[str, int]) == True
        class MyClass(Tuple[str, int]):
            ...
        is_tuple_type(MyClass) == True

    For more general tests use issubclass(..., tuple), for more precise test
    (excluding subclasses) use::

        get_origin(tp) is tuple  # Tuple prior to Python 3.7
    )
r'   r   r   r*   r!   r+   r(   r)   r
   r   r.   s    r$   Úis_tuple_typer4   ›   s�   € õ$ ð 'Ø•e�ð &�z¨"Õ.@ÑAÔAð  'Ø”¥Ð&ð&å˜2�tÑ$Ô$ð &­°B½Ñ)@Ô)@ð &Ý˜2�uÑ%Ô%ð	'õ �‰8Œ8•yÐ Ð r%   c                 óš   — | t          d¦  «        u rdS t          | ¦  «        r(t          d„ t          | d¬¦  «        D ¦   «         ¦  «        S dS )a  Test if the type is type(None), or is a direct union with it, such as Optional[T].

    NOTE: this method inspects nested `Union` arguments but not `TypeVar` definition
    bounds and constraints. So it will return `False` if
     - `tp` is a `TypeVar` bound, or constrained to, an optional type
     - `tp` is a `Union` to a `TypeVar` bound or constrained to an optional type,
     - `tp` refers to a *nested* `Union` containing an optional type or one of the above.

    Users wishing to check for optionality in types relying on type variables might wish
    to use this method in combination with `get_constraints` and `get_bound`
    NTc              3   ó4   K  — | ]}t          |¦  «        V — Œd S ©N)Úis_optional_type)Ú.0Útts     r$   ú	<genexpr>z#is_optional_type.<locals>.<genexpr>Å   s+   è è € ÐNÐN¨BÕ# BÑ'Ô'ÐNÐNÐNÐNÐNÐNr%   )ÚevaluateF)r(   Úis_union_typeÚanyÚget_argsr.   s    r$   r8   r8   µ   sY   € ð 
�T�$‰ZŒZÐÐØˆtÝ	�rÑ	Ô	ð ÝÐNÐNµ(¸2ÈÐ2MÑ2MÔ2MÐNÑNÔNÑNÔNÐNàˆur%   c                 ó¢   — t           r,| t          u p"t          | t          ¦  «        o| j        t          u S t
          ot          | ¦  «        t          u S )z¥Test if the type is a final type. Examples::

        is_final_type(int) == False
        is_final_type(Final) == True
        is_final_type(Final[int]) == True
    )r'   r   r   r*   r!   Ú
WITH_FINALr(   r   r.   s    r$   Úis_final_typerB   Ê   sP   € õ ð OØ•e�ð NÝ˜2Õ1Ñ2Ô2ÐM°r´}ÍÐ7Mð	OåÐ,�$˜r™(œ(¥fÐ,Ð,r%   c                 óÌ   — t           rH| t          u p>t          | t          ¦  «        o| j        t          u pt
          ot          | t
          ¦  «        S t          | ¦  «        t          u S )a)  Test if the type is a union type. Examples::

        is_union_type(int) == False
        is_union_type(Union) == True
        is_union_type(Union[int, int]) == False
        is_union_type(Union[T, int]) == True
        is_union_type(int | int) == False
        is_union_type(T | int) == True
    )r'   r   r   r*   r!   ÚMaybeUnionTyper(   r   r.   s    r$   r=   r=   Ý   se   € õ ð EØ•e�ð DÝ˜BÕ 2Ñ3Ô3ÐN¸¼ÍÐ8NðDåÐB¥J¨rµ>Ñ$BÔ$Bð	Eõ �‰8Œ8•vÐÐr%   r   c                 ó¼   — t           r,| t          v p"t          | t          ¦  «        o| j        t          v S t
          o"t          | ¦  «        t          t          ¦  «        u S r7   )r'   ÚLITERALSr   r*   r!   ÚWITH_LITERALr(   r   r.   s    r$   Úis_literal_typerH   ó   sT   € Ýð RØ•h�ð QÝ˜2Õ1Ñ2Ô2ÐP°r´}ÍÐ7Pð	RåÐ5�D ™HœH­­W©¬Ð5Ð5r%   c                 ó.   — t          | ¦  «        t          u S )z§Test if the type represents a type variable. Examples::

        is_typevar(int) == False
        is_typevar(T) == True
        is_typevar(Union[T, int]) == False
    )r(   r   r.   s    r$   Ú
is_typevarrJ   ú   s   € õ �‰8Œ8•wÐÐr%   c                 ó¦   — t           r,| t          u p"t          | t          ¦  «        o| j        t          u S t
          rt          | ¦  «        t          u S dS )zàTest if the type represents a class variable. Examples::

        is_classvar(int) == False
        is_classvar(ClassVar) == True
        is_classvar(ClassVar[int]) == True
        is_classvar(ClassVar[List[T]]) == True
    F)r'   r   r   r*   r!   ÚWITH_CLASSVARr(   r   r.   s    r$   Úis_classvarrM     sW   € õ ð Ø•h�ð QÝ˜2Õ1Ñ2Ô2ÐP°r´}ÍÐ7Pð	Rå	ð Ý�B‰xŒx�9Ð$Ð$àˆur%   c                 ó@  — t           sdS t          j        dd…         dk    rKt          j        j        dk    r6| t          t
          j        fv p t          | t          t
          j        f¦  «        S t          j        dd…         dk    rv	 t          | t
          j        ¦  «        }|r|S n# t          $ r Y nw xY w| t          t
          j        fv p0t          | dd¦  «        duot          | dd	¦  «        d
k    o| j	        dv S | t          u pt          | dd¦  «        duo| j	        dv S )zýTests if the type represents a distinct type. Examples::

        is_new_type(int) == False
        is_new_type(NewType) == True
        is_new_type(NewType('Age', int)) == True
        is_new_type(NewType('Scores', List[Dict[str, float]])) == True
    FNr   )r   é
   r   Úbeta)r   r   r   Ú__supertype__Ú__qualname__Ú zNewType.<locals>.new_type)ÚtypingÚtyping_extensions)
ÚWITH_NEWTYPEÚsysÚversion_infoÚreleaselevelr   rU   r   Ú	TypeErrorÚgetattrÚ
__module__)r/   Úress     r$   Úis_new_typer^     sk  € õ ð DØˆuÝ	Ô	˜"˜1˜"Ô	 Ò	+Ð	+µÔ0@Ô0MÐQWÒ0WÐ0WØ•wÕ 1Ô 9Ð:Ð:ð EÝ˜2¥Õ):Ô)BÐCÑDÔDð	Få	Ô	˜"˜1˜"Ô	 Ò	*Ð	*ð	Ý˜RÕ!2Ô!:Ñ;Ô;ˆCð ð Ø�
ðøõ ð 	ð 	ð 	ØˆDð	øøøð
 •wÕ 1Ô 9Ð:Ð:ð CÝ˜˜_¨dÑ3Ô3¸4Ð?ð BÝ˜˜^¨RÑ0Ô0Ð4OÒOðBà”Ð"AÐAð	Dð •g�ð CÝ˜˜_¨dÑ3Ô3¸4Ð?ð BØ”Ð"AÐAð	Ds   ÂB% Â%
B2Â1B2c                 ód   — t           st          | t          ¦  «        S t          | t          ¦  «        S )zÎTests if the type is a :class:`typing.ForwardRef`. Examples::

        u = Union["Milk", Way]
        args = get_args(u)
        is_forward_ref(args[0]) == True
        is_forward_ref(args[1]) == False
    )r'   r   r   r   r.   s    r$   Úis_forward_refr`   6  s,   € õ ð +Ý˜"�kÑ*Ô*Ð*Ý�b�*Ñ%Ô%Ð%r%   c                 ó„   — t           rt          d¦  «        ‚t          ¦   «         }t          | d|¦  «        }||u rdS |€| S |S )aÍ  Get the last base of (multiply) subscripted type. Supports generic types,
    Union, Callable, and Tuple. Returns None for unsupported types.
    Examples::

        get_last_origin(int) == None
        get_last_origin(ClassVar[int]) == None
        get_last_origin(Generic[T]) == Generic
        get_last_origin(Union[T, int][str]) == Union[T, int]
        get_last_origin(List[Tuple[T, T]][int]) == List[Tuple[T, T]]
        get_last_origin(List) == List
    zEThis function is only supported in Python 3.6, use get_origin insteadr!   N)r'   Ú
ValueErrorÚobjectr[   )r/   ÚsentinelÚorigins      r$   Úget_last_originrf   C  s\   € õ ð 4Ýð 3ñ 4ô 4ð 	4å‰xŒx€HÝ�R˜ xÑ0Ô0€FØ�ÐÐØˆtØ€~Øˆ	Ø€Mr%   c                 ó|  — t           r>t          | t          ¦  «        r| j        t          ur| j        ndS | t
          u rt
          S dS t          | t          ¦  «        rt          | ¦  «        S t          | ¦  «        rt          S t          | ¦  «        rt          S t          | ¦  «        rt           r	| j        p| S t          S dS )aª  Get the unsubscripted version of a type. Supports generic types, Union,
    Callable, and Tuple. Returns None for unsupported types. Examples::

        get_origin(int) == None
        get_origin(ClassVar[int]) == None
        get_origin(Generic) == Generic
        get_origin(Generic[T]) == Generic
        get_origin(Union[T, int]) == Union
        get_origin(List[Tuple[T, T]][int]) == list  # List prior to Python 3.7
    N)r'   r   r*   r!   r   r
   r   r   r=   r   r4   r   rH   r   r.   s    r$   Ú
get_originrh   [  sÂ   € õ ð Ý�bÕ,Ñ-Ô-ð 	LØ$&¤M½Ð$AÐ$A�2”=�=ÀtÐKØ•ˆ=ˆ=ÝˆNØˆtÝ�"•kÑ"Ô"ð Ý�R‰yŒyÐÝ�RÑÔð ÝˆÝ�RÑÔð ÝˆÝ�rÑÔð Ýð 	'Ø”=Ð& BÐ&Ýˆàˆ4r%   c                 óì  — t           �r7t          | ¦  «        r6g }| j        �| j        ndD ]}|t          |¦  «        z  }Œt	          |¦  «        S t          | ¦  «        r6g }| j        �| j        ndD ]}|t          |¦  «        z  }Œt	          |¦  «        S t          | ¦  «        rœg }| j        }|€dS |D ]y}t          |¦  «        rt          |¦  «        n|fD ]U}t          |¦  «        r't          |t          ¦  «        st          d|z  ¦  «        ‚|€g }||vr|                     |¦  «         ŒVŒz|�t	          |¦  «        S dS dS t          rat          | t           ¦  «        rt#          | d¦  «        s3t          | t$          ¦  «        r%t'          | t(          ¦  «        r| t(          ur| j        S dS t          | ¦  «        s-t          | ¦  «        st+          | ¦  «        st          | ¦  «        r| j        �| j        ndS dS )a>  Return type parameters of a parameterizable type as a tuple
    in lexicographic order. Parameterizable types are generic types,
    unions, tuple types and callable types. Examples::

        get_parameters(int) == ()
        get_parameters(Generic) == ()
        get_parameters(Union) == ()
        get_parameters(List[int]) == ()

        get_parameters(Generic[T]) == (T,)
        get_parameters(Tuple[List[T], List[S_co]]) == (T, S_co)
        get_parameters(Union[S_co, Tuple[T, T]][int, U]) == (U,)
        get_parameters(Mapping[T, Tuple[S_co, T]]) == (T, S_co)
    N© zKCannot inherit from a generic class parameterized with non-type-variable %sÚ__parameters__)ÚLEGACY_TYPINGr=   Ú__union_params__Úget_parametersr+   r4   Ú__tuple_params__r0   rk   r?   Ú_has_type_varr   r   rZ   Úappendr'   r*   r    r(   r)   r
   r2   )r/   ÚparamsÚargÚbase_paramsÚbp_Úbps         r$   rn   rn   z  st  € õ ñ 3å˜ÑÔð 	ØˆFØ/1Ô/BÐ/N˜Ô+Ð+ÐTVð .ð .�Ø�.¨Ñ-Ô-Ñ-��Ý˜‘=”=Ð Ý˜2ÑÔð 	ØˆFØ/1Ô/BÐ/N˜Ô+Ð+ÐTVð .ð .�Ø�.¨Ñ-Ô-Ñ-��Ý˜‘=”=Ð Ý˜RÑ Ô ð 	ØˆFØÔ+ˆKØÐ"Ø�rØ"ð 
*ð 
*�Ý,9¸#Ñ,>Ô,>ÐJ�8 C™=œ=˜=ÀSÀFð 	*ð 	*�BÝ$ RÑ(Ô(ð 9µ¸BÅÑ1HÔ1Hð 9Ý'ð3à57ñ8ñ9ô 9ð 9ð �~Ø!#˜Ø Ð'Ð'ØŸš bÑ)Ô)Ð)øð	*ð Ð!Ý˜V‘}”}Ð$à�rà�2Ý	ð õ ˜rÕ#5Ñ6Ô6ð		õ ˜BÐ 0Ñ1Ô1ð		õ
 ˜2�tÑ$Ô$ð		õ
 *4°B½Ñ)@Ô)@ð		ð �'Ð!Ð!ØÔ$Ð$à�2å˜ÑÔðÝ,¨RÑ0Ô0ðå˜ÑÔðå -¨bÑ 1Ô 1ðð %'Ô$5Ð$AˆrÔ Ð ÀrÐIàˆrr%   c                 ó^  — t           rt          d¦  «        ‚t          | ¦  «        r| j        �| j        fndS t	          | ¦  «        rH	 | j        �t          | j        ¦  «        dk    r| j        S n# t          $ r Y nw xY w| j        �| j        ndS t          | ¦  «        r1	 | j        �| j        ndS # t          $ r | j
        �| j
        ndcY S w xY wt          | ¦  «        r| j        �| j        ndS t          | ¦  «        r1	 | j        �| j        ndS # t          $ r | j        �| j        ndcY S w xY wdS )a¿  Get last arguments of (multiply) subscripted type.
       Parameters for Callable are flattened. Examples::

        get_last_args(int) == ()
        get_last_args(Union) == ()
        get_last_args(ClassVar[int]) == (int,)
        get_last_args(Union[T, int]) == (T, int)
        get_last_args(Iterable[Tuple[T, S]][int, T]) == (int, T)
        get_last_args(Callable[[T], int]) == (T, int)
        get_last_args(Callable[[], int]) == (int,)
    zCThis function is only supported in Python 3.6, use get_args insteadNrj   r   )r'   rb   rM   Ú__type__r0   Ú__args__ÚlenÚAttributeErrorrk   r=   rm   r2   r4   ro   r.   s    r$   Úget_last_argsr|   ¿  s¬  € õ ð Ýð 1ñ 2ô 2ð 	2å	�R‰Œð Ø!#¤Ð!8�”ˆ~ˆ~¸bÐ@Ý	˜Ñ	Ô	ð ð	ØŒ{Ð&­3¨r¬{Ñ+;Ô+;¸aÒ+?Ð+?Ø”{Ð"øøÝð 	ð 	ð 	àˆDð	øøøð %'Ô$5Ð$AˆrÔ Ð ÀrÐIÝ	�rÑ	Ô	ð ð	RØ"$¤+Ð"9�2”;�;¸rÐAøÝð 	Rð 	Rð 	Rà*,Ô*=Ð*I�2Ô&Ð&ÈrÐQÐQÐQð	Røøøõ 
˜"Ñ	Ô	ð 	Ø œkÐ5ˆrŒ{ˆ{¸2Ð=Ý	�rÑ	Ô	ð ð	RØ"$¤+Ð"9�2”;�;¸rÐAøÝð 	Rð 	Rð 	Rà*,Ô*=Ð*I�2Ô&Ð&ÈrÐQÐQÐQð	Røøøð ˆrs6   Á%A. Á.
A;Á:A;ÂB. Â.CÃ
CÃ=D ÄD*Ä)D*c                 óô  — g }| D �]d}t          |t          ¦  «        s|                     |¦  «         Œ.t          |d         ¦  «        rÊt	          |dd…         ¦  «        }t          |¦  «        dk    r)|                     t          g |d         f         ¦  «         Œ–|d         t          u r)|                     t          d|d         f         ¦  «         ŒÎ|                     t          t          |dd…         ¦  «        |d         f         ¦  «         �Œ|                     t          |d         ¦  «         
                    |d         t	          |dd…         ¦  «        ¦  «        ¦  «         �Œft          |¦  «        S )zInternal helper for get_args.r   é   Nr   .éÿÿÿÿ)r   r+   rq   r2   Ú
_eval_argsrz   r   ÚEllipsisÚlistr(   Ú__getitem__)Úargsr]   rs   Úcallable_argss       r$   r€   r€   ê  sP  € à
€CØð Nñ NˆÝ˜#�uÑ%Ô%ð 	NØ�JŠJ�s‰OŒOˆOˆOÝ˜c !œfÑ%Ô%ð 		NÝ& s¨1¨2¨2¤wÑ/Ô/ˆMÝ�3‰xŒx˜1Š}ˆ}Ø—
’
�8 B¨°aÔ(8Ð$8Ô9Ñ:Ô:Ð:Ð:Ø�Q”�8Ð#Ð#Ø—
’
�8 C¨°qÔ)9Ð$9Ô:Ñ;Ô;Ð;Ð;à—
’
�8¥D¨°s¸°sÔ);Ñ$<Ô$<¸mÈBÔ>OÐ$OÔPÑQÔQÐQÑQà�JŠJ•t˜C œF‘|”|×/Ò/°°A´½
À3ÀqÀrÀrÄ7Ñ8KÔ8KÑLÔLÑMÔMÐMÑMÝ�‰:Œ:Ðr%   c                 ó²  — t           r´|�|st          d¦  «        ‚t          | t          ¦  «        rgt	          | d¦  «        rW| j        }t          | ¦  «        t          j        j	        u r.|d         t          urt          |dd…         ¦  «        |d         f}|S t          rt          | t          ¦  «        r| j        S dS t          | ¦  «        st          | ¦  «        r| j        �| j        fndS t!          | ¦  «        r	| j        pdS t%          | ¦  «        s.t'          | ¦  «        st)          | ¦  «        st+          | ¦  «        �r	 |                      ¦   «         }np# t.          $ rc t'          | ¦  «        rt1          | ¦  «        }nAt%          | ¦  «        rt3          | ¦  «        }n"t+          | ¦  «        rt5          | ¦  «        }nY dS Y nw xY wt          |t6          ¦  «        r|t9          |¦  «        dk    ri|s
|dd…         S t;          |dd…         ¦  «        }t          | ¦  «        t          u r.|d         t          urt          |dd…         ¦  «        |d         f}|S dS )a¬  Get type arguments with all substitutions performed. For unions,
    basic simplifications used by Union constructor are performed.
    On versions prior to 3.7 if `evaluate` is False (default),
    report result as nested tuple, this matches
    the internal representation of types. If `evaluate` is True
    (or if Python version is 3.7 or greater), then all
    type parameters are applied (this could be time and memory expensive).
    Examples::

        get_args(int) == ()
        get_args(Union[int, Union[T, int], str][int]) == (int, str)
        get_args(Union[int, Tuple[T, int]][str]) == (int, (Tuple, str, int))

        get_args(Union[int, Tuple[T, int]][str], evaluate=True) ==                  (int, Tuple[str, int])
        get_args(Dict[int, Tuple[T, T]][Optional[int]], evaluate=True) ==                  (int, Tuple[Optional[int], Optional[int]])
        get_args(Callable[[], T][int], evaluate=True) == ([], int,)
    Nz*evaluate can only be True in Python >= 3.7ry   r   r   rj   r~   )r'   rb   r   r*   r    ry   rh   r,   r-   r   r�   r‚   rD   rM   rB   rx   rH   Ú
__values__r0   r=   r2   r4   Ú
_subs_treer{   Ú_union_subs_treeÚ_generic_subs_treeÚ_tuple_subs_treer+   rz   r€   )r/   r<   r]   Útrees       r$   r?   r?   ý  su  € õ( ð ØÐ¨ÐÝÐIÑJÔJÐJå�bÕ,Ñ-Ô-ð 	µ'¸"¸jÑ2IÔ2Ið 	Ø”+ˆCÝ˜"‰~Œ~¥¤Ô!9Ð9Ð9¸cÀ!¼fÍHÐ>TÐ>TÝ˜C   œH‘~”~ s¨2¤wÐ/�ØˆJÝð 	�j¨­^Ñ<Ô<ð 	Ø”;ÐØˆrÝ�2�„ð A�-¨Ñ+Ô+ð AØ!#¤Ð!8�”ˆ~ˆ~¸bÐ@Ý�rÑÔð #ØŒ}Ð" Ð"å˜ÑÔðÝ,¨RÑ0Ô0ðå˜ÑÔðå -¨bÑ 1Ô 1ñð	Ø—=’=‘?”?ˆDˆDøÝð 	ð 	ð 	å˜RÑ Ô ð å'¨Ñ+Ô+��Ý  Ñ$Ô$ð å)¨"Ñ-Ô-��Ý˜rÑ"Ô"ð å'¨Ñ+Ô+��ð �r�røøð	øøøõ �d�EÑ"Ô"ð 	¥s¨4¡y¤y°1¢} }Øð  Ø˜A˜B˜B”x�Ý˜T ! " "œXÑ&Ô&ˆCÝ˜"‰~Œ~¥Ð)Ð)¨c°!¬f½HÐ.DÐ.DÝ˜C   œH‘~”~ s¨2¤wÐ/�ØˆJàˆ2s   ÅE ÅA'GÇGc                 ó€   — t          | ¦  «        rt          | dd¦  «        S t          dt          | ¦  «        z   ¦  «        ‚)zÙReturn the type bound to a `TypeVar` if any.

    It the type is not a `TypeVar`, a `TypeError` is raised.
    Examples::

        get_bound(TypeVar('T')) == None
        get_bound(TypeVar('T', bound=int)) == int
    Ú	__bound__Nútype is not a `TypeVar`: ©rJ   r[   rZ   Ústrr.   s    r$   Ú	get_boundr’   A  s>   € õ �"�~„~ð ?Ý�r˜;¨Ñ-Ô-Ð-åÐ3µc¸"±g´gÑ=Ñ>Ô>Ð>r%   c                 ó€   — t          | ¦  «        rt          | dd¦  «        S t          dt          | ¦  «        z   ¦  «        ‚)zêReturns the constraints of a `TypeVar` if any.

    It the type is not a `TypeVar`, a `TypeError` is raised
    Examples::

        get_constraints(TypeVar('T')) == ()
        get_constraints(TypeVar('T', int, str)) == (int, str)
    Ú__constraints__rj   r�   r�   r.   s    r$   Úget_constraintsr•   Q  s?   € õ �"�~„~ð ?Ý�rÐ,¨bÑ1Ô1Ð1åÐ3µc¸"±g´gÑ=Ñ>Ô>Ð>r%   c                 óJ   — t          | dd¦  «        }|�|nt          | ¦  «        S )a6  Get the generic type of an object if possible, or runtime class otherwise.
    Examples::

        class Node(Generic[T]):
            ...
        type(Node[int]()) == Node
        get_generic_type(Node[int]()) == Node[int]
        get_generic_type(Node[T]()) == Node[T]
        get_generic_type(1) == int
    Ú__orig_class__N)r[   r(   )ÚobjÚgen_types     r$   Úget_generic_typerš   a  s+   € õ �sÐ,¨dÑ3Ô3€HØÐ+ˆ8ˆ8µ°c±´Ð:r%   c                 ón   — t           rt          d„ | j        D ¦   «         ¦  «        S t          | dd¦  «        S )a  Get generic base types of a type or empty tuple if not possible.
    Example::

        class MyClass(List[int], Mapping[str, List[int]]):
            ...
        MyClass.__bases__ == (List, Mapping)
        get_generic_bases(MyClass) == (List[int], Mapping[str, List[int]])
    c              3   óD   K  — | ]}t          |t          ¦  «        ¯|V — Œd S r7   )r   r   )r9   Úts     r$   r;   z$get_generic_bases.<locals>.<genexpr>{  s1   è è € ÐKÐK˜1µ
¸1½kÑ0JÔ0JÐK�QÐKÐKÐKÐKÐKÐKr%   Ú__orig_bases__rj   )rl   r+   Ú	__bases__r[   r.   s    r$   Úget_generic_basesr    q  s>   € õ ð 1ÝÐKÐK ¤ÐKÑKÔKÑKÔKÐKå�rÐ+¨RÑ0Ô0Ð0r%   c                 óp   — t          | t          t          f¦  «        r| j                             ¦   «         S dS )aƒ  If td is a TypedDict class, return a dictionary mapping the typed keys to types.
    Otherwise, return None. Examples::

        class TD(TypedDict):
            x: int
            y: int
        class Other(dict):
            x: int
            y: int

        typed_dict_keys(TD) == {'x': int, 'y': int}
        typed_dict_keys(dict) == None
        typed_dict_keys(Other) == None
    N)r   Ú_TypedDictMeta_MypyÚ_TypedDictMeta_TEÚ__annotations__Úcopy)Útds    r$   Útyped_dict_keysr§   €  s7   € õ �"Õ*Õ,=Ð>Ñ?Ô?ð )ØÔ!×&Ò&Ñ(Ô(Ð(Øˆ4r%   c                 ó2   — t          | ¦  «        r| j        ndS )a  
    If fr is a ForwardRef, return the string representation of the forward reference.
    Otherwise return None. Examples::

        tp = List["FRef"]
        fr = get_args(tp)[0]
        get_forward_arg(fr) == "FRef"
        get_forward_arg(tp) == None
    N)r`   Ú__forward_arg__)Úfrs    r$   Úget_forward_argr«   ”  s   € õ "0°Ñ!3Ô!3Ð=ˆ2ÔÐ¸Ð=r%   c                 óB  — |€g }t          | ¦  «        rt          | ||¦  «        S t          | ¦  «        rt          | ||¦  «        S t	          | ¦  «        rt          | ||¦  «        S t          | t          ¦  «        r%t          |¦  «        D ]\  }}| |k    r
||         c S Œ| S )zbackport of _replace_arg)	r=   r‰   r4   r‹   r0   rŠ   r   r   Ú	enumerate)rs   Útvarsr„   ÚiÚtvars        r$   Ú_replace_argr±   £  sÁ   € à€}Øˆõ �SÑÔð 2Ý  U¨DÑ1Ô1Ð1Ý�SÑÔð 2Ý  U¨DÑ1Ô1Ð1Ý�sÑÔð 4Ý! # u¨dÑ3Ô3Ð3Ý�#•wÑÔð Ý  Ñ'Ô'ð 	ð 	‰GˆAˆtØ�dŠ{ˆ{Ø˜A”w���ð à€Jr%   c                 ó  ‡‡— g }| D ]œ}t          |t          ¦  «        r|                     |j        ¦  «         Œ2t          |t          ¦  «        r@t          |¦  «        dk    r-|d         t          u r|                     |dd…         ¦  «         Œ‡|                     |¦  «         Œ�t          |¦  «        Št          ‰¦  «        t          |¦  «        k     rCg }|D ]0}|‰v r*|                     |¦  «         ‰ 	                    |¦  «         Œ1|}‰r
J ‰¦   «         ‚t          |¦  «        Š|D ]LŠt          ‰t          ¦  «        sŒt          ˆfd„‰‰hz
  D ¦   «         ¦  «        r‰ 	                    ‰¦  «         ŒMt	          ˆfd„|D ¦   «         ¦  «        S )z backport of _remove_dups_flattenr   r~   Nc              3   óÔ   •K  — | ]b}t          |t          ¦  «        rt          |¦  «        ­&t          |t          ¦  «        °;t          |t          ¦  «        ot          ‰|¦  «        V — Œcd S r7   )r   r   rh   r   r(   r)   )r9   Út2Út1s     €r$   r;   z'_remove_dups_flatten.<locals>.<genexpr>Õ  s|   øè è € ð 1ð 1ØÝ" 2¥{Ñ3Ô3ð1õ # 2™œÐ2Ý! "¥gÑ.Ô.ð 3õ ˜"�dÑ#Ô#Ð:­
°2°rÑ(:Ô(:ð 3Ð2Ð2Ð2ð1ð 1r%   c              3   ó$   •K  — | ]
}|‰v ¯|V — Œd S r7   rj   )r9   r�   Ú
all_paramss     €r$   r;   z'_remove_dups_flatten.<locals>.<genexpr>Û  s'   øè è € Ð6Ð6�q a¨: o o� o o o oÐ6Ð6r%   )r   r   Úextendrm   r+   rz   r   rq   ÚsetÚremover(   r>   )Ú
parametersrr   ÚpÚ
new_paramsr�   r·   rµ   s        @@r$   Ú_remove_dups_flattenr¾   ¶  sÍ  øø€ ð €FØð ð ˆÝ�a�Ñ Ô ð 	Ø�MŠM˜!Ô,Ñ-Ô-Ð-Ð-Ý˜�5Ñ!Ô!ð 	¥c¨!¡f¤f¨q¢j j°Q°q´T½U°]°]Ø�MŠM˜!˜A˜B˜Bœ%Ñ Ô Ð Ð à�MŠM˜!ÑÔÐÐå�V‘”€JÝ
ˆ:�„�˜V™œÒ$Ð$Øˆ
Øð 	%ð 	%ˆAØ�JˆˆØ×!Ò! !Ñ$Ô$Ð$Ø×!Ò! !Ñ$Ô$Ð$øØˆØÐ)Ð)˜zÑ)Ô)Ð)õ �V‘”€JØð "ð "ˆÝ˜"�dÑ#Ô#ð 	ØÝð 1ð 1ð 1ð 1Ø# r dÑ*ð1ñ 1ô 1ñ 1ô 1ð 	"ð
 ×Ò˜bÑ!Ô!Ð!øÝÐ6Ð6Ð6Ð6˜FÐ6Ñ6Ô6Ñ6Ô6Ð6r%   c           
      óÔ  — d„ } || ¦  «        }|€ t          | ¦  «        st          | ¦  «        s| S g } ||¦  «        �+|                     |¦  «          ||¦  «        } ||¦  «        ­+g }d„ } || ¦  «        D ]&}|                     t          |||¦  «        ¦  «         Œ'|D ]E}	g }
 ||	¦  «        D ]3}|
                     t          |t	          |	¦  «        |¦  «        ¦  «         Œ4|
}ŒF|S )z;backport of typing._subs_tree, adapted for legacy versions c                 ó4   — 	 | j         S # t          $ r Y d S w xY wr7   )r!   r{   r"   s    r$   Ú_get_originz_subs_tree.<locals>._get_originà  s1   € ð	Ø”>Ð!øÝð 	ð 	ð 	Ø�4�4ð	øøøs   ‚	 ‰
–Nc                 ó    — t          | ¦  «        r| j        }n2t          | ¦  «        r| j        }n	 | j        }n# t
          $ r d}Y nw xY w|�|ndS )Nrj   )r=   rm   r4   ro   ry   r{   )r#   Úcls_argss     r$   Ú	_get_argsz_subs_tree.<locals>._get_argsô  sw   € Ý˜ÑÔð 	ØÔ+ˆHˆHÝ˜3ÑÔð 	ØÔ+ˆHˆHðØœ<��øÝ!ð ð ð Ø���ðøøøà#Ð/ˆxˆx°RÐ7s   °8 ¸AÁA)r=   r4   rq   r±   rn   )r#   r®   r„   rÁ   ÚcurrentÚ
orig_chainÚ	tree_argsrÄ   rs   ÚoclsÚnew_tree_argss              r$   rˆ   rˆ   Þ  sN  € ðð ð ð ˆk˜#ÑÔ€GØ€Ý˜SÑ!Ô!ð 	­-¸Ñ*<Ô*<ð 	ØˆJð €JØ
ˆ+�gÑ
Ô
Ð
*Ø×Ò˜'Ñ"Ô"Ð"Ø�+˜gÑ&Ô&ˆð ˆ+�gÑ
Ô
Ð
*ð
 €Ið
8ð 
8ð 
8ð ˆy˜‰~Œ~ð 9ð 9ˆØ×Ò� c¨5°$Ñ7Ô7Ñ8Ô8Ð8Ð8àð "ð "ˆØˆØ�9˜T‘?”?ð 	Uð 	UˆCØ× Ò ¥¨cµ>À$Ñ3GÔ3GÈÑ!SÔ!SÑTÔTÐTÐTØ!ˆ	ˆ	ØÐr%   c                 ó®   — | t           u rt           S t          | ||¦  «        }t          |¦  «        }t          |¦  «        dk    r|d         S t           f|z   S )z backport of Union._subs_tree r~   r   )r   rˆ   r¾   rz   ©r/   r®   r„   rÇ   s       r$   r‰   r‰     sV   € à	�U€{€{ÝˆÝ˜2˜u dÑ+Ô+€Iå$ YÑ/Ô/€IÝ
ˆ9�~„~˜ÒÐØ˜Œ|ÐÝˆ8�iÑÐr%   c                 óv   — | j         €| S t          | ||¦  «        }t          | ¦  «        ft          |¦  «        z   S )z$ backport of GenericMeta._subs_tree )r!   rˆ   r   r+   rË   s       r$   rŠ   rŠ     s;   € à	„}ÐØˆ	Ý˜2˜u dÑ+Ô+€IÝ�"‰IŒIˆ<�% 	Ñ*Ô*Ñ*Ð*r%   c                 ót   — | t           u rt           S t          | ||¦  «        }t           ft          |¦  «        z   S )z7 ad-hoc function (inspired by union) for legacy typing )r   rˆ   r+   rË   s       r$   r‹   r‹     s6   € à	�U€{€{ÝˆÝ˜2˜u dÑ+Ô+€IÝˆ8•e˜IÑ&Ô&Ñ&Ð&r%   c                 óþ   — | €dS t          | ¦  «        rt          | ¦  «        S t          | ¦  «        rt          | ¦  «        S t	          | ¦  «        rt          | ¦  «        S t          | ¦  «        rt          | ¦  «        S dS )NF)r=   Ú_union_has_type_varr4   Ú_tuple_has_type_varr0   Ú_generic_has_type_varr2   Ú_callable_has_type_var)r�   s    r$   rp   rp   '  s‰   € Ø€yØˆuÝ	�qÑ	Ô	ð 	Ý" 1Ñ%Ô%Ð%Ý	�qÑ	Ô	ð Ý" 1Ñ%Ô%Ð%Ý	˜Ñ	Ô	ð Ý$ QÑ'Ô'Ð'Ý	˜!Ñ	Ô	ð Ý% aÑ(Ô(Ð(àˆur%   c                 óL   — | j         r| j         D ]}t          |¦  «        r dS ŒdS ©NTF)rm   rp   ©r/   r�   s     r$   rÏ   rÏ   6  ó@   € Ø	Ôð ØÔ$ð 	ð 	ˆAÝ˜QÑÔð Ø�t�tðàˆ5r%   c                 óL   — | j         r| j         D ]}t          |¦  «        r dS ŒdS rÔ   )ro   rp   rÕ   s     r$   rÐ   rÐ   >  rÖ   r%   c                 óp   — | j         r| j         D ]}t          |¦  «        r dS Œt          | j        ¦  «        S )NT)ry   rp   Ú
__result__rÕ   s     r$   rÒ   rÒ   F  sI   € Ø	„{ð Ø”ð 	ð 	ˆAÝ˜QÑÔð Ø�t�tðå˜œÑ'Ô'Ð'r%   c                 óL   — | j         r| j         D ]}t          |¦  «        r dS ŒdS rÔ   )rk   rp   rÕ   s     r$   rÑ   rÑ   N  s@   € Ø	Ôð ØÔ"ð 	ð 	ˆAÝ˜QÑÔð Ø�t�tðàˆ5r%   r7   )NN)SÚ__doc__rW   ÚtypesrT   rU   Úmypy_extensionsr   r¢   rX   r£   ÚImportErrorr   r(   r'   Úcollections.abcr,   rA   rG   rL   rV   rl   r
   r   r   r   r   r   r   r   r   r   r   r   ÚGenericAliasr*   r   r   r   r   r   r   r   r   r0   r2   r4   r8   rB   Ú	UnionTyperD   r{   r=   rF   r    ÚaddrH   rJ   rM   r^   r`   rf   rh   rn   r|   r€   r?   r’   r•   rš   r    r§   r«   r±   r¾   rˆ   r‰   rŠ   r‹   rp   rÏ   rÐ   rÒ   rÑ   rj   r%   r$   ú<module>rã      sí  ððð ð €
€
€
Ø €€€Ø €€€Ø Ð Ð Ð à AÐ AÐ AÐ AÐ AÐ Að �Ô   ! Ô$Ð0Ð0Ò0Ð0 yÒ0Ð0Ð0Ð0Ð0ØEÐEÐEÐEÐEÐEÐEØÔ�b�q�bÔ˜YÒ&Ð&ð?ØIÐIÐIÐIÐIÐIÐIøØð ?ð ?ð ?Ø>Ð>Ð>Ð>Ð>Ð>Ð>Ð>ð?øøøð !Ð Ð Ð Ð Ð Ø˜˜Y™œÐàÔ˜b˜q˜bÔ! YÒ.€
Øð ØÐÐÐà€
Ø€Ø€Ø€Ø€àð .!ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 1Ð0Ð0Ð0Ð0Ð0Ð0Ð0Ø
Ô˜˜˜Ô˜yÒ(Ð(Ø/Ð/Ð/Ð/Ð/Ð/Ø+Ð-AÀ5ÔCUÐVÐÐà+Ð-ÐÐðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ðØ,Ð,Ð,Ð,Ð,Ð,Ð,Ð,Ð,øØð ð ð à��e‘”ˆØˆØˆˆˆð	øøøðØ,Ð,Ð,Ð,Ð,Ð,Ð,øØð ð ð ð	Ø%Ð%Ð%Ð%Ð%Ð%Ð%øØð 	ð 	ð 	ØˆJˆJˆJð	øøøøøðøøøð!Ø-Ð-Ð-Ð-Ð-Ð-Ð-øØð !ð !ð !ð	!Ø&Ð&Ð&Ð&Ð&Ð&Ð&øØð 	!ð 	!ð 	!Ø ˆLˆLˆLð	!øøøøøð!øøøð!Ø-Ð-Ð-Ð-Ð-Ð-Ð-øØð !ð !ð !ð	!Ø&Ð&Ð&Ð&Ð&Ð&Ð&øØð 	!ð 	!ð 	!Ø ˆLˆLˆLð	!øøøøøð!øøøðð ð ð7ð 7ð 7ð4$ð $ð $ð6!ð !ð !ð4ð ð ð*
-ð 
-ð 
-ðØ”_€N€NøØð ð ð Ø€N€N€Nðøøøðð ð ð" ˆ9€Ø
€7ˆ6�9ÑÔð !Ø‡L‚L�”Ñ Ô Ð ð6ð 6ð 6ðð ð ðð ð ð"Dð Dð Dð@
&ð 
&ð 
&ðð ð ð0ð ð ð>Bð Bð BðJ(ð (ð (ðVð ð ð&Að Að Að AðH?ð ?ð ?ð ?ð ?ð ?ð ;ð ;ð ;ð 1ð 1ð 1ðð ð ð(
>ð 
>ð 
>ðð ð ð&%7ð %7ð %7ðP*ð *ð *ð *ðZ	 ð 	 ð 	 ð 	 ð+ð +ð +ð +ð'ð 'ð 'ð 'ðð ð ðð ð ðð ð ð(ð (ð (ðð ð ð ð sØ   ÁA ÁA&Á%A&Ã:D ÄDÄDÄD% Ä%EÄ+D2Ä1EÄ2D<Ä9EÄ;D<Ä<EÅEÅE ÅE*ÅEÅE*ÅE$Å!E*Å#E$Å$E*Å)E*Å.E5 Å5FÅ;FÆFÆFÆ	FÆFÆFÆFÆ(F0 Æ0F:Æ9F: