
    ?g7                        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j2                  ej4                  j2                  ej6                  ej4                  j6                   ed      diZej<                  ej>                  ej@                  ej>                  ejB                  ej>                  ejD                  ejF                  ejH                  ejF                  ejJ                  ejF                  iZ&ej&                  eejN                  f   e(d<   er	d	e)d
e*fdZ+nd	e)d
e*fdZ+d
ejX                  e*   fdZ-d
ejX                  e*   fdZ.d Z/ej`                  Z0 eej                        Z1 eejd                        Z3ejd                  dedf   Z'ejd                  def   Z4ejd                  eejj                  e   ej6                  e   f   Z6de'd
e'fdZ7d Z8d
ej*                  fdZ9d%dZ: G d dejv                        Z<de6fdZ=de'd
e<fdZ>de4de4d
e*fdZ?ejd                  ej*                  ej                  df   ej                  e<   e<f   ZBddddd ejX                  ej                  eDef      d
ejX                  e*   fd!ZEde<de<d ejX                  ej                  eDef      d
ejX                  e*   fd"ZF	 d%de'de'd ejX                  e   d
ejX                  e*   fd#ZGg d$ZHy)&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                 :    | t         j                  u xs | t        u S N)typingUnionr   r	   s    K/var/www/openai/venv/lib/python3.12/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                 L    t        |       ryt        d | D              ryt        S )NTc              3   $   K   | ]  }|d u  
 yw)FN .0es     r   	<genexpr>zoptional_all.<locals>.<genexpr>O   s     
(x!1:x   F)allunknownelementss    r   optional_allr    L   s"    
8}

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

'h
''r   c                 :    	 t        |        y# t        $ r Y yw xY w)z(Determine whether `value` can be hashed.FT)hash	TypeError)values    r   	_hashabler)   \   s'    U   s    	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   sB    %(UXXX  &&Lr   c                 t   t        t        d      rt        t        d      } ||       }nt        t        j                  d      rjt	        | t
              r| j                  s| j                  }nt        | d      r| j                  r| }n| t        j                  u rt        j                  }nfd}nct	        | t
              r| j                  }|E| }nBt	        | 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,   GenericClassr2   
__origin__Generic
UnionClassr   dictr/   )r*   _getteroris      r   r1   r1   z   s    & v|$&,/en	j	)e\*5>>""CUJ'ENNCfnn$..CCe\*""C{z*""Cfnn$..CC
{~*UN*Kc""r   c                    t        t        d      rt        t        d      } ||       }nt        t        j                  d      rot	        | t
              r\| j                  sP| j                  }t        |       t        j                  j                  u r|d   t        urt        |dd       |d   f}nkd}nht	        | t
        t        f      rP| 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S |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_argsr2   r   Nr   )r3   r   r4   r5   r,   r6   r2   __args__r1   collectionsabcCallableEllipsislistr9   r   strAny)r*   r;   ress      r   r>   r>      s	     vz"&*-en	j	)ul+ENN..C% KOO$<$<<QxAWCH~s2w/CelJ78..C% KOO$<$<<QxAWCH~s2w/C*UN;FJJ2%#%r   c                     |xs 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)r3   r   r4   globalsNotImplementedError)refforward_refslocalnsrJ   s       r   eval_forward_refrP      sc      bGv|$V\2
#wy'22sL!S,/
')W--

r   c                   j    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y)	NormalizedTypezK
    Normalized type, made it possible to compare, hash between types.
    originargsc                    t        |t              r| j                  |j                  k7  ryt        | j                  t              rNt        |j                  t              r4| j                  |j                  k  xr |j                  | j                  k  S | j                  |j                  k(  xr | j                  |j                  k(  S | j                  s| j                  |k(  S y)NF)r,   rR   rS   rT   	frozenset)selfothers     r   __eq__zNormalizedType.__eq__   s    e^,{{ell*$))Y/Juzz94UyyEJJ.J5::3JJ;;%,,.J499

3JJyy;;%''r   r
   c                     | j                   st        | j                        S t        | j                  | j                   f      S r   )rT   r&   rS   rW   s    r   __hash__zNormalizedType.__hash__   s0    yy$$T[[$)),--r   c                 l    | j                   s| j                   S | j                   d| j                    dS )N[z]))rT   rS   r[   s    r   __repr__zNormalizedType.__repr__   s0    yykk]#++a		{"--r   N)__name__
__module____qualname____doc__Type__annotations__tuplerT   r   r   rV   rY   intr\   r_   r   r   r   rR   rR      s>     L+07D&,,ui'
(2	.# .
.r   rR   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   2   K   | ]  }t        |        y wr   _normalize_argsr   r*   s     r   r   z"_normalize_args.<locals>.<genexpr>  s     =_U+   c              3   2   K   | ]  }t        |        y wr   rk   rm   s     r   r   z"_normalize_args.<locals>.<genexpr>  s     ASE/Srn   )	r,   rF   rA   rB   Sequencerf   SetrV   	normalize)rh   s    r   rl   rl      se    #s
#{//0====#{**+AS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>   r1   rR   r/   r   rl   rV   )r*   rT   rS   s      r   rr   rr   
  sb     E?DF0788'Fy/t$&$''r   leftrightc                     | |u ry| | t         v r|t         |    k(  ryt        | d      r| j                         D ]	  }||k(  s	 y t        | t              rt        |t              rt        | |      S | |k(  S )NTmro)r   r3   rw   r,   type
issubclass)rt   ru   parents      r   _is_origin_subtyper{     s~    u} 	**+D11tUhhjF ! $*UD"9$&&5=r   .NormalizedTypeArgsrN   c                    t        | t              r.t        t              sy| z
  }|syt        fd|D              S t        | t        j                  j
                        rt        | t              st        t        j                  j
                        rt        t              ry| rA| d   j                  t        ur,r*d   j                  t        u rt        fd| D              S t        |       t              k7  ryt        fdt        j                  |       D              S t        | t              sJ t        t              sJ t        |       S )NFTc              3   J   K   | ]  t        fd D                yw)c              3   8   K   | ]  }t        |        y wr   _is_normal_subtype)r   rr   rN   s     r   r   z4_is_origin_subtype_args.<locals>.<genexpr>.<genexpr>H  s     F1"1a6   N)r#   )r   r   rN   ru   s    @r   r   z*_is_origin_subtype_args.<locals>.<genexpr>G  s!      
PX1CFFFPXs   #r?   c              3   >   K   | ]  }t        |d            yw)r   N_is_origin_subtype_args)r   lrN   ru   s     r   r   z*_is_origin_subtype_args.<locals>.<genexpr>Z  s"     XSWa.q%(LISWs   c              3   V   K   | ]   \  }}|d uxr |d uxr t        ||       " y wr   r   )r   r   r   rN   s      r   r   z*_is_origin_subtype_args.<locals>.<genexpr>_  sG      
 ;1 TM <<'1l;< ;s   &))r,   rV   r   rA   rB   rp   rR   rS   rD   len	itertoolszip_longestr   )rt   ru   rN   excludeds    `` r   r   r   8  s;   
 $	"%+%<  
PX
 
 	
 $001*n; %!9!9:j>?
  Rx/b	  H, XSWXXXt9E
" 
 "--dE:	
 
 	
 dN+++e^,,,dE<88r   c                 
    t         j                  t              r t        t	         j                               t        j                  t              r t        t	        j                              j                  t
        j                  u ryt        j                        r6t         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 rJ j                  t        uryt         j                        j                  t        j                              S t         j                  t
        j                        rt        j                  t
        j                        rp j                  j                  u ry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                        r5t!         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 y)N)rN   Tc              3   8   K   | ]  }t        |        y wr   r   )r   arN   rt   s     r   r   z%_is_normal_subtype.<locals>.<genexpr>  s      
?I!tQ5zr   c              3   8   K   | ]  }t        |        y wr   r   )r   r   rN   ru   s     r   r   z%_is_normal_subtype.<locals>.<genexpr>  s      
@I1q%6	r   F	__bound__)r,   rS   r   rr   rP   r   rG   r   r   rT   r$   r    r   setissubsetr-   r4   r   r   r{   )rt   ru   rN   
left_boundright_bounds   ```  r   r   r   l  s{   
 $++z*)$++LQR%,,
