
    %^gA                    2   U d 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
 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mZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- dd
l.m/Z/ ddl0m1Z1 ddl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z= ddl>m?Z? dZ@deAd<   dZBdeAd<   dZCdeAd<   dZDdeAd<   dZEdeAd<   g dZFdeAd<    G d de/      ZG	 	 d(	 	 	 	 	 	 	 	 	 	 	 d)dZHd*dZId+dZJ G d d e:eK         ZLd+d!ZM G d" d#eL      ZNd+d$ZOd+d%ZPd,d&ZQd-d'ZRy).z?Utilities for calculating and reporting statistics about types.    )annotationsN)Counter)contextmanager)FinalIterator)nodes)map_formals_to_actuals)AssignmentExprAssignmentStmt	BreakStmt	BytesExprCallExprClassDefComparisonExprComplexExprContinueStmtEllipsisExpr
ExpressionExpressionStmt	FloatExprFuncDefImport	ImportAll
ImportFrom	IndexExprIntExpr
MemberExprMypyFileNameExprNodeOpExprPassStmtRefExprStrExprTypeApplication	UnaryExprYieldFromExpr)TraverserVisitor)collect_all_inner_types)AnyTypeCallableTypeFunctionLikeInstance	TupleTypeType	TypeOfAny	TypeQueryTypeVarTypeget_proper_typeget_proper_types)correct_relative_importr   
TYPE_EMPTY   TYPE_UNANALYZED   TYPE_PRECISE   TYPE_IMPRECISE   TYPE_ANY)empty
unanalyzedprecise	impreciseanyprecision_namesc                      e Zd Z	 	 	 d'	 	 	 	 	 	 	 	 	 	 	 	 	 d(dZd) fdZd*dZd+dZd,dZd-dZd. fdZ	e
d/d       Zd0d	Zd1d
Zd2 fdZd3 fdZd4 fdZd5dZd6dZd7dZd8 fdZd9dZd:dZd:dZd;dZd< fdZd= fdZd> fdZd? fdZd@ fdZdA fdZdBdZdCdZ dDdZ!dEdZ"dFd Z#dGd!Z$dHd"Z%dId#Z&dJd$Z'dKd%Z(dLd&Z) xZ*S )MStatisticsVisitorc                t   || _         || _        || _        || _        || _        || _        d| _        d| _        d| _        d| _	        d| _
        d| _        d| _        d| _        d| _        d| _        d| _        i | _        t%               | _        i | _        dg| _        g | _        t/        j0                  |        y )Nr   T)inferredfilenamemodulestypemap	all_nodesvisit_untyped_defsnum_precise_exprsnum_imprecise_exprsnum_any_exprsnum_simple_typesnum_generic_typesnum_tuple_typesnum_function_typesnum_typevar_typesnum_complex_typesnum_any_typeslineline_mapr   type_of_any_counterany_line_mapchecked_scopesoutputr(   __init__)selfrI   rJ   rK   rL   rM   rN   s          *lib/python3.12/site-packages/mypy/stats.pyr_   zStatisticsVisitor.__init__G   s     ! ""4!"#$  !!" "#!"!"	(*18 68  $f!#!!$'    c                T    || _         |j                  | _        t        |   |       y N)cur_mod_nodefullname
