Ë
    pPêjP  ã                  ó  — U d dl 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 d dlm Z  d dl!m"Z" d Z#de$d	<   d
Z%de$d<   dZ&de$d<    G d„ de"«      Z' G d„ de"«      Z(dd„Z)y)é    )Úannotations)ÚIterator)Úcontextmanager)ÚFinal)ÚAssignmentStmtÚBlockÚ	BreakStmtÚClassDefÚContinueStmtÚForStmtÚFuncDefÚImportÚ	ImportAllÚ
ImportFromÚ	IndexExprÚListExprÚLvalueÚ	MatchStmtÚ
MemberExprÚMypyFileÚNameExprÚStarExprÚTryStmtÚ	TupleExprÚ	WhileStmtÚWithStmt)Ú	AsPattern)ÚTraverserVisitorr   ÚFILEé   ÚFUNCTIONé   ÚCLASSc                  óV  ‡ — e Zd ZdZd#d„Zd$d„Zd%d„Zd&ˆ fd„Zd'ˆ fd„Zd(ˆ fd„Z	d)d„Z
d*d	„Zd+d
„Zd,d„Zd-d„Zd.d„Zd/d„Zd0d„Zd1d„Zd2d„Zd3d4d„Zd5d„Zd6d„Zd5d„Zd5d„Zd5d„Zd#d„Zd#d„Zed7d„«       Zed7d„«       Zed7d„«       Zd8d„Z ed9d„«       Z!d8d„Z"d#d „Z#d#d!„Z$d:d"„Z%ˆ xZ&S );ÚVariableRenameVisitora  Rename variables to allow redefinition of variables.

    For example, consider this code:

      x = 0
      f(x)

      x = "a"
      g(x)

    It will be transformed like this:

      x' = 0
      f(x')

      x = "a"
      g(x)

    There will be two independent variables (x' and x) that will have separate
    inferred types. The publicly exposed variant will get the non-suffixed name.
    This is the last definition at module top level and the first definition
    (argument) within a function.

    Renaming only happens for assignments within the same block. Renaming is
    performed before semantic analysis, immediately after parsing.

    The implementation performs a rudimentary static analysis. The analysis is
    overly conservative to keep things simple.
    c                ó‚   — d| _         d| _        d| _        i | _        g | _        g | _        g | _        g | _        g | _        y )Nr   )	Úblock_idÚdisallow_redef_depthÚ
loop_depthÚblock_loop_depthÚblocksÚ
var_blocksÚrefsÚ	num_readsÚscope_kinds©Úselfs    úR/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/mypy/renaming.pyÚ__init__zVariableRenameVisitor.__init__G   sF   € àˆŒà$%ˆÔ!àˆŒà02ˆÔà!#ˆŒà02ˆŒð
 <>ˆŒ	à/1ˆŒà&(ˆÕó    c                ó  — | j                  «        | j                  t        «      5  | j                  «       5  |j                  D ]  }|j                  | «       Œ 	 ddd«       ddd«       y# 1 sw Y   ŒxY w# 1 sw Y   yxY w©z]Rename variables within a file.

        This is the main entry point to this class.
        N)ÚclearÚenter_scoper   Úenter_blockÚdefsÚaccept©r1   Ú	file_nodeÚds      r2   Úvisit_mypy_filez%VariableRenameVisitor.visit_mypy_file^   sn   € ð
 	�
‰
ŒØ×ÑœdÓ#ñ 	 T×%5Ñ%5Ó%7ñ 	Ø—^‘^ò �Ø—‘˜•ñ÷	÷ 	÷ 	ñ 	ú÷ 	ð 	ús"   ¦A8·#A,ÁA8Á,A5	Á1A8Á8Bc                óâ  — | j                  «        | j                  t        «      5  | j                  «       5  |j                  D ]T  }|j
                  j                  }|dk7  }| j                  |j
                  j                  |«       | j                  |«       ŒV |j                  j                  D ]  }|j                  | «       Œ 	 d d d «       d d d «       y # 1 sw Y   ŒxY w# 1 sw Y   y xY w)Nr1   )Ú$reject_redefinition_of_vars_in_scoper8   r!   r9   Ú	argumentsÚvariableÚnameÚrecord_assignmentÚ