+*5<<lST ||vzz! (4;;"7&tyy%**lKK 
?Dzz
 
 	
  
@D		
 
 	

 ||w;;g%499~&&s5::77 $++v~~.:fnn4 ;;%,,&T[[+t<
ellK>*"4N!j!9[#9<
 	
 %,,/$++v~~.T[[+t<
N!)J"7MM99UZZ!$++u||<<::!$++u||<<$++u||4&tyy%**lKKr   c                 @    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   rr   )rt   ru   rN   s      r   	issubtyper     s    @ ioy/?NNr   )r   r1   r>   get_type_hintsr   )Irc   collections.abcrA   ior   typesr   r3   r4   r   rL   r   r   r   r   r5   rE   rq   r   Dictr:   Tuplerf   
ByteStringbytesrC   rB   rp   rx   r.   TextIOWrapperTextIO
TextIOBaseStringIOBufferedReaderBinaryIOBufferedWriterBytesIOr   rd   re   objectboolr   Optionalr    r$   r)   r   r6   r   r9   
OriginTypeAbstractSetTypeArgsr/   r1   r>   rP   
NamedTuplerR   rl   rr   r{   rG   	FrozenSetr|   MappingrF   r   r   r   __all__r   r   r   <module>r      s    	   
6< .JV]#/J


69fi(GG
6#$V%56NN
5+{+II
 KK
JJ
KK
LL%
u
OO[__--
OO[__--J	  fmmMM6==KKvvJJ: D&++$56  ?& ?T ?
'& 'T 'food3 food3  &&FKK &,,
||D$ 001\\$*%
<<f0068MMNd t ,#^%&v|| %&P ".V&& .< (T (n ("Z 
 t , \\
LLS!
^$ 19
1919 //&..d";<19 __T	19h@
@@ //&..d";<@ __T	@L +/ O
 O O //$' O __T	 OFr   