cur_mod_idsupervisit_mypy_filer`   o	__class__s     ra   ri   z!StatisticsVisitor.visit_mypy_filet   s#    **"rb   c                &    | j                  |       y rd   process_importr`   imps     ra   visit_import_fromz#StatisticsVisitor.visit_import_fromy       C rb   c                &    | j                  |       y rd   rn   rp   s     ra   visit_import_allz"StatisticsVisitor.visit_import_all|   rs   rb   c                   t        | j                  |j                  |j                  | j                  j                               \  }}|r|| j                  v rt        }nt        }| j                  |j                  |       y rd   )r5   rg   relativeidre   is_package_init_filerK   r:   r>   record_linerY   )r`   rq   	import_idokkinds        ra   ro   z StatisticsVisitor.process_import   sb    /OOS\\36643D3D3Y3Y3[
	2 )t||+DD4(rb   c                     t         fd|j                  D              rt        }nt        } j	                  |j
                  |       y )Nc              3  @   K   | ]  \  }}|j                   v   y wrd   )rK   ).0rx   _r`   s      ra   	<genexpr>z1StatisticsVisitor.visit_import.<locals>.<genexpr>   s     7web!rT\\!ws   )allidsr:   r>   rz   rY   )r`   rq   r}   s   `  ra   visit_importzStatisticsVisitor.visit_import   s3    7sww77DD4(rb   c                   | j                  |      5  |j                  | _        t        |j                        dkD  r|j                  |gt        |j                        z  k7  r|||j                  v r9t	        dj                  | j                  |j                               	 d d d        y |j                  D ]%  }t        |t              sJ | j                  |       ' n|j                  rt        |j                  t              sJ |j                  }|j                  }|j                  r#|j                  d   dk(  r| j                  s|dd  }|D ]  }| j                  |        | j                  |j                         n,| j                   r | j#                  | j                  t$               |j'                         r| j(                  rt*        | %  |       d d d        y # 1 sw Y   y xY w)Nr7   z3{}:{}: ERROR: cycle in function expansion; skippingr   r`   )enter_scoperY   lenexpandedprintformatrJ   
isinstancer   visit_func_deftyper+   	arg_types	arg_namesrI   ret_typerM   rz   r>   
is_dynamicrN   rh   )r`   rk   defnsigr   argrl   s         ra   r   z StatisticsVisitor.visit_func_def   sp   a DI1::"qzzaS3qzz?5J'J

?MTT MM166
  !  JJD%dG444''- ' 66%affl;;;&&C #I}}q)9V)CDMM$-abM	(		#  )IIcll+^^$$TYY9||~)@)@G*1-5 !  s   BG"*D/G""G+c              #     K   | j                   j                  |j                  d uxr | j                   d          d  | j                   j                          y wNrH   )r]   appendr   popr`   rk   s     ra   r   zStatisticsVisitor.enter_scope   sJ     ""166#5#Q$:M:Mb:QR
