
    X-Ph!                       U d dl 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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#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Z.de/d<   e. dZ0de/d<   e. dZ1de/d<   dFdZ2 ed          Z3dGd Z4d!Z5de/d"<   d#e5 dZ6de/d$<   dHd)Z7eeef         Z8d*e/d+<   dId2Z9dJd5Z:dKd7Z;	 dLdMd?Z<dNdAZ=dKdBZ>dOdEZ?d8S )P    )annotations)Sequence)Final
NamedTupleTypeVarUnion)	TypeAlias)format_type)ARG_POSArgumentBlockClassDefContextSymbolTableTypeInfoVar)Options)CheckerPluginInterfaceFunctionContextMethodContextMethodSigContext)add_method_to_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__     [/var/www/html/test/jupyter/venv/lib/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.   r0   r0      s*               r-   r0   z!functools._SingleDispatchCallabler   SINGLEDISPATCH_TYPEz	.registerSINGLEDISPATCH_REGISTER_METHODz	.__call__#SINGLEDISPATCH_CALLABLE_CALL_METHODtypr   returnSingledispatchTypeVars | Nonec                R    t          | j                  dk    rt          | j         S d S )N   )lenargsr$   )r6   s    r.   get_singledispatch_infor=   +   s'    
38}}%sx004r-   Tr<   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,   )r<   s    r.   get_first_argrB   4   s(     Q Awqz4r-   _SingleDispatchRegisterCallableREGISTER_RETURN_CLASS
functools.REGISTER_CALLABLE_CALL_METHOD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 )NrE   	functoolszbuiltins.objectname__call__)r   rD   r   fullnamer   r   named_generic_typetyper   basesmroinfor   r   r   r!   implementation_artifactr   r   r   )rG   rH   defnrS   obj_typefunc_args         r.   !make_fake_register_class_instancerX   @   s     )59955D8!688DM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)r^   rG   fail)r[   r\   r^   err_contexts       r.   rb   rb   T   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"   rB   	arg_types
isinstancer   r;   	arg_kindsrb   
definitiondefault_return_typeis_positionalr   r<   )r[   	func_typer2   s      r.   'create_singledispatch_function_callbackrn   d   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   )rh   rP   r   r"   rB   rg   r   r   is_type_objitemsret_typer0   rX   rG   register_functionoptionsrk   )r[   first_arg_typer1   rH   register_callables        r.    singledispatch_register_callbackrw      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-   Nr2   funcrt   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"   rh   r   r=   get_dispatch_typer&   rg   r   rb   formatr
   rj   )	r[   r2   rx   rt   ry   metadatadispatch_typer&   fallback_dispatch_types	            r.   rs   rs      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   )rg   )rx   ry   s     r.   r|   r|      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)rP   rh   r   r0   r<   rB   rg   rs   r2   rG   rt   r1   rk   )r[   rv   rH   rx   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__)rh   rP   r   default_signaturer=   r&   )r[   r~   s     r.   %call_singledispatch_function_callbackr      sF    ch)) %$$&sx00H$$r-   )r6   r   r7   r8   )r<   r?   r7   r@   )rG   r   rH   rI   r7   r   )r[   rZ   r\   r]   r^   r_   r7   r`   )r[   r   r7   r    )r[   r   r7   r    )N)r[   rZ   r2   r   rx   r    rt   r   ry   rz   r7   r`   )rx   r   ry   rz   r7   rz   )r[   r   r7   r   )@
__future__r   collections.abcr   typingr   r   r   r   typing_extensionsr	   rY   mypy.messagesr
   
mypy.nodesr   r   r   r   r   r   r   r   mypy.optionsr   mypy.pluginr   r   r   r   mypy.plugins.commonr   mypy.subtypesr   
mypy.typesr   r   r   r   r   r   r    r!   r"   r$   r0   r3   r+   r4   r5   r=   r>   rB   rD   rF   rX   rZ   rb   rn   rw   rs   r|   r   r   r,   r-   r.   <module>r      sT   " " " " " " " $ $ $ $ $ $ 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 % % % % % % ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^             ` ` ` ` ` ` ` ` ` ` ` ` 3 3 3 3 3 3 $ $ $ $ $ $
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
    Z   
! ! ! ! !: ! ! !
 A  @ @ @ @+>(I(I(I  I I I I0C-N-N-N # N N N N    GCLL     A  @ @ @ @'T4I'T'T'T  T T T T% % % %" "/="@A A A A A# # # # # # # #6# # # #H !%" " " " "J   # # # #     r-   