
    %^g)                       d Z ddlmZ ddlmZmZ ddl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 dd	lmZ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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:  G d d      Z;d"dZ<d#dZ=e	 d$	 	 	 	 	 	 	 d%d       Z>ed$d&d       Z>d$d&dZ> G d de2e'         Z?d'dZ@d(dZAd)dZBd*dZCd+dZDd,dZEd-dZFd-dZGd,dZH	 	 	 	 	 	 d.dZId/dZJd0dZKd1d ZLd2d!ZMy)3z3Calculation of the least upper bound types (joins).    )annotations)SequenceoverloadN)expand_type)map_instance_to_supertype)CONTRAVARIANT	COVARIANT	INVARIANTVARIANCE_NOT_READY)state)SubtypeContextfind_memberis_equivalentis_proper_subtypeis_protocol_implementation
is_subtype) AnyTypeCallableTypeDeletedType
ErasedTypeFunctionLikeInstanceLiteralTypeNoneType
Overloaded
ParametersParamSpecTypePartialType
ProperType	TupleTypeTypeTypeAliasTypeTypedDictType	TypeOfAnyTypeType	TypeVarIdTypeVarLikeTypeTypeVarTupleTypeTypeVarTypeTypeVisitorUnboundTypeUninhabitedType	UnionType
UnpackTypefind_unpack_in_listget_proper_typeget_proper_typessplit_with_prefix_and_suffixc                  $    e Zd ZddZddZddZy)InstanceJoinerc                    g | _         y N)seen_instances)selfs    )lib/python3.12/site-packages/mypy/join.py__init__zInstanceJoiner.__init__9   s
    ?A    c                	   ||f| j                   v s||f| j                   v rt        |      S | j                   j                  ||f       |j                  |j                  k(  r%g }|j                  j                  r|j                  j
                  J |j                  j                  J |j                  j
                  }|j                  j                  }|j                  j                  j                  |   }t        |t              sJ |j                  }t        |j                  ||      \  }}	}
t        |j                  ||      \  }}}|t        t        |	      |      fz   |
z   }|t        t        |      |      fz   |z   }n|j                  }|j                  }t!        |||j                  j                  j                        D ]  \  }}}t#        |      }t#        |      }d }t        |t$              rt%        t&        j(                  |      }nBt        |t$              rt%        t&        j(                  |      }nt        |t*              rI|j,                  t.        t0        fv rt3        |||       }t5        |j6                        dk7  r5||j6                  vr'| j                   j9                          t        |      c S t;        ||j<                        s|| j                   j9                          t        |      c S |j,                  t>        t@        fv r<t        |tB              r|jD                  r|}nt        |tB              r|jD                  r|}ntG        ||      s'| j                   j9                          t        |      c S t3        |||       }nt        |t              r|t#        t3        |||             }t        |tH              r'|j                  jJ                  dk(  sJ tM        |      }n_t        |t              sJ |jO                  |jP                         ^tG        ||      st#        |j<                        c S t3        |||       }|J |j                  |        tI        |j                  |      }nS|j                  jR                  r+tU        ||tW        d            r| jY                  ||      }n| jY                  ||      }| j                   j9                          |S )Nr   builtins.tupleT)ignore_type_params)subtype_context)-r7   object_from_instanceappendtypehas_type_var_tuple_typetype_var_tuple_prefixtype_var_tuple_suffixdefn	type_vars
isinstancer(   tuple_fallbackr2   argsr    listzipr0   r   r$   from_another_anyr)   variancer	   r   
join_typeslenvaluespopr   upper_boundr
   r   r,   	ambiguousr   r   fullnamer.   extenditemsbasesr   r   join_instances_via_supertype)r8   tsrJ   prefixsuffixtvtfallbacks_prefixs_middles_suffixt_prefixt_middlet_suffixs_argst_argstasatype_var	ta_proper	sa_propernew_typeresults                          r9   join_instanceszInstanceJoiner.join_instances<   s   q6T(((QFd6I6I,I'**""Aq6* 66QVV
  "D vv-- vv33???vv33???5555ffkk++F3!#'7888--/KAFFTZ\b/c,(H/KAFFTZ\b/c,(H!YtH~x%H$JJXU!YtH~x%H$JJXU$'8M8M$N B+B/	+B/	(,i1&y'A'A9MH	73&y'A'A9MH+6((Y8J,KK#-b"d#;x/149X //335#7#::)(H4H4HI //335#7#:: "**y-.HH%iAiFYFY')H'	?C	H[H[')H!.r2!6 //335#7#:: (2"b$'?H*:;.z"b$/GHH "(H5'}}559IIII#-h#7)(I>>>HNN3  )R0.x/C/CDD)"b$7H+++H%c %Od "*!&&$!7FVV\\/q.D"I
 66q!<F
 66q!<F!r;   c                ,   |j                   j                  D ]  }t        ||      st        |||       c S  |j                   j                  D ]  }t        ||      st        |||       c S  d }|j                   j                  D ];  }t        ||j                         }| j                  ||      }|t        ||      s:|}= |J |j                   j                  D ]4  }t        |t              s| j                  ||      }t        ||      s3|}6 |S r6   )