handle_argÚbodyr;   )r1   ÚfdefÚargrD   Úcan_be_redefinedÚstmts         r2   Úvisit_func_defz$VariableRenameVisitor.visit_func_defh   sÍ   € ð 	×1Ñ1Ô3à×ÑœhÓ'ñ 
	"¨×)9Ñ)9Ó);ñ 
	"Ø—~‘~ò &�Ø—|‘|×(Ñ(�ð $(¨6¡>Ð Ø×&Ñ& s§|¡|×'8Ñ'8Ð:JÔKØ—‘ Õ%ð&ð Ÿ	™	Ÿ™ò "�Ø—‘˜DÕ!ñ"÷
	"÷ 
	"÷ 
	"ñ 
	"ú÷ 
	"ð 
	"ús#   ¦C%·BCÃC%ÃC"	ÃC%Ã%C.c                ó˜   •— | j                  «        | j                  t        «      5  t        ‰| �  |«       d d d «       y # 1 sw Y   y xY w©N)rA   r8   r#   ÚsuperÚvisit_class_def©r1   ÚcdefÚ	__class__s     €r2   rP   z%VariableRenameVisitor.visit_class_defy   s?   ø€ Ø×1Ñ1Ô3Ø×ÑœeÓ$ñ 	*Ü‰GÑ# DÔ)÷	*÷ 	*ñ 	*ús   §A Á A	c                ón   •— | j                  «       5  t        ‰| �	  |«       d d d «       y # 1 sw Y   y xY wrN   )r9   rO   Úvisit_block)r1   ÚblockrS   s     €r2   rU   z!VariableRenameVisitor.visit_block~   s1   ø€ Ø×ÑÓñ 	'Ü‰GÑ Ô&÷	'÷ 	'ñ 	'úó   ’+«4c                ón   •— | j                  «       5  t        ‰| �	  |«       d d d «       y # 1 sw Y   y xY wrN   )Ú
enter_looprO   Úvisit_while_stmt)r1   rK   rS   s     €r2   rZ   z&VariableRenameVisitor.visit_while_stmt‚   s/   ø€ Ø�_‰_Óñ 	+Ü‰GÑ$ TÔ*÷	+÷ 	+ñ 	+úrW   c                óx  — |j                   j                  | «       | j                  |j                  d«       |j                  j                  | «       | j	                  «       5  |j
                  j                  | «       d d d «       |j                  r|j                  j                  | «       y y # 1 sw Y   Œ2xY w)NT)Úexprr;   Úanalyze_lvalueÚindexrY   rG   Ú	else_body©r1   rK   s     r2   Úvisit_for_stmtz$VariableRenameVisitor.visit_for_stmt†   s‰   € Ø�	‰	×Ñ˜ÔØ×Ñ˜DŸJ™J¨Ô-à�
‰
×Ñ˜$ÔØ�_‰_Óñ 	#Ø�I‰I×Ñ˜TÔ"÷	#à�>Š>Ø�N‰N×!Ñ! $Õ'ð ÷	#ð 	#ús   Á#B0Â0B9c                ó$   — | j                  «        y rN   ©Ú#reject_redefinition_of_vars_in_loopr`   s     r2   Úvisit_break_stmtz&VariableRenameVisitor.visit_break_stmt�   ó   € Ø×0Ñ0Õ2r4   c                ó$   — | j                  «        y rN   rc   r`   s     r2   Úvisit_continue_stmtz)VariableRenameVisitor.visit_continue_stmt“   rf   r4   c                óf  — | j                  «       5  |j                  j                  | «       d d d «       t        |j                  |j
                  |j                  «      D ]h  \  }}}| j                  «       5  |�|j                  | «       |�| j                  |«       |j                  D ]  }|j                  | «       Œ 	 d d d «       Œj |j                  �|j                  j                  | «       |j                  �|j                  j                  | «       y y # 1 sw Y   ŒïxY w# 1 sw Y   ŒÐxY wrN   )Ú	enter_tryrG   r;   ÚzipÚvarsÚtypesÚhandlersr9   Ú
