o
    2gA                     @  s  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 de/ZG		d@dAd)d*ZHdBd+d,ZIdCd/d0ZJG d1d2 d2e:eK ZLdCd3d4ZMG d5d6 d6eLZNdCd7d8ZOdCd9d:ZPdDd<d=ZQdEd>d?ZRdS )Fz?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                      s  e Zd Z			ddddZd fddZdddZdddZdddZdd!d"Zd fd$d%Z	e
dd'd(Zdd)d*Zdd,d-Zd fd/d0Zd fd2d3Zd fd5d6Zdd8d9Zdd;d<Zdd>d?Zd fdAdBZddDdEZddGdHZddIdJZddMdNZd fdPdQZd fdSdTZd fdVdWZd fdYdZZd fd\d]Zd fd_d`ZddbdcZddedfZ ddhdiZ!ddkdlZ"ddndoZ#ddqdrZ$ddudvZ%ddxdyZ&dd|d}Z'dddZ(dddZ)  Z*S )StatisticsVisitorNFTinferredboolfilenamestrmodulesdict[str, MypyFile]typemapdict[Expression, Type] | None	all_nodesvisit_untyped_defsreturnNonec                 C  s   || _ || _|| _|| _|| _|| _d| _d| _d| _d| _	d| _
d| _d| _d| _d| _d| _d| _i | _t | _i | _dg| _g | _t|  d S )Nr   T)rE   rG   rI   rK   rM   rN   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__)selfrE   rG   rI   rK   rM   rN    rd   B/home/garg/my-data/venv/lib/python3.10/site-packages/mypy/stats.pyrb   G   s.   	zStatisticsVisitor.__init__or   c                   s   || _ |j| _t | d S N)cur_mod_nodefullname
cur_mod_idsupervisit_mypy_filerc   rf   	__class__rd   re   rl   t   s   z!StatisticsVisitor.visit_mypy_fileimpr   c                 C     |  | d S rg   process_importrc   rp   rd   rd   re   visit_import_fromy      z#StatisticsVisitor.visit_import_fromr   c                 C  rq   rg   rr   rt   rd   rd   re   visit_import_all|   rv   z"StatisticsVisitor.visit_import_allImportFrom | ImportAllc                 C  sH   t | j|j|j| j \}}|r|| jv rt}nt}| 	|j
| d S rg   )r4   rj   relativeidrh   is_package_init_filerI   r9   r=   record_liner\   )rc   rp   	import_idokkindrd   rd   re   rs      s   z StatisticsVisitor.process_importr   c                   s4   t  fdd|jD rt}nt} |j| d S )Nc                 3  s    | ]
\}}| j v V  qd S rg   )rI   ).0rz   _rc   rd   re   	<genexpr>   s    z1StatisticsVisitor.visit_import.<locals>.<genexpr>)allidsr9   r=   r|   r\   )rc   rp   r   rd   r   re   visit_import   s   zStatisticsVisitor.visit_importr   c                   sj  |  | |j| _t|jdkrG|j|gt|j krG||jv r4td| j|j 	 W d    d S |jD ]}t|ts@J | 	| q7nT|j
r|t|j
tsRJ |j
}|j}|jrk|jd dkrk| jsk|dd  }|D ]}| 
| qm| 
|j n
| jr| | jt | r| jrt 	| W d    d S W d    d S W d    d S 1 sw   Y  d S )Nr6   z3{}:{}: ERROR: cycle in function expansion; skippingr   rc   )enter_scoper\   lenexpandedprintformatrG   
isinstancer   visit_func_deftyper*   	arg_types	arg_namesrE   ret_typerM   r|   r=   
is_dynamicrN   rk   )rc   rf   defnsigr   argrn   rd   re   r      sB   $



