o
    tBhA                     @  s*  U d Z ddlmZ ddl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 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l0m1Z1 ddl2m3Z3 ddl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z? ddl@mAZA dZBdeCd< dZDdeCd< dZEdeCd< dZFdeCd< dZGdeCd< g dZHdeCd< G dd de1ZI		dDdEd*d+ZJdFd,d-ZKdGd0d1ZLG d2d3 d3e<eM ZNdGd4d5ZOG d6d7 d7eNZPdGd8d9ZQdGd:d;ZRdHd=d>ZSdId@dAZTdJdBdCZUdS )Kz?Utilities for calculating and reporting statistics about types.    )annotationsN)Counter)contextmanager)Iteratorcast)Final)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)rF   rH   rJ   rL   rN   rO   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__)selfrF   rH   rJ   rL   rN   rO    re   a/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/mypy/stats.pyrc   I   s.   	zStatisticsVisitor.__init__or   c                   s   || _ |j| _t | d S N)cur_mod_nodefullname
cur_mod_idsupervisit_mypy_filerd   rg   	__class__re   rf   rm   v   s   z!StatisticsVisitor.visit_mypy_fileimpr   c                 C     |  | d S rh   process_importrd   rq   re   re   rf   visit_import_from{      z#StatisticsVisitor.visit_import_fromr   c                 C  rr   rh   rs   ru   re   re   rf   visit_import_all~   rw   z"StatisticsVisitor.visit_import_allImportFrom | ImportAllc                 C  sH   t | j|j|j| j \}}|r|| jv rt}nt}| 	|j
| d S rh   )r5   rk   relativeidri   is_package_init_filerJ   r:   r>   record_liner]   )rd   rq   	import_idokkindre   re   rf   rt      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 rh   )rJ   ).0r{   _rd   re   rf   	<genexpr>   s    z1StatisticsVisitor.visit_import.<locals>.<genexpr>)allidsr:   r>   r}   r]   )rd   rq   r   re   r   rf   visit_import   s   zStatisticsVisitor.visit_importr   c                   sZ  |  | |j| _t|jdkrD|j|gt|j krD||jv r5td| j|  	 W d    d S |jD ]
}| t	t
| q8nO|jrtt	t|j}|j}|jrc|jd dkrc| jsc|dd  }|D ]}| | qe| |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 )Nr7   z3{}:{}: ERROR: cycle in function expansion; skippingr   rd   )enter_scoper]   lenexpandedprintformatrH   get_linevisit_func_defr   r   typer+   	arg_types	arg_namesrF   ret_typerN   r}   r>   
is_dynamicrO   rl   )rd   rg   defnsigr   argro   re   rf   r      s>   $




"z StatisticsVisitor.visit_func_defIterator[None]c                 c  s2    | j |jd uo| j d  d V  | j   d S NrR   )ra   appendr   poprn   re   re   rf   r      s   zStatisticsVisitor.enter_scopec                 C  s
   | j d S r   )ra   r   re   re   rf   is_checked_scope      
z"StatisticsVisitor.is_checked_scoper   c                 C  s4   |  |jt |jD ]}||  q
|j|  d S rh   )r}   r]   r:   
decoratorsacceptdefs)rd   rg   dre   re   rf   visit_class_def   s   
z!StatisticsVisitor.visit_class_defr%   c                   s.   |j | _ |jD ]}| | qt | d S rh   )r]   typesr   rl   visit_type_application)rd   rg   tro   re   rf   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 n4| jrS| j	sS|j
D ]*}t|tjr4|j}n|g}|D ]}t|trQ|jrQ| jd urQ| | j| q9q(t | d S rh   )r]   
isinstancervaluer   r   analyzedTypeVarExprr   rF   rN   lvalues	TupleExpritemsr#   is_inferred_defrL   getrl   visit_assignment_stmt)rd   rg   lvaluer   itemro   re   rf   r      s&   