handle_defr_   Úfinally_body)r1   rK   ÚvarÚtpÚhandlerÚss         r2   Úvisit_try_stmtz$VariableRenameVisitor.visit_try_stmt–   s
  € ð �^‰^Óñ 	#Ø�I‰I×Ñ˜TÔ"÷	#ô !$ D§I¡I¨t¯z©z¸4¿=¹=Ó Iò 	#ÑˆC��WØ×!Ñ!Ó#ñ #à�>Ø—I‘I˜d”OØ�?Ø—O‘O CÔ(Ø Ÿ™ò #�AØ—H‘H˜T•Nñ#÷#ð #ð	#ð �>‰>Ð%Ø�N‰N×!Ñ! $Ô'Ø×ÑÐ(Ø×Ñ×$Ñ$ TÕ*ð )÷	#ð 	#ú÷#ð #ús   ‘DÁ7A	D'ÄD$Ä'D0	c                óÈ   — |j                   D ]  }|j                  | «       Œ |j                  D ]  }|€Œ| j                  |«       Œ |j                  j                  | «       y rN   )r\   r;   Útargetr]   rG   )r1   rK   r\   rw   s       r2   Úvisit_with_stmtz%VariableRenameVisitor.visit_with_stmt«   s\   € Ø—I‘Iò 	ˆDØ�K‰K˜Õð	à—k‘kò 	,ˆFØÑ!Ø×#Ñ# FÕ+ð	,ð 	�	‰	×Ñ˜Õr4   c                óX   — |j                   D ]  \  }}| j                  |xs |d«       Œ y ©NF)ÚidsrE   ©r1   ÚimpÚidÚas_ids       r2   Úvisit_importz"VariableRenameVisitor.visit_import¹   s-   € ØŸ™ò 	7‰IˆB�Ø×"Ñ" 5¢;¨B°Õ6ñ	7r4   c                óX   — |j                   D ]  \  }}| j                  |xs |d«       Œ y rz   )ÚnamesrE   r|   s       r2   Úvisit_import_fromz'VariableRenameVisitor.visit_import_from½   s-   € ØŸ™ò 	7‰IˆB�Ø×"Ñ" 5¢;¨B°Õ6ñ	7r4   c                ó~   — |j                   j                  | «       |j                  D ]  }| j                  |«       Œ y rN   )Úrvaluer;   Úlvaluesr]   )r1   rt   Úlvalues      r2   Úvisit_assignment_stmtz+VariableRenameVisitor.visit_assignment_stmtÁ   s3   € Ø	�‰�‰˜ÔØ—i‘iò 	(ˆFØ×Ñ Õ'ñ	(r4   c                óª  — |j                   j                  | «       t        t        |j                  «      «      D ]‹  }| j                  «       5  |j                  |   j                  | «       |j                  |   }|�|j                  | «       |j                  |   j                  D ]  }|j                  | «       Œ 	 d d d «       Œ� y # 1 sw Y   Œ˜xY wrN   )	Úsubjectr;   ÚrangeÚlenÚpatternsr9   ÚguardsÚbodiesrG   )r1   rt   ÚiÚguardrK   s        r2   Úvisit_match_stmtz&VariableRenameVisitor.visit_match_stmtÆ   s´   € Ø	�	‰	×Ñ˜ÔÜ”s˜1Ÿ:™:“Ó'ò 	&ˆAØ×!Ñ!Ó#ñ &Ø—
‘
˜1‘×$Ñ$ TÔ*ØŸ™ ™�ØÐ$Ø—L‘L Ô&àŸH™H Q™K×,Ñ,ò &�DØ—K‘K Õ%ñ&÷&ð &ñ	&÷&ð &ús   ÁA0C	Ã	C	c                óT   — |j                   �| j                  |j                   «       y y rN   )rD   r]   )r1   Úps     r2   Úvisit_capture_patternz+VariableRenameVisitor.visit_capture_patternÒ   s#   € Ø�6‰6ÐØ×Ñ §¡Õ'ð r4   c                óŒ  — t        |t        «      rX|j                  }| j                  |d«      }|r| j	                  |«       n| j                  |«       |r| j                  |«       yyt        |t        t        f«      r%|j                  D ]  }| j                  |d¬«       Œ yt        |t        «      r|j                  j                  | «       yt        |t        «      r7|j                  j                  | «       |j                   j                  | «       yt        |t"        «      r| j                  |j                  |¬«       yy)zÎProcess assignment; in particular, keep track of (re)defined names.

        Args:
            is_nested: True for non-outermost Lvalue in a multiple assignment such as
                "x, y = ..."
        T)Ú	is_nestedN)Ú
