
    X-Ph X                       U d dl mZ d dlmZ d dl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 d dlmZmZmZ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 d dl m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/  G d de          Z0d'dZ1d(dZ2d'dZ3d(dZ4d'dZ5d(dZ6d(dZ7 e8ddh          Z9de:d<   d'dZ;d(d Z<d)d*d$Z=d(d%Z>d(d&Z?dS )+    )annotations)partial)CallableFinalN)message_registry)DictExprIntExprStrExpr	UnaryExpr)AttributeContextClassDefContextFunctionContextFunctionSigContextMethodContextMethodSigContextPlugin)try_getting_str_literals)
is_subtype)is_literal_type_likemake_simplified_union)TPDICT_FB_NAMESAnyTypeCallableTypeFunctionLikeInstanceLiteralTypeNoneType	TupleTypeTypeTypedDictType	TypeOfAnyTypeVarType	UnionTypeget_proper_typeget_proper_typesc                  J    e Zd ZdZddZddZdd
ZddZddZddZ	ddZ
dS )DefaultPluginz/Type checker plugin that is enabled by default.fullnamestrreturn(Callable[[FunctionContext], Type] | Nonec                    ddl m}m}m} |dk    r|j        S |dk    r|j        S |dk    rdd l}|j        j        j	        S |dk    r|j
        S d S )Nr   )ctypesenumssingledispatchz_ctypes.Arrayzfunctools.singledispatchzfunctools.partialzenum.member)mypy.pluginsr-   r.   r/   array_constructor_callback'create_singledispatch_function_callbackmypy.plugins.functoolsplugins	functoolspartial_new_callbackenum_member_callback)selfr(   r-   r.   r/   mypys         T/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mypy/plugins/default.pyget_function_hookzDefaultPlugin.get_function_hook+   s    >>>>>>>>>>&&44333!II,,,))))<)>>&&--t    3Callable[[FunctionSigContext], FunctionLike] | Nonec                \    ddl m}m} |dv r|j        S |dv r|j        S |dk    r|j        S d S )Nr   attrsdataclasses)zattr.evolvezattrs.evolvez