z'StatisticsVisitor.visit_assignment_stmtr   c                   s2   t |jttfr| |jt d S t | d S rh   )	r   exprr$   r   r}   r]   r6   rl   visit_expression_stmtrn   ro   re   rf   r      s   z'StatisticsVisitor.visit_expression_stmtr"   c                 C  rr   rh   record_precise_if_checked_scopern   re   re   rf   visit_pass_stmt   rw   z!StatisticsVisitor.visit_pass_stmtr   c                 C  rr   rh   r   rn   re   re   rf   visit_break_stmt   rw   z"StatisticsVisitor.visit_break_stmtr   c                 C  rr   rh   r   rn   re   re   rf   visit_continue_stmt   rw   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)rj   r   process_noderl   visit_name_exprrn   ro   re   rf   r      s   

z!StatisticsVisitor.visit_name_exprr'   c                 C  s   |j r|j |  d S d S rh   )r   r   rn   re   re   rf   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 rh   )r   r   r   calleeargsrecord_call_target_precision)rd   rg   are   re   rf   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)rL   r   r3   r   r+    record_callable_target_precision)rd   rg   callee_typere   re   rf   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 rh   )r   )nrg   rL   re   rf   <lambda>  s    zDStatisticsVisitor.record_callable_target_precision.<locals>.<lambda>N)rL   r	   	arg_kindsr   r3   r   r   r*   r}   r]   r>   is_impreciser<   )rd   rg   r   actual_to_formalformalsr   formalre   r   rf   r     s&   

z2StatisticsVisitor.record_callable_target_precisionr   c                      |  | t | d S rh   )r   rl   visit_member_exprrn   ro   re   rf   r   %     
z#StatisticsVisitor.visit_member_exprr!   c                   r   rh   )r   rl   visit_op_exprrn   ro   re   rf   r   )  r   zStatisticsVisitor.visit_op_exprr   c                   r   rh   )r   rl   visit_comparison_exprrn   ro   re   rf   r   -  r   z'StatisticsVisitor.visit_comparison_exprr   c                   r   rh   )r   rl   visit_index_exprrn   ro   re   rf   r   1  r   z"StatisticsVisitor.visit_index_exprr
   c                   r   rh   )r   rl   visit_assignment_exprrn   ro   re   rf   r   5  r   z'StatisticsVisitor.visit_assignment_exprr&   c                   r   rh   )r   rl   visit_unary_exprrn   ro   re   rf   r   9  r   z"StatisticsVisitor.visit_unary_exprr$   c                 C  rr   rh   r   rn   re   re   rf   visit_str_expr=  rw   z StatisticsVisitor.visit_str_exprr   c                 C  rr   rh   r   rn   re   re   rf   visit_bytes_expr@  rw   z"StatisticsVisitor.visit_bytes_exprr   c                 C  rr   rh   r   rn   re   re   rf   visit_int_exprC  rw   z StatisticsVisitor.visit_int_exprr   c                 C  rr   rh   r   rn   re   re   rf   visit_float_exprF  rw   z"StatisticsVisitor.visit_float_exprr   c                 C  rr   rh   r   rn   re   re   rf   visit_complex_exprI  rw   z$StatisticsVisitor.visit_complex_exprr   c                 C  rr   rh   r   rn   re   re   rf   visit_ellipsisL  rw   z StatisticsVisitor.visit_ellipsisnoder   c                 C  s6   | j r| jd ur|j| _| | j| d S d S d S rh   )rN   rL   r]   r   r   )rd   r   re   re   rf   r   Q  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 rh   )	r   r   rL   r8   r   r:   r>   r}   r]   )rd   r   r   re   re   rf   r   W  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 %dr7   z"  !! Imprecise type around line %dc                 s      | ]}t |V  qd S rh   
is_complex)r   r   re   re   rf   r         z)StatisticsVisitor.type.<locals>.<genexpr>c                 s  r   rh   r   )r   r   re   re   rf   r     r   )&r3   r}   r]   r8   r   r*   is_special_form_anyr:   logrU   r>   rN   r   is_imprecise2rT   r<   rS   r4   r)   get_original_anyr_   type_of_anyr\   r`   r   r-   r   rC   r[   rW   rV   r,   rY   r.   r   rX   r2   rZ   )rd   r   typre   re   rf   r   `  sV   



