
    i                       U d dl mZ d dlmZ d dlmZmZ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 d dlmZmZmZmZ d dlm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)m*Z*  G d de          Z+ G d de          Z,d;dZ- ed          Z.d<dZ/d=dZ0eez  Z1de2d <   d>d'Z3d?d*Z4d@d,Z5	 dAdBd4Z6dCd6Z7d@d7Z8dDd:Z9d-S )E    )annotations)Sequence)
NamedTuple	TypeAliasTypeVar)format_type)ARG_POSArgumentBlockClassDefContextSymbolTableTypeInfoVar)Options)CheckerPluginInterfaceFunctionContextMethodContextMethodSigContext)add_method_to_class)$SINGLEDISPATCH_REGISTER_RETURN_CLASS)
is_subtype)	AnyTypeCallableTypeFunctionLikeInstanceNoneType
OverloadedType	TypeOfAnyget_proper_typec                  $    e Zd ZU ded<   ded<   dS )SingledispatchTypeVarsr   return_typer   fallbackN__name__
__module____qualname____annotations__     Z/root/projects/qq-shell/venv/lib64/python3.11/site-packages/mypy/plugins/singledispatch.pyr#   r#      s*         r,   r#   c                  $    e Zd ZU ded<   ded<   dS )RegisterCallableInfor   register_typer   singledispatch_objNr&   r+   r,   r-   r/   r/      s*               r,   r/   typr   returnSingledispatchTypeVars | Nonec                R    t          | j                  dk    rt          | j         S d S )N   )lenargsr#   )r2   s    r-   get_singledispatch_infor9   $   s'    
38}}%sx004r,   Tr8   list[list[T]]T | Nonec                6    | r| d         r| d         d         S dS )zMGet the element that corresponds to the first argument passed to the functionr   Nr+   )r8   s    r-   get_first_argr>   -   s(     Q Awqz4r,   apir   	type_argsSequence[Type]c                   t          t          t          g                     }dt           |_        t	          t                      |d          }|                     dg           j        }t          |g           g|_	        ||g|_
        ||_        t          t          d          t          t          j                  d t"                    }t%          | |d|gt'                                 t          ||          S )Nz
functools.	functoolszbuiltins.objectname__call__)r   r   r   fullnamer   r   named_generic_typetyper   basesmroinfor
   r   r   r    implementation_artifactr	   r   r   )r?   r@   defnrK   obj_typefunc_args         r-   !make_fake_register_class_instancerP   4   s     8%))DDDG!EGGDMKMM455D%%&7<<AH8R(()DJhDHDIFWY-N%O%OQUW^__HT:z8::FFFD)$$$r,   
_TypeAliasPluginContextctxmsgstrcontextContext | NoneNonec                T    ||}n| j         }| j                            ||           dS )a  Emit an error message.

    This tries to emit an error message at the location specified by `context`, falling back to the
    location specified by `ctx.context`. This is helpful when the only context information about
    where you want to put the error message may be None (like it is for `CallableType.definition`)
    and falling back to the location of the calling function is fine.N)rV   r?   fail)rS   rT   rV   err_contexts       r-   rZ   rZ   H   s4     kGLLk"""""r,   r   r   c                   t          t          | j                            }t          |t                    rt          |j                  dk     rt          | d|j                   | j	        S |j        d         
                    d          st          | d|j                   | j	        S t          | j	                  }t          |t                    sJ |xj        |fz  c_        | j	        S )z#Called for functools.singledispatch   z6Singledispatch function requires at least one argumentr   T)starzGFirst argument to singledispatch function must be a positional argument)r!   r>   	arg_types
isinstancer   r7   	arg_kindsrZ   
definitiondefault_return_typeis_positionalr   r8   )rS   	func_typer1   s      r-   'create_singledispatch_function_callbackrf   X   s    cm < <==I)\** 0y"##a''MyOc   **$Q'5545@@ 	+Y$  
 ** -S-DEE,h77777I</""r,   r   c                   t          | j        t                    sJ t          t	          | j                            }t          |t          t          f          rR|                                r>|j	        d         j
        }t          || j                  }t          | j        |          }|S t          |t                    r#t          | | j        || j        j                   |S | j        S )z5Called for functools._SingleDispatchCallable.registerr   )r`   rH   r   r!   r>   r_   r   r   is_type_objitemsret_typer/   rP   r?   register_functionoptionsrc   )rS   first_arg_typer0   r@   register_callables        r-    singledispatch_register_callbackro   s   s    ch)))))$]3=%A%ABBN.<"<== .B\B\B^B^  ',Q/8(AA	=cgyQQ  	NL	1	1 #sxIII
  ""r,   Nr1   funcrl   r   register_argType | Nonec           
     x   t          |          }t          |t                    sdS t          |          }|dS t	          ||          }|dS |j        }|j        d         }t          ||          sHt          | d	                    t          ||          t          ||                    |j                   dS dS )zRegister a functionNr   zGDispatch type {} must be subtype of fallback function first argument {})r!   r`   r   r9   get_dispatch_typer%   r_   r   rZ   formatr   rb   )	rS   r1   rp   rl   rq   metadatadispatch_typer%   fallback_dispatch_types	            r-   rk   rk      s     4  DdL)) &'9::H 	%dL99M 	 H%/2m%;<< U\\M733[AWY`5a5a  O	
 	
 	
 	
Fr,   r   c                6    ||S | j         r| j         d         S d S )Nr   )r_   )rp   rq   s     r-   rt   rt      s*    ~ !~a  4r,   c                    | j         }t          |t                    rMt          |j         }t          | j                  }|)t          | |j        || j	        j
        |j                   |S | j        S )z7Called on the function after passing a type to register)rH   r`   r   r/   r8   r>   r_   rk   r1   r?   rl   r0   rc   )rS   rn   r@   rp   s       r-   4call_singledispatch_function_after_register_argumentr{      sw    #X.. (*;*@A	S]++Y14)Ja   K""r,   r   r   c                    t          | j        t                    s| j        S t	          | j                  }|| j        S |j        S )z5Called for functools._SingleDispatchCallable.__call__)r`   rH   r   default_signaturer9   r%   )rS   rv   s     r-   %call_singledispatch_function_callbackr~      sF    ch)) %$$&sx00H$$r,   )r2   r   r3   r4   )r8   r;   r3   r<   )r?   r   r@   rA   r3   r   )rS   rR   rT   rU   rV   rW   r3   rX   )rS   r   r3   r   )rS   r   r3   r   )N)rS   rR   r1   r   rp   r   rl   r   rq   rr   r3   rX   )rp   r   rq   rr   r3   rr   )rS   r   r3   r   ):
__future__r   collections.abcr   typingr   r   rQ   r   mypy.messagesr   
mypy.nodesr	   r
   r   r   r   r   r   r   mypy.optionsr   mypy.pluginr   r   r   r   mypy.plugins.commonr   mypy.plugins.constantsr   mypy.subtypesr   
mypy.typesr   r   r   r   r   r   r   r    r!   r#   r/   r9   r:   r>   rP   rR   r*   rZ   rf   ro   rk   rt   r{   r~   r+   r,   r-   <module>r      s   " " " " " " " $ $ $ $ $ $ ? ? ? ? ? ? ? ? ? ? % % % % % % ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^             ` ` ` ` ` ` ` ` ` ` ` ` 3 3 3 3 3 3 G G G G G G $ $ $ $ $ $
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
    Z   
! ! ! ! !: ! ! !
    GCLL   % % % %" ,m; ; ; ; ;# # # # # # # #6# # # #H !%" " " " "J   # # # #     r,   