attr.assoczattrs.assoc)zattr.fieldszattrs.fieldszdataclasses.replace)r0   r@   rA   evolve_function_sig_callbackfields_function_sig_callbackreplace_function_sig_callbackr8   r(   r@   rA   s       r:   get_function_signature_hookz)DefaultPlugin.get_function_signature_hook;   s`     	43333333SSS5588855...<<tr<   1Callable[[MethodSigContext], FunctionLike] | Nonec                   ddl m}m} |dk    rt          S |d t          D             v rt
          S |d t          D             v rt          S |dk    r|j        S ||j        k    r|j	        S t                      }t          D ]b}|                    |dz              |                    |dz              |                    |d	z              |                    |d
z              c||v rt          S d S )Nr   r-   r/   typing.Mapping.getc                    h | ]}|d z   S z.setdefault .0ns     r:   	<setcomp>z:DefaultPlugin.get_method_signature_hook.<locals>.<setcomp>O       EEE!m+EEEr<   c                    h | ]}|d z   S z.poprM   rN   s     r:   rQ   z:DefaultPlugin.get_method_signature_hook.<locals>.<setcomp>Q       >>>!f*>>>r<   z_ctypes.Array.__setitem__z.updatez.__or__z.__ror__z.__ior__)r0   r-   r/   !typed_dict_get_signature_callbackr   (typed_dict_setdefault_signature_callback!typed_dict_pop_signature_callbackarray_setitem_callback#SINGLEDISPATCH_CALLABLE_CALL_METHOD%call_singledispatch_function_callbacksetadd$typed_dict_update_signature_callback)r8   r(   r-   r/   typed_dict_updatesrP   s         r:   get_method_signature_hookz'DefaultPlugin.get_method_signature_hookH   s-    	87777777+++44EE_EEEEE;;>>o>>>>>4444400KKK!GG UU  	3 	3A""1y=111""1y=111""1z>222""1z>2222)))77tr<   &Callable[[MethodContext], Type] | Nonec                   ddl m}m} |dk    rt          S |dk    rt          S |dk    rt
          S |dk    rt          S |dv rt          S |d t          D             v rt          S |d	 t          D             v rt          S |d
 t          D             v rt          S |dk    r|j        S |dk    r|j        S ||j        k    r|j        S ||j        k    r|j        S |dk    rdd l}|j        j        j        S d S )Nr   rI   rJ   zbuiltins.int.__pow__zbuiltins.int.__neg__zbuiltins.int.__pos__)zbuiltins.tuple.__mul__zbuiltins.tuple.__rmul__c                    h | ]}|d z   S rL   rM   rN   s     r:   rQ   z0DefaultPlugin.get_method_hook.<locals>.<setcomp>q   rR   r<   c                    h | ]}|d z   S rT   rM   rN   s     r:   rQ   z0DefaultPlugin.get_method_hook.<locals>.<setcomp>s   rU   r<   c                    h | ]}|d z   S )z.__delitem__rM   rN   s     r:   rQ   z0DefaultPlugin.get_method_hook.<locals>.<setcomp>u   s    FFF!n,FFFr<   z_ctypes.Array.__getitem__z_ctypes.Array.__iter__zfunctools.partial.__call__)r0   r-   r/   typed_dict_get_callbackint_pow_callbackint_neg_callbackint_pos_callbacktuple_mul_callbackr   typed_dict_setdefault_callbacktyped_dict_pop_callbacktyped_dict_delitem_callbackarray_getitem_callbackarray_iter_callbackSINGLEDISPATCH_REGISTER_METHOD singledispatch_register_callbackREGISTER_CALLABLE_CALL_METHOD4call_singledispatch_function_after_register_argumentr3   r4   r5   partial_call_callback)r8   r(   r-   r/   r9   s        r:   get_method_hookzDefaultPlugin.get_method_hookd   sW   77777777+++**///##///##///##NNN%%EE_EEEEE11>>o>>>>>**FFoFFFFF..44400111--FFF!BBEEE!VV555))))<)??tr<   )Callable[[AttributeContext], Type] | Nonec                    ddl m}m} |dk    r|j        S |dk    r|j        S ||j        v r|j        S ||j        v r|j        S d S )Nr   )r-   r.   z_ctypes.Array.valuez_ctypes.Array.raw)	r0   r-   r.   array_value_callbackarray_raw_callbackENUM_NAME_ACCESSenum_name_callbackENUM_VALUE_ACCESSenum_value_callback)r8   r(   r-   r.   s       r:   get_attribute_hookz DefaultPlugin.get_attribute_hook   sw    ........,,,..,,,,,///++000,,tr<   (Callable[[ClassDefContext], None] | Nonec                    ddl m}m} ||j        v r|j        S ||j        v s||j        v s||j        v s	||j        v r|j	        S d S )Nr   r?   )
r0   r@   rA   dataclass_makersdataclass_tag_callbackattr_class_makersattr_dataclass_makersattr_frozen_makersattr_define_makersattr_tag_callbackrE   s       r:   get_class_decorator_hookz&DefaultPlugin.get_class_decorator_hook   sy    33333333 {33355///566653335333**tr<   (Callable[[ClassDefContext], bool] | Nonec                d   dd l }ddlm}m} ||j        v r|j        S ||j        j        j        v r|j        j        j	        S ||j
        v r|j        S ||j        v rt          |j        d          S ||j        v rt          |j        d d          S ||j        v rt          |j        d d          S d S )Nr   r?   T)auto_attribs_default)r   frozen_default)r   slots_default)r3   r0   r@   rA   r   dataclass_class_maker_callbackr4   r5   functools_total_ordering_makers'functools_total_ordering_maker_callbackr   attr_class_maker_callbackr   r   r   r   )r8   r(   r9   r@   rA   s        r:   get_class_decorator_hook_2z(DefaultPlugin.get_class_decorator_hook_2   s    	&%%%33333333{333==/OOO<)QQ000224445:QUVVVV111/d[_    111/dZ^    tr<   N)r(   r)   r*   r+   )r(   r)   r*   r=   )r(   r)   r*   rG   )r(   r)   r*   ra   )r(   r)   r*   rv   )r(   r)   r*   r   )r(   r)   r*   r   )__name__
__module____qualname____doc__r;   rF   r`   ru   r~   r   r   rM   r<   r:   r'   r'   (   s        99          8   B      &     r<   r'   ctxr   r*   r   c                   | j         }t          | j        t                    rt	          | j                  dk    rt	          | j        d                   dk    rt          | j        d         d         t                    rlt	          |j                  dk    rSt	          |j                  dk    r:t	          | j        d                   dk    r| j        d         d         j	        }t          | j        j                            |                    }|j        }|r| j        d         d         }t          |t                    rOt          |t                    r:t	          |j                  dk    r"|                    t!                                }|j        d         }t          |t"                    sJ |                    |j        d         t%          ||g          g|          S |S )zTry to infer a better signature type for TypedDict.get.

    This is used to get better type context for the second argument that
    depends on a TypedDict value type.
       r      required_keys	arg_typesret_type)default_signature
