
    Mh7                        U d Z ddlZddlZddlZddlZddlZ eed          r eed          Z	n# eed          r eed          Z	n
 e
             eed          r eed          ZndZ eed          r eed          ZndZ eed          r eed          ZndZdZej        eej        eej        eej        eej        eej        ej        j        ej        ej        j         ed          diZej        ej        ej         ej        ej!        ej        ej"        ej#        ej$        ej#        ej%        ej#        iZ&ej        eej'        f         e(d<   er	d	e)d
e*fdZ+nd	e)d
e*fdZ+d
ej,        e*         fdZ-d
ej,        e*         fdZ.d Z/ej0        Z0 eej                  Z1 eej2                  Z3ej2        dedf         Z'ej2        def         Z4ej2        eej5        e         ej        e         f         Z6de'd
e'fdZ7d Z8d
ej        fdZ9d%dZ: G d dej;                  Z<de6fdZ=de'd
e<fdZ>de4de4d
e*fdZ?ej2        ej        ej@        df         ejA        e<         e<f         ZBddddd ej,        ejC        eDef                  d
ej,        e*         fd!ZEde<de<d ej,        ejC        eDef                  d
ej,        e*         fd"ZF	 d%de'de'd ej,        e         d
ej,        e*         fd#ZGg d$ZHdS )&a}  
Backport Python3.8+ typing utils &amp; issubtype &amp; more

