
    Mh	.                        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 ddlmZmZ  e
deeef                   Z e
d	eeef                   Zd
e	defdZd Zdee         fdZdededefdZ	 d)dedededdfdZdedefdZde j        de j        dedededefdZde j        de j        dededed edefd!Zd"ed#ed$ede j        d%e j        defd&Zde j        de j        dededdf
d'Zdededefd(ZdS )*    N)	Parameter)FunctionType)CallableDictOptionalTupleTypeTypeVarUnionget_type_hints   )get_args	issubtype_WrappedMethod)bound_WrappedMethod2treturnc                 |    t          | t                    rdS t          |           D ]}t          |          r dS dS )a_  Recursively check if `t` or any types contained by `t` is a `TypeVar`.

    Examples where we return `True`: `T`, `Optional[T]`, `Tuple[Optional[T], ...]`, ...
    Examples where we return `False`: `int`, `Optional[str]`, ...

    :param t: Type to evaluate.
    :return: `True` if the input type contains an unbound `TypeVar`, `False` otherwise.
    TF)
isinstancer
   r   _contains_unbound_typevar)r   args     S/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/overrides/signature.pyr   r      sU     !W t {{  $S)) 	44	 5    c                     t          |           rdS |dS t          |          rdS 	 t          | |          S # t          $ r Y dS w xY w)NT)r   r   	TypeError)leftrights     r   
_issubtyper   "   sm     && t}t '' tu%%%   tts   8 
AAc                 R    	 t          |           S # t          t          f$ r Y d S w xY wN)r   	NameErrorr   callables    r   _get_type_hintsr%   0   s<    h'''y!   tts    &&	callable1	callable2c                     | j                             d          d         }t          |dd           }|dS |                    d          d         }||k    S )N.r   
__module__F)r*   splitgetattr)r&   r'   mod1mod2s       r   _is_same_moduler/   7   sX    %%c**1-D 9lD11D|u::c??1D4<r   Fsuper_callablesub_callable	is_staticc           	         t          |           } t          |          }	 t          j        |           }n# t          $ r Y dS w xY wt	          |           }t          j        |          }t	          |          }|j        }t          ||           }|<|:t          |||           t          ||||||           t          |||||||           t          ||||           dS )a  Ensure that the signature of `sub_callable` is compatible with the signature of `super_callable`.

    Guarantees that any call to `super_callable` will work on `sub_callable` by checking the following criteria:

    1. The return type of `sub_callable` is a subtype of the return type of `super_callable`.
    2. All parameters of `super_callable` are present in `sub_callable`, unless `sub_callable`
       declares `*args` or `**kwargs`.
    3. All positional parameters of `super_callable` appear in the same order in `sub_callable`.
    4. All parameters of `super_callable` are a subtype of the corresponding parameters of `sub_callable`.
    5. All required parameters of `sub_callable` are present in `super_callable`, unless `super_callable`
       declares `*args` or `**kwargs`.

    :param super_callable: Function to check compatibility with.
    :param sub_callable: Function to check compatibility of.
    :param is_static: True if staticmethod and should check first argument.
    N)_unbound_funcinspect	signature
