o
    tBh7K                     @  sX  d dl 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 d dl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( G dd deZ)d-ddZ*d.ddZ+d/ddZ,d.ddZ-d/ddZ.d.ddZ/d/d d!Z0d/d"d#Z1d.d$d%Z2d/d&d'Z3d/d(d)Z4d/d*d+Z5d,S )0    )annotations)partial)Callable)message_registry)DictExprIntExprStrExpr	UnaryExpr)AttributeContextClassDefContextFunctionContext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get_proper_typec                   @  sL   e Zd ZdZdddZdd	d
ZdddZdddZdddZdddZ	dS )DefaultPluginz/Type checker plugin that is enabled by default.fullnamestrreturn(Callable[[FunctionContext], Type] | Nonec                 C  s<   ddl m}m} |dv rtS |dkr|jS |dkr|jS d S )Nr   ctypessingledispatch)zcontextlib.contextmanagerzcontextlib.asynccontextmanagerzctypes.Arrayzfunctools.singledispatch)mypy.pluginsr'   r(   contextmanager_callbackarray_constructor_callback'create_singledispatch_function_callbackselfr"   r'   r(    r/   k/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/mypy/plugins/default.pyget_function_hook'   s   zDefaultPlugin.get_function_hook1Callable[[MethodSigContext], FunctionLike] | Nonec                 C  s   ddl m}m} |dkrtS |dd tD v rtS |dd tD v r$tS |dd tD v r/tS |dkr6|jS ||j	kr>|j
S d S )	Nr   r&   typing.Mapping.getc                 S     h | ]}|d  qS z.setdefaultr/   .0nr/   r/   r0   	<setcomp>9       z:DefaultPlugin.get_method_signature_hook.<locals>.<setcomp>c                 S  r4   z.popr/   r6   r/   r/   r0   r9   ;   r:   c                 S  r4   )z.updater/   r6   r/   r/   r0   r9   =   r:   zctypes.Array.__setitem__)r)   r'   r(   !typed_dict_get_signature_callbackr   (typed_dict_setdefault_signature_callback!typed_dict_pop_signature_callback$typed_dict_update_signature_callbackarray_setitem_callback#SINGLEDISPATCH_CALLABLE_CALL_METHOD%call_singledispatch_function_callbackr-   r/   r/   r0   get_method_signature_hook2   s   
z'DefaultPlugin.get_method_signature_hook&Callable[[MethodContext], Type] | Nonec                 C  s   ddl m}m} |dkrtS |dkrtS |dkrtS |dv r tS |dd tD v r+tS |d	d tD v r6t	S |d
d tD v rAt
S |dkrH|jS |dkrO|jS ||jkrW|jS ||jkr_|jS d S )Nr   r&   r3   zbuiltins.int.__pow__zbuiltins.int.__neg__)zbuiltins.tuple.__mul__zbuiltins.tuple.__rmul__c                 S  r4   r5   r/   r6   r/   r/   r0   r9   P   r:   z0DefaultPlugin.get_method_hook.<locals>.<setcomp>c                 S  r4   r;   r/   r6   r/   r/   r0   r9   R   r:   c                 S  r4   )z.__delitem__r/   r6   r/   r/   r0   r9   T   r:   zctypes.Array.__getitem__zctypes.Array.__iter__)r)   r'   r(   typed_dict_get_callbackint_pow_callbackint_neg_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_argumentr-   r/   r/   r0   get_method_hookE   s0   

zDefaultPlugin.get_method_hook)Callable[[AttributeContext], Type] | Nonec                 C  sP   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'   enumszctypes.Array.valuezctypes.Array.raw)	r)   r'   rT   array_value_callbackarray_raw_callbackENUM_NAME_ACCESSenum_name_callbackENUM_VALUE_ACCESSenum_value_callback)r.   r"   r'   rT   r/   r/   r0   get_attribute_hook`   s   