![Python 3.6](https://github.com/bojiang/typing_utils/workflows/Python%203.6/badge.svg)
![Python 3.7](https://github.com/bojiang/typing_utils/workflows/Python%203.7/badge.svg)
![Python 3.8](https://github.com/bojiang/typing_utils/workflows/Python%203.8/badge.svg)

## Install

``` bash
    pip install typing_utils
```
    N
ForwardRef_ForwardRefLiteral_TypedDictMeta	UnionTypeSTATIC_SUBTYPE_MAPPINGelementreturnc                 0    | t           j        u p| t          u S N)typingUnionr   r	   s    V/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/overrides/typing_utils.pyis_unionr   C   s    &,&>'Y*>>    c                     | t           j        u S r   )r   r   r   s    r   r   r   H   s    &,&&r   c                 h    t          |           rdS t          d | D                       rdS t          S )NTc              3      K   | ]}|d u V  	dS )FN .0es     r   	<genexpr>zoptional_all.<locals>.<genexpr>O   s&      
(
(!1:
(
(
(
(
(
(r   F)allunknownelementss    r   optional_allr   L   s>    
8}} t

(
(x
(
(
((( uNr   c                 h    t          |           rdS t          d | D                       rt          S dS )NTc              3      K   | ]}|d u V  	d S r   r   r   s     r   r   zoptional_any.<locals>.<genexpr>W   s&      
'
'19
'
'
'
'
'
'r   F)anyr   r   s    r   optional_anyr#   T   s>    
8}} t

'
'h
'
'
''' 5r   c                 J    	 t          |            n# t          $ r Y dS w xY wdS )z(Determine whether `value` can be hashed.FT)hash	TypeError)values    r   	_hashabler(   \   s;    U   uu4s    
  ztyping.TypeVartype_c                     t          | t          j                  r| S t          |           s
J d            | t          v rt          |          S | S )Nz9_normalize_aliases should only be called on element types)
isinstancer   TypeVarr(   BUILTINS_MAPPING)r)   s    r   _normalize_aliasesr.   o   sT    %(( UXXXXXX   &&Lr   c                 x   t          t          d          r!t          t          d          } ||           }nt          t          j        d          r\t	          | t
                    r| j        s| j        }nt          | d          r
| j        r| }ny| t          j        u rt          j        }n^d}n[t	          | t
                    r| j        }|| }n:t	          | t                    r| j        }n| t          j        u rt          j        }nd}|#t          rt	          | t                    rt          }t          |          S )a%  Get the unsubscripted version of a type.
    This supports generic types, Callable, Tuple, Union, Literal, Final and ClassVar.
    Return None for unsupported types.

    Examples:

    ```python
        from typing_utils import get_origin

        get_origin(Literal[42]) is Literal
        get_origin(int) is None
        get_origin(ClassVar[int]) is ClassVar
        get_origin(Generic) is Generic
        get_origin(Generic[T]) is Generic
        get_origin(Union[T, int]) is Union
        get_origin(List[Tuple[T, T]][int]) == list
    ```
    
get_origin_specialN)hasattrr   getattrListr+   GenericClassr1   
__origin__Generic
UnionClassr   dictr.   )r)   _getteroris      r   r0   r0   z   s2   & v|$$ &,//genn	j	)	) e\** 	5> 	"CCUJ'' 	EN 	CCfn$$.CCCCe\** 		"C{z** 	"CCfn$$.CCC
{~{*UN*K*K{c"""r   c                    t          t          d          r"t          t          d          } ||           }nt          t          j        d          rut	          | t
                    r]| j        sV| j        }t          |           t          j
        j        u r.|d         t          urt          |dd                   |d         f}nwd}ntt	          | t
          t          f          rV| j        }t          |           t          j
        j        u r.|d         t          urt          |dd                   |d         f}nd}t          r(t	          | t                    rt           t          j        fS |dn|S )a  Get type arguments with all substitutions performed.
    For unions, basic simplifications used by Union constructor are performed.

    Examples:

    ```python
        from typing_utils import get_args

        get_args(Dict[str, int]) == (str, int)
        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(Callable[[], T][int]) == ([], int)
    ```
    get_argsr1   r   Nr   )r2   r   r3   r4   r+   r5   r1   __args__r0   collectionsabcCallableEllipsislistr8   r   strAny)r)   r:   ress      r   r=   r=      sP     vz"" &*--genn	j	)	) ul++	49N	 .C%  KO$<<<QxAWAWCH~~s2w/CCelJ788 	.C%  KO$<<<QxAWAWCH~~s2w/C *UN;; FJ22#%r   c                    |pi }t          t          d          r.t          t          d          } || t                      |          S t          | d          r(t          | d          } |t                      |          S t	                      )z3
    eval forward_refs in all cPython versions
    
_eval_type)r2   r   r3   globalsNotImplementedError)refforward_refslocalnsrI   s       r   eval_forward_refrO      s      bGv|$$ 3V\22
z#wyy'222sL!! .S,//
z'))W---


r   c                   n    e Zd ZU dZeed<    e            Zej	        ee
f         ed<   d ZdefdZd ZdS )	NormalizedTypezK
    Normalized type, made it possible to compare, hash between types.
    originargsc                 `   t          |t                    r| j        |j        k    rdS t          | j        t                    r:t          |j        t                    r | j        |j        k    o|j        | j        k    S | j        |j        k    o| j        |j        k    S | j        s| j        |k    S dS )NF)r+   rQ   rR   rS   	frozenset)selfothers     r   __eq__zNormalizedType.__eq__   s    e^,, 	K{el**u$)Y// KJuz94U4U KyEJ.J5:3JJ;%,.J49
3JJy 	(;%''ur   r
   c                 n    | j         st          | j                  S t          | j        | j         f          S r   )rS   r%   rR   rV   s    r   __hash__zNormalizedType.__hash__   s3    y 	%$$$T[$),---r   c                 D    | j         s| j         S | j         d| j          dS )N[z]))rS   rR   rZ   s    r   __repr__zNormalizedType.__repr__   s2    y 	$k##+--	----r   N)__name__
__module____qualname____doc__Type__annotations__tuplerS   r   r   rU   rX   intr[   r^   r   r   r   rQ   rQ      s           LLL+0577D&,ui'
(222	 	 	.# . . . .
. . . . .r   rQ   tpsc                 .   t          | t                    r| S t          | t          j        j                  rt          d | D                       S t          | t          j        j                  rt          d | D                       S t          |           S )Nc              3   4   K   | ]}t          |          V  d S r   _normalize_argsr   r)   s     r   r   z"_normalize_args.<locals>.<genexpr>  s*      ==_U++======r   c              3   4   K   | ]}t          |          V  d S r   rj   rl   s     r   r   z"_normalize_args.<locals>.<genexpr>  s*      AAE//AAAAAAr   )	r+   rE   r@   rA   Sequencere   SetrU   	normalize)rg   s    r   rk   rk      s    #s 
#{/00 >========#{*++ BAASAAAAAAS>>r   c                 .   t          |           }t          |           }|st          t          |                     S t          |          }t	          |          rt          t          |                    }nt          |          }t          ||          S )z4
    convert types to NormalizedType instances.
    )r=   r0   rQ   r.   r   rk   rU   )r)   rS   rR   s      r   rp   rp   
  s     E??DF 9077888''F %y//t$$&$'''r   leftrightc                 *   | |u rdS | | t           v r|t           |          k    rdS t          | d          r |                                 D ]}||k    r dS t          | t                    r%t          |t                    rt          | |          S | |k    S )NTmro)r   r2   ru   r+   type
issubclass)rr   rs   parents      r   _is_origin_subtypery     s    u}}t 	***+D111ttU hhjj 	 	Ftt  $ '*UD"9"9 '$&&&5=r   .NormalizedTypeArgsrM   c                 *   t          | t                    r<t          t                    sdS | z
  }|sdS t          fd|D                       S t          | t          j        j                  rt          | t                    st          t          j        j                  rt          t                    rdS | rF| d         j        t          ur2r0d         j        t          u rt          fd| D                       S t          |           t                    k    rdS t          fdt          j        |           D                       S t          | t                    sJ t          t                    sJ t          |           S )NFTc              3   R   K   | ] t          fd D                       V  !dS )c              3   :   K   | ]}t          |          V  d S r   _is_normal_subtype)r   rr   rM   s     r   r   z4_is_origin_subtype_args.<locals>.<genexpr>.<genexpr>H  s0      FF1"1a66FFFFFFr   N)r"   )r   r   rM   rs   s    @r   r   z*_is_origin_subtype_args.<locals>.<genexpr>G  sU       
 