rB   _promoter   rO   rX   r   ro   	is_betterrH   r   )	r8   rZ   r[   pbestbasemappedrespromotes	            r9   rY   z+InstanceJoiner.join_instances_via_supertype   s     A!Q!!Q-- ! A!Q!!Q-- ! #'FFLLD.q$))<F%%fa0C|yd3	 !
 vvG'8,))'15S$'D	 '
 r;   N)returnNone)rZ   r   r[   r   ry   r   )__name__
__module____qualname__r:   ro   rY    r;   r9   r4   r4   8   s    B_Br;   r4   c                Z   t        |       } t        |      }t        |      }|j                  |j                  f|j                  |j                  fk7  r>t        j                  j                  |      }t        j                  j                  |      }t        |t              r|S t        |t              r|S t        ||d      r|S t        ||d      r|S t        | t              r!t        j                  j                  ||g      S t        |t              rt        |t              s||}}t        |t              rt        |t              s||}}t        ||      \  }}t        |t              rt        |t              s||}}|j                  t!        |            }| t#        ||       r|S | S )zReturn a simple least upper bound given the declared type.

    This function should be only used by binder, and should not recurse.
    For all other uses, use `join_types()`.
    T)ignore_promotions)r0   can_be_truecan_be_falsemypytypeopstrue_or_falserH   r   r   r   r-   make_simplified_unionr   r,   normalize_callablesacceptTypeJoinVisitorr   )declarationr[   rZ   values       r9   join_simpler      sb    "+.KAA	q~~&1==!..*IILL&&q)LL&&q)!W!Z A6A6+y)||111a&99!Xz!X'>!1!_%jO.L!1 q!$DAq!Y
1i(@!1HH_Q'(Ej<r;   c                b    t        | |      r|S t        ||       r| S t        t        |            S )zQReturn one of types (expanded) if it is a supertype of other, otherwise top type.)r   object_or_any_from_typer0   r[   rZ   s     r9   trivial_joinr      s0    !Q	Aq	&q'9::r;   c                     y r6   r~   r[   rZ   instance_joiners      r9   rO   rO      s     r;   c                     y r6   r~   r   s      r9   rO   rO      s    Y\r;   c                   t         j                  j                  | |      rt        | |      S t	        |       } t	        |      }| j
                  | j                  f|j
                  |j                  fk7  r>t         j                  j                  |       } t         j                  j                  |      }t        | t              rt        |t              s|| }} t        | t              r| S t        | t              r|S t        | t              rt        |t              s|| }} t        | t              rt        |t              s|| }} t        | |      \  } }|j                  t!        | |            S )zkReturn the least upper bound of s and t.

    For example, the join of 'int' and 'object' is 'object'.
    )r   r   is_recursive_pairr   r0   r   r   r   rH   r-   r   r   r   r,   r   r   r   r   s      r9   rO   rO      s!   
 ||%%a+ Aq!!AA	q~~&1==!..*IILL&&q)LL&&q)!Y
