Ë
    pPêj=&  ã                  óÜ   — d Z ddlmZ ddlmZ ddlmZmZ ddlm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z  ddl!m"Z" ddl#m$Z$ ddl%m&Z& dd	„Z' G d
„ de"e«      Z(y)aH  Strip/reset AST in-place to match state after semantic analyzer pre-analysis.

Fine-grained incremental mode reruns semantic analysis main pass
and type checking for *existing* AST nodes (targets) when changes are
propagated using fine-grained dependencies.  AST nodes attributes are
sometimes changed during semantic analysis main pass, and running
semantic analysis again on those nodes would produce incorrect
results, since this pass isn't idempotent. This pass resets AST
nodes to reflect the state after semantic pre-analysis, so that we
can rerun semantic analysis.
(The above is in contrast to behavior with modules that have source code
changes, for which we re-parse the entire module and reconstruct a fresh
AST. No stripping is required in this case. Both modes of operation should
have the same outcome.)
Notes:
* This is currently pretty fragile, as we must carefully undo whatever
  changes can be made in semantic analysis main pass, including changes
  to symbol tables.
* We reuse existing AST nodes because it makes it relatively straightforward
  to reprocess only a single target within a module efficiently. If there
  was a way to parse a single target within a file, in time proportional to
  the size of the target, we'd rather create fresh AST nodes than strip them.
  (This is possible only in Python 3.8+)
* Currently we don't actually reset all changes, but only those known to affect
  non-idempotent semantic analysis behavior.
  TODO: It would be more principled and less fragile to reset everything
      changed in semantic analysis main pass and later.
* Reprocessing may recreate AST nodes (such as Var nodes, and TypeInfo nodes
  created with assignment statements) that will get different identities from
  the original AST. Thus running an AST merge is necessary after stripping,
  even though some identities are preserved.
é    )Úannotations)ÚIterator)ÚcontextmanagerÚnullcontext)ÚCLASSDEF_NO_INFOÚAssignmentStmtÚBlockÚCallExprÚClassDefÚ	DecoratorÚForStmtÚFuncDefÚ	ImportAllÚ
ImportFromÚ	IndexExprÚListExprÚ
MemberExprÚMypyFileÚNameExprÚNodeÚOpExprÚOverloadedFuncDefÚRefExprÚSplittingVisitorÚStarExprÚ	SuperExprÚ	TupleExprÚTypeInfo)ÚTraverserVisitor)ÚCallableType)Ú
type_statec                ó~   — t        «       }t        | t        «      r|j                  | «       y| j	                  |«       y)zvReset a fine-grained incremental target to state before semantic analysis.

    Args:
        node: node to strip
    N)ÚNodeStripVisitorÚ