isinstancetyper    lenargsr
   r   	variablesvaluer$   itemsgetr   r   copy_modifiedr\   r"   r   )r   	signaturekey
value_typer   default_argtvs          r:   rV   rV      s    %I38]++MMQ!!sx{1~w// "	#$$))	#$$))!!hqk!n"$SX^%7%7%<%<==
% 	(1+a.K:}55K{H55K )**a// (55CEE5JJ
 $Q'Bb+.....**$.q13H*VXIY3Z3Z[! +    r<   r   r   c                   t          | j        t                    rEt          | j                  dk    r,t          | j        d                   dk    rt          | j        d         d         | j        d         d                   }|| j        S g }|D ]}t          | j        j	        
                    |                    }|	| j        c S t          | j                  dk    r|                    |           ht          | j                  dk    rt          | j        d                   dk    rt          | j        d                   dk    r| j        d         d         }t          |t                    rdt          |j	                  dk    rLt          |t                    r7|                    |                    t                                           I|                    |           |                    | j        d         d                    t          | j                  dk    r!|                    t                                 t!          |          S | j        S )zJInfer a precise return type for TypedDict.get with literal first argument.r   r   Nr   r   )r   r   r    r   r   r   r   default_return_typer$   r   r   appendr   r   r\   r   r   )r   keysoutput_typesr   r   r   s         r:   rf   rf      s)    	38]++!3!##a !!Q&&'Aa8H8KLL<**#% 	= 	=C(););C)@)@AAJ!....3=!!Q&&##J////S]##q((Sq1A-B-Ba-G-GCPSPXYZP[L\L\`aLaLa!hqk!n{H55	=K-..!33":}== 4 !''