1i(@!1!W!Z !Xz!X'>!1!_%jO.L!1 q!$DAq 88OA788r;   c                      e Zd ZdZdddZddZddZddZd dZd!dZ	d"d	Z
d#d
Zd$dZd%dZd&dZd'dZd(dZd)dZd*dZd+dZd,dZd-dZd.dZd/dZd0dZd1dZd2dZd3dZy)4r   zpImplementation of the least upper bound algorithm.

    Attributes:
      s: The other (left) type operand.
    Nc                     || _         || _        y r6   )r[   r   )r8   r[   r   s      r9   r:   zTypeJoinVisitor.__init__,  s    .r;   c                4    t        t        j                        S r6   )r   r$   special_formr8   rZ   s     r9   visit_unbound_typez"TypeJoinVisitor.visit_unbound_type0  s    y--..r;   c                    t        | j                  |      r|S t        j                  j	                  | j                  |g      S r6   )r   r[   r   r   r   r   s     r9   visit_union_typez TypeJoinVisitor.visit_union_type3  s2    TVVQ'H<<55tvvqkBBr;   c                    |S r6   r~   r   s     r9   	visit_anyzTypeJoinVisitor.visit_any9  s    r;   c                F   t         j                  rt        | j                  t        t
        f      r|S t        | j                  t        t        f      rt        t        j                        S t        j                  j                  | j                  |g      S | j                  S r6   )r   strict_optionalrH   r[   r   r,   r+   r   r$   r   r   r   r   r   s     r9   visit_none_typezTypeJoinVisitor.visit_none_type<  sm      $&&8_"=>DFF['$:;y5566||994661+FF66Mr;   c                    | j                   S r6   r[   r   s     r9   visit_uninhabited_typez&TypeJoinVisitor.visit_uninhabited_typeG      vvr;   c                    | j                   S r6   r   r   s     r9   visit_deleted_typez"TypeJoinVisitor.visit_deleted_typeJ  r   r;   c                    | j                   S r6   r   r   s     r9   visit_erased_typez!TypeJoinVisitor.visit_erased_typeM  r   r;   c                    t        | j                  t              r/| j                  j                  |j                  k(  r| j                  S | j	                  | j                        S r6   )rH   r[   r)   iddefaultr   s     r9   visit_type_varzTypeJoinVisitor.visit_type_varP  s?    dffk*tvvyyADD/@66M<<''r;   c                Z    | j                   |k(  r|S | j                  | j                         S r6   r[   r   r   s     r9   visit_param_specz TypeJoinVisitor.visit_param_specV  %    66Q;H||DFF##r;   c                Z    | j                   |k(  r|S | j                  | j                         S r6   r   r   s     r9   visit_type_var_tuplez$TypeJoinVisitor.visit_type_var_tuple[  r   r;   c                    t         r6   )NotImplementedErrorr   s     r9   visit_unpack_typez!TypeJoinVisitor.visit_unpack_type`  s    !!r;   c           
        t        | j                  t              rt        |j                        t        | j                  j                        k7  r| j                  | j                        S ddlm} |j                  t        | j                  j                  |j                        D cg c]  \  }} |||       c}}t        | j                  |            S | j                  | j                        S c c}}w )Nr   