ValueErrorr%   __qualname__r/    ensure_return_type_compatibility ensure_all_kwargs_defined_in_sub)ensure_all_positional_args_defined_in_subensure_no_extra_args_in_sub)	r0   r1   r2   	super_sigsuper_type_hintssub_sigsub_type_hintsmethod_namesame_main_modules	            r   ensure_signature_is_compatiblerC   B   s   * #>22N ..L%n55		    '~66--G$\22N+K&|^DD#(B()9>;WWW(w 0.)[	
 	
 	
 	2	
 	
 	
  	7I{KKKKKs   5 
AAr$   c                 T    t          | d          rt          | d          r| j        S | S )N__self____func__)hasattrrF   r#   s    r   r4   r4   w   s3    x$$ !:)F)F !  Or   r=   r?   r>   r@   check_first_parameterrA   c                    t          d |j                                        D                       }t          | j                                                  D ]\  }\  }}	|dk    r|s|	j        t          j        k    r(|	j        t          j        k    r>t          |d|||	          st          | d| d          ||j        v r0|	j        t          j        k    rt          |j                                                                      |          }
|j        |         }|	j        |j        k    rG|	j        t          j        k    r|j        t          j        k    st          | d| d|	j         d          ||
k    r-|	j        t          j        k    rt          | d| d| d          ||v rF||v rBt#          ||         ||                   s&t          d| d	| d
|	j         d|j         d	          d S )Nc              3   @   K   | ]}|j         t          j        k    V  d S r!   kindr   VAR_KEYWORD.0ps     r   	<genexpr>z3ensure_all_kwargs_defined_in_sub.<locals>.<genexpr>   s=        ,-)''     r   r   T: `z` is not present.
` is not ``z` is not parameter at index `: z must be a supertype of `
` but is `)any
parametersvalues	enumerateitemsrL   r   VAR_POSITIONALPOSITIONAL_ONLYis_param_defined_in_subr   rM   listkeysindexKEYWORD_ONLYPOSITIONAL_OR_KEYWORDr   
annotation)r=   r?   r>   r@   rH   rA   sub_has_var_kwargssuper_indexnamesuper_param	sub_index	sub_params               r   r:   r:   }   sg      181C1J1J1L1L     -6i6J6P6P6R6R,S,S  ((dK!$9y777y888&$*G[
 
 	 {FFtFFFGGGW'''K,<	@U,U,UW/446677==dCCI*40I9>11 I$:::Ni&EEE; V V4 V V;CS V V VWWWy(([-=AW-W-W"XXtXX+XXX   (((N**"#3D#9>$;OPP +  tkF\hqh|  ; r   is_same_main_modulec                 v   d |j                                         D             }d | j                                         D             }t          d |D                       }	t          d |D                       }
|	s2t          |          t          |          k     rt	          | d          d}t          |          D ]\  }}|dk    r|s||z   t          |          k    rq|j        t          j        k    r;|j        t          j	        k    r|j
        t          j        k    rf|j        t          j        k    r|t	          | d|j         d          |j        t          j        k    r d S |||z            }|j        t          j        k    r|d	z  }|j        t          j        k    r|	st	          | d|j         d
          |j        |j        k    rk|j        t          j	        k    r|j        t          j        k    sA|j        t          j	        k    r|
s*t	          | d|j         d|j         d|j         d          |j        |v s|rmt          |                    |j        d           |                    |j        d                     s+t	          d| d|j         d|j         d|j         d	          d S )Nc                 P    g | ]#}|j         t          j        t          j        fv!|$S  rL   r   rb   rM   rO   vs     r   
<listcomp>z=ensure_all_positional_args_defined_in_sub.<locals>.<listcomp>   s:       6)0)2GHHH 	
HHHr   c                 P    g | ]#}|j         t          j        t          j        fv!|$S rn   ro   rp   s     r   rr   z=ensure_all_positional_args_defined_in_sub.<locals>.<listcomp>   s:       6)0)2GHHH 	
HHHr   c              3   @   K   | ]}|j         t          j        k    V  d S r!   rL   r   r\   rN   s     r   rQ   z<ensure_all_positional_args_defined_in_sub.<locals>.<genexpr>   s=        /0)**     r   c              3   @   K   | ]}|j         t          j        k    V  d S r!   ru   rN   s     r   rQ   z<ensure_all_positional_args_defined_in_sub.<locals>.<genexpr>   s=        /0)**     r   z: parameter list too shortr   rR   z8` positionally required in subclass but not in supertyper   z` must be presentrS   z
` and is `rT   rU   z$ overriding must be a supertype of `rV   )rX   rY   rW   lenr   rZ   rL   r   r\   r]   defaultemptyrc   rg   r   getrd   )r=   r?   r>   r@   rH   rk   rA   sub_parameter_valuessuper_parameter_valuessub_has_var_argssuper_has_var_argssuper_shiftra   rj   rh   s                  r   r;   r;      s    #**,,  
 %,,..  
   4H       4J      D$8 9 9C@V<W<W W W;BBBCCCK%&:;; , ,yA::3:;#&<"="===~!999)";;;%88~!@@@kk9>kkk   >Y555FF,U[-@Ay7771Ky777# X; V V;3C V V VWWW	.. I$===Ni&EEE^y'@@@EW@jj9>jj[=MjjYbYgjjj    0004G0  !1488y~t44
 
 1
  QK  Q  Q9>  Q  QWbWm  Q  Q  zC  zN  Q  Q  Q  U, ,r   rg   r}   re   rh   c                     | |j         v pt|j        t          j        k    o|p]|j        t          j        k    o|pF|j        t          j        k    o|p/|j        t          j        k    o|o|p|j        t          j        k    o|S r!   )rX   rL   r   r\   rM   r]   rc   rb   )rg   r}   re   r?   rh   s        r   r^   r^      s     	"" 		O	 88M=M		O	 55L:L		O 	 99N>N		O
 	 ?? # #"		O 	 66M;Mr   c                    | j                                         }t          d |D                       }t          d |D                       }t          |j                                                   D ]\  }\  }}	|	j        t          j        k    r<t          |          |k    r)t          |          |         j        t          j        k    rZ|| j         vr|	j
        t          j        k    r|	j        t          j        k    rw|	j        t          j        k    rb|	j        t          j        k    r|sK|	j        t          j        k    r|s4|	j        t          j        k    r|s|dk    s|rt!          | d| d          d S )Nc              3   @   K   | ]}|j         t          j        k    V  d S r!   ru   rN   s     r   rQ   z.ensure_no_extra_args_in_sub.<locals>.<genexpr>  s,      RR9#;;RRRRRRr   c              3   @   K   | ]}|j         t          j        k    V  d S r!   rK   rN   s     r   rQ   z.ensure_no_extra_args_in_sub.<locals>.<genexpr>  s,      QQq16Y%::QQQQQQr   r   rR   z` is not a valid parameter.)rX   rY   rW   rZ   r[   rL   r   r]   rw   r_   rx   ry   r\   rM   rb   rc   r   )
r=   r?   rH   rA   super_paramssuper_var_argssuper_var_kwargsri   rg   rj   s
             r   r<   r<   
  s    '..00LRR\RRRRRNQQLQQQQQ(1'2D2J2J2L2L(M(M R R$	$D)Ni777L!!I--\""9-2i6OOO	,,,!Y_44)":::)"777^y'===BR=^y'@@@^@)"AAAnAQ"7{PPtPPPQQQ'R Rr   c                     |                      dd           }|                     dd           }t          ||          s|t          | d| d| d          d S d S )Nr   z: return type `z` is not a `z`.)rz   r   r   )r>   r@   rA   super_return
sub_returns        r   r9   r9   )  s     $''$77L##Hd33Jj,// 
L4LSS:SS<SSS
 
 	

 
4L4Lr   )F) r5   r   typesr   typingr   r   r   r   r	   r
   r   r   typing_utilsr   r   r   r   boolr   r   r%   r/   rC   r4   	Signaturestrr:   r;   r^   r<   r9   rn   r   r   <module>r      s?                X X X X X X X X X X X X X X X X X X X X - - - - - - - -)|X7M1NOOO'+5x9O3PQQQ $    ,  $    ~ / d     2L 2L"2L!2L 2L 
	2L 2L 2L 2LjN ~    * ** * 	*
  * * * * *ZH HH H 	H
  H H H H H HV
  	
 " 
   *R RR  R 	R
 
R R R R>

,0
?B
 
 
 
 
 
r   