
    X-Ph4                       d Z ddlm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 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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;  G d d          Z<d:dZ=e	 d;d<d            Z>ed;d=d            Z>d;d=dZ> G d de3e(                   Z?d>dZ@d?dZAd@d ZBdAd"ZCdBd&ZDdCd(ZEdDd)ZFdEd*ZGdEd+ZHdDd,ZIdFd/ZJdGd2ZKdHd4ZLdId7ZMdJd9ZNdS )Kz3Calculation 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d
S )InstanceJoinerreturnNonec                    g | _         d S N)seen_instances)selfs    I/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/mypy/join.py__init__zInstanceJoiner.__init__:   s    ?A    tr   sr   c                	   ||f| j         v s||f| j         v rt          |          S | 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        |          }nnt          |t$                    rt%          t&          j        |          }n=t          |t*                    rS|j        t.          t0          fv rt3          |||           }t5          |j                  dk    r3||j        vr*| j                                          t          |          c S t;          ||j                  s*| j                                          t          |          c S nu|j        t>          t@          fv rt          |tB                    r|j"        r|}n@t          |tB                    r|j"        r|}n tG          ||          s*| j                                          t          |          c S t3          |||           }nt          |t                    rt#          t3          |||                     }t          |tH                    r"|j        j%        dk    sJ tM          |          }njt          |t                    sJ |'                    |j(                   tG          ||          st#          |j                  c S t3          |||           }|J |                    |           tI          |j        |          }nY|j        j)        r7tU          ||tW          d                    r| ,                    ||          }n| ,                    ||          }| j                                          |S )Nr   builtins.tupleT)ignore_type_params)subtype_context)-r9   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)r:   r>   r?   rN   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                          r;   join_instanceszInstanceJoiner.join_instances=   s   q6T(((QFd6I,I,I'***""Aq6*** 6QV
  "D v-   v3???v3???55fk+F3!#'788888-/KAFTZ\b/c/c,(H/KAFTZ\b/c/c,(H!YtH~~x%H%H$JJXU!YtH~~x%H%H$JJXU$'8M$N$N 1& 1& B+B//	+B//	(,i11 +8&y'A9MMHH	733 )8&y'A9MMHH+66 '8(Y8J,KKK#-b"d#;#;x//1449X9X /33555#7#:#::::)(H4HII ; /33555#7#:#::::;
 "*y-.HHH%iAA 
@iFY 
@')HH'	?CC @	H[ @')HH!.r2!6!6 @ /33555#7#:#:::: (2"b$'?'?H*:;; 8.z"b$/G/GHHH "(H55 !'}59IIIII#-h#7#7)(I>>>>>HN333  )R00 E.x/CDDDDD)"b$77H+++H%%%%!)!&$!7!7FFV\ 	=/q.D"I"I"I
 
 
 	= 66q!<<FF
 66q!<<F!!!r=   c                   |j         j        D ]%}t          ||          rt          |||           c S &|j         j        D ]%}t          ||          rt          |||           c S &d }|j         j        D ]A}t          ||j                   }|                     ||          }|t          ||          r|}B|J |j         j        D ]?}t          |t                    r(|                     ||          }t          ||          r|}@|S r8   )