meet_types)	arg_types	arg_names)rH   r[   r   rP   r   r   	mypy.meetr   copy_modifiedrL   combine_arg_names)r8   rZ   r   s_at_as        r9   visit_parametersz TypeJoinVisitor.visit_parametersc  s    dffj)1;;3tvv'7'7#88||DFF++,??9<TVV=M=Mq{{9[9[XS#JsC(9[ ,DFFA6	 #   <<''s   )C5
c                ^   t        | j                  t              r| j                  t	               | _        | j                  j                  || j                        }d }|j                  j                  rt        | j                  |      r|}nB| j                  j                  j                  r"t        || j                        r| j                  }|rt        ||      r|S |S t        | j                  t              rY|j                  j                  r#t        |      }|rt        || j                        S t        || j                  j                        S t        | j                  t              rt        || j                        S t        | j                  t              rt        || j                        S t        | j                  t               rt        || j                        S t        | j                  t"              rt        || j                        S | j%                  | j                        S r6   )rH   r[   r   r   r4   ro   rB   is_protocolr   rr   r   unpack_callback_protocolrO   r_   r%   r#   r    r   r   )r8   rZ   nominal
structuralcalls        r9   visit_instancezTypeJoinVisitor.visit_instancer  s   dffh'##+'5'7$**99!TVVDG*.Jvv!!&@&K
((-G466-R!VV
 7J!?-vv!!/2%dDFF33a11)a((.a((	*a((,a((<<''r;   c                   t        | j                  t              rt        || j                        rt	        || j                        rt        || j                        S t        || j                        }|j                         r|j                         j                  sE| j                  j                         r$| j                  j                         j                  sd|_
        t        d t        |j                        D              r t        |j                  | j                        S |S t        | j                  t               rt        || j                        S t        | j                  t"              rC| j                  j$                  j&                  r#t)        | j                        }|rt        ||      S t        |j                  | j                        S )NTc              3  H   K   | ]  }t        |t        t        f        y wr6   )rH   r   r,   ).0tps     r9   	<genexpr>z6TypeJoinVisitor.visit_callable_type.<locals>.<genexpr>  s$      <B 2/:;<s    ")rH   r[   r   is_similar_callablesr   combine_similar_callablesjoin_similar_callablesis_type_objtype_objectis_abstractfrom_type_typeanyr1   r   rO   r_   r   r   rB   r   r   )r8   rZ   rn   r   s       r9   visit_callable_typez#TypeJoinVisitor.visit_callable_type  s?   dffl+0DQ0OQ'0DFF;;+Atvv6F Q]]_%@%@FF&&(TVV-?-?-A-M-M(,% *6+;+;< 
 "!**dff55M
+a(()dffkk.E.E+DFF3D!!T**!**dff--r;   c                R   g }| j                   }t        |t              r|j                  D ]f  }|j                  D ]U  }t	        ||      st        ||      r|j                  t        ||             8t        ||      sE|j                  |       W h |rt        |      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   )r[   rH   r   rW   r   r   rA   r   r   rP   r   rO   r_   r   rB   r   r   )r8   rZ   rn   r[   t_items_itemr   s          r9   visit_overloadedz TypeJoinVisitor.visit_overloaded  s    : &(FFa&''ggF+FF;(8"MM*CFF*ST'7"MM&1 & " v;!#!!9$%f--ajj!**558$););+A.D!!T**!**a((r;   c           	        t        |j                        }t        |j                        }|{|y|j                         |j                         k(  rWg }t        |j                               D ]7  }|j	                  t        |j                  |   |j                  |                9 |S y|z|w|j                  |   }t        |t              sJ t        |j                        }|j                  |   }	t        |	t              sJ t        |	j                        }
|j                         |j                         k(  r||k(  r|}|j                         |z
  dz
  }g }t        |j                  d| |j                  d|       D ]   \  }}|j	                  t        ||             " t        ||
      }t        |t              r|j	                  t        |             nt        |t              r4|j                  j                  dk(  r|j	                  t        |             nt        |
t              r|
j                  j                  dk(  sJ |
}nt        |
t              sJ |
j                  }|j	                  t        |j                  t!        |      g                   |rKt        |j                  | d |j                  | d       D ]   \  }}|j	                  t        ||             " |S |j                         dk(  s|j                         dk(  rt        |t              rt        |
t              sy|j                  j                  dk(  sJ |
j                  j                  dk(  sJ t        |j"                  d   |
j"                  d         }t%        |j                        D cg c]  \  }}||k7  s| }}}t%        |j                        D cg c]  \  }}||k7  s| }}}t'        ||z         }t        ||      }t        |j                  |g            gS y||}|}|}n
|J |}|}|}|j                  |   }t        |t              sJ t        |j                        }t        |t              sy|j                         |j                         dz
  k  ry|}|j                         |z
  dz
  }t)        t+        |j                        ||      \  }}}g }t        ||j                  d|       D ]   \  }}|j	                  t        ||             " t'        t-        |            }t        ||j"                  d         }|j	                  t        |j                  |g                   |r=t        ||j                  | d       D ]   \  }}|j	                  t        ||             " |S c c}}w c c}}w )a<  Join two tuple types while handling variadic entries.

        This is surprisingly tricky, and we don't handle some tricky corner cases.
        Most of the trickiness comes from the variadic tuple items like *tuple[X, ...]
        since they can have arbitrary partial overlaps (while *Ts can't be split).
        Nr   r=   )rJ   r   )r/   rW   lengthrangerA   rO   rH   r.   r0   rB   rL   r(   r   rU   rI   r   r@   rJ   	enumeratejoin_type_listr2   tuplerK   ) r8   r[   rZ   s_unpack_indext_unpack_indexrW   is_unpack
s_unpackedt_unpack
t_unpacked
prefix_len
suffix_lensitijoinedtuple_instance
mid_joinedat_others_otherother_joinedvariadicunpack_indexfixedunpackunpackedr\   middler]   fivis                                    r9   join_tupleszTypeJoinVisitor.join_tuples  s    -QWW5,QWW5!n&<xxzQXXZ'$&qxxz*ALLAGGAJ
!CD +%.*Dww~.Hh
333(7Jww~.Hh
333(7JxxzQXXZ'Nn,L ,
XXZ.81<
!!''+:"68LMFBLLB!34 N#J
;f&67LLF!341fkk6J6JN^6^LLF!34!*h7)77;KKKK)3)*6FGGG)3)B)BLL"*88&:>&J%K 9  "%aggzkl&;QWWj[\=R"SBZB%78 #TxxzQ!((*/ #:x8Z
T\=]!//3CCCC!//3CCCC'
(:JOOA<NO
)2177);S);AqN?R1);S)2177);S);AqN?R1);S-g.?@'
LA
":#;#;*#;#NOPP%H)LE!---H)LE -&*---"6;;/(H-<<>HOO-11!
__&3a7
!=%++
J"
 &(..*"=>FBLLB+, ?#DL1

HMM!,<=
Z 6 6ZL 6 IJKfhnnj[\&BCBZB/0 DQ TSs   +V79V7V=&V=c                   t        | j                  t              r| j                  t	               | _        | j                  j                  t        j                  j                  | j                        t        j                  j                  |            }t        |t              sJ | j                  | j                  |      }|t        ||      S t        | j                  |      r|S t        || j                        r| j                  S |S t        | j                  t        j                  j                  |            S r6   )rH   r[   r    r   r4   ro   r   r   rI   r   r   r   rO   )r8   rZ   r_   rW   s       r9   visit_tuple_typez TypeJoinVisitor.visit_tuple_typeO  s     dffi(##+'5'7$++::++DFF3T\\5P5PQR5SH h111$$TVVQ/E  11 %TVVQ/H$Q/66Mdffdll&A&A!&DEEr;   c           	        t        | j                  t              r| j                  j                  |      D ci c]<  \  }}}t	        ||      r*||j
                  v || j                  j
                  v k(  r||> }}}}| j                  j                         }t        |j                               }||j
                  z  | j                  j
                  z  }|j                  |j                  z  |z  }	t        |||	|      S t        | j                  t              r t        | j                  |j                        S | j                  | j                        S c c}}}w r6   )rH   r[   r#   rL   r   required_keyscreate_anonymous_fallbacksetkeysreadonly_keysr   rO   r_   r   )
r8   rZ   	item_names_item_typet_item_typerW   r_   all_keysr  r  s
             r9   visit_typeddict_typez$TypeJoinVisitor.visit_typeddict_typeo  s   dffm, >BVVZZ]=J9Y[!+{;"aoo59H\H\;\]	 ;&=J   vv779H5::<(H %q69M9MMM__q>(JM }hOO)dffajj11<<'''s   AEc                   t        | j                  t              r|| j                  k(  r|S | j                  j                  j                  j
                  rK|j                  j                  j
                  r+t        j                  j                  | j                  |g      S t        | j                  j                  |j                        S t        | j                  |j                        S r6   )
rH   r[   r   r_   rB   is_enumr   r   r   rO   r   s     r9   visit_literal_typez"TypeJoinVisitor.visit_literal_type  s    dffk*DFF{vv##++

0G0G||994661+FFdffooqzz::dffajj11r;   c                    J d       )NzInternal errorr~   r   s     r9   visit_partial_typez"TypeJoinVisitor.visit_partial_type  s     	'&&ur;   c                   t        | j                  t              rIt        j                  t	        |j
                  | j                  j
                        |j                        S t        | j                  t              r/| j                  j                  j                  dk(  r| j                  S | j                  | j                        S )N)linezbuiltins.type)rH   r[   r%   make_normalizedrO   itemr  r   rB   rU   r   r   s     r9   visit_type_typezTypeJoinVisitor.visit_type_type  s|    dffh'++Jqvvtvv{{,KRSRXRXYY)dffkk.B.Bo.U66M<<''r;   c                    J d|        )Nz!This should be never called, got r~   r   s     r9   visit_type_alias_typez%TypeJoinVisitor.visit_type_alias_type  s    =9!==ur;   c                   t        |      }t        |t              rt        |      S t        |t              rt        t        j                        S t        |t              r.| j                  t        j                  j                  |            S t        |t              r| j                  |j                        S t        |t              r| j                  |j                        S t        |t               r| j                  |j"                        S t        |t$              r| j                  |j"                        S t        t        j                        S r6   )r0   rH   r   r@   r+   r   r$   r   r    r   r   r   rI   r#   r_   r   r)   rS   r   )r8   typs     r9   r   zTypeJoinVisitor.default  s    c"c8$',,[)91122Y'<< ; ;C @AA]+<<--\*<<--[)<<00]+<<0091122r;   r6   )r[   r   r   InstanceJoiner | Nonery   rz   )rZ   r+   ry   r   )rZ   r-   ry   r   )rZ   r   ry   r   )rZ   r   ry   r   )rZ   r,   ry   r   )rZ   r   ry   r   )rZ   r   ry   r   )rZ   r)   ry   r   )rZ   r   ry   r   )rZ   r(   ry   r   )rZ   r.   ry   r.   )rZ   r   ry   r   )rZ   r   ry   r   )rZ   r   ry   r   )rZ   r   ry   r   )r[   r    rZ   r    ry   zlist[Type] | None)rZ   r    ry   r   )rZ   r#   ry   r   )rZ   r   ry   r   )rZ   r   ry   r   )rZ   r%   ry   r   )rZ   r"   ry   r   )r  r!   ry   r   )r{   r|   r}   __doc__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;   r9   r   r   %  s    //C	($
$
"((B.83)jiVF@(.2'
(>3r;   r   c                    t        |       } t        |      }t        | t              rQt        |t              syt        | j                  j
                        t        |j                  j
                        kD  ryy)NTF)r0   rH   r   rP   rB   mrorZ   r[   s     r9   rr   rr     sU     	AA!X!X&qvvzz?S_,r;   c                    t        | t        t        f      r| j                         } t        |t        t        f      r|j                         }| |fS r6   )rH   r   r   with_unpacked_kwargsr   s     r9   r   r     sE    !lJ/0""$!lJ/0""$a4Kr;   c                    t        | j                        t        |j                        k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S )zcReturn True if t and s have identical numbers of
    arguments, default arguments and varargs.
    )rP   r   min_args