"z StatisticsVisitor.visit_func_defIterator[None]c                 c  s2    | j |jd uo| j d  d V  | j   d S NrQ   )r`   appendr   poprm   rd   rd   re   r      s   zStatisticsVisitor.enter_scopec                 C  s
   | j d S r   )r`   r   rd   rd   re   is_checked_scope      
z"StatisticsVisitor.is_checked_scoper   c                 C  s4   |  |jt |jD ]}||  q
|j|  d S rg   )r|   r\   r9   
decoratorsacceptdefs)rc   rf   drd   rd   re   visit_class_def   s   
z!StatisticsVisitor.visit_class_defr$   c                   s.   |j | _ |jD ]}| | qt | d S rg   )r\   typesr   rk   visit_type_application)rc   rf   trn   rd   re   r      s   
z(StatisticsVisitor.visit_type_applicationr
   c                   s   |j | _ t|jtjrt|jjtjrd S |jr&| |j |j|  d S | j	rZ| j
sZ|jD ]*}t|tjr;|j}n|g}|D ]}t|trX|jrX| jd urX| | j| q@q/t | d S rg   )r\   r   rvaluer   r   analyzedTypeVarExprr   r   rE   rM   lvalues	TupleExpritemsr"   is_inferred_defrK   getrk   visit_assignment_stmt)rc   rf   lvaluer   itemrn   rd   re   r      s*   


z'StatisticsVisitor.visit_assignment_stmtr   c                   s2   t |jttfr| |jt d S t | d S rg   )	r   exprr#   r   r|   r\   r5   rk   visit_expression_stmtrm   rn   rd   re   r      s   z'StatisticsVisitor.visit_expression_stmtr!   c                 C  rq   rg   record_precise_if_checked_scoperm   rd   rd   re   visit_pass_stmt   rv   z!StatisticsVisitor.visit_pass_stmtr   c                 C  rq   rg   r   rm   rd   rd   re   visit_break_stmt   rv   z"StatisticsVisitor.visit_break_stmtr   c                 C  rq   rg   r   rm   rd   rd   re   visit_continue_stmt   rv   z%StatisticsVisitor.visit_continue_stmtr   c                   s2   |j dv r| | d S | | t | d S )N)zbuiltins.Nonezbuiltins.Truezbuiltins.Falsezbuiltins.Ellipsis)ri   r   process_noderk   visit_name_exprrm   rn   rd   re   r      s   

z!StatisticsVisitor.visit_name_exprr&   c                 C  s   |j r|j |  d S d S rg   )r   r   rm   rd   rd   re   visit_yield_from_expr   s   z'StatisticsVisitor.visit_yield_from_exprr   c                 C  sP   |  | |jr|j|  d S |j|  |jD ]}||  q| | d S rg   )r   r   r   calleeargsrecord_call_target_precision)rc   rf   ard   rd   re   visit_call_expr   s   

z!StatisticsVisitor.visit_call_exprc                 C  sF   | j r	|j| j vrdS t| j |j }t|tr | || dS 	 dS )z9Record precision of formal argument types used in a call.N)rK   r   r2   r   r*    record_callable_target_precision)rc   rf   callee_typerd   rd   re   r     s   
z.StatisticsVisitor.record_call_target_precisionr   r*   c                   s   | j sJ | j t j j|j|j fdd}|D ]&}|D ]!}t|j| }t|tr5|  j	t
 qt|r@|  j	t qqdS )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                   s    j |   S rg   )r   )nrf   rK   rd   re   <lambda>  s    zDStatisticsVisitor.record_callable_target_precision.<locals>.<lambda>N)rK   r   	arg_kindsr   r2   r   r   r)   r|   r\   r=   is_impreciser;   )rc   rf   r   actual_to_formalformalsr   formalrd   r   re   r     s&   

z2StatisticsVisitor.record_callable_target_precisionr   c                      |  | t | d S rg   )r   rk   visit_member_exprrm   rn   rd   re   r   )     
z#StatisticsVisitor.visit_member_exprr    c                   r   rg   )r   rk   visit_op_exprrm   rn   rd   re   r   -  r   zStatisticsVisitor.visit_op_exprr   c                   r   rg   )r   rk   visit_comparison_exprrm   rn   rd   re   r   1  r   z'StatisticsVisitor.visit_comparison_exprr   c                   r   rg   )r   rk   visit_index_exprrm   rn   rd   re   r   5  r   z"StatisticsVisitor.visit_index_exprr	   c                   r   rg   )r   rk   visit_assignment_exprrm   rn   rd   re   r   9  r   z'StatisticsVisitor.visit_assignment_exprr%   c                   r   rg   )r   rk   visit_unary_exprrm   rn   rd   re   r   =  r   z"StatisticsVisitor.visit_unary_exprr#   c                 C  rq   rg   r   rm   rd   rd   re   visit_str_exprA  rv   z StatisticsVisitor.visit_str_exprr   c                 C  rq   rg   r   rm   rd   rd   re   visit_bytes_exprD  rv   z"StatisticsVisitor.visit_bytes_exprr   c                 C  rq   rg   r   rm   rd   rd   re   visit_int_exprG  rv   z StatisticsVisitor.visit_int_exprr   c                 C  rq   rg   r   rm   rd   rd   re   visit_float_exprJ  rv   z"StatisticsVisitor.visit_float_exprr   c                 C  rq   rg   r   rm   rd   rd   re   visit_complex_exprM  rv   z$StatisticsVisitor.visit_complex_exprr   c                 C  rq   rg   r   rm   rd   rd   re   visit_ellipsisP  rv   z StatisticsVisitor.visit_ellipsisnoder   c                 C  s6   | j r| jd ur|j| _| | j| d S d S d S rg   )rM   rK   r\   r   r   )rc   r   rd   rd   re   r   U  s   
zStatisticsVisitor.process_noder   c                 C  sD   t |tr| jr|| jvrt}n	|  rt}nt}| |j| d S rg   )	r   r   rK   r7   r   r9   r=   r|   r\   )rc   r   r   rd   rd   re   r   [  s   z1StatisticsVisitor.record_precise_if_checked_scoper   Type | Nonec                 C  s4  t |}|s| | jt d S t|tr!t|r!| | jt d S t|tr=| d| j  |  j	d7  _	| | jt
 n3| jsDt|sK| jrbt|rb| d| j  |  jd7  _| | jt n|  jd7  _| | jt tt||g D ]}t|trt|}t|rqy| j|j  d7  < |  jd7  _| j| jv r| j| j | qy|g| j| j< qyt|tr|jrtdd |jD r|  jd7  _qy|  jd7  _qy|  jd7  _qyt|tr|  j d7  _ qyt|t!r
tdd |j"D r|  jd7  _qy|  j#d7  _#qyt|t$r|  j%d7  _%qyd S )Nz  !! Any type around line %dr6   z"  !! Imprecise type around line %dc                 s      | ]}t |V  qd S rg   
is_complex)r   r   rd   rd   re   r         z)StatisticsVisitor.type.<locals>.<genexpr>c                 s  r   rg   r   )r   r   rd   rd   re   r     r   )&r2   r|   r\   r7   r   r)   is_special_form_anyr9   logrT   r=   rM   r   is_imprecise2rS   r;   rR   r3   r(   get_original_anyr^   type_of_anyr[   r_   r   r,   r   rB   rZ   rV   rU   r+   rX   r-   r   rW   r1   rY   )rc   r   typrd   rd   re   r   d  sV   



zStatisticsVisitor.typestringc                 C  s   | j | d S rg   )ra   r   )rc   r   rd   rd   re   r        zStatisticsVisitor.logr\   int	precisionc                 C  s   t || j|t| j|< d S rg   )maxr]   r   r5   )rc   r\   r   rd   rd   re   r|     s   zStatisticsVisitor.record_line)NFT)rE   rF   rG   rH   rI   rJ   rK   rL   rM   rF   rN   rF   rO   rP   )rf   r   rO   rP   )rp   r   rO   rP   )rp   r   rO   rP   )rp   rx   rO   rP   )rp   r   rO   rP   )rf   r   rO   rP   )rf   r   rO   r   )rO   rF   )rf   r   rO   rP   )rf   r$   rO   rP   )rf   r
   rO   rP   )rf   r   rO   rP   )rf   r!   rO   rP   )rf   r   rO   rP   )rf   r   rO   rP   )rf   r   rO   rP   )rf   r&   rO   rP   )rf   r   rO   rP   )rf   r   r   r*   rO   rP   )rf   r   rO   rP   )rf   r    rO   rP   )rf   r   rO   rP   )rf   r   rO   rP   )rf   r	   rO   rP   )rf   r%   rO   rP   )rf   r#   rO   rP   )rf   r   rO   rP   )rf   r   rO   rP   )rf   r   rO   rP   )rf   r   rO   rP   )rf   r   rO   rP   )r   r   rO   rP   )r   r   rO   rP   )r   r   rO   rP   )r   rH   rO   rP   )r\   r   r   r   rO   rP   )+__name__
__module____qualname__rb   rl   ru   rw   rs   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   r|   __classcell__rd   rd   rn   re   rD   F   sV    -
























	
8rD   Ftreer   pathrH   rI   rJ   rE   rF   rK   rL   rO   rP   c                 C  s   t |rd S t| t|| j||d}| | |jD ]}t| q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 d S )N)rG   rI   rK   z  ** precision **z  precise  z  imprecisez  any      z  ** kinds **z  simple   z  generic  z  function z  tuple    z  TypeVar  z  complex  )is_special_moduler   rD   ri   r   ra   rR   rS   rT   rU   rV   rX   rW   rY   rZ   r[   )r   r   rI   rE   rK   visitorr\   rd   rd   re   dump_type_stats  s&   


r   c                 C  s   t j| dv S )N)zabc.pyiz
typing.pyizbuiltins.pyi)osr   basename)r   rd   rd   re   r     r   r   r   r.   c                 C     |  t S rg   )r   HasAnyQueryr   rd   rd   re   r        r   c                      s(   e Zd Zd
 fddZddd	Z  ZS )r   rO   rP   c                   s   t  t d S rg   )rk   rb   rB   r   rn   rd   re   rb     r   zHasAnyQuery.__init__r   r)   rF   c                 C  s
   t | S rg   )r   rc   r   rd   rd   re   	visit_any  r   zHasAnyQuery.visit_any)rO   rP   r   r)   rO   rF   )r   r   r   rb   r   r   rd   rd   rn   re   r     s    r   c                 C  r   rg   )r   HasAnyQuery2r   rd   rd   re   r     r   r   c                   @  s   e Zd ZdddZdS )	r   r   r*   rO   rF   c                 C  s   dS )NFrd   r   rd   rd   re   visit_callable_type  s   z HasAnyQuery2.visit_callable_typeN)r   r*   rO   rF   )r   r   r   r   rd   rd   rd   re   r     s    r   c                 C  s   t | } t| tot| jS rg   )r2   r   r,   rF   r   r   rd   rd   re   
is_generic  s   r   c                 C  s    t | } t| pt| tttfS rg   )r2   r   r   r+   r-   r1   r   rd   rd   re   r     s   r   r)   c                 C  s   t | jtjkS rg   )r   r   r/   special_formr   rd   rd   re   r     r   r   c                 C  s2   | j tjkr| jsJ | jj tjksJ | j} | S rg   )r   r/   from_another_any
source_anyr   rd   rd   re   r     s
   
r   )FN)r   r   r   rH   rI   rJ   rE   rF   rK   rL   rO   rP   )r   rH   rO   rF   )r   r.   rO   rF   r   )r   r)   rO   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.   r/   r0   r1   r2   r3   	mypy.utilr4   r5   __annotations__r7   r9   r;   r=   rC   rD   r   r   r   rF   r   r   r   r   r   r   r   rd   rd   rd   re   <module>   sD     4  c





