o
    tBh\g                     @  s  d Z ddlmZ ddlmZ ddl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 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$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 G d
d dZ3d:ddZ4d;ddZ5d<d=ddZ6G dd de,e# Z7d>ddZ8d?d!d"Z9d@d$d%Z:dAd&d'Z;dAd(d)Z<dBd+d,Z=dCd/d0Z>dDd2d3Z?dEd6d7Z@dFd8d9ZAdS )Gz3Calculation of the least upper bound types (joins).    )annotations)TupleN)map_instance_to_supertype)CONTRAVARIANT	COVARIANT	INVARIANT)state)find_memberis_equivalentis_proper_subtypeis_protocol_implementation
is_subtype)AnyTypeCallableTypeDeletedType
ErasedTypeFunctionLikeInstanceLiteralTypeNoneType
Overloaded
ParametersParamSpecTypePartialTypePlaceholderType
ProperType	TupleTypeTypeTypeAliasTypeTypedDictType	TypeOfAnyTypeTypeTypeVarTupleTypeTypeVarTypeTypeVisitorUnboundTypeUninhabitedType	UnionType
UnpackTypeget_proper_typeget_proper_typesc                   @  s*   e Zd ZdddZdd	d
ZdddZdS )InstanceJoinerreturnNonec                 C  s
   g | _ d S N)seen_instances)self r1   `/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/mypy/join.py__init__4      
zInstanceJoiner.__init__tr   sr   c                 C  s  ||f| j v s||f| j v rt|S | j ||f |j|jkrg }t|j|j|jjjD ]\}}}t|}t|}d }	t	|t
rHt
tj|}	nut	|t
rTt
tj|}	nit	|tr|jtkrt||| }	t|jdkr{|	|jvr{| j   t|  S t|	|js| j   t|  S n0|jttfv rt||s| j   t|  S t||| }	nt||st|j  S t||| }	|	d usJ ||	 q-t|j|}
n|jjrt||ddr| ||}
n| ||}
| j   |
S )Nr   T)ignore_type_params)r/   object_from_instanceappendtypezipargsdefn	type_varsr)   
isinstancer   r    from_another_anyr#   variancer   
join_typeslenvaluespopr   upper_boundr   r   r
   r   basesjoin_instances_via_supertype)r0   r5   r6   r<   tasatype_var	ta_proper	sa_propernew_typeresultr1   r1   r2   join_instances7   sP    









zInstanceJoiner.join_instancesc           	      C  s   |j jD ]}t||rt|||   S q|j jD ]}t||r't|||   S qd }|j jD ]}t||j }| ||}|d u sEt||rG|}q.|d usNJ |j jD ]}t|}t	|t
rj| ||}t||rj|}qR|S r.   )r:   _promoter   rB   rG   r   rP   	is_betterr)   r?   r   )	r0   r5   r6   pbestbasemappedrespromoter1   r1   r2   rH   s   s0   



z+InstanceJoiner.join_instances_via_supertypeN)r,   r-   )r5   r   r6   r   r,   r   )__name__
__module____qualname__r3   rP   rH   r1   r1   r1   r2   r+   3   s    

<r+   declarationType | Noner6   r   r5   r,   r   c                 C  s  t | } t |}t |}|j|jf|j|jfkr$tj|}tj|}t|tr+|S t|tr2|S t	||r9|S t	||r@|S t| t
rMtj||gS t|tr\t|ts\||}}t|trkt|tsk||}}t||\}}|t|}| du st|| r|S | S )z:Return a simple least upper bound given the declared type.N)r)   can_be_truecan_be_falsemypytypeopstrue_or_falser?   r   r   r   r'   make_simplified_unionr   r&   normalize_callablesacceptTypeJoinVisitorr   )r\   r6   r5   valuer1   r1   r2   join_simple   s2   






rh   c                 C  s0   t | |r	t|S t || rt| S tt|S )zQReturn one of types (expanded) if it is a supertype of other, otherwise top type.)r   r)   object_or_any_from_typer6   r5   r1   r1   r2   trivial_join   s
   

rk   instance_joinerInstanceJoiner | Nonec                 C  s"  t j| |rt| |S t| } t|}| j| jf|j|jfkr,t j| } t j|}t| t	r;t|t	s;|| } }t| t
rB| S t| trI|S t| trXt|tsX|| } }t| trgt|tsg|| } }t|trxt| tsx| t|S t|trt
tjS t| |\} }|t| |S )zkReturn the least upper bound of s and t.

    For example, the join of 'int' and 'object' is 'object'.
    )r`   ra   is_recursive_pairrk   r)   r^   r_   rb   r?   r'   r   r   r   r&   r   re   rf   r    