z DefaultPlugin.get_attribute_hook(Callable[[ClassDefContext], None] | Nonec                 C  sR   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   )attrsdataclasses)
r)   r]   r^   dataclass_makersdataclass_tag_callbackattr_class_makersattr_dataclass_makersattr_frozen_makersattr_define_makersattr_tag_callback)r.   r"   r]   r^   r/   r/   r0   get_class_decorator_hookm   s   




z&DefaultPlugin.get_class_decorator_hook(Callable[[ClassDefContext], bool] | Nonec                 C  s   ddl m}m}m} ||jv r|jS ||jv r|jS ||jv r"|j	S ||j
v r.t|j	ddS ||jv r;t|j	d ddS ||jv rGt|j	d dS d S )Nr   )r]   r^   	functoolsT)auto_attribs_default)ri   frozen_default)r)   r]   r^   rh   r_   dataclass_class_maker_callbackfunctools_total_ordering_makers'functools_total_ordering_maker_callbackra   attr_class_maker_callbackrb   r   rc   rd   )r.   r"   r]   r^   rh   r/   r/   r0   get_class_decorator_hook_2   s    





z(DefaultPlugin.get_class_decorator_hook_2N)r"   r#   r$   r%   )r"   r#   r$   r2   )r"   r#   r$   rD   )r"   r#   r$   rS   )r"   r#   r$   r\   )r"   r#   r$   rg   )
__name__
__module____qualname____doc__r1   rC   rR   r[   rf   ro   r/   r/   r/   r0   r!   $   s    




r!   ctxr   r$   r   c                 C  sl   | j r3t| j d dkr3t| j d d }t| j}t|tr3t|tr3|j|j |j|j|j	|j
dS | jS )z;Infer a better return type for 'contextlib.contextmanager'.r      )	arg_types	arg_kinds	arg_names	variablesis_ellipsis_args)rv   lenr    default_return_type
isinstancer   copy_modifiedrw   rx   ry   rz   )rt   arg_typedefault_returnr/   r/   r0   r*      s   
r*   r   r   c                 C  s  | j }t| jtrt| jdkrt| 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	}t
| jj|}|j}|r| jd d }t|trot|trot|jdkro|jt d}|jd }t|ts{J |j|jd t||gg|d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   ru   required_keysrv   ret_type)default_signaturer}   typer   r{   argsr   rv   ry   valuer    itemsgetr   r   r~   setr   r   )rt   	signaturekey
value_typer   default_argtvr/   r/   r0   r<      s8   

r<   r   c                 C  sb  t | jtrt| jdkrt| jd dkrt| jd d | jd d }|du r,| jS g }|D ]l}t| jj	
|}|du rD| j  S t| jdkrQ|| q0t| jdkrt| jd dkrt| jd dkr| jd d }t |trt|j	dkrt |tr||jt d q0|| || jd d  q0t| jdkr|t  t|S | jS )zJInfer a precise return type for TypedDict.get with literal first argument.ru   r   Nr   r   )r}   r   r   r{   rv   r   r   r|   r    r   r   appendr   r~   r   r   r   )rt   keysoutput_typesr   r   r   r/   r/   r0   rE      s:   

2
rE   c                 C  s   | j }| jdg }t| jtrmt| jdkrmt| jd dkrmt| jd d trmt|j	dkrmt|j
dkrmt| jd dkrm| jd d j}| jj|}|rm|j
d }t|ts^J t||g}|j||g|dS |j||j	d gd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   ru   r   rv   )r   apinamed_generic_typer}   r   r   r{   r   r   rv   ry   r   r   r   r   r   r~   )rt   r   str_typer   r   r   typr/   r/   r0   r>      s&   