rF   _promoter   rS   r\   r   rq   	is_betterrL   r   )	r:   r>   r?   pbestbasemappedrespromotes	            r;   r]   z+InstanceJoiner.join_instances_via_supertype   sD     	. 	.A!Q .!!Q-----. 	. 	.A!Q .!!Q-----. #'FL 	 	D.q$)<<F%%fa00C|yd33|v 	 	G'8,, ))'155S$'' Dr=   N)r5   r6   )r>   r   r?   r   r5   r   )__name__
__module____qualname__r<   rq   r]    r=   r;   r4   r4   9   sY        B B B B_ _ _ _B     r=   r4   r?   r!   r>   r5   c                    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?   r>   s     r;   trivial_joinr      sF    !Q ;	Aq		 ;&q'9'9:::r=   r   instance_joinerInstanceJoiner | Nonec                    d S r8   r~   r?   r>   r   s      r;   rS   rS      s	     r=   c                    d S r8   r~   r   s      r;   rS   rS      s    Y\Y\r=   c                2   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                    r| S t          | t                    r|S t          | t                    rt          |t                    s|| }} t          | t                    rt          |t                    s|| }} t          | |          \  } }|                    t!          | |                    S )zkReturn the least upper bound of s and t.

    For example, the join of 'int' and 'object' is 'object'.
    )mypytypeopsis_recursive_pairr   r0   can_be_truecan_be_falsetrue_or_falserL   r-   r   r   r   r,   normalize_callablesacceptTypeJoinVisitorr   s      r;   rS   rS      sv   
 |%%a++ " Aq!!!AA	q~&1=!.*IIIL&&q))L&&q))!Y 