is_var_argr  s     r9   r   r     sM    
 	AKKC,, 	)JJ!**$	)LLALL(r;   c                    i }g }t        | j                  |      D ]7  \  }}|j                  |      }|j                  |       |||j                  <   9 t        | |      j                  |      S )N)r   )	variables)rL   r%  r   rA   r   r   )cidstv_maptvstvnew_idnew_tvs          r9   update_callable_idsr-    sn    F
C!++s+
F!!V!,

6ruu , q&!//#/>>r;   c                n   t        t        | j                        t        |j                              }t        t        | j                        t        |j                              }|dk(  r| |fS t	        |      D cg c]  }t        j                  d       }}t        | |      t        ||      fS c c}w )Nr   )
meta_level)maxrP   r%  minr   r&   newr-  )rZ   r[   max_lenmin_len_new_idss         r9   match_generic_callablesr7    s     #akk"C$45G#akk"C$45G!|!t49'NCNqy}}*NGCq'*,?7,KKK Ds   ;B2c                   t        | |      \  } }g }t        t        | j                              D ]7  }|j	                  t        | j                  |   |j                  |                9 | j                  j                  j                  dk(  r| j                  }n|j                  }| j                  |t        | |      t        | j                  |j                        |d       S Nzbuiltins.function)r   r   ret_typer_   name)r7  r   rP   r   rA   	safe_meetr_   rB   rU   r   r   rO   r:  rZ   r[   r   r   r_   s        r9   r   r     s    "1a(DAqI3q{{#$1;;q>1;;q>BC %
 	zz#66::::??#Aq)AJJ

3   r;   c                   t        | t              st        |t              st        | |      S t        | t              r9t        |t              r)t        t        | j                  |j                              S t	        t        |             S r6   )rH   r.   rO   rB   r   r0   r  s     r9   	safe_joinr?    sa     a$Z:-F!Q!Z Z:%>*QVVQVV455"?1#566r;   c                r   ddl m} t        | t              st        |t              s	 || |      S t        | t              rt        |t              rt	        | j
                        }t        |t              r|j                  j
                  }n^t        |t              r|j                  j
                  }n7t        |t              r|j
                  j                  dk(  sJ |j
                  } || j
                  |j
                        }t        |t              rt        ||g      }t        |      S t               S )Nr   r   r=   )r   r   rH   r.   r0   rB   r(   rI   r    partial_fallbackr   rU   r,   )rZ   r[   r   r   fallback_typerw   s         r9   r<  r<    s    $a$Z:-F!Q!Z Z:%>"166*h 01$3388M),$55::Mh1hmm6L6LP`6```$MMM(c?+=3%0C#r;   c                   t        | |      \  } }g }t        t        | j                              D ]7  }|j	                  t        | j                  |   |j                  |                9 | j                  j                  j                  dk(  r| j                  }n|j                  }| j                  |t        | |      t        | j                  |j                        |d       S r9  )r7  r   rP   r   rA   r?  r_   rB   rU   r   r   rO   r:  r=  s        r9   r   r   &  s    "1a(DAqI3q{{#$1;;q>1;;q>BC % 	zz#66::::??#Aq)AJJ

3   r;   c                T   t        | j                        }g }t        |      D ]  }| j                  |   }|j                  |   }||k(  s:| j                  |   j                         s|j                  |   j                         r|j                  |       r|j                  d        |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)rP   r   r   r   	arg_kindsis_namedrA   )rZ   r[   num_args	new_namesr   t_names_names          r9   r   r   <  s    & 1;;HI8_QQVq{{1~668AKKN<S<S<UV$T"  r;   c                L    t        | j                  j                  d   g       }|S )z;Construct the type 'builtins.object' from an instance type.)r   rB   r  )instancerw   s     r9   r@   r@   [  s$     8==$$R("
-CJr;   c                   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              rB| j                   D ]2  }t        |t              st        |      }t        |t              s0|c S  n.t        | t"              rt        t%        | j&                               t)        t*        j,                        S r6   )rH   r   r@   r   r#   r   r_   r    rA  r%   r   r  r'   rS   r   r-   rW   r.   r0   rB   r   r$   implementation_artifact)r  r  	candidates      r9   r   r   b  s     #x #C((	C,{C	D#CLL11	C	##C$8$899	C	"&sxx00	C	)j*.U&s77	C	#IID$
+3D9	i2$$	 
 