isinstancer   rD   rE   ro   Úhandle_refineÚ
handle_refr   r   Úitemsr]   r   r\   r;   r   Úbaser^   r   )r1   r‡   r—   rD   Úis_newÚitems         r2   r]   z$VariableRenameVisitor.analyze_lvalueÖ   s  € ô �fœhÔ'Ø—;‘;ˆDØ×+Ñ+¨D°$Ó7ˆFÙØ—‘ Õ'à×"Ñ" 6Ô*Ùð —‘ Õ'ð ô ˜¤¬9Ð 5Ô6ØŸ™ò :�Ø×#Ñ# D°DÐ#Õ9ñ:ä˜¤
Ô+Ø�K‰K×Ñ˜tÕ$Ü˜¤	Ô*Ø�K‰K×Ñ˜tÔ$Ø�L‰L×Ñ Õ%Ü˜¤Ô)ð ×Ñ §¡°yÐÕAð *r4   c                ó&   — | j                  |«       y rN   )rš   )r1   r\   s     r2   Úvisit_name_exprz%VariableRenameVisitor.visit_name_exprõ   s   € Ø�‰˜Õr4   c                óN   — g g| j                   d   |<   d| j                  d   |<   y)zStore function argument.éÿÿÿÿr   N)r-   r.   ©r1   rD   s     r2   rF   z VariableRenameVisitor.handle_argú   s)   € à!˜dˆ�	‰	�"‰�dÑØ#$ˆ�‰�rÑ˜4Ò r4   c                ó¢   — |j                   }| j                  d   j                  |g «      }|j                  |g«       d| j                  d   |<   y)zStore new name definition.r¢   r   N)rD   r-   Ú
setdefaultÚappendr.   ©r1   r\   rD   r‚   s       r2   ro   z VariableRenameVisitor.handle_defÿ   sF   € à�y‰yˆØ—	‘	˜"‘×(Ñ(¨¨rÓ2ˆØ�‰�d�VÔØ#$ˆ�‰�rÑ˜4Ò r4   c                ó²   — |j                   }|| j                  d   v r:| j                  d   |   }|s|j                  g «       |d   j                  |«       yy)zLStore assignment to an existing name (that replaces previous value, if any).r¢   N)rD   r-   r¦   r§   s       r2   r™   z#VariableRenameVisitor.handle_refine  sS   € à�y‰yˆØ�4—9‘9˜R‘=Ñ Ø—I‘I˜b‘M $Ñ'ˆEÙØ—‘˜RÔ Ø�"‰I×Ñ˜TÕ"ð	 !r4   c                óþ   — |j                   }|| j                  d   v r9| j                  d   |   }|s|j                  g «       |d   j                  |«       | j                  d   }|j	                  |d«      dz   ||<   y)z Store reference to defined name.r¢   r   r    N)rD   r-   r¦   r.   Úget)r1   r\   rD   r‚   r.   s        r2   rš   z VariableRenameVisitor.handle_ref  su   € à�y‰yˆØ�4—9‘9˜R‘=Ñ Ø—I‘I˜b‘M $Ñ'ˆEÙØ—‘˜RÔ Ø�"‰I×Ñ˜TÔ"Ø—N‘N 2Ñ&ˆ	Ø#Ÿ-™-¨¨aÓ0°1Ñ4ˆ	�$Šr4   c                ó  — | j                   d   t        k(  }| j                  d   j                  «       D ]=  }t	        |«      dk(  rŒ|r|dd }n|dd }t        |«      D ]  \  }}t        ||«       Œ Œ? | j                  j                  «        y)zlRename all references within the current scope.

        This will be called at the end of a scope.
        r¢   r    N)r/   r!   r-   ÚvaluesrŒ   Ú	enumerateÚrename_refsÚpop)r1   Úis_funcr-   Ú	to_renamer�   rž   s         r2   Ú