from_errorrd   )r6   r5   rl   r1   r1   r2   rB      s.   







rB   c                   @  s  e Zd ZdZdQdRd	d
ZdSddZdTddZdUddZdVddZdWddZ	dXddZ
dYdd ZdZd"d#Zd[d%d&Zd\d(d)Zd]d+d,Zd^d.d/Zd_d1d2Zd`d4d5Zdad7d8Zdbd:d;Zdcd=d>Zddd@dAZdedCdDZdfdFdGZdgdIdJZdhdLdMZdidOdPZdS )jrf   zpImplementation of the least upper bound algorithm.

    Attributes:
      s: The other (left) type operand.
    Nr6   r   rl   rm   r,   r-   c                 C  s   || _ || _d S r.   )r6   rl   )r0   r6   rl   r1   r1   r2   r3      s   
zTypeJoinVisitor.__init__r5   r%   c                 C  s
   t tjS r.   )r   r    special_formr0   r5   r1   r1   r2   visit_unbound_type   r4   z"TypeJoinVisitor.visit_unbound_typer'   c                 C  s"   t | j|r|S tj| j|gS r.   )r   r6   r`   ra   rc   rq   r1   r1   r2   visit_union_type  s   z TypeJoinVisitor.visit_union_typer   c                 C  s   |S r.   r1   rq   r1   r1   r2   	visit_any     zTypeJoinVisitor.visit_anyr   c                 C  sH   t jr!t| jttfr|S t| jtrttj	S t
j| j|gS | jS r.   )r   strict_optionalr?   r6   r   r&   r%   r   r    rp   r`   ra   rc   rq   r1   r1   r2   visit_none_type  s   
zTypeJoinVisitor.visit_none_typer&   c                 C     | j S r.   r6   rq   r1   r1   r2   visit_uninhabited_type     z&TypeJoinVisitor.visit_uninhabited_typer   c                 C  rx   r.   ry   rq   r1   r1   r2   visit_deleted_type  r{   z"TypeJoinVisitor.visit_deleted_typer   c                 C  rx   r.   ry   rq   r1   r1   r2   visit_erased_type  r{   z!TypeJoinVisitor.visit_erased_typer#   c                 C  s,   t | jtr| jj|jkr| jS | | jS r.   )r?   r6   r#   iddefaultrq   r1   r1   r2   visit_type_var  s   zTypeJoinVisitor.visit_type_varr   c                 C     | j |kr|S | | j S r.   r6   r   rq   r1   r1   r2   visit_param_spec%     
z TypeJoinVisitor.visit_param_specr"   c                 C  r   r.   r   rq   r1   r1   r2   visit_type_var_tuple*  r   z$TypeJoinVisitor.visit_type_var_tupler(   c                 C  s   t r.   )NotImplementedErrorrq   r1   r1   r2   visit_unpack_type/  ru   z!TypeJoinVisitor.visit_unpack_typer   c                 C  r   r.   r   rq   r1   r1   r2   visit_parameters2  s   
z TypeJoinVisitor.visit_parametersr   c                 C  s$  t | jtr?| jd u rt | _| j|| j}d }|jjr&t| j|r&|}n| jjjr4t|| jr4| j}|r;t	||r=|S |S t | jt
r\|jjrUt|}|rUt|| jS t|| jjS t | jtrht|| jS t | jtrtt|| jS t | jtrt|| jS t | jtrt|| jS | | jS r.   )r?   r6   r   rl   r+   rP   r:   is_protocolr   rR   r   unpack_callback_protocolrB   fallbackr!   r   r   r   r   )r0   r5   nominal
structuralcallr1   r1   r2   visit_instance8  s6   
zTypeJoinVisitor.visit_instancer   c                 C  s   t | jtrJt|| jrJt|| jrt|| jS t|| j}| r'| j	s5| j r2| j j	s5d|_
tdd t|jD rHt|j| jS |S t | jtrVt|| jS t | jtrm| jjjrmt| j}|rmt||S t|j| jS )NTc                 s  s    | ]
}t |ttfV  qd S r.   )r?   r   r&   ).0tpr1   r1   r2   	<genexpr>e  s
    