r>   c                 C  sJ  t | jtrt| jdkrt| jd dkrt| jd d | jd d }|du r7| jt	j
| j ttjS g }|D ]3}|| jjv rN| jj| j|| j | jj|}|r]|| q;| jj| j|| j ttj  S t| jd dkr|t|S t| jdkrt| jd dkrt| jd dkrtg || jd d S | jS )z=Type check and infer a precise return type for TypedDict.pop.ru   r   Nr   )r}   r   r   r{   rv   r   r   r   failr   $TYPEDDICT_KEY_MUST_BE_STRING_LITERALcontextr   r   
from_errorr   msgtypeddict_key_cannot_be_deletedr   r   r   typeddict_key_not_foundr   r|   )rt   r   value_typesr   r   r/   r/   r0   rJ     s,   

2rJ   c                 C  s   | j }| jdg }t| jtrSt| jdkrSt| jd dkrSt| jd d trSt|j	dkrSt| jd dkrS| jd d j
}| jj|}|rS|j||gdS |j||j	d gd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   ru   r   )r   r   r   r}   r   r   r{   r   r   rv   r   r   r   r~   )rt   r   r   r   r   r/   r/   r0   r=   6  s   
r=   c                 C  s  t | jtrt| jdkrt| jd dkrt| jd dkrt| jd d | jd d }|du r@| jt	j
| j ttjS | jd d }g }|D ]:}| jj|}|du rj| jj| j|| j ttj  S t||s| jj||| j ttj  S || qKt|S | jS )z@Type check TypedDict.setdefault and infer a precise return type.r   r   ru   N)r}   r   r   r{   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   +typeddict_setdefault_arguments_inconsistentr   r   r|   )rt   r   default_typer   r   r   r/   r/   r0   rI   M  s0   


rI   c                 C  s   t | jtr_t| jdkr_t| jd dkr_t| jd d | jd d }|du r7| jt	j
| j ttjS |D ]%}|| jjv rM| jj| j|| j q9|| jjvr^| jj| j|| j q9| jS )z!Type check TypedDict.__delitem__.ru   r   N)r}   r   r   r{   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r|   )rt   r   r   r/   r/   r0   rK   t  s   

rK   c                 C  sd   | j }t| jtr0t|jdkr0t|jd }t|tsJ | }|jt	 d}|j|gdS |S )z:Try to infer a better signature type for TypedDict.update.ru   r   r   r   )
r   r}   r   r   r{   rv   r    as_anonymousr~   r   )rt   r   r   r/   r/   r0   r?     s   r?   c                 C  s   t | jdkrTt | jd dkrTt | jd dkrT| jd d }t|tr)|j}nt|tr?|jdkr?t|jtr?|jj }n| j	S |dkrM| j
dg S | j
dg S | j	S )z1Infer a more precise return type for int.__pow__.r   r   ru   -zbuiltins.intzbuiltins.float)r{   rv   r   r}   r   r   r	   opexprr|   r   r   )rt   argexponentr/   r/   r0   rF     s   2
 rF   c                 C  s   t | jtr@| jjdur@| jjj}| jjj}t |tr=t| jj	d r*t
| |dS | jjt
| | j| jj| jjddS | jS t | jt
rZ| jj}| jj}t |trZt
| |dS | jS )zInfer a more precise return type for int.__neg__.

    This is mainly used to infer the return type as LiteralType
    if the original underlying object is a LiteralType object
    N)r   fallback)r   r   linecolumn)last_known_value)r}   r   r   r   r   r   intr   r   type_contextr   r~   r   r   r|   )rt   r   r   r/   r/   r0   rG     s$   




rG   c                 C  s   t | jts	| jS t| jd d }t |tr3|jdur3|jj}t |t	r0| jj
| jj| dS | jS t | jtrL|j}t |t	rL| jj
| jj| d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    rv   r   r   r   r   r~   r   r   )rt   r   r   r/   r/   r0   rH     s   

rH   N)rt   r   r$   r   )rt   r   r$   r   )rt   r   r$   r   )6
__future__r   rh   r   typingr   mypyr   
mypy.nodesr   r   r   r	   mypy.pluginr
   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<   rE   r>   rJ   r=   rI   rK   r?   rF   rG   rH   r/   r/   r/   r0   <module>   s.     <
s

(
'



'