flush_refsz VariableRenameVisitor.flush_refs  s•   € ð
 ×"Ñ" 2Ñ&¬(Ñ2ˆØ—I‘I˜b‘M×(Ñ(Ó*ò 	%ˆDÜ�4‹y˜AŠ~àÙð !  ˜H‘	ð !  "˜I�	Ü$ YÓ/ò %‘��4Ü˜D !Õ$ñ%ð	%ð 	�	‰	�‰�r4   c                ó    — g | _         g | _        y rN   )r+   r,   r0   s    r2   r7   zVariableRenameVisitor.clear2  s   € ØˆŒØˆ�r4   c              #  óB  K  — | xj                   dz  c_         | j                  j                  | j                   «       | j                  | j                  | j                   <   	 d –— | j                  j                  «        y # | j                  j                  «        w xY w­w©Nr    )r'   r+   r¦   r)   r*   r¯   r0   s    r2   r9   z!VariableRenameVisitor.enter_block6  sf   è ø€ à�Š˜Ñ�Ø�‰×Ñ˜4Ÿ=™=Ô)Ø/3¯©ˆ×Ñ˜dŸm™mÑ,ð	Ûà�K‰K�O‰OÕøˆD�K‰K�O‰OÕüs   ‚ABÁ!B  Á%BÂ BÂBc              #  óž   K  — | xj                   dz  c_         	 d –— | xj                   dz  c_         y # | xj                   dz  c_         w xY w­wrµ   )r(   r0   s    r2   rj   zVariableRenameVisitor.enter_try@  sA   è ø€ à×!Ò! QÑ&Õ!ð	+Ûà×%Ò%¨Ñ*Ö%øˆD×%Ò%¨Ñ*Ö%üó   ‚A™3 �A³A
Á
Ac              #  óž   K  — | xj                   dz  c_         	 d –— | xj                   dz  c_         y # | xj                   dz  c_         w xY w­wrµ   )r)   r0   s    r2   rY   z VariableRenameVisitor.enter_loopH  s8   è ø€ à�Š˜1Ñ�ð	!Ûà�OŠO˜qÑ ŽOøˆD�OŠO˜qÑ ŽOür·   c                ó    — | j                   d   S ©Nr¢   )r+   r0   s    r2   Úcurrent_blockz#VariableRenameVisitor.current_blockP  s   € Ø�{‰{˜2‰Ðr4   c              #  óp  K  — | j                   j                  i «       | j                  j                  i «       | j                  j                  i «       | j                  j                  |«       	 d –— | j                  «        | j                   j                  «        | j                  j                  «        | j                  j                  «        y # | j                  «        | j                   j                  «        | j                  j                  «        | j                  j                  «        w xY w­wrN   )r,   r¦   r-   r.   r/   r²   r¯   )r1   Úkinds     r2   r8   z!VariableRenameVisitor.enter_scopeS  sÓ   è ø€ à�‰×Ñ˜rÔ"Ø�	‰	×Ñ˜ÔØ�‰×Ñ˜bÔ!Ø×Ñ×Ñ Ô%ð	#Ûà�O‰OÔØ�O‰O×ÑÔ!Ø�N‰N×ÑÔ Ø×Ñ× Ñ Õ"øð �O‰OÔØ�O‰O×ÑÔ!Ø�N‰N×ÑÔ Ø×Ñ× Ñ Õ"üs    ‚A-D6Á0C Á4AD6ÃA D3Ä3D6c                ó2   — t        | j                  «      dkD  S rµ   )rŒ   r,   r0   s    r2   r—   zVariableRenameVisitor.is_nesteda  s   € Ü�4—?‘?Ó# aÑ'Ð'r4   c                ó:   — | j                   d   }|D ]  }d||<   Œ	 y)a_  Make it impossible to redefine defined variables in the current scope.

        This is used if we encounter a function definition that
        can make it ambiguous which definition is live. Example:

          x = 0

          def f() -> int:
              return x

          x = ''  # Error -- cannot redefine x across function definition
        r¢   N)r,   )r1   r,   Úkeys      r2   rA   z:VariableRenameVisitor.reject_redefinition_of_vars_in_scoped  s*   € ð —_‘_ RÑ(ˆ
Øò 	!ˆCØ ˆJ�sŠOñ	!r4   c                ó®   — | j                   d   }|j                  «       D ]3  \  }}| j                  j                  |«      | j                  k(  sŒ/d||<   Œ5 y)aç  Reject redefinition of variables in the innermost loop.

        If there is an early exit from a loop, there may be ambiguity about which
        value may escape the loop. Example where this matters:

          while f():
              x = 0
              if g():
                  break
              x = ''  # Error -- not a redefinition
          reveal_type(x)  # int

        This method ensures that the second assignment to 'x' doesn't introduce a new
        variable.
        r¢   N)r,   r›   r*   rª   r)   )r1   r,   rÀ   rV   s       r2   rd   z9VariableRenameVisitor.reject_redefinition_of_vars_in_loopu  sT   € ð  —_‘_ RÑ(ˆ
Ø$×*Ñ*Ó,ò 	%‰JˆC�Ø×$Ñ$×(Ñ(¨Ó/°4·?±?ÓBØ"$�
˜3’ñ	%r4   c                óà   — | j                   d   j                  |d«      dk(  ry| j                  dkD  rd}| j                  «       }| j                  d   }||vr|r|||<   yd||<   y||   |k(  ryy)zôRecord assignment to given name and return True if it defines a new variable.

        Args:
            can_be_redefined: If True, allows assignment in the same block to redefine
                this name (if this is a new definition)
        r¢   r   FT)r.   rª   r(   r»   r,   )r1   rD   rJ   rV   r,   s        r2   rE   z'VariableRenameVisitor.record_assignmentŠ  s•   € ð �>‰>˜"Ñ×!Ñ! $¨Ó+¨qÒ0àØ×$Ñ$ qÒ(à$ÐØ×"Ñ"Ó$ˆØ—_‘_ RÑ(ˆ