KLCFFFFFFFFFF
 
 
 
 
 
r   r>   c              3   F   K   | ]}t          |d                    V  dS )r   N_is_origin_subtype_args)r   lrM   rs   s     r   r   z*_is_origin_subtype_args.<locals>.<genexpr>Z  s4      XXa.q%(LIIXXXXXXr   c              3   P   K   | ] \  }}|d uo|d uot          ||          V  !d S r   r   )r   r   r   rM   s      r   r   z*_is_origin_subtype_args.<locals>.<genexpr>_  sa       
 
 1 TM <<'1l;;
 
 
 
 
 
r   )r+   rU   r   r@   rA   rn   rQ   rR   rC   len	itertoolszip_longestr   )rr   rs   rM   excludeds    `` r   r   r   8  s   
 $	"" 
%++ 	5%< 	4  
 
 
 
 
PX
 
 
 
 
 	
 $011 
*n; ; 
 %!9:: 	j>?
 ?
 	 5 	YRx// 0b	 H,, XXXXXSWXXXXXXt99E

""5 
 
 
 
 "-dE::	
 
 
 
 
 	
 dN+++++e^,,,,,dE<888r   c                     t           j        t                    r#t          t	           j                             t          j        t                    r#t          t	          j                            j        t
          j        u rdS t          j                  r/t           j                  rt           j	        j	                  S t          j                  r!t           fdj	        D                       S t           j                  r!t          fd j	        D                       S j        t          u rI j        t          urdS t           j	                                      t          j	                            S t           j        t
          j                  rt          j        t
          j                  rr j        j        u rdS t!           j        dd           }t!          j        dd           }||t"          S t%          t          |          t          |                    S t          j        t
          j                  rt"          S t           j        t
          j                  r=t!           j        dd           }|t"          S t%          t          |                    S  j	        s!j	        st'           j        j                  S j	        st'           j        j                  S t'           j        j                  rt           j	        j	                  S dS )N)rM   Tc              3   :   K   | ]}t          |          V  d S r   r~   )r   arM   rr   s     r   r   z%_is_normal_subtype.<locals>.<genexpr>  sA       
 
