
    %^g H                   d   U d Z ddlmZ ddlZddlZddlZddlZddlZddl	Z	ddl
Z	ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlmZ ddlmZmZ ddl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$ ddl%Z&ddl'Z&ddl(Z&ddl)Z&ddl*Z&ddl+Z&dd
l&m,Z, ddl-m.Z. ddl/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5m6Z6m7Z7m8Z8  G d d      Z9 e9       Z:de;d<    e!d      Z<e"e<e9f   Z=de;d<    G d d      Z> e>       Z?de;d<    e5ej                  ej                  d      ZBde;d<   dYdZCdZdZD G d deE      ZF G d d       ZGd[d!ZHd\d"ZIe	 	 	 	 	 	 	 	 d]d#       ZJ	 	 	 	 	 	 	 	 d^d$ZKej                  d_d%       ZMeJj                  e,j                        	 	 	 	 	 	 	 	 d`d&       ZP	 	 	 	 	 	 	 	 dad'ZQ	 	 	 	 	 	 	 	 	 	 dbd(ZReJj                  e,j                        	 	 	 	 	 	 	 	 dcd)       ZTddd*ZU	 	 	 	 	 	 	 	 	 	 ded+ZV	 	 	 	 	 	 	 	 dfd,ZW	 	 	 	 	 	 dgd-ZXdhd.ZY G d/ d0ee<         ZZ	 	 	 	 	 	 	 	 did1Z[djd2Z\eJj                  e,j                        	 	 	 	 	 	 	 	 dkd3       Z^eJj                  e9      	 	 	 	 	 	 	 	 dld4       Z_eJj                  e,j                        	 	 	 	 	 	 	 	 dmd5       ZaeJj                  e,j                        	 	 	 	 	 	 	 	 dnd6       ZceJj                  e,j                        	 	 	 	 	 	 	 	 dod7       ZeeJj                  e,j                        	 	 	 	 	 	 	 	 dpd8       Zgdqd9Zhdrd:Zi	 	 	 	 	 	 	 	 dsd;Zjdtd<ZkeJj                  e,j                        	 	 	 	 	 	 	 	 dud=       ZmeJj                  e,j                        	 	 	 	 	 	 	 	 dvd>       Zo eph d?      Zqde;d@<    eph dA      Zrde;dB<   dwdCZsdxdDZtdydEZudzdFZvd{dGZwd|dHZxd}dIZyi azdJe;dK<   d~ddLZ{ddMZ|	 d	 	 	 	 	 ddNZ}ddOZ~ddPZ G dQ dR      Z eph dS      Zde;dT<   d~ddUZddVZddWZedXk(  r ej                   e              yy)ziTests for stubs.

Verify that various things in stubs are consistent with how things behave at runtime.

    )annotationsN)defaultdict)redirect_stderrredirect_stdout)singledispatch)Path)AbstractSetAnyGenericIteratorTypeVarUnion)
get_originis_typeddict)nodes)parse_config_file)UNKNOWNevaluate_expression)Options)FancyFormatterbytes_to_human_readable_repr	is_dunderplural_sc                      e Zd ZdZddZy)MissingzGMarker object for things that are missing (from a stub or the runtime).c                     y)NMISSING selfs    -lib/python3.12/site-packages/mypy/stubtest.py__repr__zMissing.__repr__2   s        Nreturnstr__name__
__module____qualname____doc__r"   r   r#   r!   r   r   /   s
    Qr#   r   ztyping_extensions.Finalr   Tztyping_extensions.TypeAliasMaybeMissingc                      e Zd ZdZddZy)Unrepresentablez5Marker object for unrepresentable parameter defaults.c                     y)N<unrepresentable>r   r   s    r!   r"   zUnrepresentable.__repr__?   s    "r#   Nr$   r'   r   r#   r!   r/   r/   <   s
    ?#r#   r/   UNREPRESENTABLEF
_formatterc                R    |j                  dd       t        j                  | fi |S )z.Wrapper around mypy.util for fancy formatting.colornone)
setdefaultr3   style)messagekwargss     r!   _styler;   I   s(    
gv&G.v..r#   c                8    t        |       |kD  r| d |dz
   dz   S | S )N   ...)len)r9   lengths     r!   	_truncaterA   O   s)    
7|f|!$u,,Nr#   c                      e Zd Zy)StubtestFailureNr(   r)   r*   r   r#   r!   rC   rC   U   s    r#   rC   c                  P    e Zd Zddd	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddZddZd	d
dZy)ErrorN	stub_descruntime_descc               p   || _         dj                  |      | _        || _        || _        || _        |xs t        t        |d|            | _        |\t        |      }|t        t        |      d      | _        yt        j                  |      }t        ||      }	t        |	d      | _        y|| _        y)a  Represents an error found by stubtest.

        :param object_path: Location of the object with the error,
            e.g. ``["module", "Class", "method"]``
        :param message: Error message
        :param stub_object: The mypy node representing the stub
        :param runtime_object: Actual object obtained from the runtime
        :param stub_desc: Specialised description for the stub object, should you wish
        :param runtime_desc: Specialised description for the runtime object, should you wish

        .typeNd   is_async)object_pathjoinobject_descr9   stub_objectruntime_objectr&   getattrrH   safe_inspect_signaturerA   reprrI   inspectiscoroutinefunctiondescribe_runtime_callable)
r    rP   r9   rS   rT   rH   rI   runtime_sigruntime_is_asyncdescriptions
             r!   __init__zError.__init__Z   s    * '88K0&,"Tc'+v{*S&T0@K"$-d>.BC$H!#*#>#>~#N 7N^_$-k3$?! ,Dr#   c                6    t        | j                  t              S )z@Whether or not the error is for something missing from the stub.)
isinstancerS   r   r   s    r!   is_missing_stubzError.is_missing_stub   s    $**G44r#   c                    d| j                   v S )zOWhether or not the error is for something being (or not being) positional-only.zshould be positional)r9   r   s    r!   is_positional_only_relatedz Error.is_positional_only_related   s     &55r#   c                   |r't        | j                  d      dz   | j                  z   S d}d}t        | j                  t
              s| j                  j                  }t        | j                  d         }||j                  xs d}d}|r|dt        |       z  }|r||rdnd	 | z  }d}d}t        | j                  t
              sC	 t        j                  | j                        d
   }	 t        j"                  | j                        }d}|r|dt        |       z  }|r||rdnd	 | z  }t        ddd      t        | j                  d      d| j                  ddt        |d      dt        | j$                  dz   dd      dt        |d      dt        | j&                  dz   dd      g}	dj)                  |	      S # t        t        t         f$ r Y w xY w# t        $ r Y w xY w)zxReturns a description of the error.

        :param concise: Whether to return a concise, one-line description

        T)bold Nr    z	 in file :z	 at line    zerror: redr5   re   
zStub:)dimblue)r5   rm   zRuntime:)r;   rR   r9   r`   rS   r   lineget_stubrP   pathr   rT   rX   getsourcelinesOSError	TypeErrorSyntaxErrorgetsourcefilerH   rI   rQ   )
r    concise	stub_line	stub_file	stub_nodestub_loc_strruntime_lineruntime_fileruntime_loc_stroutputs
             r!   get_descriptionzError.get_description   s    $**6<t||KK		$**G4((--IT--a01	 !.$IiY'899Lis[A)MML$--w7&55d6I6IJ1M&44T5H5HI 4+=*>??O#;!G~VVO 9E54##$/LL<T*4>>D(DA?-4$$t+6tD
 wwv9 Y4   s$   "G .G GG	G*)G*)rP   	list[str]r9   r&   rS   MaybeMissing[nodes.Node]rT   MaybeMissing[Any]rH   
str | NonerI   r   r%   None)r%   boolF)rw   r   r%   r&   )r(   r)   r*   r^   ra   rc   r   r   r#   r!   rF   rF   Y   sc     !%#'%-%- %- .	%-
 *%- %- !%- 
%-N56
8r#   rF   c           	        t        t        j                  d      5 }t        j                         5  t        |      5  t        |      5  t        j                  d       t        j                  |       }t        | dg       d d d        d d d        d d d        d d d        S # 1 sw Y   #xY w# 1 sw Y   'xY w# 1 sw Y   +xY w# 1 sw Y   S xY w)Nwignore*)fromlist)openosdevnullwarningscatch_warningsr   r   simplefilter	importlibimport_module
__import__)module_namer   runtimes      r!   silent_import_moduler      s    	bjj#	'$$&(@/RYBZ!!(+--k:G {cU3 C[(@& 
 N C[BZ(@(@&& 
 NsQ   CB;B/9B#	B/	B;C#B,(B//B84B;;C	 CCc              #    K   t        |       }|et        | j                  d      d         sG| t        j                  v rt        t        j                  |          nd}t        | gdt        d|       y	 t        |       }t        j                          5  t        j"                  d       	 t%        ||| g      E d{    ddd       y# t        $ r  t        $ rO}d}t        |t              rd}t        | gd	| d
t        |      j                   d| |t               Y d}~yd}~ww xY w7 q# t&        $ r}t)        t+        j,                  |j.                              d   d   }|j0                  j3                  dd      }|dk(  s|j                  d      d   dk(  r t        | gdt        |      j                   d| ||ddt+        j4                         j7                         z          Y d}~5d}~ww xY w# 1 sw Y   yxY ww)zTests a given module's stub against introspecting it at runtime.

    Requires the stub to have been built already, accomplished by a call to ``build_stubs``.

    :param module_name: The module to test

    NrK   N/Azfailed to find stubsrI   rg   z7 Maybe install the runtime package or alter PYTHONPATH?zfailed to import.rf   : r   r   r(   __main__mypyzencountered unexpected error, zThis is most likely the fault of something very dynamic in your library. It's also possible this is a bug in stubtest.
If in doubt, please open an issue at https://github.com/python/mypy

rG   )rp   is_probably_privatesplitsysmodulesrW   rF   r   r   KeyboardInterruptBaseExceptionr`   ModuleNotFoundErrorrL   r(   r   r   r   verify	Exceptionlist	tracebackwalk_tb__traceback__	f_globalsget
format_excstrip)r   stubrI   r   enotebottom_framebottom_modules           r!   test_moduler      s     K D|";#4#4S#9"#=>=HCKK=W4K 89]bL5wS_  	&{3 
	 	 	"h'	dGk];;; 
