
    Ji7                     d   % S r SSKrSSKrSSKrSSKrSSKr\" \S5      (       a
  \" \S5      r	O\" \S5      (       a
  \" \S5      r	O\
" 5       e\" \S5      (       a
  \" \S5      rOSr\" \S5      (       a
  \" \S5      rOSr\" \S5      (       a
  \" \S5      rOSrSr\R                  \\R"                  \\R&                  \\R*                  \\R.                  \\R2                  \R4                  R2                  \R6                  \R4                  R6                  \" S5      S0r\R<                  \R>                  \R@                  \R>                  \RB                  \R>                  \RD                  \RF                  \RH                  \RF                  \RJ                  \RF                  0r&\R&                  \\RN                  4   \(S'   \(       a
  S	\)S
\*4S jr+O	S	\)S
\*4S jr+S
\RX                  \*   4S jr-S
\RX                  \*   4S jr.S r/\R`                  r0\" \R                  5      r1\" \Rd                  5      r3\Rd                  S\S4   r'\Rd                  S\4   r4\Rd                  \\Rj                  \   \R6                  \   4   r6S\'S
\'4S jr7S r8S
\R*                  4S jr9S%S jr: " S S\Rv                  5      r<S\64S jr=S\'S
\<4S jr>S\4S\4S
\*4S jr?\Rd                  \R*                  \R                  S4   \R                  \<   \<4   rBSSSSS \RX                  \R                  \D\4      S
\RX                  \*   4S! jrES\<S\<S \RX                  \R                  \D\4      S
\RX                  \*   4S" jrF S%S\'S\'S \RX                  \   S
\RX                  \*   4S# jjrG/ S$QrHg)&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                 D    U [         R                  L =(       d    U [        L $ N)typingUnionr   r	   s    X/var/www/html/dynamic-report/venv/lib/python3.13/site-packages/overrides/typing_utils.pyis_unionr   C   s    &,,&>'Y*>>    c                 &    U [         R                  L $ r   )r   r   r   s    r   r   r   H   s    &,,&&r   c                 `    [        U 5      (       a  g[        S U  5       5      (       a  g[        $ )NTc              3   (   #    U  H  oS L v   M
     g7f)FN .0es     r   	<genexpr>optional_all.<locals>.<genexpr>O   s     
(x!:x   F)allunknownelementss    r   optional_allr!   L   s'    
8}}

(x
(((Nr   c                 `    [        U 5      (       a  g[        S U  5       5      (       a  [        $ g)NTc              3   (   #    U  H  oS L v   M
     g 7fr   r   r   s     r   r   optional_any.<locals>.<genexpr>W   s     
'h9hr   F)anyr   r   s    r   optional_anyr&   T   s'    
8}}

'h
'''r   c                 <     [        U 5        g! [         a     gf = f)z(Determine whether `value` can be hashed.FT)hash	TypeError)values    r   	_hashabler+   \   s'    U   s    
ztyping.TypeVartype_c                     [        U [        R                  5      (       a  U $ [        U 5      (       d   S5       eU [        ;   a	  [        U    $ U $ )Nz9_normalize_aliases should only be called on element types)
isinstancer   TypeVarr+   BUILTINS_MAPPING)r,   s    r   _normalize_aliasesr1   o   sH    %((UXXX  &&Lr   c                    [        [        S5      (       a  [        [        S5      nU" U 5      nGO[        [        R                  S5      (       a  [	        U [
        5      (       a  U R                  (       d  U R                  nO[        U S5      (       a  U R                  (       a  U nOU [        R                  L a  [        R                  nOrSnOo[	        U [
        5      (       a  U R                  nUc  U nOH[	        U [        5      (       a  U R                  nO&U [        R                  L a  [        R                  nOSnUc&  [        (       a  [	        U [        5      (       a  [        n[        U5      $ )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.   GenericClassr4   
__origin__Generic
UnionClassr   dictr1   )r,   _getteroris      r   r3   r3   z   s   & v|$$&,/en	j	)	)e\**5>>""CUJ''ENNCfnn$..CCe\**""C{z**""Cfnn$..CC
{~~*UN*K*Kc""r   c                    [        [        S5      (       a  [        [        S5      nU" U 5      nGO	[        [        R                  S5      (       a{  [	        U [
        5      (       ac  U R                  (       dR  U R                  n[        U 5      [        R                  R                  L a  US   [        La  [        USS 5      US   4nOrSnOo[	        U [
        [        45      (       aR  U R                  n[        U 5      [        R                  R                  L a  US   [        La  [        USS 5      US   4nOSn[        (       a+  [	        U [        5      (       a  [         [        R"                  4$ Uc  S$ U$ )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_argsr4   r   Nr   )r5   r   r6   r7   r.   r8   r4   __args__r3   collectionsabcCallableEllipsislistr;   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8..C% KOO$<$<<QxAWCH~s2w/C~*UN;;FJJ2%#%r   c                     U=(       d    0 n[        [        S5      (       a"  [        [        S5      nU" U [        5       U5      $ [        U S5      (       a  [        U S5      nU" [        5       U5      $ [	        5       e)z+
eval forward_refs in all cPython versions

_eval_type)r5   r   r6   globalsNotImplementedError)refforward_refslocalnsrL   s       r   eval_forward_refrR      si      bGv|$$V\2
#wy'22sL!!S,/
')W--

r   c                   t    \ rS rSr% Sr\\S'   \" 5       r\	R                  \\4   \S'   S rS\4S jrS rS	rg
)NormalizedType   zC
Normalized type, made it possible to compare, hash between types.
originargsc                    [        U[        5      (       a  U R                  UR                  :w  a  g[        U R                  [        5      (       aX  [        UR                  [        5      (       a9  U R                  UR                  :*  =(       a    UR                  U R                  :*  $ U R                  UR                  :H  =(       a    U R                  UR                  :H  $ U R                  (       d  U R                  U:H  $ g)NF)r.   rT   rV   rW   	frozenset)selfothers     r   __eq__NormalizedType.__eq__   s    e^,,{{ell*$))Y//Juzz94U4UyyEJJ.J5::3JJ;;%,,.J499

3JJyy;;%''r   r
   c                     U R                   (       d  [        U R                  5      $ [        U R                  U R                   45      $ r   )rW   r(   rV   rZ   s    r   __hash__NormalizedType.__hash__   s0    yy$$T[[$)),--r   c                 v    U R                   (       d  U R                   $ U R                   SU R                    S3$ )N[z]))rW   rV   r_   s    r   __repr__NormalizedType.__repr__   s0    yykk]#++a		{"--r   r   N)__name__
__module____qualname____firstlineno____doc__Type__annotations__tuplerW   r   r   rY   r\   intr`   rd   __static_attributes__r   r   r   rT   rT      s>     L+07D&,,ui'
(2	.# .
.r   rT   tpsc                 2   [        U [        5      (       a  U $ [        U [        R                  R                  5      (       a  [        S U  5       5      $ [        U [        R                  R                  5      (       a  [        S U  5       5      $ [        U 5      $ )Nc              3   8   #    U  H  n[        U5      v   M     g 7fr   _normalize_argsr   r,   s     r   r   "_normalize_args.<locals>.<genexpr>  s     =_U++   c              3   8   #    U  H  n[        U5      v   M     g 7fr   rs   ru   s     r   r   rv     s     ASE//Srw   )	r.   rH   rC   rD   Sequencerm   SetrY   	normalize)rp   s    r   rt   rt      sn    #s
#{//00====#{**++ASAAAS>r   c                     [        U 5      n[        U 5      nU(       d  [        [        U 5      5      $ [        U5      n[	        U5      (       a  [        [        U5      5      nO[        U5      n[        X!5      $ )z,
convert types to NormalizedType instances.
)r@   r3   rT   r1   r   rt   rY   )r,   rW   rV   s      r   r{   r{   
  sc     E?DF0788'Fy/t$&''r   leftrightc                    XL a  gU b  U [         ;   a  U[         U    :X  a  g[        U S5      (       a  U R                  5        H
  nX!:X  d  M
    g   [        U [        5      (       a   [        U[        5      (       a  [        X5      $ X:H  $ )NTmro)r   r5   r   r.   type
issubclass)r}   r~   parents      r   _is_origin_subtyper     s    } 	**+D11tUhhjF ! $*UD"9"9$&&=r   .NormalizedTypeArgsrP   c                 8  ^^ [        U [        5      (       a9  [        T[        5      (       d  gU T-
  nU(       d  g[        UU4S jU 5       5      $ [        U [        R                  R
                  5      (       a  [        U [        5      (       d  [        T[        R                  R
                  5      (       a  [        T[        5      (       a  gU (       aI  U S   R                  [        La3  T(       a,  TS   R                  [        L a  [        UU4S jU  5       5      $ [        U 5      [        T5      :w  a  g[        U4S j[        R                  " U T5       5       5      $ [        U [        5      (       d   e[        T[        5      (       d   e[        U TT5      $ )NFTc              3   R   >^#    U  H  m[        UU4S  jT 5       5      v   M     g7f)c              3   >   >#    U  H  n[        TUT5      v   M     g 7fr   _is_normal_subtype)r   rr   rP   s     r   r   4_is_origin_subtype_args.<locals>.<genexpr>.<genexpr>H  s     F1"1a66   N)r%   )r   r   rP   r~   s    @r   r   *_is_origin_subtype_args.<locals>.<genexpr>G  s#      
PX1CFFFFPXs   #'rA   c              3   D   >#    U  H  n[        UTS    T5      v   M     g7f)r   N_is_origin_subtype_args)r   lrP   r~   s     r   r   r   Z  s$     XSWa.q%(LIISWs    c              3   l   >#    U  H)  u  pUS L=(       a    US L=(       a    [        XT5      v   M+     g 7fr   r   )r   r   r   rP   s      r   r   r   _  sB      
 ; TM <<'l;< ;s   14)r.   rY   r   rC   rD   ry   rT   rV   rF   len	itertoolszip_longestr   )r}   r~   rP   excludeds    `` r   r   r   8  sW   
 $	""%++%<  
PX
 
 	
 $0011*n; ; %!9!9::j>?
 ?
  Rx/b	  H, XSWXXXt9E
" 
 "--dE:	
 
 	
 dN++++e^,,,,dE<88r   c                   ^ ^^ [        T R                  [        5      (       a  [        [	        T R                  TS95      m [        TR                  [        5      (       a  [        [	        TR                  TS95      mTR                  [
        R                  L a  g[        TR                  5      (       a;  [        T R                  5      (       a!  [        T R                  TR                  T5      $ [        TR                  5      (       a   [        UU 4S jTR                   5       5      $ [        T R                  5      (       a   [        UU4S jT R                   5       5      $ TR                  [        L aK  T R                  [        La  g[        T R                  5      R                  [        TR                  5      5      $ [        T R                  [
        R                  5      (       a  [        TR                  [
        R                  5      (       as  T R                  TR                  L a  g[!        T R                  SS 5      n[!        TR                  SS 5      nUb  Uc  ["        $ [%        [        U5      [        U5      T5      $ [        TR                  [
        R                  5      (       a  ["        $ [        T R                  [
        R                  5      (       a6  [!        T R                  SS 5      nUc  ["        $ [%        [        U5      TT5      $ T R                  (       d1  TR                  (       d   ['        T R                  TR                  5      $ TR                  (       d   ['        T R                  TR                  5      $ ['        T R                  TR                  5      (       a!  [        T R                  TR                  T5      $ g)N)rP   Tc              3   >   >#    U  H  n[        TUT5      v   M     g 7fr   r   )r   arP   r}   s     r   r   %_is_normal_subtype.<locals>.<genexpr>  s!      
?I!tQ55zr   c              3   >   >#    U  H  n[        UTT5      v   M     g 7fr   r   )r   r   rP   r~   s     r   r   r     s!      
@I1q%66	r   F	__bound__)r.   rV   r   r{   rR   r   rI   r   r   rW   r&   r!   r   setissubsetr/   r6   r   r   r   )r}   r~   rP   
left_boundright_bounds   ```  r   r   r   l  s   
 $++z**)$++LQR%,,
++*5<<lST ||vzz! (4;;"7"7&tyy%**lKK 
?Dzz
 
 	
  
@D		
 
 	

 ||w;;g%499~&&s5::77 $++v~~..:fnn4 4 ;;%,,&T[[+t<
ellK>*"4N!j!9[#9<
 	
 %,,//$++v~~..T[[+t<
N!)J"7MM99UZZ!$++u||<<::!$++u||<<$++u||44&tyy%**lKKr   c                 @    [        [        U 5      [        U5      U5      $ )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   r{   )r}   r~   rP   s      r   	issubtyper     s    @ ioy/?NNr   )r   r3   r@   get_type_hintsr   )Irj   collections.abcrC   ior   typesr   r5   r6   r   rN   r   r   r   r   r7   rG   rz   r   Dictr<   Tuplerm   
ByteStringbytesrE   rD   ry   r   r0   TextIOWrapperTextIO
TextIOBaseStringIOBufferedReaderBinaryIOBufferedWriterBytesIOr   rk   rl   objectboolr   Optionalr!   r&   r+   r   r8   r   r;   
OriginTypeAbstractSetTypeArgsr1   r3   r@   rR   
NamedTuplerT   rt   r{   r   rI   	FrozenSetr   MappingrH   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   