z6TypeJoinVisitor.visit_callable_type.<locals>.<genexpr>)r?   r6   r   is_similar_callablesr
   combine_similar_callablesjoin_similar_callablesis_type_objtype_objectis_abstractfrom_type_typeanyr*   	arg_typesrB   r   r   r   r:   r   r   )r0   r5   rO   r   r1   r1   r2   visit_callable_typeY  s2   


z#TypeJoinVisitor.visit_callable_typer   c                 C  s   g }| j }t|trJ|jD ]%}|jD ]}t||r1t||r'|t|| qt||r1|| qq|rCt	|dkr?|d S t
|S t|j|jS t|tr^|jjr^t|}|r^t||S t|j|S )N   r   )r6   r?   r   itemsr   r
   r9   r   r   rC   r   rB   r   r   r:   r   r   )r0   r5   rO   r6   t_items_itemr   r1   r1   r2   visit_overloadedu  s,   







z TypeJoinVisitor.visit_overloadedr   c                 C  s   t | jtrZ| j | krZ| jd u rt | _| jtj	| jtj	|}t |t
s/J | j | krXg }t| D ]}|| |j| | jj|  q@t||S |S t| jtj	|S r.   )r?   r6   r   lengthrl   r+   rP   r`   ra   tuple_fallbackr   ranger9   joinr   rB   )r0   r5   r   r   ir1   r1   r2   visit_tuple_type  s   
"
z TypeJoinVisitor.visit_tuple_typer   c                   s~   t  jtr, fdd jD } j }t| j@  jj@ }t|||S t  jtr9t	 jj
S   jS )Nc                   s8   i | ]\}}}t ||r|jv | jjv kr||qS r1   )r
   required_keysr6   )r   	item_names_item_typet_item_typerq   r1   r2   
<dictcomp>  s    z8TypeJoinVisitor.visit_typeddict_type.<locals>.<dictcomp>)r?   r6   r   r;   create_anonymous_fallbacksetkeysr   r   rB   r   r   )r0   r5   r   r   r   r1   rq   r2   visit_typeddict_type  s   

z$TypeJoinVisitor.visit_typeddict_typer   c                 C  s`   t | jtr)|| jkr|S | jjjjr!|jjjr!tj| j|gS t	| jj|jS t	| j|jS r.   )
r?   r6   r   r   r:   is_enumr`   ra   rc   rB   rq   r1   r1   r2   visit_literal_type  s   
z"TypeJoinVisitor.visit_literal_typer   c                 C  s   J d)NFzInternal errorr1   rq   r1   r1   r2   visit_partial_type  s   z"TypeJoinVisitor.visit_partial_typer!   c                 C  sV   t | jtrtj| |j| jj|jdS t | jtr%| jjj	dkr%| jS | 
| jS )N)linebuiltins.type)r?   r6   r!   make_normalizedr   itemr   r   r:   fullnamer   rq   r1   r1   r2   visit_type_type  s
   zTypeJoinVisitor.visit_type_typer   c                 C  s   J d| )NFz!This should be never called, got r1   rq   r1   r1   r2   visit_type_alias_type  s   z%TypeJoinVisitor.visit_type_alias_typer   c                 C  s
   t ||S r.   )rB   )r0   r6   r5   r1   r1   r2   r     r4   zTypeJoinVisitor.jointypc                 C  s   t |}t|trt|S t|trttjS t|tr%| 	t
j|S t|tr0| 	|jS t|tr;| 	|jS t|trF| 	|jS t|trQ| 	|jS ttjS r.   )r)   r?   r   r8   r%   r   r    rp   r   r   r`   ra   r   r   r   r   r#   rF   r   )r0   r   r1   r1   r2   r     s    








zTypeJoinVisitor.defaultr.   )r6   r   rl   rm   r,   r-   )r5   r%   r,   r   )r5   r'   r,   r   )r5   r   r,   r   )r5   r   r,   r   )r5   r&   r,   r   )r5   r   r,   r   )r5   r   r,   r   )r5   r#   r,   r   )r5   r   r,   r   )r5   r"   r,   r   )r5   r(   r,   r(   )r5   r   r,   r   )r5   r   r,   r   )r5   r   r,   r   )r5   r   r,   r   )r5   r   r,   r   )r5   r   r,   r   )r5   r   r,   r   )r5   r   r,   r   )r5   r!   r,   r   )r5   r   r,   r   r6   r   r5   r   r,   r   )r   r   r,   r   )rY   rZ   r[   __doc__r3   rr   rs   rt   rw   rz   r|   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r1   r1   r1   r2   rf      s4    