isinstancer   Ústrip_file_top_levelÚaccept)ÚnodeÚvisitors     úY/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/mypy/server/aststrip.pyÚstrip_targetr*   F   s0   € ô Ó €GÜ�$œÔ!Ø×$Ñ$ TÕ*à�‰�GÕó    c                  óü   ‡ — e Zd Zdd„Zdd„Zdˆ fd„Zdˆ fd„Zdˆ fd„Zdd„Zdˆ fd„Z	dˆ fd„Z
dd	„Zdd
„Zd ˆ fd„Zd!d„Zd"ˆ fd„Zd#ˆ fd„Zd$ˆ fd„Zd%d„Zd&ˆ fd„Zd'ˆ fd„Zd(d„Zed)d„«       Zed)d„«       Zˆ xZS )*r#   c                ó.   — d | _         d| _        d| _        y )NFT)ÚtypeÚis_class_bodyÚrecurse_into_functions)Úselfs    r)   Ú__init__zNodeStripVisitor.__init__T   s   € à%)ˆŒ	à"ˆÔØ&*ˆÕ#r+   c                óÊ   — d| _         |j                  j                  «        |j                  | «       |j                  j                  «       D ]  }d|vsŒ|j                  |= Œ y)z:Strip a module top-level (don't recursive into functions).Fú@N)r0   Úplugin_depsÚclearr&   ÚnamesÚcopy)r1   Ú	file_nodeÚnames      r)   r%   z%NodeStripVisitor.strip_file_top_level[   s[   € à&+ˆÔ#Ø×Ñ×#Ñ#Ô%Ø×Ñ˜ÔØ—O‘O×(Ñ(Ó*ò 	*ˆDð ˜$ŠØ—O‘O DÑ)ñ		*r+   c                ó>   •— |j                   ry t        ‰| �	  |«       y ©N)Úis_unreachableÚsuperÚvisit_block)r1   ÚbÚ	__class__s     €r)   r?   zNodeStripVisitor.visit_blockf   s   ø€ Ø×ÒØÜ‰Ñ˜AÕr+   c                óÊ  •— |j                   j                  j                  «       D �ch c]  }|j                  sŒ|j                  ’Œ }}g |_        |j                  j                  |j                  «       g |_        |j                  j                  D �cg c]  }||vr|‘Œ
 c}|j                  _
        | j                  |j                   «      5  t        ‰| �5  |«       ddd«       |j                  j                  j                  |j                  «       g |_        t        j                   |j                   «       t"        |_         d|_        yc c}w c c}w # 1 sw Y   Œ{xY w)z8Strip class body and type info, but don't strip methods.N)Úinfor7   ÚvaluesÚplugin_generatedr'   Ú	type_varsÚbase_type_exprsÚextendÚremoved_base_type_exprsÚdefsÚbodyÚenter_classr>   Úvisit_class_defÚremoved_statementsr!   Úreset_subtype_caches_forr   Úanalyzed)r1   r'   ÚvÚ	to_deleteÚsrA   s        €r)   rM   z NodeStripVisitor.visit_class_defk   s  ø€ ð &*§Y¡Y§_¡_×%;Ñ%;Ó%=ÖT À×ASÓAS�Q—V“VÐTˆ	ÐTØˆŒØ×Ñ×#Ñ# D×$@Ñ$@ÔAØ')ˆÔ$ð —Y‘Y—^‘^ö
àØ˜	Ñ!ò ò
ˆ�	‰	Œð
 ×Ñ˜dŸi™iÓ(ñ 	*Ü‰GÑ# DÔ)÷	*à�	‰	�‰×Ñ˜d×5Ñ5Ô6Ø"$ˆÔÜ×+Ñ+¨D¯I©IÔ6ä$ˆŒ	Øˆ�ùò! Uùò
÷
	*ð 	*ús   ¨EºEÂEÃEÅE"c                óÎ  •— | j                   s|j                  sy g |_        |j                  |_        |j                  r-t        |j                  t        «      sJ ‚d|j                  _        |j                  r| j                  |j                  «      n	t        «       5  | j                  «       5  t        ‰| �5  |«       d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)N© )r0   Údef_or_infer_varsÚexpandedÚunanalyzed_typer.   r$   r    Ú	variablesrC   Úenter_methodr   Úset_recurse_into_functionsr>   Úvisit_func_def©r1   r'   rA   s     €r)   r\   zNodeStripVisitor.visit_func_def�   sµ   ø€ Ø×*Ò*°4×3IÒ3IØØˆŒØ×(Ñ(ˆŒ	Ø�9Š9ô
 ˜dŸi™i¬Ô6Ð6Ð6Ø"$ˆD�I‰IÔà,0¯IªIˆD×Ñ˜dŸi™iÔ(¼;»=ñ	)à×+Ñ+Ó-ñ	)ô ‰GÑ" 4Ô(÷		)÷ 	)÷ 	)ñ 	)ú÷ 	)ð 	)ús$   ÂCÂ.CÂ>CÃC	ÃCÃC$c                ót  — d |j                   _        |j                  D ]  }|j                  | «       Œ | j                  s|j
                  j                  r5| j                  «       5  |j
                  j                  | «       d d d «       y d|j                   _        d|j
                  _        y # 1 sw Y   y xY w©NF)	Úvarr.   Ú