!s   AAc                     | j                   d   S r   )r]   )r`   s    ra   is_checked_scopez"StatisticsVisitor.is_checked_scope   s    ""2&&rb   c                    | j                  |j                  t               |j                  D ]  }|j	                  |         |j
                  j	                  |        y rd   )rz   rY   r:   
decoratorsacceptdefs)r`   rk   ds      ra   visit_class_defz!StatisticsVisitor.visit_class_def   sA    .
 AHHTN 	drb   c                    |j                   | _         |j                  D ]  }| j                  |        t        |   |       y rd   )rY   typesr   rh   visit_type_application)r`   rk   trl   s      ra   r   z(StatisticsVisitor.visit_type_application   s4    FF	AIIaL &q)rb   c                   |j                   | _         t        |j                  t        j                        r/t        |j                  j
                  t        j                        ry |j                  r7| j                  |j                         |j                  j                  |        y | j                  r| j                  s|j                  D ]  }t        |t        j                        r|j                  }n|g}|D ]W  }t        |t              s|j                  s!| j                   .| j                  | j                   j#                  |             Y  t$        | M  |       y rd   )rY   r   rvaluer   r   analyzedTypeVarExprr   r   rI   rM   lvalues	TupleExpritemsr#   is_inferred_defrL   getrh   visit_assignment_stmt)r`   rk   lvaluer   itemrl   s        ra   r   z'StatisticsVisitor.visit_assignment_stmt   s    FF	ahh/JHHu005
 66 IIaffHHOOD!]]4>>))feoo6"LLE#HE!D!$0T5I5I<<3 IIdll&6&6t&<= " $ 	%a(rb   c                    t        |j                  t        t        f      r!| j	                  |j
                  t               y t        | !  |       y rd   )	r   exprr$   r   rz   rY   r6   rh   visit_expression_stmtrj   s     ra   r   z'StatisticsVisitor.visit_expression_stmt   s7    affw	23QVVZ0G)!,rb   c                &    | j                  |       y rd   record_precise_if_checked_scoper   s     ra   visit_pass_stmtz!StatisticsVisitor.visit_pass_stmt       ,,Q/rb   c                &    | j                  |       y rd   r   r   s     ra   visit_break_stmtz"StatisticsVisitor.visit_break_stmt   r   rb   c                &    | j                  |       y rd   r   r   s     ra   visit_continue_stmtz%StatisticsVisitor.visit_continue_stmt   r   rb   c                    |j                   dv r| j                  |       y | j                  |       t        |   |       y )N)zbuiltins.Nonezbuiltins.Truezbuiltins.Falsezbuiltins.Ellipsis)rf   r   process_noderh   visit_name_exprrj   s     ra   r   z!StatisticsVisitor.visit_name_expr   s9    ::bb003a G#A&rb   c                T    |j                   r|j                   j                  |        y y rd   )r   r   r   s     ra   visit_yield_from_exprz'StatisticsVisitor.visit_yield_from_expr   s    66FFMM$ rb   c                   | j                  |       |j                  r|j                  j                  |        y |j                  j                  |        |j                  D ]  }|j                  |         | j                  |       y rd   )r   r   r   calleeargsrecord_call_target_precision)r`   rk   as      ra   visit_call_exprz!StatisticsVisitor.visit_call_expr   s`    !::JJd#HHOOD!VV --a0rb   c                    | j                   r|j                  | j                   vryt        | j                   |j                           }t        |t              r| j                  ||       yy)z9Record precision of formal argument types used in a call.N)rL   r   r3   r   r+    record_callable_target_precision)r`   rk   callee_types      ra   r   z.StatisticsVisitor.record_call_target_precision  sO    ||qxxt||;%dll188&<=k<011![Arb   c                   | j                   sJ | j                   t        j                  j                  |j                  |j                  fd      }|D ]~  }|D ]w  }t	        |j
                  |         }t        |t              r!| j                  j                  t               Lt        |      sX| j                  j                  t               y  y)aJ  Record imprecision caused by callee argument types.

        This only considers arguments passed in a call expression. Arguments
        with default values that aren't provided in a call arguably don't
        contribute to typing imprecision at the *call site* (but they
        contribute at the function definition).
        c                (    j                   |       S rd   )r   )nrk   rL   s    ra   <lambda>zDStatisticsVisitor.record_callable_target_precision.<locals>.<lambda>  s    gaffQi(rb   N)rL   r	   	arg_kindsr   r3   r   r   r*   rz   rY   r>   is_impreciser<   )r`   rk   r   actual_to_formalformalsr   formalrL   s    `     @ra   r   z2StatisticsVisitor.record_callable_target_precision  s     |||,,1KKKK(
 (G()9)9!)<=fg.$$QVVX6!&)$$QVV^<  (rb   c                F    | j                  |       t        | 	  |       y rd   )r   rh   visit_member_exprrj   s     ra   r   z#StatisticsVisitor.visit_member_expr)  s    !!!$rb   c                F    | j                  |       t        | 	  |       y rd   )r   rh   visit_op_exprrj   s     ra   r   zStatisticsVisitor.visit_op_expr-  s    !a rb   c                F    | j                  |       t        | 	  |       y rd   )r   rh   visit_comparison_exprrj   s     ra   r   z'StatisticsVisitor.visit_comparison_expr1      !%a(rb   c                F    | j                  |       t        | 	  |       y rd   )r   rh   visit_index_exprrj   s     ra   r   z"StatisticsVisitor.visit_index_expr5      ! #rb   c                F    | j                  |       t        | 	  |       y rd   )r   rh   visit_assignment_exprrj   s     ra   r   z'StatisticsVisitor.visit_assignment_expr9  r   rb   c                F    | j                  |       t        | 	  |       y rd   )r   rh   visit_unary_exprrj   s     ra   r   z"StatisticsVisitor.visit_unary_expr=  r   rb   c                &    | j                  |       y rd   r   r   s     ra   visit_str_exprz StatisticsVisitor.visit_str_exprA  r   rb   c                &    | j                  |       y rd   r   r   s     ra   visit_bytes_exprz"StatisticsVisitor.visit_bytes_exprD  r   rb   c                &    | j                  |       y rd   r   r   s     ra   visit_int_exprz StatisticsVisitor.visit_int_exprG  r   rb   c                &    | j                  |       y rd   r   r   s     ra   visit_float_exprz"StatisticsVisitor.visit_float_exprJ  r   rb   c                &    | j                  |       y rd   r   r   s     ra   visit_complex_exprz$StatisticsVisitor.visit_complex_exprM  r   rb   c                &    | j                  |       y rd   r   r   s     ra   visit_ellipsisz StatisticsVisitor.visit_ellipsisP  r   rb   c                    | j                   rI| j                  <|j                  | _        | j                  | j                  j	                  |             y y y rd   )rM   rL   rY   r   r   )r`   nodes     ra   r   zStatisticsVisitor.process_nodeU  sC    >>||' II			$,,**401 ( rb   c                    t        |t              r!| j                  r|| j                  vrt        }n| j	                         rt
        }nt        }| j                  |j                  |       y rd   )	r   r   rL   r8   r   r:   r>   rz   rY   )r`   r   r}   s      ra   r   z1StatisticsVisitor.record_precise_if_checked_scope[  sL    dJ'DLLT=U"D""$DDD)rb   c                   t        |      }|s!| j                  | j                  t               y t	        |t
              r,t        |      r!| j                  | j                  t               y t	        |t
              rT| j                  d| j                  z         | xj                  dz  c_	        | j                  | j                  t               n| j                  st        |      s| j                  r_t        |      rT| j                  d| j                  z         | xj                  dz  c_        | j                  | j                  t               n5| xj                   dz  c_        | j                  | j                  t               t#        t%        |            |gz   D ]  }t	        |t
              rt'        |      }t        |      r+| j(                  |j*                  xx   dz  cc<   | xj,                  dz  c_        | j                  | j.                  v r)| j.                  | j                     j1                  |       |g| j.                  | j                  <   t	        |t2              rm|j4                  rJt7        d |j4                  D              r| xj8                  dz  c_        | xj:                  dz  c_        #| xj<                  dz  c_        :t	        |t>              r| xj@                  dz  c_         at	        |tB              rJt7        d |jD                  D              r| xj8                  dz  c_        | xjF                  dz  c_#        t	        |tH              s| xjJ                  dz  c_%         y )Nz  !! Any type around line %dr7   z"  !! Imprecise type around line %dc              3  2   K   | ]  }t        |        y wrd   
is_complex)r   r   s     ra   r   z)StatisticsVisitor.type.<locals>.<genexpr>  s     ?hs:c?h   c              3  2   K   | ]  }t        |        y wrd   r   )r   r   s     ra   r   z)StatisticsVisitor.type.<locals>.<genexpr>  s     >IDz$'Ir   )&r3   rz   rY   r8   r   r*   is_special_form_anyr:   logrQ   r>   rM   r   is_imprecise2rP   r<   rO   r4   r)   get_original_anyr[   type_of_anyrX   r\   r   r-   r   rC   rW   rS   rR   r,   rU   r.   r   rT   r2   rV   )r`   r   typs      ra   r   zStatisticsVisitor.typed  s   A TYY8a!&9!&<TYY5a!HH3dii?@!#TYY1..\!_$..][\M]HH9DIIEF$$)$TYY7""a'"TYY5#$;A$>?1#EC#w'&s+&s+((9Q>9""a'"99 1 11%%dii077<475D%%dii0C*88?chh??..!3...!3.))Q.)C.''1,'C+>CII>>**a/*((A-(C-&&!+&7 Frb   c                :    | j                   j                  |       y rd   )r^   r   )r`   strings     ra   r   zStatisticsVisitor.log  s    6"rb   c                r    t        || j                  j                  |t                    | j                  |<   y rd   )maxrZ   r   r6   )r`   rY   	precisions      ra   rz   zStatisticsVisitor.record_line  s(    !)T]]->->tZ-PQdrb   )NFT)rI   boolrJ   strrK   dict[str, MypyFile]rL   dict[Expression, Type] | NonerM   r  rN   r  returnNone)rk   r   r  r	  )rq   r   r  r	  )rq   r   r  r	  )rq   zImportFrom | ImportAllr  r	  )rq   r   r  r	  )rk   r   r  r	  )rk   r   r  zIterator[None])r  r  )rk   r   r  r	  )rk   r%   r  r	  )rk   r   r  r	  )rk   r   r  r	  )rk   r"   r  r	  )rk   r   r  r	  )rk   r   r  r	  )rk   r   r  r	  )rk   r'   r  r	  )rk   r   r  r	  )rk   r   r   r+   r  r	  )rk   r   r  r	  )rk   r!   r  r	  )rk   r   r  r	  )rk   r   r  r	  )rk   r
   r  r	  )rk   r&   r  r	  )rk   r$   r  r	  )rk   r   r  r	  )rk   r   r  r	  )rk   r   r  r	  )rk   r   r  r	  )rk   r   r  r	  )r   r   r  r	  )r   r    r  r	  )r   zType | Noner  r	  )r   r  r  r	  )rY   intr  r
  r  r	  )+__name__
