
    hi                        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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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;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e4e)                   Z@d>dZAd?dZBd@d ZCdAd"ZDdBd&ZEdCd(ZFdDd)ZGdEd*ZHdEd+ZIdDd,ZJdFd/ZKdGd2ZLdHd4ZMdId7ZNdJd9ZOdS )Kz3Calculation of the least upper bound types (joins).    )annotations)Sequence)overloadN)expand_type)map_instance_to_supertype)CONTRAVARIANT	COVARIANT	INVARIANTVARIANCE_NOT_READYTypeInfo)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    Y/var/www/html/Pagina-Ingenieria-Requisitos/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)-r:   object_from_instanceappendtypehas_type_var_tuple_typetype_var_tuple_prefixtype_var_tuple_suffixdefn	type_vars
isinstancer)   tuple_fallbackr3   argsr!   listzipr1   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@   rO   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 &i }|j         j        D ]}d ||j         <   |j         j        D ](}|j         j        rt          ||          r
d ||j         <   )d }|D ]<}t          ||          }|                     ||          }	|t          |	|          r|	}=|J |j         j        D ]?}
t          |
t                    r(|                     |
|          }	t          |	|          r|	}@|S r9   )rG   _promoter   rT   r]   is_protocolr   rr   	is_betterrM   r   )r;   r?   r@   p
base_typesbasebest	base_typemappedrespromotes              r<   r^   z+InstanceJoiner.join_instances_via_supertype   s     	. 	.A!Q .!!Q-----. 	. 	.A!Q .!!Q-----. ,.
FL 	) 	)D$(Jty!!FL 	- 	-Dy$ -At)<)< -(,
49%"&# 	 	I.q)<<F%%fa00C|yd33|v 	 	G'8,, ))'155S$'' Dr>   N)r6   r7   )r?   r   r@   r   r6   r    )__name__
__module____qualname__r=   rr   r^    r>   r<   r5   r5   9   sY        B B B B_ _ _ _B$ $ $ $ $ $r>   r5   r@   r"   r?   r6   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_typer1   r@   r?   s     r<   trivial_joinr      sF    !Q ;	Aq		 ;&q'9'9:::r>   r    instance_joinerInstanceJoiner | Nonec                    d S r9   r   r@   r?   r   s      r<   rT   rT      s	     r>   c                    d S r9   r   r   s      r<   rT   rT      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   r1   can_be_truecan_be_falsetrue_or_falserM   r.   r   r   r   r-   normalize_callablesacceptTypeJoinVisitorr   s      r<   rT   rT      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   r6   r7   c                "    || _         || _        d S r9   )r@   r   )r;   r@   r   s      r<   r=   zTypeJoinVisitor.__init__  s    .r>   r?   r,   c                4    t          t          j                  S r9   )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 r9   )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 r9   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 r9   )r   strict_optionalrM   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 r9   r@   r   s     r<   visit_uninhabited_typez&TypeJoinVisitor.visit_uninhabited_type"  	    vr>   r   c                    | j         S r9   r   r   s     r<   visit_deleted_typez"TypeJoinVisitor.visit_deleted_type%  r   r>   r   c                    | j         S r9   r   r   s     r<   visit_erased_typez!TypeJoinVisitor.visit_erased_type(  r   r>   r*   c                <   t          | j        t                    ri| j        j        |j        k    rT| j        j        |j        k    r| j        S | j                            t          | j        j        |j                            S |                     | j                  S )N)rX   )rM   r@   r*   idrX   copy_modifiedrT   defaultr   s     r<   visit_type_varzTypeJoinVisitor.visit_type_var+  s    dfk** 	(tvyAD/@/@v!Q]22v6''Jtv?QSTS`4a4a'bbb<<'''r>   r   c                P    | j         |k    r|S |                     | j                   S r9   )r@   r   r   s     r<   visit_param_specz TypeJoinVisitor.visit_param_spec3  s&    6Q;;H||DF###r>   r)   c                    | j         |k    r|S t          | j         t                    r!t          |j        | j                   r| j         S |                     | j                   S r9   )r@   rM   r   r   rX   r   r   s     r<   visit_type_var_tuplez$TypeJoinVisitor.visit_type_var_tuple8  sV    6Q;;Hdfh'' 	Jq}df,M,M 	6M||DF###r>   r/   c                    t           r9   )NotImplementedErrorr   s     r<   visit_unpack_typez!TypeJoinVisitor.visit_unpack_type@  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>K  s6       -5S#JJsC((  r>   )	arg_types	arg_names)rM   r@   r   is_similar_paramsr   	mypy.meetr   r   rQ   r   combine_arg_names)r;   r?   r   s     @r<   visit_parametersz TypeJoinVisitor.visit_parametersC  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 r9   )rM   r@   r   r   r5   rr   rG   ru   r   rv   r   unpack_callback_protocolrT   rb   r&   r$   r!   r   r)   r   rX   r   )r;   r?   nominal
structuralcalls        r<   visit_instancezTypeJoinVisitor.visit_instanceS  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 r9   )rM   r   r-   )r   tps     r<   	<genexpr>z6TypeJoinVisitor.visit_callable_type.<locals>.<genexpr>  sE         2/:;;     r>   )rM   r@   r   is_similar_callablesr   combine_similar_callablesjoin_similar_callablesis_type_objtype_objectis_abstractfrom_type_typeanyr2   r   rT   rb   r   r   rG   ru   r   )r;   r?   rq   r   s       r<   visit_callable_typez#TypeJoinVisitor.visit_callable_typev  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@   rM   r   r\   r   r   rF   r   r   rU   r   rT   rb   r   rG   ru   r   )r;   r?   rq   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   rB   )rO   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>   )r0   r\   lengthrangerF   rT   rM   r/   r1   rG   rQ   r)   r   rZ   rN   r   rE   rO   	enumeratejoin_type_listr3   tuplerP   )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   )rM   r@   r!   r   r5   rr   r   r   rN   r   r  rU   r/   r1   rG   r   rT   )r;   r?   rb   r\   itemr   s         r<   visit_tuple_typez TypeJoinVisitor.visit_tuple_type2  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>X  s^       9Y[!+{;;	
 #ao59H\;\]]	 ; ^]]r>   )rM   r@   r$   rQ   create_anonymous_fallbacksetkeysr	  readonly_keysr   rT   rb   r   )r;   r?   r\   rb   all_keysr	  r  s   ``     r<   visit_typeddict_typez$TypeJoinVisitor.visit_typeddict_typeV  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        t                    r| j        j        |k    r|S t          | j        |j                  S r9   )rM   r@   r   rb   rG   is_enumr   r   r   rT   r   last_known_valuer   s     r<   visit_literal_typez"TypeJoinVisitor.visit_literal_typem  s    dfk** 		2DF{{v#+ G
0G G|99461+FFFdfoqz:::)) 	2df.E.J.JHdfaj111r>   r   c                    J d            )NFzInternal errorr   r   s     r<   visit_partial_typez"TypeJoinVisitor.visit_partial_typey  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)rM   r@   r&   make_normalizedrT   r  r  r   rG   rZ   r   r   s     r<   visit_type_typezTypeJoinVisitor.visit_type_type~  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_type  s    ==!=====r>   typr"   c                Z   t          |          }t          |t                    rt          |          S t          |t                    r|                     |j                  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 r9   )r1   rM   r   rE   r&   r   r  r,   r   r%   r   r!   r   r   rN   r$   rb   r   r*   rX   r   )r;   r   s     r<   r   zTypeJoinVisitor.default  sU   c""c8$$ 	3',,,X&& 	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>   r9   )r@   r    r   r   r6   r7   )r?   r,   r6   r    )r?   r.   r6   r    )r?   r   r6   r    )r?   r   r6   r    )r?   r-   r6   r    )r?   r   r6   r    )r?   r   r6   r    )r?   r*   r6   r    )r?   r   r6   r    )r?   r)   r6   r    )r?   r/   r6   r/   )r?   r   r6   r    )r?   r   r6   r    )r?   r   r6   r    )r?   r   r6   r    )r@   r!   r?   r!   r6   r   )r?   r!   r6   r    )r?   r$   r6   r    )r?   r   r6   r    )r?   r   r6   r    )r?   r&   r6   r    )r?   r#   r6   r    )r   r"   r6   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                    rt          |t                    sdS | j        j        |j        j        k    r-| j        j        dk    r|j        j        dk    r| j        j         S t          | j        j                  t          |j        j                  k    rdS dS )NTzbuiltins.objectF)r1   rM   r   rG   ru   rZ   rU   mror?   r@   s     r<   rv   rv     s     	AA!X 	!X&& 	46!333v"333K\8\8\6---qvz??S__,,45r>   tuple[ProperType, ProperType]c                    t          | t          t          f          r|                                 } t          |t          t          f          r|                                }| |fS r9   )rM   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.
    )rU   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 r9   )rU   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)rQ   r3  r   rF   r   r   )r/  r0  tv_maptvstvnew_idnew_tvs          r<   update_callable_idsr9    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>   )maxrU   r3  minr   r9  )r?   r@   max_lenmin_lennew_idss        r<   match_generic_callablesrE    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_typerb   name)rE  r   rU   r   rF   	safe_meetrb   rG   rZ   r   r   rT   rH  r?   r@   r   r   rb   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 r9   )rM   r/   rT   rG   r   r1   r&  s     r<   	safe_joinrM    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   rB   )r   r   rM   r/   r1   rG   r)   rN   r!   partial_fallbackr   rZ   r-   )r?   r@   r   r   fallback_typer}   s         r<   rJ  rJ    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 rG  )rE  r   rU   r   rF   rM  rb   rG   rZ   r   r   rT   rH  rK  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)rU   r   r   r   	arg_kindsis_namedrF   )r?   r@   num_args	new_namesr   t_names_names          r<   r   r   4  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   rG   r%  )r[  r}   s     r<   rE   rE   S  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 r9   )rM   r   rE   r   r$   r   rb   r!   rO  r&   r   r  r(   rX   r    r.   r\   r/   r1   rG   r   r%   implementation_artifact)r   r  	candidates      r<   r   r   Z  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-   rT   )ra  r   r?   s      r<   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)rG   ru   protocol_membersr1   r   )r?   s    r<   r   r   }  sI    6v:,..{:q!NNNOOO4r>   )r@   r"   r?   r"   r6   r"   r9   )r@   r    r?   r    r   r   r6   r    )r@   r"   r?   r"   r   r   r6   r"   )r?   r"   r@   r"   r6   r#  )r@   r    r?   r    r6   r'  )r?   r   r@   r   r6   r#  )r?   r   r@   r   r6   r#  )r/  r   r0  r1  r6   r   )r?   r   r@   r   r6   r:  )r?   r   r@   r   r6   r   )r?   r"   r@   r"   r6   r"   )r?   rR  r@   rR  r6   rS  )r[  r   r6   r   )r   r    r6   r    )ra  rb  r6   r"   )r?   r   r6   rd  )Pr"  
__future__r   collections.abcr   typingr   mypy.typeopsr   mypy.expandtyper   mypy.maptyper   
mypy.nodesr   r	   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/   r0   r1   r2   r3   r5   r   rT   r   rv   r   r   r   r9  rE  r   rM  rJ  r   r   rE   r   r   r   r   r>   r<   <module>rs     sf   9 9 " " " " " " $ $ $ $ $ $           ' ' ' ' ' ' 2 2 2 2 2 2 X X X X X X X X X X X X X X                     ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !HI I I I I I I IX; ; ; ; 
KO    

 
 \ \ \ \ 
 \$9 $9 $9 $9 $9N\3 \3 \3 \3 \3k*- \3 \3 \3~   &         ? ? ? ?L L L L"   *7 7 7 7   ,   ,   >   6 6 6 60        r>   