#	"   a,-LDM.tfAd1g6F6F5Gr!MtU\
 	
 	 < 		 1 1!// BCBGJL(2266z2FM 
*m.A.A#.Fq.IV.S0a1A1A0B"QCHJ  **,2245  		 
#	"s   A3H6C HG?,D1=D/>D1	HD,AD'"H'D,,H/D11	G<:B7G71G?7G<<G??HHc              #  ,   K   t        |d| |       yw)zEntry point for comparing a stub to a runtime object.

    We use single dispatch based on the type of ``stub``.

    :param stub: The mypy node representing a part of the stub
    :param runtime: The runtime object corresponding to ``stub``

    zis an unknown mypy nodeNrF   r   r   rP   s      r!   r   r     s      6g
FF   c           	   #  6  K   d|j                   v sJ |j                   j                         D ch c]  \  }}|j                  s| }}}t        ||z
        }t        ||z
        }|s|sy t	        | dgz   dt
        t
        d| d|        y c c}}w w)N__all__znames exported from the stub do not correspond to the names exported at runtime. This is probably due to things being missing from the stub or an inaccurate `__all__` in the stubz/Names exported in the stub but not at runtime: z/Names exported at runtime but not in the stub: )rS   rT   rH   rI   )namesitemsmodule_publicsortedrF   r   )rP   r   runtime_all_as_setmopublic_names_in_stubnames_in_stub_not_runtimenames_in_runtime_not_stubs           r!   _verify_exported_namesr     s      