__module____qualname__r_   ri   rr   ru   ro   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   r   r   r   r   rz   __classcell__rl   s   @ra   rF   rF   F   s"    26#'+(+( +( %	+(
 /+( +( !+( 
+(Z#
!!)).: " "
'*)4-000' 1	=2%!)$)$000000
2*6,p#Rrb   rF   c                   t        |      ry t        |       t        || j                  ||      }| j	                  |       |j
                  D ]  }t        |        t        d       t        d|j                         t        d|j                         t        d|j                         t        d       t        d|j                         t        d|j                         t        d	|j                         t        d
|j                         t        d|j                         t        d|j                         t        d|j                         y )N)rJ   rK   rL   z  ** precision **z  precise  z  imprecisez  any      z  ** kinds **z  simple   z  generic  z  function z  tuple    z  TypeVar  z  complex  )is_special_moduler   rF   rf   r   r^   rO   rP   rQ   rR   rS   rU   rT   rV   rW   rX   )treepathrK   rI   rL   visitorrY   s          ra   dump_type_statsr    s     	$K4=='[bcGKKd 	
	-223	-445	-../	/	-112	-223	-334	-001	-223	-223	-../rb   c                D    t         j                  j                  |       dv S )N)zabc.pyiz
typing.pyizbuiltins.pyi)osr  basename)r  s    ra   r  r    s    77D!%NNNrb   c                4    | j                  t                     S rd   )r   HasAnyQueryr   s    ra   r   r     s    88KM""rb   c                  (     e Zd Zd fdZddZ xZS )r  c                ,    t         |   t               y rd   )rh   r_   rC   )r`   rl   s    ra   r_   zHasAnyQuery.__init__  s    rb   c                    t        |       S rd   )r   r`   r   s     ra   	visit_anyzHasAnyQuery.visit_any  s    &q)))rb   )r  r	  r   r*   r  r  )r  r  r  r_   r   r  r  s   @ra   r  r    s    *rb   r  c                4    | j                  t                     S rd   )r   HasAnyQuery2r  s    ra   r   r     s    88LN##rb   c                      e Zd ZddZy)r#  c                     y)NF r  s     ra   visit_callable_typez HasAnyQuery2.visit_callable_type  s     rb   N)r   r+   r  r  )r  r  r  r'  r&  rb   ra   r#  r#    s    rb   r#  c                f    t        |       } t        | t              xr t        | j                        S rd   )r3   r   r-   r  r   r  s    ra   
is_genericr)    s&    Aa"3tAFF|3rb   c                h    t        |       } t        |       xs t        | t        t        t
        f      S rd   )r3   r)  r   r,   r.   r2   r  s    ra   r   r     s)    Aa=QJq<K*PQQrb   c                N    t        |       j                  t        j                  k(  S rd   )r   r   r0   special_formr  s    ra   r   r     s    A**i.D.DDDrb   c                    | j                   t        j                  k(  rC| j                  sJ | j                  j                   t        j                  k7  sJ | j                  } | S rd   )r   r0   from_another_any
source_anyr  s    ra   r   r     sL    }}	222|||||''9+E+EEEELLHrb   )FN)r  r   r  r  rK   r  rI   r  rL   r  r  r	  )r  r  r  r  )r   r/   r  r  r!  )r   r*   r  r*   )S__doc__
__future__r   r  collectionsr   
contextlibr   typingr   r   mypyr   mypy.argmapr	   
mypy.nodesr
   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'   mypy.traverserr(   mypy.typeanalr)   
mypy.typesr*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   	mypy.utilr5   r6   __annotations__r8   r:   r<   r>   rD   rF   r  r  r   r  r  r   r#  r)  r   r   r   r&  rb   ra   <module>r=     s<   E " 	  % "  .       @ , 1    .
E  e  % O OZR( ZRB -10
0
0 !0 	0
 +0 
08O#*)D/ *$; 4
R
Erb   