Ø�zÑ!áð $)�
˜4Ñ ð ð $&�
˜4Ñ ØØ˜Ñ Ò&àð r4   ©ÚreturnÚNone©r=   r   rÄ   rÅ   ©rH   r   rÄ   rÅ   ©rR   r
   rÄ   rÅ   )rV   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Å   )rt   r   rÄ   rÅ   )rt   r   rÄ   rÅ   )r”   r   rÄ   rÅ   )F)r‡   r   r—   ÚboolrÄ   rÅ   ©r\   r   rÄ   rÅ   ©rD   ÚstrrÄ   rÅ   ©rÄ   úIterator[None])rÄ   Úint)r½   rÒ   rÄ   rÑ   )rD   rÏ   rJ   rÌ   rÄ   rÌ   )'Ú__name__Ú
__module__Ú__qualname__Ú__doc__r3   r?   rL   rP   rU   rZ   ra   re   rh   ru   rx   r€   rƒ   rˆ   r’   r•   r]   r    rF   ro   r™   rš   r²   r7   r   r9   rj   rY   r»   r8   r—   rA   rd   rE   Ú__classcell__©rS   s   @r2   r%   r%   (   sê   ø„ ñó<)ó.ó"õ"*õ
'õ+ó(ó3ó3ó+ó*ó7ó7ó(ó

&ó(ôBó>ó
%ó
%ó#ó	5óó0ð òó ðð ò+ó ð+ð ò!ó ð!óð ò#ó ð#ó(ó!ó"%÷*r4   r%   c                  óš   ‡ — e Zd ZdZdd„Zdd„Zdˆ fd„Zdˆ fd„Zdd„Zdd„Z	dd„Z
dd	„Zdd
„Zdd„Zedd„«       Zdd„Zdd„Zdd„Zˆ xZS )ÚLimitedVariableRenameVisitora|  Perform some limited variable renaming in with statements.

    This allows reusing a variable in multiple with statements with
    different types. For example, the two instances of 'x' can have
    incompatible types:

       with C() as x:
           f(x)
       with D() as x:
           g(x)

    The above code gets renamed conceptually into this (not valid Python!):

       with C() as x':
           f(x')
       with D() as x:
           g(x)

    If there's a reference to a variable defined in 'with' outside the
    statement, or if there's any trickiness around variable visibility
    (e.g. function definitions), we give up and won't perform renaming.

    The main use case is to allow binding both readable and writable
    binary files into the same variable. These have different types:

        with open(fnam, 'rb') as f: ...
        with open(fnam, 'wb') as f: ...
    c                ó.   — g | _         g | _        g | _        y rN   )Ú