!

5






rf   boolc                 C  sH   t | } t |}t| tr"t|tsdS t| jjt|jjkr"dS dS )NTF)r)   r?   r   rC   r:   mror5   r6   r1   r1   r2   rR     s   

rR   Tuple[ProperType, ProperType]c                 C  s4   t | ttfr|  } t |ttfr| }| |fS r.   )r?   r   r   with_unpacked_kwargsrj   r1   r1   r2   rd     s
   rd   r   c                 C  s,   t | jt |jko| j|jko| j|jkS )zcReturn True if t and s have identical numbers of
    arguments, default arguments and varargs.
    )rC   r   min_args
is_var_argr   r1   r1   r2   r   #  s
   

r   c                 C  s   ddl m} g }tt| jD ]}||| j| |j|  q| jjjdkr+| j}n|j}| j	|t
| |t| j|j|d dS )Nr   )
meet_typesr   r   	arg_namesret_typer   name)	mypy.meetr   r   rC   r   r9   r   r:   r   copy_modifiedcombine_arg_namesrB   r   )r5   r6   r   r   r   r   r1   r1   r2   r   .  s   r   c                 C  st   g }t t| jD ]}|t| j| |j|  q	| jjjdkr%| j}n|j}| j|t	| |t| j
|j
|d dS )Nr   r   )r   rC   r   r9   rB   r   r:   r   r   r   r   )r5   r6   r   r   r   r1   r1   r2   r   D  s   r   list[str | None]c                 C  sn   t | j}g }t|D ])}| j| }|j| }||ks)| j|  s)|j|  r/|| q|d q|S )aL  Produces a list of argument names compatible with both callables.

    For example, suppose 't' and 's' have the following signatures:

    - t: (a: int, b: str, X: str) -> None
    - s: (a: int, b: str, Y: str) -> None

    This function would return ["a", "b", None]. This information
    is then used above to compute the join of t and s, which results
    in a signature of (a: int, b: str, str) -> None.

    Note that the third argument's name is omitted and 't' and 's'
    are both valid subtypes of this inferred signature.

    Precondition: is_similar_types(t, s) is true.
    N)rC   r   r   r   	arg_kindsis_namedr9   )r5   r6   num_args	new_namesr   t_names_namer1   r1   r2   r   X  s   


$r   instancer   c                 C  s   t | jjd g }|S )z;Construct the type 'builtins.object' from an instance type.)r   r:   r   )r   rW   r1   r1   r2   r8   u  s   r8   r   c                 C  s   t | tr	t| S t | tttfrt| jS t | tr t| jS t | t	r*t
| jS t | tr:t | jtr:t
| jS t | trW| jD ]}t |trVt
|}t |trV|  S qBttjS r.   )r?   r   r8   r   r   r   r   r   partial_fallbackr!   ri   r   r#   rF   r   r'   r   r   r    implementation_artifact)r   r   	candidater1   r1   r2   ri   |  s$   











ri   types
list[Type]c                 C  s6   | st  S t| d }| dd  D ]}t||}q|S )Nr   r   )r&   r)   rB   )r   joinedr5   r1   r1   r2   join_type_list  s   r   c                 C  s.   | j jsJ | j jdgkrtd| | ddS d S )N__call__T)is_operator)r:   r   protocol_membersr	   )r5   r1   r1   r2   r     s   r   )r\   r]   r6   r   r5   r   r,   r   r   r.   )r6   r   r5   r   rl   rm   r,   r   )r5   r   r6   r   r,   r   )r6   r   r5   r   r,   r   )r5   r   r6   r   r,   r   )r5   r   r6   r   r,   r   )r5   r   r6   r   r,   r   )r   r   r,   r   )r   r   r,   r   )r   r   r,   r   )r5   r   r,   r]   )Br   
__future__r   typingr   mypy.typeopsr`   mypy.maptyper   
mypy.nodesr   r   r   
mypy.stater   mypy.subtypesr	   r
   r   r   r   
mypy.typesr   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)   r*   r+   rh   rk   rB   rf   rR   rd   r   r   r   r   r8   ri   r   r   r1   r1   r1   r2   <module>   s4    |!
]
+
/  