decoratorsr&   r0   ÚfuncrV   r[   Úis_final)r1   r'   Úexprs      r)   Úvisit_decoratorz NodeStripVisitor.visit_decorator“   s“   € Øˆ�‰ŒØ—O‘Oò 	ˆDØ�K‰K˜Õð	à×&Ò&¨$¯)©)×*EÒ*EØ×0Ñ0Ó2ñ 'Ø—	‘	× Ñ  Ô&÷'ð 'ð
 !&ˆD�H‰HÔØ!&ˆD�I‰IÕ÷'ð 'ús   Á&B.Â.B7c                óú   •— | j                   s|j                  sy |j                  j                  «       |_        d |_        d|_        | j                  «       5  t        ‰| �%  |«       d d d «       y # 1 sw Y   y xY wr_   )
r0   rV   Úunanalyzed_itemsr8   ÚitemsÚimplrc   r[   r>   Úvisit_overloaded_func_defr]   s     €r)   rj   z*NodeStripVisitor.visit_overloaded_func_def    si   ø€ Ø×*Ò*°4×3IÒ3IØà×*Ñ*×/Ñ/Ó1ˆŒ
ØˆŒ	ØˆŒØ×,Ñ,Ó.ñ 	4Ü‰GÑ-¨dÔ3÷	4÷ 	4ñ 	4ús   ÁA1Á1A:c                óÖ   •— |j                   |_        d|_        d|_        | j                  r.| j                  s"|j
                  D ]  }| j                  |«       Œ t        ‰| �!  |«       y r_   )	rX   r.   Úis_final_defÚis_alias_defr/   ÚlvaluesÚprocess_lvalue_in_methodr>   Úvisit_assignment_stmt)r1   r'   ÚlvaluerA   s      €r)   rp   z&NodeStripVisitor.visit_assignment_stmtª   s_   ø€ Ø×(Ñ(ˆŒ	Ø!ˆÔØ!ˆÔØ�9Š9˜T×/Ò/ØŸ,™,ò 6�à×-Ñ-¨fÕ5ð6ô 	‰Ñ% dÕ+r+   c                ó   — g |_         y r<   ©Úassignments©r1   r'   s     r)   Úvisit_import_fromz"NodeStripVisitor.visit_import_from´   ó
   € ØˆÕr+   c                ó   — g |_         y r<   rs   ru   s     r)   Úvisit_import_allz!NodeStripVisitor.visit_import_all·   rw   r+   c                ób   •— |j                   |_        d |_        d |_        t        ‰| �  |«       y r<   )Úunanalyzed_index_typeÚ