bound_varsÚskippedr-   r0   s    r2   r3   z%LimitedVariableRenameVisitor.__init__É  s   € ð &(ˆŒð (*ˆŒð <>ˆ�	r4   c                ó”   — | j                  «       5  |j                  D ]  }|j                  | «       Œ 	 ddd«       y# 1 sw Y   yxY wr6   )r8   r:   r;   r<   s      r2   r?   z,LimitedVariableRenameVisitor.visit_mypy_fileÕ  sC   € ð
 ×ÑÓñ 	Ø—^‘^ò �Ø—‘˜•ñ÷	÷ 	ñ 	ús	   ‘#>¾Ac                óú   •— | j                  «        | j                  «       5  |j                  D ]'  }| j                  |j                  j
                  «       Œ) t        ‰| �  |«       d d d «       y # 1 sw Y   y xY wrN   )rA   r8   rB   Úrecord_skippedrC   rD   rO   rL   )r1   rH   rI   rS   s      €r2   rL   z+LimitedVariableRenameVisitor.visit_func_defÞ  sh   ø€ Ø×1Ñ1Ô3Ø×ÑÓñ 	)Ø—~‘~ò 7�Ø×#Ñ# C§L¡L×$5Ñ$5Õ6ð7ä‰GÑ" 4Ô(÷	)÷ 	)ñ 	)ús   ¢AA1Á1A:c                óŽ   •— | j                  «        | j                  «       5  t        ‰| �  |«       d d d «       y # 1 sw Y   y xY wrN   )rA   r8   rO   rP   rQ   s     €r2   rP   z,LimitedVariableRenameVisitor.visit_class_defå  s=   ø€ Ø×1Ñ1Ô3Ø×ÑÓñ 	*Ü‰GÑ# DÔ)÷	*÷ 	*ñ 	*ús	   ¢;»Ac                óÔ  — |j                   D ]  }|j                  | «       Œ t        | j                  «      }|j                  D ]  }|€Œ| j                  |«       Œ |j                  D ]  }|sŒ|j                  | «       Œ |j                  j                  | «       t        | j                  «      |kD  r4| j                  j                  «        t        | j                  «      |kD  rŒ3y y rN   )r\   r;   rŒ   rÜ   rw   r]   rG   r¯   )r1   rK   r\   Úold_lenrw   s        r2   rx   z,LimitedVariableRenameVisitor.visit_with_stmtê  sÂ   € Ø—I‘Iò 	ˆDØ�K‰K˜Õð	ä�d—o‘oÓ&ˆØ—k‘kò 	,ˆFØÑ!Ø×#Ñ# FÕ+ð	,ð —k‘kò 	$ˆFÚØ—‘˜dÕ#ð	$ð 	�	‰	×Ñ˜Ôä�$—/‘/Ó" WÒ,Ø�O‰O×ÑÔ!ô �$—/‘/Ó" WÕ,r4   c                ó¼  — t        |t        «      rt|j                  }|| j                  v r| j	                  |«       y | j
                  d   }||vrg ||<   ||   j                  g «       | j                  j                  |«       y t        |t        t        f«      r#|j                  D ]  }| j                  |«       Œ y t        |t        «      r|j                  j                  | «       y t        |t        «      r7|j                  j                  | «       |j                   j                  | «       y t        |t"        «      r| j                  |j                  «       y y rº   )r˜   r   rD   rÜ   r    r-   r¦   r   r   r›   r]   r   r\   r;   r   rœ   r^   r   )r1   r‡   rD   Úvar_inforž   s        r2   r]   z+LimitedVariableRenameVisitor.analyze_lvalueù  s  € Ü�fœhÔ'Ø—;‘;ˆDØ�t—‘Ñ&à×$Ñ$ VÕ,àŸ9™9 R™=�Ø˜xÑ'Ø%'�H˜T‘NØ˜‘×%Ñ% bÔ)Ø—‘×&Ñ& tÕ,Ü˜¤¬9Ð 5Ô6ØŸ™ò *�Ø×#Ñ# DÕ)ñ*ä˜¤