(@(@suu(@(U(UVVVV ''
333 ''a(8(;<<<s}""

+++$\222""r<   c                &   | j         }| j                            dg           }t          | j        t
                    r2t          | j                  dk    rt          | j        d                   dk    rt          | j        d         d         t                    rt          |j	                  dk    rt          |j
                  dk    rt          | j        d                   dk    r| j        d         d         j        }| j        j                            |          }|rN|j
        d         }t          |t                    sJ t          ||g          }|                    ||g|          S |                    ||j	        d         g          S )zTry to infer a better signature type for TypedDict.pop.

    This is used to get better type context for the second argument that
    depends on a TypedDict value type.
    builtins.strr   r   r   r   r   )r   apinamed_generic_typer   r   r    r   r   r
   r   r   r   r   r   r"   r   r   )r   r   str_typer   r   r   typs          r:   rX   rX     so    %Iw))."==H38]++TMMQ!!sx{1~w// "	#$$))	#$$))!!hqk!n"X^'',,
 	T $Q'Bb+.....'R(899C**h_s*SSS""h	8KA8N-O"PPPr<   c                d   t          | j        t                    rt          | j                  dk    rt          | j        d                   dk    r| j        d         d         }t          || j        d         d                   }|J| j                            t          j
        |t          j                   t          t          j                  S g }|D ]}|| j        j        v r&| j        j                            | j        ||           | j        j                            |          }|r|                    |           m| j        j                            | j        ||           t          t          j                  c S t          | j        d                   dk    rt/          |          S t          | j                  dk    r`t          | j        d                   dk    rBt          | j        d                   dk    r$t/          g || j        d         d                   S | j        S )z=Type check and infer a precise return type for TypedDict.pop.r   r   Ncoder   )r   r   r    r   r   r   r   r   failr   $TYPEDDICT_KEY_MUST_BE_STRING_LITERALcodesLITERAL_REQr   r!   
from_errorr   msgtypeddict_key_cannot_be_deletedr   r   r   typeddict_key_not_foundr   r   )r   key_exprr   value_typesr   r   s         r:   rl   rl   ,  s     	38]++N!##a !!Q&&8A;q>'#-2B12EFF<GLL E&    
 9/000 		5 		5Cch,,,;;CHc8TTT++C00J 5"":....33CHc8LLLy344444sx{q  (5551$$S]1-=)>)>!)C)CCHUVKHXHX\]H]H]()L;)La8H8K)LMMM""r<   c                   | j         }| j                            dg           }t          | j        t
                    rt          | j                  dk    rt          | j        d                   dk    rt          | j        d         d         t                    rt          |j	                  dk    rot          | j        d                   dk    rQ| j        d         d         j
        }| j        j                            |          }|r|                    ||g          S |                    ||j	        d         g          S )zTry to infer a better signature type for TypedDict.setdefault.

    This is used to get better type context for the second argument that
    depends on a TypedDict value type.
    r   r   r   r   r   )r   r   r   r   r   r    r   r   r
   r   r   r   r   r   )r   r   r   r   r   s        r:   rW   rW   P  s!    %Iw))."==H38]++MMMQ!!sx{1~w// "	#$$))!!hqk!n"X^'',,
 	M**h
5K*LLL""h	8KA8N-O"PPPr<   c                p   t          | j        t                    rt          | j                  dk    rt          | j        d                   dk    rt          | j        d                   dk    r| j        d         d         }t          || j        d         d                   }|J| j                            t          j
        |t          j                   t          t          j                  S | j        j        t#          |          z  }|r!| j        j                            ||           | j        d         d         }| j        d         d         }g }|D ]}| j        j                            |          }|A| j        j                            | j        ||           t          t          j                  c S t/          ||          s<| j        j                            |||           t          t          j                  c S |                    |           t5          |          S | j        S )z@Type check TypedDict.setdefault and infer a precise return type.r   r   r   Nr   )context)r   r   r    r   r   r   r   r   r   r   r   r   r   r   r!   r   readonly_keysr\   r   readonly_keys_mutatedr   r   r   r   +typeddict_setdefault_arguments_inconsistentr   r   r   )	r   r   r   assigned_readonly_keysdefault_typedefault_exprr   r   r   s	            r:   rk   rk   g  s    	38]+++2!##a !!Q&&a !!Q&&8A;q>'#-2B12EFF<GLL E&    
 9/000!$!7#d))!C! 	XGK--.Dh-WWW}Q'*x{1~ 	+ 	+C++C00J!33CHc8LLLy344444 lJ77 5GG *l   y344444z****$[111""r<   c                   t          | j        t                    r3t          | j                  dk    rt          | j        d                   dk    r| j        d         d         }t          || j        d         d                   }|J| j                            t          j
        |t          j                   t          t          j                  S |D ]y}|| j        j        v s|| j        j        v r'| j        j                            | j        ||           E|| j        j        vr&| j        j                            | j        ||           z| j        S )z!Type check TypedDict.__delitem__.r   r   Nr   )r   r   r    r   r   r   r   r   r   r   r   r   r   r   r!   r   r   r   r   r   r   r   r   )r   r   r   r   s       r:   rm   rm     s>    	38]++M!##a !!Q&&8A;q>'#-2B12EFF<GLL E&    
 9/000 	M 	MCch,,,sx7M0M0M;;CHc8TTTTCHN**33CHc8LLL""r<   zupdate of TypedDictz__ior__ of TypedDictr   _TP_DICT_MUTATING_METHODSc                   | j         }t          | j        t                    rBt	          |j                  dk    r)t          |j        d                   }t          |t                    s|S |                                }|                    t                                }| j
        r| j
        d         r|j        t          v rd|_        | j        j                            d d          5  t          | j                            | j
        d         d         |                    }ddd           n# 1 swxY w Y   |j        rd	|_        g }t          |t                    r|g}n@t          |t$                    r+d
 t'          |                                          D             }g }|D ]}|                    |j        |j        z  |j                                        z            }| j        j        j        s(|                    t5          |j                            }|                    |           |rt9          |          }|                    |g          S |S )zTry to infer a better signature type for methods that update `TypedDict`.

    This includes: `TypedDict.update`, `TypedDict.__or__`, `TypedDict.__ror__`,
    and `TypedDict.__ior__`.
    r   r   r   Tc                ,    |j         t          j        k    S )N)r   r   TYPEDDICT_READONLY_MUTATED)nameinfos     r:   <lambda>z6typed_dict_update_signature_callback.<locals>.<lambda>  s    e>^1^ r<   )filter_errorssave_filtered_errors)type_contextNFc                <    g | ]}t          |t                    |S rM   )r   r    )rO   ts     r:   
<listcomp>z8typed_dict_update_signature_callback.<locals>.<listcomp>  s8          !!]33      r<   )
item_namesr   )r   r   r   r    r   r   r$   as_anonymousr   r\   r   r   r   to_be_mutatedr   r   r   get_expression_typer#   r%   relevant_itemsr   r   r   optionsextra_checkslistr   r   )r   r   arg_typeinferredpossible_tdsr   tditems           r:   r^   r^     s    %I#(M** (=s93F/G/G1/L/L"9#6q#9::(M22 	((**)))>>8 !	8 !	8~!::: *.&**^^%) +     +G//AX/VV 	               % /).&L(M22  (zHi00    -h.E.E.G.GHH     
 E" # #--#+#9B<L#Ln))++#, .   w3 I--bh-HHDT"""" 8077&&(&<<<s   0;D77D;>D;c                .   t          | j                  dk    rt          | j        d                   dk    rt          | j        d                   dk    r| j        d         d         }t          |t                    r|j        }nOt          |t                    r3|j        dk    r(t          |j        t                    r|j        j         }n| j	        S |dk    r| j
                            dg           S | j
                            dg           S | j	        S )z1Infer a more precise return type for int.__pow__.r   r   r   -zbuiltins.intzbuiltins.float)r   r   r   r   r	   r   r   opexprr   r   r   )r   argexponents      r:   rg   rg     s     3=Q3s}Q'7#8#8A#=#=#cmTUFVBWBW[\B\B\hqk!nc7## 	+yHHY'' 	+CFcMMjSZ>[>[MHH **q==7--nbAAA7--.>CCC""r<   
multiplierintc                n   t          | j        t                    r| j        j        | j        j        j        }| j        j        j        }t          |t                    rvt          | j        j	        d                   rt          ||z  |          S | j                            t          ||z  || j        j        | j        j                            S n[t          | j        t                    rA| j        j        }| j        j        }t          |t                    rt          ||z  |          S | j        S )zInfer a more precise return type for int.__neg__ and int.__pos__.

    This is mainly used to infer the return type as LiteralType
    if the original underlying object is a LiteralType object.
    Nr   )r   fallback)r   r   linecolumn)last_known_value)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   s       r:   rh   rh     s.    #(H%% L#(*C*O)/8,5eS!! 	#CG$8$<== 
"e);hOOOOx--%0(50!) X]"x	& & & .   		 
CHk	*	* L8$eS!! 	LZ%%7(KKKK""r<   c                "    t          | d          S )z{Infer a more precise return type for int.__pos__.

    This is identical to __neg__, except the value is not inverted.
    r   )rh   )r   s    r:   ri   ri     s    
 C$$$r<   c                   t          | j        t                    s| j        S t	          | j        d         d                   }t          |t                    rQ|j        J|j        j        }t          |t                    r(| j        
                    | j        j        |z            S nYt          |t                    rD|j        }t          |t                    r(| j        
                    | j        j        |z            S | j        S )zInfer a more precise return type for tuple.__mul__ and tuple.__rmul__.

    This is used to return a specific sized tuple if multiplied by Literal int
    r   N)r   )r   r   r   r   r$   r   r   r   r   r   r   r   r   )r   r   r   s      r:   rj   rj      s    
 ch	** '&&s}Q/233H(H%% H(*C*O)/eS!! 	H8))0F)GGG	H	Hk	*	* HeS!! 	H8))0F)GGG""r<   )r   r   r*   r   )r   r   r*   r   )r   )r   r   r   r   r*   r   )@
__future__r   r5   r   typingr   r   mypy.errorcodes
errorcodesr   r9   r   
mypy.nodesr   r	   r
   r   mypy.pluginr   r   r   r   r   r   r   mypy.plugins.commonr   mypy.subtypesr   mypy.typeopsr   r   
mypy.typesr   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r'   rV   rf   rX   rl   rW   rk   rm   	frozensetr   __annotations__r^   rg   rh   ri   rj   rM   r<   r:   <module>r     s2   " " " " " " "       " " " " " " " "       ! ! ! ! ! ! < < < < < < < < < < < <                  9 8 8 8 8 8 $ $ $ $ $ $ D D D D D D D D                                 &T T T T TF T T Tn% % % %P$# $# $# $#NQ Q Q Q<!# !# !# !#HQ Q Q Q..# .# .# .#b# # # #2 $-9.CE[-\#]#]  ] ] ] ]0 0 0 0f# # # #(# # # # #:% % % %# # # # # #r<   