"""*.***:*:*<P*<$!QA*<P &';>P'P Q &'9<P'P Q%)B
yk!p DE^D_`=>W=XY  Qs   .BBB	ABc                    	 t        j                  |       }	 t        j
                  || j                  d      S # t        t        t        f$ r Y yw xY w# t        $ r Y yw xY w)zRetrieve the symbol table for the module (or None on failure).

    1) Use inspect to retrieve the source code of the module
    2) Use symtable to parse the source (and use what symtable knows for its purposes)
    Nexec)rX   	getsourcers   rt   ru   symtabler(   )r   sources     r!   _module_symbol_tabler   :  se    ""7+  )9)96BB	 Y, 
  s    9  A AA	AAc              #    K   t        |t              rt        |d| |       y t        |t        j                        st        |d| |       y t        |d      rRt        |j                        }d| j                  v rt        || |      E d {    nt        |dgz   dt        |       nd }| j                  j                         D ch c]*  \  }}|j                  st        |      rt        ||      r|, }}}dd}||n,t        |      D ch c]  }t        |      s |||      r| c}}|j                  |       |j!                  t"               t%        |      D ]y  }	|	| j                  v r| j                  |	   j&                  nt        }
t        |
t(        j*                        rK|
J 	 t-        ||	t              }t1        |
|||	gz         E d {    { y 7 Sc c}}w c c}w # t.        $ r Y w xY w7 $w)Nis not present at runtimezis not a moduler   is not present in stubc                z   t        | |      }t        |t        j                        ryt	        |       }|4	 |j                  |      }|j                         ry|j                         ry	 |j                  }t        |t              rt        || j                  k(        S y# t        $ r Y Aw xY w# t        $ r Y yw xY w)zFHeuristics to determine whether a name originates from another module.FT)rU   r`   types
ModuleTyper   lookupis_importedis_assignedKeyErrorr)   r&   r   r(   r   )rattrobjsymbol_tablesymbolobj_mods         r!   _belongs_to_runtimez,verify_mypyfile.<locals>._belongs_to_runtimek  s    ac5++,+A.# %,,T2 %%'  %%'	3nnG '3'Gqzz122+     	 	s#   B *B. 	B+*B+.	B:9B:)r   types.ModuleTyper   r&   r%   r   )r`   r   rF   r   r   hasattrsetr   r   r   r   r   module_hiddenr   dirupdatedifference_updateIGNORED_MODULE_DUNDERSr   noder   MypyFilerU   r   r   )r   r   rP   r   r   r   to_checkr   runtime_public_contentsentry
stub_entryruntime_entrys               r!   verify_mypyfiler   L  s     '7#K!<dGLLgu//0K!2D'BB w	" 1

" .k4ASTTTyk13KWV]^^!
 JJ$$&&DAq(;A(>''STBU 	
&  F ) 	 \
!&q) $GQ/ !
  OO+,56!/4

/BTZZ&++
j%..1%%%	#GUG<M
 *m[E75JKKK " UT
,  	 	 	Lsa   BH G!=H /G$;H G*0BH 4G/H G>H $H /	G;8H :G;;H c           
   #  l  K   	  G d d|      }	 t        |dd      }|r)| j                  st        |d| |t        |              y y y # t         $ rD | j                  s5t        |t        j                        st        |d| |t        |              Y t        $ r Y w xY w# t        $ r d}Y w xY ww)Nc                      e Zd Zy)_verify_final.<locals>.SubClassNrD   r   r#   r!   SubClassr     s    r#   r   zIcannot be subclassed at runtime, but isn't marked with @final in the stubrH   	__final__FzChas `__final__` attribute, but isn't marked with @final in the stub)	rt   is_final
issubclassenumEnumrF   rW   r   rU   )r   r   rP   r   runtime_finals        r!   _verify_finalr     s     	w 	&e< T]]Q4j
 	
 +}+  	}}Z%C[t*    	  sQ   B4A	 B# ,B4	A
B B4B B4B  B4#B1.B40B11B4c             #    K   | j                   s| j                  s|st        |      }|t        ur!| j                  t	        |d| |d|        y |t        u rk| j                  ^t
        j                  j                  | j                  d      s3t	        |d| || j                  j                  j                   d       y y y y y y y w)Nz"is inconsistent, metaclass differsr   rG   )zabc.ABCMetazbuiltins.typezmetaclass mismatch)	is_protocolis_enumrL   metaclass_typerF   r   r   is_named_instancefullname)r   r   rP   is_runtime_typeddictruntime_metaclasss        r!   _verify_metaclassr    s      DLL9M MD(T-@-@-H4 12  %##/ JJ00##%E
 $!0055>>?"  0 & :NLs   CCc           	   #    	K   | j                   r,t        |t              st        |d| |t	        |              y t        |t              rt        |d| |t	        |              y t        |t
              st        |d| |t	        |              y t        | ||      E d {    | j                  d uxr t        |      }t        | |||      E d {    | j                  D ch c]  }|j                         s| }}|j                  d t        |      D               | j                  r|j                  d       |r|j                  d       t!        |      D ]  		}	j#                  d	      r1	j%                  d	      s d
| j&                  j)                  d
       	 }t+        	fd| j,                  D        t.              }|J 	 	 t1        ||      }t        |t              r(t        |t:        j<                        rt?        |d      rtA        |||	gz         E d {     y 7 7 ^c c}w # t2        $ r t5        j6                  ||t.              }Y w xY w# t8        $ r Y w xY w7 Lw)N;is marked as "@type_check_only", but also exists at runtimer   r   zis not a type)r  c              3  J   K   | ]  }t        |      r|t        vs|  y wN)r   IGNORABLE_CLASS_DUNDERS).0r   s     r!   	<genexpr>z"verify_typeinfo.<locals>.<genexpr>  s$       a(;A(>1LcCc=s   ###r^   __new_____c              3  n   K   | ],  }|j                   v s|j                      j                   . y wr  )r   r   )r	  tr   s     r!   r
  z"verify_typeinfo.<locals>.<genexpr>0  s.     YHqQRQXQXHXqwwu~22Hs   55Texclude_special)!is_type_check_onlyr`   r   rF   rW   rL   r   typeddict_typer   r  r   isidentifierr   varsr   discardr   
startswithendswithnamelstripnextmror   rU   AttributeErrorrX   getattr_staticr   r   WrapperDescriptorTyper   r   )
r   r   rP   r  r  r   mangled_entrystub_to_verifyruntime_attrr   s
            @r!   verify_typeinfor#    s\      '7+Mt*  	'7#K!<dGW[\`Wabbgt$K$4PT:VVT7K888..d:T|G?T g{9M   "&Ct/@/@/BHCOO =  $#!D!%..*>		 0 0 56ug>MYDHHY[bc)))	W&w> ~w/<)D)DE->nlK5'<QRRR1 "7 9 D2 " W&55g}gVW 	 	 Ss   B!I8$H1%1I8H4I8)H7?H7CI8H<7I8I8)I6*I84I87I8<$I# I&"I##I&&	I3/I82I33I8c                    t        j                  | d         }| dd  D ]  }	 t        j                  ||      } |S # t        $ r t
        cY c S w xY w)Nr   ri   )r   r   rX   r  r  r   )rP   static_runtimer   s      r!   _static_lookup_runtimer&  G  s]    ,,[^<NQR	$33NEJN !   	 N		s   <AAc              #    K   | j                   dv ry t        j                  |      r@t        t	        |dd       t
              }|r| j                  sd |s| j                  rd y |t        u ry t        |t              r| j                  sd t        |t              s| j                  rd t        |t              r| j                  sd t        |t              s| j                  rd y y y w)N)r  __init_subclass____class_getitem____self__z(runtime is a classmethod but stub is notz(stub is a classmethod but runtime is notz)runtime is a staticmethod but stub is notz)stub is a staticmethod but runtime is not)r  rX   	isbuiltinr`   rU   rL   is_classr   classmethodstaticmethod	is_static)r   r   r%  rP   probably_class_methods        r!   _verify_static_class_methodsr1  T  s      yyII! !+77J+Mt T <<$<< .+.t}}88nk2t}}88.,/99nl399 9G3s   C1C3c              #    K   t        |d      rydd} || j                  j                  d      |j                  k(  ryddh}|j                  |v rydd}|j                  t        j
                  j                  k(  r( || j                  j                  |j                        ry| j                  j                  d	k(  ryd
| j                  j                   d|j                   d yw)z$Checks whether argument names match.Tr  Nc                D    | j                  |      r| t        |      d  S | S r  )r  r?   )sprefixs     r!   strip_prefixz&_verify_arg_name.<locals>.strip_prefixy  s#    #$<<#7qV>Q>r#   r  objectargsc                    | j                  d      } |j                  d      }| j                  |      xs1 |j                  |       xs t        |       dk(  xs t        |      dk(  S )Nr  ri   )r   r  r?   )abs     r!   names_approx_matchz,_verify_arg_name.<locals>.names_approx_match  sQ    GGCLGGCL||AO!,,q/OSVq[OCFaKOr#   _selfstub argument "z!" differs from runtime argument "")r4  r&   r5  r&   r%   r&   )r:  r&   r;  r&   r%   r   )r   variabler  kindrX   	ParameterPOSITIONAL_ONLY)stub_argruntime_argfunction_namer6  nonspecific_namesr<  s         r!   _verify_arg_namerH  q  s     
 5? H%%**D1[5E5EE!6*,,P 7,,<<<AS 0 0B 	(
(++001 2**5*:*:);1	>s   C(C*c              #    K   |j                   t        j                  j                  k7  r{| j                  j                         rd|j                   d yt        |j                         }| j                  j                  xs | j                  }t        |t        j                  j                        r|j                  }|N|Lt        |j                         t         ur1|j                   dur#t#        ||      sd|j                   d| d|  | j$                  t'        | j$                        }|t(        urj|dure|j                   t*        urR||j                   k7  s t        |      t        |j                         ur"d|j                   d|j                   d| yyyyyy| j                  j-                         rd	| j                  j                   d
 yyw)z6Checks whether argument default values are compatible.runtime argument "z0" has a default value but stub argument does notN.z" has a default value of type z0, which is incompatible with stub argument type z" has a default value of z0, which is different from stub argument default r>  z3" has a default value but runtime argument does not)defaultrX   rB  emptyrA  is_requiredr  get_mypy_type_of_runtime_valuer@  rL   type_annotationr`   r   r   TypeVarTypeupper_boundr7  is_subtype_helperinitializerr   r   r2   is_optional)rD  rE  runtime_type	stub_typestub_defaults        r!   _verify_arg_default_valuerX    s     g//555==$$&$[%5%5$6 7A A
 :+:M:MNL
 !))..J(2J2JI)TZZ%;%;<%11	(),,-V;''s2),	B ))9)9(: ;33?. AEENKQ
 ##/283G3GH /$C/#++?B$(;(;;  -T+:M:M5NN -[-=-=,> ?22=2E2E1H IIIUHXZ O C 0 0 0& ==$$&!("3"3"8"8!9 :0 1 's   GGc                T    |r%| dv r!|d   j                   j                  dk(  r|dd  S |S )N)r(  r)  r   clsri   )r@  r  )r  r8  s     r!   maybe_strip_clsr[    s7    BB 7  E)8OKr#   c                  R    e Zd ZddZddZed	d       Zed
d       Zedd       Zy)	Signaturec                <    g | _         i | _        d | _        d | _        y r  )poskwonlyvarposvarkwr   s    r!   r^   zSignature.__init__  s    $& $#
r#   c           
        dddddddfd}t        | j                  j                         fd      }d}|dj                  | j                  D cg c]
  } ||       c}| j
                  rd	 | j
                        z   gn| j                  rd	gng z   |D cg c]
  } ||       c}z   | j                  rd
 | j                        z   gng z         z  }|dz  }|S c c}w c c}w )Nc                    t        | t        j                        r| j                  S t        | t        j
                        r| j                  j                  S t        r  )r`   rX   rB  r  r   Argumentr@  AssertionErrorargs    r!   get_namez#Signature.__str__.<locals>.get_name  s?    #w001xx#u~~.||(((  r#   c                    t        | t        j                        ry t        | t        j                        r-t        | j                  j                  xs | j                        S t        r  )
r`   rX   rB  r   re  r&   r@  rL   rO  rf  rg  s    r!   get_typez#Signature.__str__.<locals>.get_type  sI    #w001#u~~.3<<,,C0C0CDD  r#   c                
   t        | t        j                        r0t        | j                  t        j                  j
                  k7        S t        | t        j                        r| j                  j                         S t        r  )r`   rX   rB  r   rK  rL  r   re  rA  rT  rf  rg  s    r!   has_defaultz&Signature.__str__.<locals>.has_default  sY    #w001CKK7+<+<+B+BBCC#u~~.xx++--  r#   c                V     |       } |       |rd| ndz    |       rdz   S dz   S )Nr   rg   z = ...r   )rh  arg_typeri  rk  rm  s     r!   get_descz#Signature.__str__.<locals>.get_desc  sH    }H&.Rz?B8*3/89 689r#   c                $     |        |       fS r  r   )r:  ri  rm  s    r!   <lambda>z#Signature.__str__.<locals>.<lambda>  s    k!nhWXk=Zr#   keyzdef (z, r   z**))rh  r
   r%   r&   )rh  r
   r%   r   )rh  r
   r%   r   )r   r`  valuesrQ   r_  ra  rb  )r    rp  kw_onlyretrh  ri  rk  rm  s        @@@r!   __str__zSignature.__str__  s    	!	!	!	 ++-3Z[tyy&*hh/hsXc]h/04ht{{++,4;;3%\^a(/0x}01 15

x

++,D
 	
 	s

 00s   C,
&C1c                   t               }t        | j                  | j                        }|D ]  }|j                  j                         r|j                  j                  |       9|j                  j                         r$||j                  |j                  j                  <   w|j                  t        j                  k(  r||_        |j                  t        j                  k(  r||_        t          |S r  )r]  r[  r  	argumentsrA  is_positionalr_  appendis_namedr`  r@  r   ARG_STARra  	ARG_STAR2rb  rf  )r   stub_sig	stub_argsrD  s       r!   from_funcitemzSignature.from_funcitem
  s    .7k#DIIt~~>	!H}}**,##H-''):B 1 1 6 67%..0"*%//1!)$$ " r#   c                Z   t               }| j                  j                         D ]  }|j                  t        j
                  j                  t        j
                  j                  fv r|j                  j                  |       `|j                  t        j
                  j                  k(  r||j                  |j                  <   |j                  t        j
                  j                  k(  r||_        |j                  t        j
                  j                  k(  r||_        t"         |S r  )r]  
parametersrv  rA  rX   rB  rC  POSITIONAL_OR_KEYWORDr_  r}  KEYWORD_ONLYr`  r  VAR_POSITIONALra  VAR_KEYWORDrb  rf  )	signaturer[   rE  s      r!   from_inspect_signaturez Signature.from_inspect_signature  s    4=K$//668K!!11!!77$  &&{3!!W%6%6%C%CC7B"";#3#34!!W%6%6%E%EE%0"!!W%6%6%B%BB$/!$$ 9 r#   c                    t         j                  d      }i t        t         j                        D ]  }|J t         j                  |j                        }t        |      D ]  \  }}|j                  j                  j                  d      s6|j                  s*|s(|j                  j                  j                  d      dk(  rd| n|j                  j                  }j                  |g       j                  ||f         dfd}dfd}d fd	}	t               }
t        |
      D ]3  }|   d   d   j                  j                  }t!        j"                  t!        j$                  | ||            dd |	|      t'        d |   D                    }|j(                  j+                         r|
j,                  j                  |       |j(                  j/                         r$||
j0                  |j                  j                  <   |j(                  t         j2                  k(  r	||
_        
|j(                  t         j6                  k(  r	||
_        0t:         |
S )a  Returns a Signature from an OverloadedFuncDef.

        If life were simple, to verify_overloadedfuncdef, we'd just verify_funcitem for each of its
        items. Unfortunately, life isn't simple and overloads are pretty deceitful. So instead, we
        try and combine the overload's items into a single signature that is compatible with any
        lies it might try to tell.

        Tr  Nr  r  r    c                .    t        d |    D              S )Nc              3  &   K   | ]	  \  }}|  y wr  r   )r	  r  indexs      r!   r
  zISignature.from_overloadedfuncdef.<locals>.get_position.<locals>.<genexpr>N  s     @-?Eu-?s   )max)arg_nameall_argss    r!   get_positionz6Signature.from_overloadedfuncdef.<locals>.get_positionL  s    @Xh-?@@@r#   c                j   t         j                  j                  j                  d      5  |    D cg c])  \  }}|j                  j                  xs |j
                  + }}}t         j                  j                  |D cg c]  }|s|	 c}      cd d d        S c c}}w c c}w # 1 sw Y   y xY w)NT)r   statestrict_optional_setr@  rL   rO  typeopsmake_simplified_union)r  rh  r  	all_typesr  r  s        r!   rk  z2Signature.from_overloadedfuncdef.<locals>.get_typeP  s    !!55d;KST\K]K]aCLL%%<)<)<<K]   ||99i:UiST1i:UV	 <; ;V	 <;s.   	B).B" B)B$

B$
B)B))B2c                J   |    D ch c]  \  }}|j                    }}}t        j                  |v rt        j                  S t        j                  |v rt        j                  S t	        |          t	        j
                        k  xs& t        j                  |v xs t        j                  |v }t        j                  |v xs t        j                  |v }|r"|rt        j                  S t        j                  S |rt        j                  S t        j                  S c c}}w r  )
rA  r   r  r  r?   r   ARG_OPTARG_NAMED_OPTARG_POS	ARG_NAMED)r  rh  r  kindsis_optis_posr  r   s         r!   get_kindz2Signature.from_overloadedfuncdef.<locals>.get_kindW  s    ,4X,>?,>&#qSXX,>E?~~&~~%%'&
 HX&'#djj/9 0==E)0&&%/ 
 ]]e+Eu}}/EF(.u}}GE4G4GG$*5==??! @s   Drs  r   c              3  :   K   | ]  \  }}|j                     y wr  )pos_only)r	  rh  r  s      r!   r
  z3Signature.from_overloadedfuncdef.<locals>.<genexpr>s  s     K8Jfc1S\\8Js   )rO  rS  rA  r  )r  r&   r%   int)r  r&   r%   zmypy.types.ProperType)r  r&   r%   znodes.ArgKind)r   r  map _resolve_funcitem_from_decoratorr   r[  r{  	enumerater@  r  r  r   r7   r}  r]  r   r   re  VarallrA  r|  r_  r~  r`  r  ra  r  rb  rf  )r   assume_positional_onlyfuncr8  r  rh  r  r  rk  r  sigr  example_arg_namer  s   `            @r!   from_overloadedfuncdefz Signature.from_overloadedfuncdef.  s    "+499d!K@B8$**ED###"499dnn=D'o
s
 ||((33D9||-||((..s3v=	 L
 **  ##D"-44c5\B . F 	A	W	@& *3x\::H'1!4Q7@@EE..		*HX,>? $ h'K8JKKC xx%%'s#""$03

3<<,,-U^^+ 
U__,	$$' ;( 
r#   Nr%   r   r$   )r   nodes.FuncItemr%   Signature[nodes.Argument])r  inspect.Signaturer%   Signature[inspect.Parameter])r   nodes.OverloadedFuncDefr%   r  )	r(   r)   r*   r^   ry  r.  r  r  r  r   r#   r!   r]  r]    sK    $'R     $ P Pr#   r]  c              #    K   t        | j                  |j                        D ]  \  }}t        |||      E d {    t        ||      E d {    |j                  t
        j                  j                  k(  r|j                  s|j                  j                  j                  d      s^|j                  j                  j                  d      dk7  r6t        |d      s)d|j                  j                   d|j                   d |j                  t
        j                  j                  k7  s|j                  s'|j                  j                  j                  d      sB|j                  j                  j                  d      dk7  slt        |d      r{d|j                  j                   d	  t        | j                        t        |j                        kD  r|j                  c| j                  t        |j                        d  D ]p  }|j                  j                  |j                   vr0d
|j                  j                   d}|j"                  |dz  }| Ud|j                  j                   d r | j                  d| j                  j                  j                   d nt        | j                        t        |j                        k  rp|j                  t        | j                        d  D ]K  }|j                  | j                   vrt%        |      r'd|j                   d :d|j                   d M t        | j                        t        |j                        k  s|j                  r| j                  (|j                  d|j                  j                   d | j                  2|j                  &d| j                  j                  j                   d t'        t)        | j                         t)        |j                         z        D ]I  }| j                   |   |j                   |   }}t        |||      E d {    t        ||      E d {    K |j"                  7t)        |j                         j+                  t)        | j                               st'        t)        | j                         t)        |j                         z
        D ]v  }||j                  D ch c]  }|j                   c}v rF||j                  t        | j                        d  D ch c]  }|j                   c}vsfd| d od
| d x t'        t)        |j                         t)        | j                         z
        D ]  }|| j                  D ch c]  }|j                  j                   c}v r\|j                  G|| j                  t        |j                        d  D ch c]  }|j                  j                   c}v rd| d t%        |j                   |         rd| d  | j"                  |j"                  | j                  D ch c]  }|j                  j                   }}t)        |j                         j+                  t)        | j                         |z        sd|j"                  j                   d | j"                  4|j"                  'd| j"                  j                  j                   d y y y 7 7 7 7 c c}w c c}w c c}w c c}w c c}w w)Nr  r  r    Tr  r>  z," should be positional-only (add "/", e.g. "z, /")z." should be positional or keyword (remove "/")z runtime does not have argument "r?  z7. Maybe you forgot to make it keyword-only in the stub?z" is not keyword-onlyz&runtime does not have *args argument "zstub does not have argument "rJ  z#stub does not have *args argument "z&stub does not have **kwargs argument "z)runtime does not have **kwargs argument ")zipr_  rH  rX  rA  rX   rB  rC  r  r@  r  r  r   r   r?   ra  r`  rb  _is_private_parameterr   r   issubset)r   r   rF  rD  rE  msgrh  stub_pos_namess           r!   _verify_signaturer    s/     "%TXXw{{!;+#Hk=III,X{CCC 1 1 A AA%%%%**55d;!!&&,,S1V;mTB "("3"3"8"8!9 :##.#3#3"4E;
  1 1 A AA""h&7&7&<&<&G&G&M!!&&,,S1V;mTB "("3"3"8"8!9 : ) "<4 488}s7;;''
 >>! HHS%5%78 $$))?<X=N=N=S=S<TTUVC}}0XXI+H,=,=,B,B+CCXYY 9 {{&>t{{?S?S?X?X>YYZ[[	TXXW[[)	)";;s488}7Kt{{2,[99+:J:J9K1MM*;+;+;*<<QRR 8 488}GKK((GNN,B;;7>>#=78K8K7LANN;;"w~~'=:4;;;O;O;T;T:UUVWW c$++&W^^)<<= $C 0'..2E+#Hk=III,X{CCC > }}C$7$@$@T[[AQ$R #dkk*S-@@AC7;;G;K{'';GG7;;sSWS[S[}C_`C_K{//C_``.se3HII8Q?? B c'..)C,<<=$((C(h8$$))(CC &488CPWP[P[L\L^C_`C_xH--22C_``'u,ABB()<=5cU!<< > zzgmm7 BFJX(++00J7>>"++C,<~,MN:7==;M;M:NaPPzz'--"79$**:M:M:R:R9SSTUU #8G 	JCx 	JC H`
 D a Ks   8]\3]\6C!]21]%(]]F]1D5]&\9']:\<;B]
\?)]]]A]7]	5]	]&]+!]0]=]B]6]9]<]?]c                    | j                   j                  d      xrD | j                   j                  d       xr& | j                  t        j                  j
                  uS )Nr  r  )r  r  rK  rX   rB  rL  rg  s    r!   r  r    sP    C  	7##D))	7KKw00666r#   c              #  8  K   t        |t              rt        |d| |       y t        |      st        |d| |       t	        |      sy t        |      }t        | t        j                        rCt        | |      D ]  }t        ||| |        t        | ||      D ]  }t        ||| |        t        | |||      D ]  }t        |d|z   | |        t        |      }t        j                  |      }|rCt        j                  |       }t        j!                  |      }	t#        ||      }
t%        |      }nd\  }
}|r| j&                  st        |d| |||
       |sy t)        	| j*                        D ]  }t        |d|z   | ||
	        y w)
Nr   is not a functionis inconsistent, rN   )NNz:is an "async def" function at runtime, but not in the stubrG   rF  r   )r`   r   rF   is_probably_a_functioncallabler&  r   FuncDef_verify_abstract_status_verify_final_methodr1  rV   rX   rY   r]  r  r  rZ   r&   is_coroutiner  r  )r   r   rP   r%  
error_textr9   r  runtime_is_coroutiner  r[   runtime_sig_descrH   s               r!   verify_funcitemr    s     '7#K!<dGLL!'*K!4dGDD  ,K8N$&1$@JZw?? A.tWnMJZw?? N 0g~{[K!4w!>gNN \ 'w/I"66w?**4066yA4YI]^M	&0#)
 D$5$5H)
 	
 $X{$))T'))
 	
 Us   FFc              #  ,   K   t        |d| |       y w)Nr   r   r   s      r!   verify_noner  4  s      5tW
EEr   c              #    K   t        |t              rt        |      dk  rt        |d| |       y | j                  r3t        |      r(| j                  s| j                  st        |d| |       t        |      }|| j                  t        || j                        sd}t        |t        j                        rt        |j                        }|t        || j                        rd}t        j                  j!                  | j                        }t        |t        j                  j"                        r|j                  j$                  dk(  rd}|rt        |d| | |       y y y y y w)N   r   +is read-only at runtime but not in the stubTFzbuiltins.ellipsisz#variable differs from runtime type )r`   r   r?   rF   is_initialized_in_classis_read_only_propertyis_settable_propertyis_propertyrN  rL   rR  r   r   valuer   r   get_proper_typeInstancer   )r   r   rP   rU  should_errorproper_types         r!   
verify_varr  ;  sM     '7#{q %@$PP 	$$!'*&&d.>.>K!NPTV]^^1':L II!!,		: gtyy)9'--HL',=lDII,V$**44TYY?K;

(;(;<$$--1DD$B<.QSWY`  # ; " 	!s   E+E-c              #  @  K   t        |t              rt        |d| |       y | j                  rt	        |      rt        |d| |       y t        |      st        |d| |       t        |      sy | j                  d   }t        |t        j                        r7|j                  r+t        |j                  |      D ]  }t        ||| |        t        |      }t        | |||      D ]  }t        |d|z   | |        t        |      }|sy t         j#                  |       }t         j%                  |      }	t'        ||	| j(                        D ]F  }d|v r|dz  }t        |d|z   | |t+        | j,                        d	| z   d
t+        |      z          H y w)Nr   r  r  r   r  r  zhas a default value of typezc. This is often caused by overloads failing to account for explicitly passing in the default value.z
Inferred signature: def rG   )r`   r   rF   r  r  r  r  r   r   	Decoratoris_overloadr  r  r&  r1  rV   r]  r  r  r  r  r&   rL   )
r   r   rP   
first_partr  r%  r9   r  r  r[   s
             r!   verify_overloadedfuncdefr  g  s    
 '7#K!<dGLL )%RTXZabb!'*K!4dGDD  AJ*eoo.:3I3I*:??GDCS$88 E ,K8N/g~{[K!4w!>gNN \ 'w/I//5H229=K$X{$))T(G3(G ')499~+A()LL#i.0
 	
 Us   FFc              #     K   t        |t              r!| j                  dk(  ry t        |d| |       y t        |t              st        |d| |       y y w)N_NTr   zis not a TypeVar)r`   r   r  rF   r   r   s      r!   verify_typevarexprr    s\      '7# 99K!<dGLLgw'K!3T7CC (s   AAc              #     K   t        |t              rt        |d| |       y t        t        dd       t        t
        dd       f}t        d |D              }|rt        ||      st        |d| |       y y w)Nr   	ParamSpecc              3  &   K   | ]	  }||  y wr  r   )r	  r  s     r!   r
  z'verify_paramspecexpr.<locals>.<genexpr>  s     N'<!A'<s   zis not a ParamSpec)r`   r   rF   rU   typingtyping_extensionstuple)r   r   rP   maybe_paramspec_typesparamspec_typess        r!   verify_paramspecexprr    s      '7#K!<dGLLT*!;5 N'<NNO*Wo"FK!5tWEE #Gs   A6A8c              #  p  K   | j                   j                  sJ t        |t              r.t	        | j                   |j
                  t              E d {    y t        |t        j                        r.t	        | j                   |j                   t              E d {    y t        j                  |      ry t        |      }t        | j                   j                  t        j                  j                        r | j                   j                  j                   nd }||t#        ||      ry d y 7 7 w)NzGis inconsistent, cannot reconcile @property on stub with runtime object)r  r  r`   propertyr  fgetr   	functoolscached_propertyrX   isdatadescriptorrN  rL   r   r   CallableTyperet_typerR  )r   r   rU  	func_types       r!   _verify_readonly_propertyr    s     99    '8$'		7<<III'9445'		7<<III( 2':L#-diinndjj>U>U#V		\`  	 !lI6
SS) 	J 	Js&   AD6D2AD6D4BD64D6c              #     K   | j                   t        j                  k(  }t        |dd      }|r|s| j                  rdnd}d| d y y y w)N__isabstractmethod__Fr  methodzis inconsistent, runtime z is abstract but stub is not)abstract_statusr   IS_ABSTRACTrU   r  )r   r   stub_abstractruntime_abstract	item_types        r!   r  r    sX     ((E,=,==Mw(>F"&"2"2J	))4PQQ !.s   A
Ac              #  v   K   | j                   ry t        |dd      s|t        urt        |dd      rd y y y w)Nr   Fz8is decorated with @final at runtime, but not in the stub)r   rU   r   )r   r   r%  s      r!   r  r    s@      }}wU+g%'.+u*UHH +V%s   79c                     t         t        j                        r S  j                  j                  ry	 	 	 	 	 	 d fd} j                  } j
                  D ]  } |||      }| y|} |S )zReturns a FuncItem that corresponds to the output of the decorator.

    Returns None if we can't figure out what that would be. For convenience, this function also
    accepts FuncItems.
    Nc                $   t        | t        j                        rVt        | j                  t        j                        r2| j                  j
                  t        j                  j                  v r|S t        | t        j                        sy | j
                  sy | j
                  dv sL| j
                  t        j                  j                  v s&| j
                  t        j                  j                  v r|S | j
                  dk(  r|j                  d   j                  j                  dvr<t        d|j                  d   j                  j                  dj
                         t        j                  |      }|j                  dd  |_        |S y )N)zbuiltins.staticmethodzabc.abstractmethodzbuiltins.classmethodr   )rZ  mcsmetaclszunexpected class argument name z in ri   )r`   r   CallExprcalleeRefExprr   r   r   DEPRECATED_TYPE_NAMESOVERLOAD_NAMESFINAL_DECORATOR_NAMESr{  r@  r  rC   copy)	decoratorr  rx  decs      r!   apply_decorator_to_funcitemzE_resolve_funcitem_from_decorator.<locals>.apply_decorator_to_funcitem  sA    y%..19++U]];  ))TZZ-M-MMK)U]]3!!"QQ!!TZZ%>%>>!!TZZ%E%EEK!77~~a ))..6OO%5dnnQ6G6P6P6U6U5X Y,,) 
 ))D/CMM!"-CMJ r#   )r  znodes.Expressionr  r  r%   nodes.FuncItem | None)r`   r   FuncItemr  r  original_decorators)r  r  r  r  resulting_funcs   `    r!   r  r    s     #u~~&

xx!#!+9!	!F 88D,,	4YE!	 -
 Kr#   c           	   #    K   | j                   j                  r,t        |t              st	        |d| |t        |              y t        |t              rt	        |d| |       y | j                   j                  rMt        | |      D ]  }t	        ||| |        t        | j                   |      D ]  }t	        ||| |        y t        |       }|t        |||      E d {    y y 7 w)Nr  r   r   )r  r  r`   r   rF   rW   r  r  r  r  r   )r   r   rP   r9   r  s        r!   verify_decoratorr  -  s      yy## '7+Mt*  	'7#K!<dGLLyy0w?GWdG<< @.tyy'BGWdG<< C+D1D$555 5s   C$C/&C-'C/c           	   #    K   t         j                  j                  | j                        }d| }t	        |t
              rt        |d| ||       y t        |      xs |}t	        |t         j                  j                        rt	        |t              st        |d| ||       y |j                  }	 |j                  }t	        |t              rot        |dt              }t	        |t              rN|dk(  s	|dk(  r|d	v rd
}| d| }	t        j                   dt        j"                  |j$                         |	      ry t'        |||      E d {    y t	        |t         j                  j(                        rQ|t*        urHt,        j.                  dk\  rt	        |t        j(                        st        |d| |t        |             y t	        |t         j                  j0                        r&t2        t        |dd      vrt        |d| ||       y t	        |t         j                  j4                        r/|t6        j8                  j:                  urt        |d| ||       y t	        |t         j                  j<                        ry t        |d| ||       y # t        $ r t        |dt              }Y w xY w7 qw)NzType alias for r   r   z&is inconsistent, runtime is not a typer(   r)   zcollections.abcre>   MatchPatternr  rK   z_?r=   
   zis not a Union__mro__r   zis not a subclass of tuplez is not a type alias for Callablezis not a recognised type alias)r   r   r  targetr`   r   rF   r   r  rL   r*   r  rU   r   r&   r  	fullmatchescaper   r   	UnionTyper   r   version_info	TupleTyper  r  collectionsabcCallableAnyType)
r   r   rP   stub_targetrH   runtime_originstub_originruntime_nameruntime_moduleruntime_fullnames
             r!   verify_typealiasr+  M  s~     **,,T[[9K!+/I'7#K!<dGW`aa(3GN+tzz223.$/8#  !&&	H)66L lC(%,^\7%SN.#.!%66"d*|?S/S%-N&4%5Q|n#E <<2bii0D0D&E%F GIYZ
 +~{CCC+tzz334&!!W,GU__1U%5tWPST_P`aa+tzz334	2>>94T]  	+tzz667!9!99?wZc  	+tzz112
=tWXa
bbW  	H">:wGL	H" 	Ds8   B4K7J" BKKEK"K <K?K  K>   r+   __file__r(   __path____spec__
__author__
__cached__
__loader____getattr____package____version____builtins____copyright____annotations____warningregistry__r   >)   __cmp____div__r+   __args____dict____hash__r   	__slots__
__origin__
__reduce__r2  __nonzero____setattr____unicode____weakref____ctype_be____ctype_le____getstate____setstate____reduce_ex____getnewargs____new_member____orig_bases____parameters____pyx_vtable__r7  __firstlineno____getinitargs____subclasshook____instancecheck____subclasscheck____protocol_attrs____text_signature____abstractmethods____dataclass_fields____dataclass_params____vectorcalloffset____static_attributes____ctypes_from_outparam____non_callable_proto_members____callable_proto_members_only__r  c                @    | j                  d      xr t        |        S )Nr  )r  r   r  s    r!   r   r     s    ??37	$$77r#   c                    t        | t        j                  t        j                  f      xsN t        | t        j                  t        j
                  f      xs" t        j                  |       xr t        |       S r  )	r`   r   FunctionTypeBuiltinFunctionType
MethodTypeBuiltinMethodTyperX   ismethoddescriptorr  r   s    r!   r  r    sa    7U//1J1JKL 	Gg 0 0%2I2IJK	G&&w/EHW4Er#   c                B    t        | t              xr | j                  d u S r  )r`   r  fsetrf  s    r!   r  r    s    gx(AW\\T-AAr#   c                "   	 	 t        j                  |       S # t        $ r t        | d      rd| j                  v r| j                  j                  dd      }t        j                  t         j                  | |      }t        |t         j                        sJ |j                  j                         D cg c](  }|j                  du r|j                  t              n|* nc c}w }}|j                  |      cY S  w xY w# t        $ r Y y w xY w)NrU  r1   r>   .)rK  )r  )rX   r  
ValueErrorr   rU  replace_signature_fromstrr]  r`   r  rv  rK  r2   r   )r   r  	parameter
new_paramss       r!   rV   rV     s   	$$W-- 	!56'7+E+EE 00889LeT001B1BGSQ!#w'8'8999 &)^^%:%:%< &=	 %,,3 "))/)B&' &=
  {{j{99)	*  
 s4    BC?4-C"!C?;D =C??D 	DDc                   |rdnd d|  S )Nzasync rg   r  r   )r  rO   s     r!   rZ   rZ     s    "h+4	{;;r#   c                   t         j                  j                  |       } t         j                  j                  |      }t        | t         j                  j                        rIt        | j
                  t              r/| j
                  dv r!t         j                  j                  |d      ryt        |t         j                  j                        r!t         j                  j                  | d      ryt         j                  j                  j                  d      5  t         j                  j                  | |      cddd       S # 1 sw Y   yxY w)z2Checks whether ``left`` is a subtype of ``right``.)r   ri   zbuiltins.boolTzbuiltins.dictN)r   r   r  r`   LiteralTyper  r  r   TypedDictTyper  r  subtypes
is_subtype)leftrights     r!   rR  rR    s    ::%%d+DJJ&&u-E4//0tzz3'JJ& JJ((@ %112tzz7S7So8 				-	-d	3}}''e4 
4	3	3s    EEc                X   | t         j                  j                         S t        | t              rydd}t        | t        j
                  t        j                  t        j                  t        j                  f      rt        d      }|J |j                  d   j                  }t        |t        j                        sJ t         j                  j                  | |       g      }t        |       }|rJg }g }g }|j                   j#                         D ]%  }	|j%                   |              |j%                  |	j&                  t(        j*                  j,                  k(  rdn|	j.                         |	j0                  t(        j*                  j2                  k(  }
|	j&                  t(        j*                  j,                  k(  r2|j%                  |
rt        j4                  nt        j6                         |	j&                  t(        j*                  j8                  k(  r3|j%                  |
rt        j4                  nt        j6                         8|	j&                  t(        j*                  j:                  k(  r3|j%                  |
rt        j<                  nt        j>                         |	j&                  t(        j*                  j@                  k(  r!|j%                  t        jB                         |	j&                  t(        j*                  jD                  k(  r!|j%                  t        jF                         "tH         n2 |        |       g}t        jB                  t        jF                  g}ddg}t         j                  jK                  ||| |       |d      S t        tM        |       jN                        }|ytM        |       jP                  }||j                  vry|j                  |   j                  }t        |t        jR                        r|jL                  S t        |t        j                        syt        | tT              rv| D cg c]  }tW        |       }}|D cg c]  }||n |        }}t         j                  j                  | |       g      }t         j                  jY                  ||      S t         j                  j                  ||jZ                  D cg c]	  } |        c}      }t        | t\        j^                        r't        | j.                  t`              r| j.                  }n<t        | tb              rte        |       }n t        | tf        th        t`        f      r| }n|S t         j                  jk                  ||      S c c}w c c}w c c}w )	zReturns a mypy type object representing the type of ``runtime``.

    Returns None if we can't find something that works.

    Nc                     t         j                  j                  t         j                  j                  j                        S r  )r   r   r$  	TypeOfAnyunannotatedr   r#   r!   anytypez/get_mypy_type_of_runtime_value.<locals>.anytypeA  s'    zz!!$**"6"6"B"BCCr#   builtinsfunctionT)r  fallbackis_ellipsis_args)r  r~  )r%   zmypy.types.AnyType)6r   r   NoneTyper`   r  ra  rb  rc  rd  rp   r   r   r   TypeInfor  rV   r  rv  r}  rA  rX   rB  rC  r  rK  rL  r  r  r  r  r  r  r  r  r  r  rf  r  rL   r)   r(   r  r  rN  r   	type_varsr   r   r&   bytesr   r   r  rq  )r   r{  r|  	type_infor~  r  	arg_types	arg_kinds	arg_namesrh  rm  r   	type_namevoptional_itemsir   r  r  s                      r!   rN  rN  5  s0    zz""$$'8$D 			U668H8H%JaJab J'###NN:.33	)U^^444::&&y79+>*73	III ++224  +  HH(9(9(I(IIDsxx "kkW->->-D-DD88w00@@@$$kU]]u}}UXX!2!2!H!HH$$kU]]u}}UXX!2!2!?!??$$U__I\I\]XX!2!2!A!AA$$U^^4XX!2!2!>!>>$$U__5((# 5& !GI.I9ItIzz&&Y! ' 
 	
 DM,,-D|W&&I

"

9%**I)UYY'~~i0'5!ELMW8;WM>LMnq}!')3nM::&&y79+>zz##E844zz""9)BUBU.VBUQwyBU.VWH '499%*W\\3*G	GU	#,W5	GdC-	.::!!!AA# NM /Ws   V(V"*V'
zdict[str, nodes.MypyFile]
_all_stubsc           	     &   t         j                  j                         }t         j                  j	                  g ||      }t         j                  j                  |d|      }g g }| D ]  }j                  |       |sS|j                  |      }t        |t              s8|j                  t         j                  j                  ||d             i|j                  |      }	|j                  |	       j                  fd|	D               	 t        |      }
j                  fdt        j                  |
j                   |
j"                  dz         D                |ra	 t         j                  j                  ||      }|j(                  r't-        dd	j/                  |j(                        z         |j0                  aS # t$        $ r  t&        $ r Y rw xY w# t         j(                  j*                  $ r}t-        d|       |d}~ww xY w)
a  Uses mypy to construct stub objects for the given modules.

    This sets global state that ``get_stub`` can access.

    Returns all modules we might want to check. If ``find_submodules`` is False, this is equal
    to ``modules``.

    :param modules: List of modules to build stubs for.
    :param options: Mypy options for finding and building stubs.
    :param find_submodules: Whether to attempt to find submodules of the given modules as well.

    N)fscacheoptionsc              3  T   K   | ]  }|j                   vs|j                    ! y wr  module)r	  r4  all_moduless     r!   r
  zbuild_stubs.<locals>.<genexpr>  s"     ^A!((R]B]qxxs   ((c              3  R   K   | ]  }|j                   vr|j                      y wr  r_  )r	  r   r  s     r!   r
  zbuild_stubs.<locals>.<genexpr>  s)      #\vv[0 FF\s   $'rK   )sourcesr  zfailed mypy compile:
zmypy build errors:
rl   )r   builddefault_data_dirmodulefindercompute_search_pathsFindModuleCacher}  find_moduler`   r&   BuildSourcefind_modules_recursiveextendr   pkgutilwalk_packagesr-  r(   r   r   errorsCompileErrorrC   rQ   filesr  )r   r  find_submodulesdata_dirsearch_pathfind_module_cacher  r  module_pathfound_sourcesr   resr   r  s                @r!   build_stubsr    s    zz**,H##88WhOK))99T7 :  KG6"+77?Kk3/NN4,,88fdST-DDVLMNN=)^^^
.v6"" #$2273C3CWEUEUX[E[\# ! 4 	G**""7G"DC ::!"8499SZZ;P"PQQ YY
! %    {{'' 	G!$:1#">?QF	Gs+   AG$!G GGH<HHc                ,    t         j                  |       S )z?Returns a stub object for the given module, if we've built one.)r  r   r  s    r!   rp   rp     s    >>&!!r#   c                   t         j                  j                  |       t        j                  dd dfd}| rt        |       }n*t        t         j                  j                               dz  }|dz  }t               }|j                  d      D ]r  }|j                  dk(  r|j                  }d	j                  |j                  |      j                  dd
 |j                  fz         } ||      sb|j                  |       t |S )zJReturns a list of stdlib modules in typeshed (for current Python version).Nr   r  c                    J | j                  d      }t        t        |      dd      D ]6  }dj                  |d |       }|v s|   \  }}|k\  xr |d u xs |k  c S  y)NrK   r   r   F)r   ranger?   rQ   )r  partsr  current_moduleminvermaxverstdlib_py_versionsr  s         r!   exists_in_versionz6get_typeshed_stdlib_modules.<locals>.exists_in_version  s    '''S!s5z1b)A XXeBQi0N!33!3N!C#v-\6T>3[\U[E[\	 *
 r#   typeshedstdlibz*.pyir^   rK   r   )r  r&   r%   r   )r   r  load_stdlib_py_versionsr   r  r   r  r  r   rglobstemparentrQ   relative_tor  add)	custom_typeshed_dirr  r  typeshed_dir
stdlib_dirr   rq   r  r  s	    `      @r!   get_typeshed_stdlib_modulesr    s     **BBCVW''!, /0DJJ779:ZG(JG  )99
";;D$**:6<<SbATYYLPQV$KK * Nr#   c                    t         j                  dk\  rt         j                  } nt        t         j                        } t        t              }t        j                         D ]Y  }t        |j                  t        j                  j                        s2||j                     j                  |j                         [ |j                         D ]@  \  }}dt!        |j"                        j$                  vs(ddh|z  s0| j'                  |       B t               }| D ]  }|t(        v r	 t+        |      }|j                  |       	 |j.                  }|j0                  }	t        j4                  ||	dz         D ]N  }
|
j                  }|j7                  d      s|j9                  d      r2	 t+        |       |j                  |       P  |S # t,        $ r Y w xY w# t2        $ r Y w xY w# t:        $ r  t<        $ r Y w xY w)z0Return all importable stdlib modules at runtime.r  zsite-packages_queuequeuerK   z	.__main__)zidlelib.ztest.)r   r  stdlib_module_namesr   builtin_module_namesr   r  iter_modulesr`   module_finderr   	machinery
FileFinderr  r  r   r   rq   r  r   ANNOYING_STDLIB_MODULESr   ImportErrorr-  r(   r  r  r  r  r   r   )all_stdlib_modulesmodules_by_finderr   findermodule_groupimportable_stdlib_modulesr   r   runtime_pathr(  	submodulesubmodule_names               r!   get_importable_stdlib_modulesr    s    7" 44 !9!9:S^_bSc%%'A!//9+>+>+I+IJ!!//266qvv> ( %6$;$;$= FLtFKK'8'>'>> w',6")),7 %> +.%)11	7*;7G &))+6	"++L"++L !..|\C=OPI&^^N &&{3~7P7P%8 
>$^4 *--n=; Q% *b %$W  		  		0 %  ! s6   )GG*G*	GG	G'&G'*G?>G?c              #     K   dd}t        |       5 }|D ]  } ||      }|s|  	 d d d        y # 1 sw Y   y xY ww)Nc                    	 | d | j                  d       j                         S # t        $ r | j                         cY S w xY w)N#)r  r   rj  )r4  s    r!   strip_commentsz-get_allowlist_entries.<locals>.strip_commentsO  s@    	^qwws|$**,, 	779	s   !$ A A )r4  r&   r%   r&   )r   )allowlist_filer  fro   r   s        r!   get_allowlist_entriesr  N  s>      
n	D"4(E  
		s   ?33	?<?c                      e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded	<   d
ed<   d
ed<   ded<   ded<   ded<   ded<   y)
_Argumentsr   r   r   rw   ignore_missing_stubignore_positional_only	allowlistgenerate_allowlistignore_unused_allowlistr   mypy_config_filer  check_typeshedr&   versionshow_tracebackpdbN)r(   r)   r*   r7  r   r#   r!   r  r  \  sM    M  !!  ##L	Ir#   r  >   thisr   antigravity_ios_supportr  c                X   | j                   D ci c]  }t        |      D ]  }|d  }}}|D ci c]  }|t        j                  |       }}t	               }| j
                  }| j                  rY| j
                  rt        t        ddd      d       yt        | j                        }t               }	t        ||	z  t        z
        }|st        t        ddd      d       yt               }
d|
_        | j                  |
_
        |
j                  r.t         j"                  j%                  |
j                        |
_        | j(                  |
_        ||
_        | j.                  |
_        | j0                  |
_        |
j*                  r9dd	}t3        |
||
j*                  t4        j6                  t4        j8                         dd
}dd}|
j;                  |       |
j=                  ||       	 t?        ||
| j                         }d}d}|D ]  }tC        |      D ]  }| jD                  r|jG                         r | jH                  r|jK                         r=|jL                  |v rd||jL                  <   [d}|D ])  }||   jO                  |jL                        s"d||<   d} n |rd}| jP                  r|jS                  |jL                         t        |jU                  | jV                               |dz  }  | jX                  s7|D ]2  }||   r	||   jO                  d      rd}|dz  }t        d|        4 | jP                  rt        |      D ]  }t        |        d}|S | jV                  sr|rAt        t        d| dt[        |       dt]        |       dt[        |       d	dd             |S t        t        dt]        |       dt[        |       dd             |S c c}}w c c}w # t@        $ r%}t        t        ddd      d|        Y d}~yd}~ww xY w)z.This is stubtest! It's time to test the stubs!Ferror:rj   Trk   z7cannot pass both --check-typeshed and a list of modulesri   zno modules to checkc                      y r  r   r   r#   r!   set_strict_flagsz$test_stubs.<locals>.set_strict_flags  s    r#   c                ^    t        t        ddd      |        t        j                  d       y )Nr  rj   Trk   ri   )printr;   r   exitr  s    r!   error_callbackz"test_stubs.<locals>.error_callback  s     fXU6<r#   c                4    t        t        ddd      |        y )Nzwarning:yellowTrk   )r  r;   r  s    r!   warning_callbackz$test_stubs.<locals>.warning_callback  s    fZxd;SAr#   )r  )r  r  )r  znot checking stubs due to Nr   )rw   rg   znote: unused allowlist entry zFound z errorz
 (checked z moduleru  zSuccess: no issues found in greenr  )r  r&   r%   ztyping.NoReturn)r  r&   r%   r   )/r  r  r  compiler   r   r  r  r;   r  r  r  r   r  r   incrementalr   rq   abspathabs_custom_typeshed_dirr  config_fileuse_builtins_fixturesr  r  r   r   stdoutstderrprocess_error_codesprocess_incomplete_featuresr  rC   r   r  ra   r  rc   rR   r  r  r  r   rw   r  r   r?   )r8  r  r  r   r  allowlist_regexesgenerated_allowlistr   typeshed_modulesruntime_modulesr  r  r  r  stubtest_failure	exit_codeerror_countr  erroris_allowlistedr   r   s                         r!   
test_stubsr  r  s<    #nn,N*>:E 	u: 	,  
 @IIye

5 11yI %llG<<xu48I 6t7O7OP79*_<@WWXfXU68MNiGG"&":":G""*,''//':U:U*V'//G$9G!!00G((GK	 	'#3W5H5H#**VYV`V`aB ~>''%8H ( gwDDWDW@WX IK (E''E,A,A,C**u/O/O/Q  I-/3	%++,"N$Q'11%2C2CD#'IaL%)N	 
  I&&#''(9(9:%'''=>1K1 ) 8 ''A Q<(9!(<(F(Fr(J	q 5aS9:  +,A!H -	( ' \\[M0E/F Wghw6G5HK	"  23w<.QXHYGZ[! 
 Jh  85t4()9(:;	
 s"   O0O6/O; ;	P)P$$P)c                   t        j                  d      }|j                  ddd       |j                  ddd	
       |j                  ddd
       |j                  ddd
       |j                  ddddg d       |j                  dddd
       |j                  dddd
       |j                  ddd       |j                  ddd        |j                  d!dd"
       |j                  d#d$d%t        j                  j
                  z   &       |j                  d'dd(
       |j                  d)d*dd+
       |j                  | t               ,      S )-Nz8Compares stubs to objects introspected from the runtime.)r]   r   r   zModules to test)nargshelpz	--concise
store_truez8Makes stubtest's output more concise, one line per error)actionr  z--ignore-missing-stubzAIgnore errors for stub missing things that are present at runtimez--ignore-positional-onlyzLIgnore errors for whether an argument should or shouldn't be positional-onlyz--allowlistz--whitelistr}  FILEzUse file as an allowlist. Can be passed multiple times to combine multiple allowlists. Allowlists can be created with --generate-allowlist. Allowlists support regular expressions.)r  metavarrK  r  z--generate-allowlistz--generate-whitelistz:Print an allowlist (to stdout) to be used with --allowlistz--ignore-unused-allowlistz--ignore-unused-whitelistzIgnore unused allowlist entriesz--mypy-config-filezFUse specified mypy config file to determine mypy plugins and mypy path)r  r  z--custom-typeshed-dirDIRzUse the custom typeshed in DIRz--check-typeshedz$Check all stdlib modules in typeshedz	--versionr  z	%(prog)s )r  r  z--pdbzInvoke pdb on fatal errorz--show-tracebackz--tbzShow traceback on fatal error)	namespace)argparseArgumentParseradd_argumentr   r  r4  
parse_argsr  )r8  parsers     r!   parse_optionsr    s   $$NF 	3DE
G  
 P  
 "[  
 +   I	   ##.	   V  
 5U   <6\   I{T\\=U=U/U   ;VW
F<>]   TZ\::r#   c                     t         j                  j                  d       t        t	        t
        j                  dd              S )Nstubtestri   )r   utilcheck_python_versionr  r  r   argvr   r#   r!   mainr!  :  s.    II"":.mCHHQRL122r#   r   )r9   r&   r:   r
   r%   r&   )r9   r&   r@   r  r%   r&   )r   r&   r%   r   )r   r&   r%   Iterator[Error])r   r   r   r   rP   r   r%   r"  )rP   r   r   nodes.MypyFiler   set[str]r%   r"  )r   r   r%   zsymtable.SymbolTable | None)r   r#  r   zMaybeMissing[types.ModuleType]rP   r   r%   r"  )r   nodes.TypeInfor   	type[Any]rP   r   r%   r"  )
r   r%  r   r&  rP   r   r  r   r%   r"  )r   r%  r   zMaybeMissing[type[Any]]rP   r   r%   r"  )rP   r   r%   r   )
r   znodes.FuncBaser   r
   r%  r   rP   r   r%   Iterator[str])rD  nodes.ArgumentrE  inspect.ParameterrF  r&   r%   r'  )rD  r(  rE  r)  r%   r'  )r  r&   r8  list[nodes.Argument]r%   r*  )r   r  r   r  rF  r&   r%   r'  )rh  r)  r%   r   )r   r  r   r   rP   r   r%   r"  )r   r   r   r   rP   r   r%   r"  )r   z	nodes.Varr   r   rP   r   r%   r"  )r   r  r   r   rP   r   r%   r"  )r   znodes.TypeVarExprr   r   rP   r   r%   r"  )r   znodes.ParamSpecExprr   r   rP   r   r%   r"  )r   nodes.Decoratorr   r
   r%   r'  )r   nodes.FuncDefr   r
   r%   r'  )r   r,  r   r
   r%  r   r%   r'  )r  znodes.OverloadPartr%   r  )r   r+  r   r   rP   r   r%   r"  )r   znodes.TypeAliasr   r   rP   r   r%   r"  )r  r&   r%   r   )r   r
   r%   r   )r   r7  r%   r   )r   r
   r%   zinspect.Signature | None)r  r  rO   r   r%   r&   )ru  mypy.types.Typerv  r-  r%   r   )r   r
   r%   zmypy.types.Type | Noner   )r   r   r  r   r  r   r%   r   )r  r&   r%   znodes.MypyFile | Noner  )r  r   r  ztuple[int, int] | Noner%   r$  )r%   r$  )r  r&   r%   r'  )r8  r  r  r   r%   r  )r8  r   r%   r  )r%   r  )r+   
__future__r   r  collections.abcr!  r
  r   r  r   importlib.machineryrX   r   r  r  r   r   r   r   r  r  r   r   
contextlibr   r   r   pathlibr   r	   r
   r   r   r   r   r   r   
mypy.buildr   mypy.modulefinder
mypy.nodes
mypy.state
mypy.typesmypy.versionr   mypy.config_parserr   mypy.evalexprr   r   mypy.optionsr   	mypy.utilr   r   r   r   r   r   r7  r,   r-   r/   r2   r  r   r3   r;   rA   r   rC   rF   r   r   r   r   	lru_cacher   registerr   r   r   r  r  r#  r&  r1  rH  rX  r[  r]  r  r  r  r  r  r  r  OverloadedFuncDefr  TypeVarExprr  ParamSpecExprr  r  r  r  r  r  r  	TypeAliasr+  	frozensetr   r  r   r  r  rV   rZ   rR  rN  r  r  rp   r  r  r  r  r  r  r  r!  r(   r  r   r#   r!   <module>rD     s   #         	  	  
      # 7 $  F F 6        0 6   W W  $+9	  ,CL,1!W*,=) =# # ,;+<( < '5SZZU&S
# S/	i 	i ib	5p G
"G->GMVGG G"0FN:  "  \L
\L#A\LPY\L\L !\L~$

$
#,$
;D$
$
N#
##,#;D#_c##L  JS
JS#:JSIRJSJS !JSZ
:
:#&:8I:Xa:::""+<"MP""J88+<88ve
 ePiV
#iV.JiV[^iViVX  :

:
#4:
CL:
:
 !:
z F
F-F<EFF F (
(/(>G(( (V (()<

!<
,=<
LU<
<
 *<
~ ""#
&7FO $ $$%
(9HQ & T4RI
I"%I7HII4n !6
6$56DM66 "6> !Dc
Dc$5DcDMDcDc "DcX 3<3 / , 4=464 0 6r8BB<5.]BJ )+
% *:z" MQ#3IDJ%Z " 4=74 0 
CL?;D3
 zCHHTV r#   