C	$ 9:94455r;   c                T    | s
t               S | d   }| dd  D ]  }t        ||      } |S )Nr   r   )r,   rO   )typesr   rZ   s      r9   r   r   z  s:       1XF12YFA& Mr;   c                    | j                   j                  sJ | j                   j                  dgk(  rt        t	        d| | d            S y )N__call__T)is_operator)rB   r   protocol_membersr0   r   )rZ   s    r9   r   r     sB    66vv:,.{:q!NOOr;   )r   zType | Noner[   r!   rZ   r!   ry   r   )r[   r!   rZ   r!   ry   r!   r6   )r[   r   rZ   r   r   r  ry   r   )r[   r!   rZ   r!   r   r  ry   r!   )rZ   r!   r[   r!   ry   bool)r[   r   rZ   r   ry   ztuple[ProperType, ProperType])rZ   r   r[   r   ry   rW  )r&  r   r'  zlist[TypeVarId]ry   r   )rZ   r   r[   r   ry   z!tuple[CallableType, CallableType])rZ   r   r[   r   ry   r   )rZ   r!   r[   r!   ry   r!   )rZ   CallableType | Parametersr[   rX  ry   zlist[str | None])rM  r   ry   r   )r  r   ry   r   )rR  zSequence[Type]ry   r!   )rZ   r   ry   zProperType | None)Nr  
__future__r   typingr   r   mypy.typeopsr   mypy.expandtyper   mypy.maptyper   
mypy.nodesr   r	   r
   r   
mypy.stater   mypy.subtypesr   r   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/   r0   r1   r2   r4   r   r   rO   r   rr   r   r   r-  r7  r   r?  r<  r   r   r@   r   r   r   r~   r;   r9   <module>rb     s0   9 " %  ' 2 N N  ! ! ! ! ! ! ! ! !H~ ~B.b; 
KO 3H 

 
 \ 
 \$9NL3k*- L3^?L"*7,, %>>60r;   