1i(@(@ !1!W !Z   !X z!X'>'> !1!_%% jO.L.L !1 q!$$DAq 88OA778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	dAdZ
dBdZdCdZdDdZdEdZdFd ZdGd"ZdHd$ZdId&ZdJd(ZdKd+ZdLd,ZdMd.ZdNd0ZdOd2ZdPd4ZdQd6ZdRd9ZdS )Sr   zpImplementation of the least upper bound algorithm.

    Attributes:
      s: The other (left) type operand.
    Nr?   r   r   r   r5   r6   c                "    || _         || _        d S r8   )r?   r   )r:   r?   r   s      r;   r<   zTypeJoinVisitor.__init__   s    .r=   r>   r+   c                4    t          t          j                  S r8   )r   r$   special_formr:   r>   s     r;   visit_unbound_typez"TypeJoinVisitor.visit_unbound_type   s    y-...r=   r-   c                |    t          | j        |          r|S t          j                            | j        |g          S r8   )r   r?   r   r   make_simplified_unionr   s     r;   visit_union_typez TypeJoinVisitor.visit_union_type  s8    TVQ'' 	CH<55tvqkBBBr=   r   c                    |S r8   r~   r   s     r;   	visit_anyzTypeJoinVisitor.visit_any	  s    r=   r   c                .   t           j        rt          | j        t          t
          f          r|S t          | j        t          t          f          rt          t          j	                  S t          j                            | j        |g          S | j        S r8   )r   strict_optionalrL   r?   r   r,   r+   r   r$   r   r   r   r   r   s     r;   visit_none_typezTypeJoinVisitor.visit_none_type  sz      	$&8_"=>> GDF['$:;; Gy5666|99461+FFF6Mr=   r,   c                    | j         S r8   r?   r   s     r;   visit_uninhabited_typez&TypeJoinVisitor.visit_uninhabited_type  	    vr=   r   c                    | j         S r8   r   r   s     r;   visit_deleted_typez"TypeJoinVisitor.visit_deleted_type  r   r=   r   c                    | j         S r8   r   r   s     r;   visit_erased_typez!TypeJoinVisitor.visit_erased_type  r   r=   r)   c                    t          | j        t                    r| j        j        |j        k    r| j        S |                     | j                  S r8   )rL   r?   r)   iddefaultr   s     r;   visit_type_varzTypeJoinVisitor.visit_type_var   sA    dfk** 	(tvyAD/@/@6M<<'''r=   r   c                P    | j         |k    r|S |                     | j                   S r8   )r?   r   r   s     r;   visit_param_specz TypeJoinVisitor.visit_param_spec&  s&    6Q;;H||DF###r=   r(   c                    | j         |k    r|S t          | j         t                    r!t          |j        | j                   r| j         S |                     | j                   S r8   )r?   rL   r   r   rW   r   r   s     r;   visit_type_var_tuplez$TypeJoinVisitor.visit_type_var_tuple+  sV    6Q;;Hdfh'' 	Jq}df,M,M 	6M||DF###r=   r.   c                    t           r8   )NotImplementedErrorr   s     r;   visit_unpack_typez!TypeJoinVisitor.visit_unpack_type3  s    !!r=   r   c                |   t          | j        t                    rt          || j                  s|                     | j                  S ddlm |                    fdt          | j        j	        |j	                  D             t          | j        |                    S |                     | j                  S )Nr   
meet_typesc                .    g | ]\  }} ||          S r~   r~   ).0s_at_ar   s      r;   
<listcomp>z4TypeJoinVisitor.visit_parameters.<locals>.<listcomp>>  s6       -5S#JJsC((  r=   )	arg_types	arg_names)rL   r?   r   is_similar_paramsr   	mypy.meetr   copy_modifiedrP   r   combine_arg_names)r:   r>   r   s     @r;   visit_parametersz TypeJoinVisitor.visit_parameters6  s    dfj)) 	($Q// ,||DF+++,,,,,,??   9<TV=Mq{9[9[   ,DFA66	 #    <<'''r=   r   c                `   t          | j        t                    r| j        t	                      | _        | j                            || j                  }d }|j        j        rt          | j        |          r|}n-| j        j        j        rt          || j                  r| j        }|rt          ||          r|S |S t          | j        t                    rL|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 t          | j        t$                    rt'          | j        j        |          r|S |                     | j                  S r8   )rL   r?   r   r   r4   rq   rF   is_protocolr   rt   r   unpack_callback_protocolrS   ra   r%   r#   r    r   r(   r   rW   r   )r:   r>   nominal
structuralcalls        r;   visit_instancezTypeJoinVisitor.visit_instanceF  s   dfh''  	(#+'5'7'7$*99!TVDDG*.Jv! $&@&K&K $

( $-G46-R-R $!V
  7J!?!? -- 	(v! 4/22 4%dDF333a111)) 	(a(((.. 		(a(((	** 	(a(((,, 	(a((( 011 	(jASUV6W6W 	(H<<'''r=   r   c                x   t          | j        t                    rt          || j                  rt	          || j                  rt          || j                  S t          || j                  }|                                r|                                j	        s>| j                                        r| 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"                    r7| j        j        j        r&t)          | j                  }|rt          ||          S t          |j        | j                  S )NTc              3  N   K   | ] }t          |t          t          f          V  !d S r8   )rL   r   r,   )r   tps     r;   	<genexpr>z6TypeJoinVisitor.visit_callable_type.<locals>.<genexpr>u  sE         2/:;;     r=   )rL   r?   r   is_similar_callablesr   combine_similar_callablesjoin_similar_callablesis_type_objtype_objectis_abstractfrom_type_typeanyr1   r   rS   ra   r   r   rF   r   r   )r:   r>   rp   r   s       r;   visit_callable_typez#TypeJoinVisitor.visit_callable_typei  s   dfl++ 	+0DQ0O0O 	+Q'' <0DF;;;+Atv66F -%&]]__%@-F&&((--1V-?-?-A-A-M- )-%  *6+;<<     6
 "!*df555M
++ 	+a((()) 	+dfk.E 	++DF33D +!!T***!*df---r=   r   c                r   g }| j         }t          |t                    r|j        D ]u}|j        D ]k}t	          ||          rYt          ||          r$|                    t          ||                     Ft          ||          r|                    |           lv|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?   rL   r   r[   r   r   rE   r   r   rT   r   rS   ra   r   rF   r   r   )r:   r>   rp   r?   t_items_itemr   s          r;   visit_overloadedz TypeJoinVisitor.visit_overloaded  sN   : &(Fa&& 	+' 2 2g 2 2F+FF;; 2(88 2"MM*CFF*S*STTTT'77 2"MM&1112  .v;;!##!!9$%f---aj!*5558$$ 	+); 	++A..D +!!T***!*a(((r=   r    list[Type] | Nonec           	        t          |j                  t          |j                  |                                |                                k    rag }t          |                                          D ];}|                    t          |j        |         |j        |                              <|S dS |j                 }t          |t                    sJ t          |j	                  }|j                 }t          |t                    sJ t          |j	                  }|                                |                                k    rk    r}	|                                z
  dz
  }
g }t          |j        d|	         |j        d|	                   D ](\  }}|                    t          ||                     )t          ||          }t          |t                    r#|                    t          |                     nt          |t                    r3|j	        j        dk    r#|                    t          |                     nt          |t                    r|j	        j        dk    sJ |}nt          |t                    sJ |j        }|                    t          |                    t!          |          g                               |
rUt          |j        |
 d         |j        |
 d                   D ](\  }}|                    t          ||                     )|S |                                dk    s|                                dk    rt          |t                    rt          |t                    sdS |j	        j        dk    sJ |j	        j        dk    sJ t          |j        d         |j        d                   }fdt%          |j                  D             }fdt%          |j                  D             }t'          ||z             }t          ||          }t          |                    |g                    gS dS |}}|}n
J |}}|}|j        |         }t          |t                    sJ t          |j	                  }t          |t                    sdS |                                |                                dz
  k     rdS |}	|                                |	z
  dz
  }
t)          t+          |j                  |	|
          \  }}}g }t          ||j        d|	                   D ](\  }}|                    t          ||                     )t'          t-          |                    }t          ||j        d                   }|                    t          |                    |g                               |
rGt          ||j        |
 d                   D ](\  }}|                    t          ||                     )|S )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   rA   )rN   r   c                &    g | ]\  }}|k    |S r~   r~   )r   iat_unpack_indexs      r;   r   z/TypeJoinVisitor.join_tuples.<locals>.<listcomp>  '    SSSAqN?R?R1?R?R?Rr=   c                &    g | ]\  }}|k    |S r~   r~   )r   r   r   s_unpack_indexs      r;   r   z/TypeJoinVisitor.join_tuples.<locals>.<listcomp>  r   r=   )r/   r[   lengthrangerE   rS   rL   r.   r0   rF   rP   r(   r   rY   rM   r   rD   rN   	enumeratejoin_type_listr2   tuplerO   )r:   r?   r>   r[   r   s_unpack
s_unpackedt_unpack
t_unpacked
prefix_len
suffix_lensitijoinedtuple_instance
mid_joinedt_others_otherother_joinedvariadicunpack_indexfixedunpackunpackedr^   middler_   fivir   r   s                                @@r;   join_tupleszTypeJoinVisitor.join_tuples  s1    -QW55,QW55!n&<xxzzQXXZZ''$&qxxzz** E EALLAGAJ
!C!CDDDD4%.*Dw~.Hh
33333(77Jw~.Hh
33333(77JxxzzQXXZZ''Nn,L,L ,
XXZZ.81<
!!'+:+"68LMM 5 5FBLLB!3!34444#J
;;f&677 LLF!3!3444411 fk6JN^6^6^LLF!3!34444!*h77 C)7;KKKKK)3)*6FGGGGG)3)BLL"*88&:>&J&J%K 9       9"%agzkll&;QWj[\\=R"S"S 9 9BZB%7%78888xxzzQ!((**// #:x88  Z
T\=]=]  4!/3CCCCC!/3CCCCC'
(:JOA<NOO
SSSS17););SSSSSSS17););SSS-g.?@@'
LAA
":#;#;*#;#N#NOOPP4%H)LEE!---H)LE -&*-----"6;//(H-- 	4<<>>HOO--1114!
__&&3a7
!=%+
J"
 "
 &(.*"=>> 	- 	-FBLLB++,,,,#DLL11

HM!,<==
Z 6 6ZL 6 I IJJKKK 	1fhnj[\\&BCC 1 1BZB//0000r=   c                ,   t          | j        t                    rH| j        t	                      | _        | j                            t          j                            | j                  t          j                            |                    }t          |t                    sJ | 
                    | j        |          }|kt          |          dk    rHt          |d         x}t                    r+t          t          |j                  x}t                    r|S t          ||          S t          | j        |          r|S t          || j                  r| j        S |S t!          | j        t          j                            |                    S r   )rL   r?   r    r   r4   rq   r   r   rM   r   r   rT   r.   r0   rF   r   rS   )r:   r>   ra   r[   itemr   s         r;   visit_tuple_typez TypeJoinVisitor.visit_tuple_type%  s^    dfi(( 	F#+'5'7'7$+::++DF33T\5P5PQR5S5S H h11111$$TVQ//E u::??z%(2B$J'O'O?!odi.H.H"H((SS (' 111 %TVQ// H$Q// "6Mdfdl&A&A!&D&DEEEr=   r#   c                    t           j        t                    r fd j                                      D             } j                                        }t          |                                          }|j        z   j        j        z  }j        j        z  |z  }t          ||||          S t           j        t                    rt           j        j                  S                       j                  S )Nc                p    i | ]2\  }}}t          ||          r|j        v |j        j        v k    /||3S r~   )r   required_keysr?   )r   	item_names_item_typet_item_typer:   r>   s       r;   
<dictcomp>z8TypeJoinVisitor.visit_typeddict_type.<locals>.<dictcomp>K  s^       9Y[!+{;;	
 #ao59H\;\]]	 ; ^]]r=   )rL   r?   r#   rP   create_anonymous_fallbacksetkeysr  readonly_keysr   rS   ra   r   )r:   r>   r[   ra   all_keysr  r  s   ``     r;   visit_typeddict_typez$TypeJoinVisitor.visit_typeddict_typeI  s    dfm,, 	(    =AVZZ]]  E v7799H5::<<((H %q69MMM_q>(JM }hOOO)) 	(dfaj111<<'''r=   r   c                \   t          | j        t                    ry|| j        k    r|S | j        j        j        j        r7|j        j        j        r&t          j                            | j        |g          S t          | j        j        |j                  S t          | j        |j                  S r8   )
rL   r?   r   ra   rF   is_enumr   r   r   rS   r   s     r;   visit_literal_typez"TypeJoinVisitor.visit_literal_type`  s    dfk** 	2DF{{v#+ G
0G G|99461+FFFdfoqz:::dfaj111r=   r   c                    J d            )NFzInternal errorr~   r   s     r;   visit_partial_typez"TypeJoinVisitor.visit_partial_typej  s     	'&&&&r=   r%   c                F   t          | j        t                    r8t          j        t	          |j        | j        j                  |j                  S t          | j        t                    r| j        j        j	        dk    r| j        S | 
                    | j                  S )N)linezbuiltins.type)rL   r?   r%   make_normalizedrS   r  r  r   rF   rY   r   r   s     r;   visit_type_typezTypeJoinVisitor.visit_type_typeo  s    dfh'' 	(+Jqvtv{,K,KRSRXYYYY)) 	(dfk.Bo.U.U6M<<'''r=   r"   c                    J d|             )NFz!This should be never called, got r~   r   s     r;   visit_type_alias_typez%TypeJoinVisitor.visit_type_alias_typew  s    ==!=====r=   typr!   c                   t          |          }t          |t                    rt          |          S t          |t                    rt          t          j                  S t          |t                    r2| 	                    t          j                            |                    S t          |t                    r| 	                    |j                  S t          |t                    r| 	                    |j                  S t          |t                     r| 	                    |j                  S t          |t$                    r| 	                    |j                  S t          t          j                  S r8   )r0   rL   r   rD   r+   r   r$   r   r    r   r   r   rM   r#   ra   r   r)   rW   r   )r:   r  s     r;   r   zTypeJoinVisitor.defaultz  s/   c""c8$$ 	3',,,[)) 	391222Y'' 	3<< ; ;C @ @AAA]++ 		3<<---\** 	3<<---[)) 	3<<000]++ 	3<<00091222r=   r8   )r?   r   r   r   r5   r6   )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    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|   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=   r;   r   r      s        / / / / // / / /C C C C   	 	 	 	         ( ( ( ($ $ $ $
$ $ $ $" " " "( ( ( ( !( !( !( !(F. . . .83) 3) 3) 3)ji i i iV"F "F "F "FH( ( ( (.2 2 2 2' ' ' '
( ( ( (> > > >3 3 3 3 3 3r=   r   boolc                   t          |           } t          |          }t          | t                    rMt          |t                    sdS t          | j        j                  t          |j        j                  k    rdS dS )NTF)r0   rL   r   rT   rF   mror>   r?   s     r;   rt   rt     sp     	AA!X !X&& 	4qvz??S__,,45r=   tuple[ProperType, ProperType]c                    t          | t          t          f          r|                                 } t          |t          t          f          r|                                }| |fS r8   )rL   r   r   with_unpacked_kwargsr   s     r;   r   r     s[    !lJ/00 %""$$!lJ/00 %""$$a4Kr=   r   c                    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.
    )rT   r   min_args
is_var_argr"  s     r;   r   r     sG    
 	AKC,,, 	)J!*$	)LAL(r=   r   c                    t          | j                  t          |j                  k    o=| j        |j        k    o-|                                 d u|                                d uk    S r8   )rT   r   r'  var_argr"  s     r;   r   r     s_     	AKC,,, 	CJ!*$	CYY[[$!))++T*ABr=   cidslist[TypeVarId]c                    i }g }t          | j        |          D ]:\  }}|                    |          }|                    |           |||j        <   ;t          | |                              |          S )N)r   )	variables)rP   r/  r   rE   r   r   )r+  r,  tv_maptvstvnew_idnew_tvs          r;   update_callable_idsr5    s    F
C!+s++  
F!!V!,,

6ruq&!!//#/>>>r=   !tuple[CallableType, CallableType]c                X   t          t          | j                  t          |j                            }t          t          | j                  t          |j                            }|dk    r| |fS d t	          |          D             }t          | |          t          ||          fS )Nr   c                8    g | ]}t          j        d           S )r   )
meta_level)r&   new)r   _s     r;   r   z+match_generic_callables.<locals>.<listcomp>  s%    CCCqy}***CCCr=   )maxrT   r/  minr   r5  )r>   r?   max_lenmin_lennew_idss        r;   match_generic_callablesrA    s     #ak""C$4$455G#ak""C$4$455G!||!tCCE'NNCCCGq'**,?7,K,KKKr=   c                   t          | |          \  } }g }t          t          | j                            D ];}|                    t          | j        |         |j        |                              <| j        j        j        dk    r| j        }n|j        }| 	                    |t          | |          t          | j        |j                  |d           S Nzbuiltins.function)r   r   ret_typera   name)rA  r   rT   r   rE   	safe_meetra   rF   rY   r   r   rS   rD  r>   r?   r   r   ra   s        r;   r   r     s    "1a((DAqI3q{##$$ D D1;q>1;q>BBCCCC 	z#666::??#Aq))AJ
33    r=   c                P   t          | t                    s%t          |t                    st          | |          S t          | t                    r<t          |t                    r't          t          | j        |j                            S t	          t          |                     S r8   )rL   r.   rS   rF   r   r0   r"  s     r;   	safe_joinrI    s     a$$  Z:-F-F  !Q!Z   6Z:%>%> 6*QVQV44555"?1#5#5666r=   c                   ddl m} t          | t                    s!t          |t                    s || |          S t          | t                    rt          |t                    rt	          | j                  }t          |t                    r|j        j        }nPt          |t                    r|j	        j        }n.t          |t                    r|j        j        dk    sJ |j        } || j        |j                  }t          |t                    rt          ||g          }t          |          S t                      S )Nr   r   rA   )r   r   rL   r.   r0   rF   r(   rM   r    partial_fallbackr   rY   r,   )r>   r?   r   r   fallback_typery   s         r;   rF  rF    s7   $$$$$$a$$  Z:-F-F  z!Q!Z   Z:%>%> "16**h 011 	*$38MM),, 	*$5:MMh11`hm6LP`6`6`6`6`$MMj((c?++ 	1=3%00C#r=   c                   t          | |          \  } }g }t          t          | j                            D ];}|                    t          | j        |         |j        |                              <| j        j        j        dk    r| j        }n|j        }| 	                    |t          | |          t          | j        |j                  |d           S rC  )rA  r   rT   r   rE   rI  ra   rF   rY   r   r   rS   rD  rG  s        r;   r   r   	  s    "1a((DAqI3q{##$$ D D1;q>1;q>BBCCCC
 	z#666::??#Aq))AJ
33    r=   CallableType | Parameterslist[str | None]c                h   t          | j                  }g }t          |          D ]}| j        |         }|j        |         }||k    s>| j        |                                         s|j        |                                         r|                    |           v|                    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)rT   r   r   r   	arg_kindsis_namedrE   )r>   r?   num_args	new_namesr   t_names_names          r;   r   r     s    & 1;HI8__ # #QQVq{1~6688AKN<S<S<U<UV$$$$T""""r=   instancer   c                F    t          | j        j        d         g           }|S )z;Construct the type 'builtins.object' from an instance type.)r   rF   r!  )rW  ry   s     r;   rD   rD   >  s"     8=$R("
-
-CJr=   r  c                8   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                    rH| j        D ]?}t          |t                    r(t          |          }t          |t                    r|c S @n6t          | t"                    r!t          t%          | j                             t)          t*          j                  S r8   )rL   r   rD   r   r#   r   ra   r    rK  r%   r   r  r'   rW   r   r-   r[   r.   r0   rF   r   r$   implementation_artifact)r  r  	candidates      r;   r   r   E  sj    #x   ;#C(((	C,{C	D	D ;#CL111	C	#	# ;#C$8999	C	"	" ;&sx000	C	)	) 	;j*.U.U 	;&s777	C	#	# ;I 	% 	%D$
++ %3D99	i22 %$$$$		%
 
C	$	$ ; 9 9:::94555r=   typesSequence[Type]c                p    | st                      S | d         }| dd          D ]}t          ||          }|S )Nr   r   )r,   rS   )r]  r   r>   s      r;   r   r   ]  sN     !    1XF122Y ' 'FA&&Mr=   ProperType | Nonec                    | j         j        sJ | j         j        dgk    r t          t	          d| | d                    S d S )N__call__T)is_operator)rF   r   protocol_membersr0   r   )r>   s    r;   r   r   h  sI    6v:,..{:q!NNNOOO4r=   )r?   r!   r>   r!   r5   r!   r8   )r?   r   r>   r   r   r   r5   r   )r?   r!   r>   r!   r   r   r5   r!   )r>   r!   r?   r!   r5   r  )r?   r   r>   r   r5   r#  )r>   r   r?   r   r5   r  )r>   r   r?   r   r5   r  )r+  r   r,  r-  r5   r   )r>   r   r?   r   r5   r6  )r>   r   r?   r   r5   r   )r>   r!   r?   r!   r5   r!   )r>   rN  r?   rN  r5   rO  )rW  r   r5   r   )r  r   r5   r   )r]  r^  r5   r!   )r>   r   r5   r`  )Or  
__future__r   collections.abcr   typingr   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   rS   r   rt   r   r   r   r5  rA  r   rI  rF  r   r   rD   r   r   r   r~   r=   r;   <module>ro     s`   9 9 " " " " " " $ $ $ $ $ $           ' ' ' ' ' ' 2 2 2 2 2 2 N N N N N N N N N N N N                     ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !H~ ~ ~ ~ ~ ~ ~ ~B; ; ; ; 
KO    

 
 \ \ \ \ 
 \$9 $9 $9 $9 $9NV3 V3 V3 V3 V3k*- V3 V3 V3r            ? ? ? ?L L L L"   *7 7 7 7   ,   ,   >   6 6 6 60        r=   