Ô+Ø�K‰K×Ñ˜tÕ$Ü˜¤	Ô*Ø�K‰K×Ñ˜tÔ$Ø�L‰L×Ñ Õ%Ü˜¤Ô)Ø×Ñ §¡Õ,ð *r4   c                óV   — |j                   D ]  \  }}| j                  |xs |«       Œ y rN   )r{   rà   r|   s       r2   r€   z)LimitedVariableRenameVisitor.visit_import  s+   € àŸ™ò 	-‰IˆB�Ø×Ñ ¢¨Õ,ñ	-r4   c                óV   — |j                   D ]  \  }}| j                  |xs |«       Œ y rN   )r‚   rà   r|   s       r2   rƒ   z.LimitedVariableRenameVisitor.visit_import_from  s+   € àŸ™ò 	-‰IˆB�Ø×Ñ ¢¨Õ,ñ	-r4   c                ó$   — | j                  «        y rN   )rA   )r1   r}   s     r2   Úvisit_import_allz-LimitedVariableRenameVisitor.visit_import_all  s   € à×1Ñ1Õ3r4   c                óÈ   — |j                   }|| j                  v r7t        | j                  «      D ]  }||v sŒ||   d   j	                  |«       Œ  y | j                  |«       y rº   )rD   rÜ   Úreversedr-   r¦   rà   )r1   r\   rD   Úscopes       r2   r    z,LimitedVariableRenameVisitor.visit_name_expr  s\   € Ø�y‰yˆØ�4—?‘?Ñ"ä! $§)¡)Ó,ò 1�Ø˜5’=Ø˜$‘K ‘O×*Ñ*¨4Õ0ñ1ð ×Ñ Õ%r4   c              #  ó°   K  — | j                   j                  t        «       «       | j                  j                  i «       d –— | j	                  «        y ­wrN   )rÝ   r¦   Úsetr-   r²   r0   s    r2   r8   z(LimitedVariableRenameVisitor.enter_scope(  s;   è ø€ à�‰×ÑœC›EÔ"Ø�	‰	×Ñ˜ÔØŠ
Ø�‰Õùs   ‚AAc                ó&   — | j                  d«       y )NÚ*)rà   r0   s    r2   rA   zALimitedVariableRenameVisitor.reject_redefinition_of_vars_in_scope/  s   € Ø×Ñ˜CÕ r4   c                ó@   — | j                   d   j                  |«       y rº   )rÝ   Úaddr£   s     r2   rà   z+LimitedVariableRenameVisitor.record_skipped2  s   € Ø�‰�RÑ×Ñ˜TÕ"r4   c                ó  — | j                   j                  «       }| j                  j                  «       }d|vrP|j                  «       D ]<  \  }}t	        |«      dk  s||v rŒ|d d }t        |«      D ]  \  }}t        ||«       Œ Œ> y y )Nrð   r    r¢   )r-   r¯   rÝ   r›   rŒ   r­   r®   )r1   Úref_dictrÝ   rD   r-   r±   r�   rž   s           r2   r²   z'LimitedVariableRenameVisitor.flush_refs5  s�   € Ø—9‘9—=‘=“?ˆØ—,‘,×"Ñ"Ó$ˆØ�gÑØ&Ÿn™nÓ.ò )‘
��dÜ�t“9 ’> T¨W¡_Øð !  "˜I�	Ü(¨Ó3ò )‘G�A�tÜ  aÕ(ñ)ñ)ð r4   rÃ   rÆ   rÇ   rÈ   rÉ   )r‡   r   rÄ   rÅ   rÊ   rË   )r}   r   rÄ   rÅ   rÍ   rÐ   rÎ   )rÓ   rÔ   rÕ   rÖ   r3   r?   rL   rP   rx   r]   r€   rƒ   ré   r    r   r8   rA   rà   r²   r×   rØ   s   @r2   rÚ   rÚ   «  s]   ø„ ñó:
>óõ)õ*ó
"ó-ó.-ó
-ó
4ó&ð òó ðó!ó#÷)r4   rÚ   c                óT   — | d   j                   }|d|dz   z  z   }| D ]	  }||_         Œ y )Nr   ú'r    )rD   )r‚   r^   rD   Únew_namer\   s        r2   r®   r®   C  s8   € Ø�‰8�=‰=€DØ�c˜U Q™YÑ'Ñ'€HØò ˆØˆ�	ñr4   N)r‚   zlist[NameExpr]r^   rÒ   rÄ   rÅ   )*Ú
__future__r   Úcollections.abcr   Ú
contextlibr   Útypingr   Ú
mypy.nodesr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Úmypy.patternsr   Úmypy.traverserr   r   Ú__annotations__r!   r#   r%   rÚ   r®   © r4   r2   ú<module>r     s{   ðÞ "å $Ý %Ý ÷÷ ÷ ÷ ÷ ÷ õ0 $Ý +ð €€eƒØ€ˆ%Ó Ø€€uÓ ô@Ð,ô @ôFU)Ð#3ô U)ôpr4   