index_typeÚinferred_item_typeÚinferred_iterator_typer>   Úvisit_for_stmtr]   s     €r)   r   zNodeStripVisitor.visit_for_stmtº   s-   ø€ Ø×4Ñ4ˆŒØ"&ˆÔØ&*ˆÔ#Ü‰Ñ˜tÕ$r+   c                ó&   — | j                  |«       y r<   )Ústrip_ref_exprru   s     r)   Úvisit_name_exprz NodeStripVisitor.visit_name_exprÀ   s   € Ø×Ñ˜DÕ!r+   c                óF   •— | j                  |«       t        ‰| �	  |«       y r<   )r�   r>   Úvisit_member_exprr]   s     €r)   r„   z"NodeStripVisitor.visit_member_exprÃ   s   ø€ Ø×Ñ˜DÔ!Ü‰Ñ! $Õ'r+   c                ó2   •— d |_         t        ‰| �	  |«       y r<   )rP   r>   Úvisit_index_exprr]   s     €r)   r†   z!NodeStripVisitor.visit_index_exprÇ   s   ø€ ØˆŒÜ‰Ñ  Õ&r+   c                ó2   •— d |_         t        ‰| �	  |«       y r<   )rP   r>   Úvisit_op_exprr]   s     €r)   rˆ   zNodeStripVisitor.visit_op_exprË   s   ø€ ØˆŒÜ‰Ñ˜dÕ#r+   c                óJ   — d |_         d |_        d|_        d|_        d|_        y )NÚ F)Úkindr'   ÚfullnameÚ
is_new_defÚis_inferred_defru   s     r)   r�   zNodeStripVisitor.strip_ref_exprÏ   s&   € ØˆŒ	ØˆŒ	ØˆŒØˆŒØ$ˆÕr+   c                ó2   •— d |_         t        ‰| �	  |«       y r<   )rP   r>   Úvisit_call_exprr]   s     €r)   r�   z NodeStripVisitor.visit_call_exprÖ   s   ø€ ØˆŒÜ‰Ñ Õ%r+   c                ó2   •— d |_         t        ‰| �	  |«       y r<   )rC   r>   Úvisit_super_exprr]   s     €r)   r’   z!NodeStripVisitor.visit_super_exprÚ   s   ø€ ØˆŒ	Ü‰Ñ  Õ&r+   c                ó®  — t        |t        «      r`|j                  rS| j                  €J ‚|j                  | j                  j
                  v r"| j                  j
                  |j                  = y y y t        |t        t        f«      r#|j                  D ]  }| j                  |«       Œ y t        |t        «      r| j                  |j                  «       y y r<   )r$   r   r�   r.   r:   r7   r   r   rh   ro   r   rd   )r1   rq   Úitems      r)   ro   z)NodeStripVisitor.process_lvalue_in_methodÞ   s¬   € Ü�fœjÔ)Ø× Ò ð —y‘yÐ,Ð,Ð,Ø—;‘; $§)¡)§/¡/Ñ1ØŸ	™	Ÿ™¨¯©Ñ4ð 2ð !ô ˜¤¬HÐ 5Ô6ØŸ™ò 4�Ø×-Ñ-¨dÕ3ñ4ä˜¤Ô)Ø×)Ñ)¨&¯+©+Õ6ð *r+   c              #  ó|   K  — | j                   }| j                  }|| _         d| _        d –— || _         || _        y ­w)NT©r.   r/   ©r1   rC   Úold_typeÚold_is_class_bodys       r)   rL   zNodeStripVisitor.enter_classí   s<   è ø€ à—9‘9ˆØ ×.Ñ.ÐØˆŒ	Ø!ˆÔÛØˆŒ	Ø.ˆÕùó   ‚:<c              #  ó|   K  — | j                   }| j                  }|| _         d| _        d –— || _         || _        y ­wr_   r–   r—   s       r)   rZ   zNodeStripVisitor.enter_method÷   s<   è ø€ à—9‘9ˆØ ×.Ñ.ÐØˆŒ	Ø"ˆÔÛØˆŒ	Ø.ˆÕùrš   )ÚreturnÚNone)r9   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œ   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�   )rq   r   rœ   r�   )rC   r   rœ   zIterator[None])Ú__name__Ú
__module__Ú__qualname__r2   r%   r?   rM   r\   re   rj   rp   rv   ry   r   r‚   r„   r†   rˆ   r�   r�   r’   ro   r   rL   rZ   Ú__classcell__)rA   s   @r)   r#   r#   S   sŠ   ø„ ó+ó	*õõ
õ,)ó$'õ4õ,óóõ%ó"õ(õ'õ$ó%õ&õ'ó7ð ò/ó ð/ð ò/ó ô/r+   r#   N)r'   z&MypyFile | FuncDef | OverloadedFuncDefrœ   r�   ))Ú__doc__Ú
__future__r   Úcollections.abcr   Ú
contextlibr   r   Ú
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   Úmypy.traverserr   Ú
mypy.typesr    Úmypy.typestater!   r*   r#   rU   r+   r)   ú<module>rª      s[   ðñõB #å $ß 2÷÷ ÷ ÷ ÷ ÷ ó õ4 ,Ý #Ý %ó
ôl/Ð'Ð)9õ l/r+   