zStatisticsVisitor.typestringc                 C  s   | j | d S rh   )rb   r   )rd   r   re   re   rf   r        zStatisticsVisitor.logr]   int	precisionc                 C  s   t || j|t| j|< d S rh   )maxr^   r   r6   )rd   r]   r   re   re   rf   r}     s   zStatisticsVisitor.record_line)NFT)rF   rG   rH   rI   rJ   rK   rL   rM   rN   rG   rO   rG   rP   rQ   )rg   r   rP   rQ   )rq   r   rP   rQ   )rq   r   rP   rQ   )rq   ry   rP   rQ   )rq   r   rP   rQ   )rg   r   rP   rQ   )rg   r   rP   r   )rP   rG   )rg   r   rP   rQ   )rg   r%   rP   rQ   )rg   r   rP   rQ   )rg   r   rP   rQ   )rg   r"   rP   rQ   )rg   r   rP   rQ   )rg   r   rP   rQ   )rg   r   rP   rQ   )rg   r'   rP   rQ   )rg   r   rP   rQ   )rg   r   r   r+   rP   rQ   )rg   r   rP   rQ   )rg   r!   rP   rQ   )rg   r   rP   rQ   )rg   r   rP   rQ   )rg   r
   rP   rQ   )rg   r&   rP   rQ   )rg   r$   rP   rQ   )rg   r   rP   rQ   )rg   r   rP   rQ   )rg   r   rP   rQ   )rg   r   rP   rQ   )rg   r   rP   rQ   )r   r   rP   rQ   )r   r    rP   rQ   )r   r   rP   rQ   )r   rI   rP   rQ   )r]   r   r   r   rP   rQ   )+__name__
__module____qualname__rc   rm   rv   rx   rt   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__re   re   ro   rf   rE   H   sV    -
























	
8rE   Ftreer   pathrI   rJ   rK   rF   rG   rL   rM   rP   rQ   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)rH   rJ   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   rE   rj   r   rb   rS   rT   rU   rV   rW   rY   rX   rZ   r[   r\   )r   r   rJ   rF   rL   visitorr]   re   re   rf   dump_type_stats  s&   


r   c                 C  s   t j| dv S )N)zabc.pyiz
typing.pyizbuiltins.pyi)osr   basename)r   re   re   rf   r     r   r   r   r/   c                 C     |  t S rh   )r   HasAnyQueryr   re   re   rf   r        r   c                      s(   e Zd Zd
 fddZddd	Z  ZS )r   rP   rQ   c                   s   t  t d S rh   )rl   rc   rC   r   ro   re   rf   rc     r   zHasAnyQuery.__init__r   r*   rG   c                 C  s
   t | S rh   )r   rd   r   re   re   rf   	visit_any  r   zHasAnyQuery.visit_any)rP   rQ   r   r*   rP   rG   )r   r   r   rc   r   r   re   re   ro   rf   r     s    r   c                 C  r   rh   )r   HasAnyQuery2r   re   re   rf   r     r   r   c                   @  s   e Zd ZdddZdS )	r   r   r+   rP   rG   c                 C  s   dS )NFre   r   re   re   rf   visit_callable_type  s   z HasAnyQuery2.visit_callable_typeN)r   r+   rP   rG   )r   r   r   r   re   re   re   rf   r     s    r   c                 C  s   t | } t| tot| jS rh   )r3   r   r-   rG   r   r   re   re   rf   
is_generic  s   r   c                 C  s    t | } t| pt| tttfS rh   )r3   r   r   r,   r.   r2   r   re   re   rf   r     s   r   dirc                 C  s   t j| st |  d S d S rh   )r   r   existsmakedirs)r   re   re   rf   ensure_dir_exists  s   r  r*   c                 C  s   t | jtjkS rh   )r   r   r0   special_formr   re   re   rf   r     r   r   c                 C  s2   | j tjkr| jsJ | jj tjksJ | j} | S rh   )r   r0   from_another_any
source_anyr   re   re   rf   r     s
   
r   )FN)r   r   r   rI   rJ   rK   rF   rG   rL   rM   rP   rQ   )r   rI   rP   rG   )r   r/   rP   rG   )r   rI   rP   rQ   r   )r   r*   rP   r*   )V__doc__
__future__r   r   typingcollectionsr   
contextlibr   r   r   typing_extensionsr   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   rE   r   r   r   rG   r   r   r   r   r   r  r   r   re   re   re   rf   <module>   sJ     4  ]