:;tQ55
 
 
 
 
 
r   c              3   :   K   | ]}t          |          V  d S r   r~   )r   r   rM   rs   s     r   r   z%_is_normal_subtype.<locals>.<genexpr>  sA       
 
;<q%66
 
 
 
 
 
r   F	__bound__)r+   rR   r   rp   rO   r   rF   r   r   rS   r#   r   r   setissubsetr,   r3   r   r   ry   )rr   rs   rM   
left_boundright_bounds   ```  r   r   r   l  s1   
 $+z** S)$+LQQQRR%,
++ U*5<lSSSTT |vz!!t  L(4;"7"7 L&ty%*lKKK 
 
 
 
 
 
?Dz
 
 
 
 
 	
  
 
 
 
 
 
@D	
 
 
 
 
 	

 |w;g%%549~~&&s5:777 $+v~.. 
:fn4 4 
 ;%,&&4T[+t<<
elK>>*"4N!j!!9[#9#9<
 
 	
 %,// $+v~.. NT[+t<<
N!)J"7"7MMM9 =UZ =!$+u|<<<: =!$+u|<<<$+u|44 L&ty%*lKKK5r   c                 X    t          t          |           t          |          |          S )a  Check that the left argument is a subtype of the right.
    For unions, check if the type arguments of the left is a subset of the right.
    Also works for nested types including ForwardRefs.

    Examples:

    ```python
        from typing_utils import issubtype

        issubtype(typing.List, typing.Any) == True
        issubtype(list, list) == True
        issubtype(list, typing.List) == True
        issubtype(list, typing.Sequence) == True
        issubtype(typing.List[int], list) == True
        issubtype(typing.List[typing.List], list) == True
        issubtype(list, typing.List[int]) == False
        issubtype(list, typing.Union[typing.Tuple, typing.Set]) == False
        issubtype(typing.List[typing.List], typing.List[typing.Sequence]) == True
        JSON = typing.Union[
            int, float, bool, str, None, typing.Sequence["JSON"],
            typing.Mapping[str, "JSON"]
        ]
        issubtype(str, JSON, forward_refs={'JSON': JSON}) == True
        issubtype(typing.Dict[str, str], JSON, forward_refs={'JSON': JSON}) == True
        issubtype(typing.Dict[str, bytes], JSON, forward_refs={'JSON': JSON}) == False
    ```
    )r   rp   )rr   rs   rM   s      r   	issubtyper     s%    @ iooy/?/?NNNr   )r   r0   r=   get_type_hintsr   )Irb   collections.abcr@   ior   typesr   r2   r3   r   rK   r   r   r   r   r4   rD   ro   r   Dictr9   Tuplere   
ByteStringbytesrB   rA   rn   rv   r-   TextIOWrapperTextIO
TextIOBaseStringIOBufferedReaderBinaryIOBufferedWriterBytesIOr   rc   rd   objectboolr   Optionalr   r#   r(   r   r5   r   r8   
OriginTypeAbstractSetTypeArgsr.   r0   r=   rO   
NamedTuplerQ   rk   rp   ry   rF   	FrozenSetrz   MappingrE   r   r   r   __all__r   r   r   <module>r      sB         				      
76<    ..JJWV]##  //JJ




769 gfi((GGG
76#$$ WV%566NNN
75+ {++III
 K
J
K
L%
u
O[_-
O[_-DJJ	  fmM6=KvvJ: D&+$56     '?& ?T ? ? ? ? ?
'& 'T ' ' ' 'fod3    fod3       &tFK  T&,
|D$ 001\$*%
<f068MMNd t    ,# ,# ,#^%&v| %& %& %& %&P       ". . . . .V& . . .<    (T (n ( ( ( ("Z 
 t    , \
LS!
^$ 19
1919 /&.d";<19 _T	19 19 19 19h@
@@ /&.d";<@ _T	@ @ @ @L +/ O  O
 O O /$' O _T	 O  O  O  OF  r   