Ë
    pPêjÖ  ã                  ó–   — d 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 ddlmZ ddlmZmZmZ ddlmZ  G d„ de«      Zy	)
z#Block/import reachability analysis.é    )Úannotations)Ú
AssertStmtÚAssignmentStmtÚBlockÚClassDefÚExpressionStmtÚForStmtÚFuncDefÚIfStmtÚImportÚ	ImportAllÚ
ImportFromÚ	MatchStmtÚMypyFileÚ
ReturnStmt)ÚOptions)Úassert_will_always_failÚ"infer_reachability_of_if_statementÚ%infer_reachability_of_match_statement)ÚTraverserVisitorc                  ó˜   ‡ — e Zd Z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	dd„Z
dˆ fd	„Zdd
„Zdd„Zdd„Zdd„Zdd„Zˆ xZS )ÚSemanticAnalyzerPreAnalysisa–  Analyze reachability of blocks and imports and other local things.

    This runs before semantic analysis, so names have not been bound. Imports are
    also not resolved yet, so we can only access the current module.

    This determines static reachability of blocks and imports due to version and
    platform checks, among others.

    The main entry point is 'visit_file'.

    Reachability of imports needs to be determined very early in the build since
    this affects which modules will ultimately be processed.

    Consider this example:

      import sys

      def do_stuff() -> None:
          if sys.version_info >= (3, 11):
              import xyz  # Only available in Python 3.11+
              xyz.whatever()
          ...

    The block containing 'import xyz' is unreachable in Python 3.10 mode. The import
    shouldn't be processed in Python 3.10 mode, even if the module happens to exist.
    c           
     ó  — |j                   | _         || _        || _        || _        d| _        t        «       | _        t        |j                  «      D �]  \  }}|j                  | «       t        |t        «      sŒ)t        ||«      sŒ6|t        |j                  «      dz
  k  rl|j                  |dz      |j                  d   }}|j                  �?| xj                  t        t        |j                   |j                  dz   «      «      z  c_        |j"                  D �cg c]6  }|j                   |j$                  f|j                   |j$                  fk  sŒ5|‘Œ8 c}|_        |j                  dz   d …=  n | j                  |_        y c c}w )NTé   éÿÿÿÿ)ÚplatformÚ
cur_mod_idÚcur_mod_nodeÚoptionsÚis_global_scopeÚsetÚskipped_linesÚ	enumerateÚdefsÚacceptÚ
isinstancer   r   ÚlenÚend_lineÚrangeÚlineÚimportsÚcolumn)	ÚselfÚfileÚfnamÚmod_idr   ÚiÚdefnÚnext_defÚlasts	            úW/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/mypy/semanal_pass1.pyÚ
visit_filez&SemanticAnalyzerPreAnalysis.visit_file:   sH  € Ø×(Ñ(ˆŒØ ˆŒØ ˆÔØˆŒØ#ˆÔÜ'*£uˆÔä  §¡Ó+ó 	‰GˆAˆtØ�K‰K˜ÔÜ˜$¤
Õ+Ô0GÈÈgÕ0Vð ”s˜4Ÿ9™9“~¨Ñ)Ò)Ø%)§Y¡Y¨q°1©uÑ%5°t·y±yÀ±}˜d�HØ—}‘}Ð0à×*Ò*¬c´%¸¿¹ÀtÇ}Á}ÐWXÑGXÓ2YÓ.ZÑZÕ*à#Ÿ|™|ö Ø°·±¸¿¹Ð/AÀdÇiÁiÐQU×Q\ÑQ\ÐE]Ó/]’Aò �”ð —I‘I˜a !™e™gÐ&Ùð	ð  "×/Ñ/ˆÕùò s   Ä6FÅFc                óô   •— | j                   }d| _         t        ‰| �	  |«       || _         | j                  }| j                   r6|j                  r)|j
                  dk(  r|j                  «       rd|_        y y y y y )NFÚ__getattr__T)r    ÚsuperÚvisit_func_defr   Úis_stubÚnameÚis_package_init_fileÚis_partial_stub_package)r-   ÚnodeÚold_global_scopeÚ	file_nodeÚ	__class__s       €r5   r:   z*SemanticAnalyzerPreAnalysis.visit_func_defT   s   ø€ Ø×/Ñ/ÐØ$ˆÔÜ‰Ñ˜tÔ$Ø/ˆÔØ×%Ñ%ˆ	à× Ò Ø×!Ò!Ø—	‘	˜]Ò*Ø×.Ñ.Ô0ð
 15ˆIÕ-ð 1ð +ð "ð !ó    c                óX   •— | j                   }d| _         t        ‰| �	  |«       || _         y )NF)r    r9   Úvisit_class_def)r-   r?   r@   rB   s      €r5   rE   z+SemanticAnalyzerPreAnalysis.visit_class_defe   s,   ø€ Ø×/Ñ/ÐØ$ˆÔÜ‰Ñ Ô%Ø/ˆÕrC   c                óF   •— | j                   |_        t        ‰| �  |«       y ©N)r    Úis_top_levelr9   Úvisit_import_from©r-   r?   rB   s     €r5   rI   z-SemanticAnalyzerPreAnalysis.visit_import_fromk   s   ø€ Ø ×0Ñ0ˆÔÜ‰Ñ! $Õ'rC   c                óF   •— | j                   |_        t        ‰| �  |«       y rG   )r    rH   r9   Úvisit_import_allrJ   s     €r5   rL   z,SemanticAnalyzerPreAnalysis.visit_import_allo   s   ø€ Ø ×0Ñ0ˆÔÜ‰Ñ  Õ&rC   c                óF   •— | j                   |_        t        ‰| �  |«       y rG   )r    rH   r9   Úvisit_importrJ   s     €r5   rN   z(SemanticAnalyzerPreAnalysis.visit_imports   s   ø€ Ø ×0Ñ0ˆÔÜ‰Ñ˜TÕ"rC   c                ó  — t        || j                  «       |j                  D ]  }|j                  | «       Œ |j                  D ]  }|j                  | «       Œ |j
                  r|j
                  j                  | «       y y rG   )r   r   Úexprr%   ÚbodyÚ	else_body)r-   ÚsrP   r?   s       r5   Úvisit_if_stmtz)SemanticAnalyzerPreAnalysis.visit_if_stmtw   sl   € Ü*¨1¨d¯l©lÔ;Ø—F‘Fò 	ˆDØ�K‰K˜Õð	à—F‘Fò 	ˆDØ�K‰K˜Õð	à�;Š;Ø�K‰K×Ñ˜tÕ$ð rC   c           	     óÔ   •— |j                   rL|j                  �?| xj                  t        t	        |j
                  |j                  dz   «      «      z  c_        y t        ‰| �  |«       y )Nr   )Úis_unreachabler(   r"   r!   r)   r*   r9   Úvisit_block)r-   ÚbrB   s     €r5   rW   z'SemanticAnalyzerPreAnalysis.visit_block€   sO   ø€ Ø×ÒØ�z‰zÐ%à×"Ò"¤c¬%°·±¸¿
¹
ÀQ¹Ó*GÓ&HÑHÕ"ØÜ‰Ñ˜AÕrC   c                ó¾   — t        || j                  «       |j                  D ]  }|€Œ|j                  | «       Œ |j                  D ]  }|j                  | «       Œ y rG   )r   r   Úguardsr%   Úbodies)r-   rS   ÚguardrQ   s       r5   Úvisit_match_stmtz,SemanticAnalyzerPreAnalysis.visit_match_stmtˆ   sV   € Ü-¨a°·±Ô>Ø—X‘Xò 	#ˆEØÑ Ø—‘˜TÕ"ð	#ð —H‘Hò 	ˆDØ�K‰K˜Õñ	rC   c                 ó   — y rG   © ©r-   rS   s     r5   Úvisit_assignment_stmtz1SemanticAnalyzerPreAnalysis.visit_assignment_stmt“   ó   € ØrC   c                 ó   — y rG   r_   r`   s     r5   Úvisit_expression_stmtz1SemanticAnalyzerPreAnalysis.visit_expression_stmt–   rb   rC   c                 ó   — y rG   r_   r`   s     r5   Úvisit_return_stmtz-SemanticAnalyzerPreAnalysis.visit_return_stmt™   rb   rC   c                óŠ   — |j                   j                  | «       |j                  �|j                  j                  | «       y y rG   )rQ   r%   rR   r`   s     r5   Úvisit_for_stmtz*SemanticAnalyzerPreAnalysis.visit_for_stmtœ   s3   € Ø	�‰�‰�dÔØ�;‰;Ð"Ø�K‰K×Ñ˜tÕ$ð #rC   )
r.   r   r/   Ústrr0   ri   r   r   ÚreturnÚNone)r?   r
   rj   rk   )r?   r   rj   rk   )r?   r   rj   rk   )r?   r   rj   rk   )r?   r   rj   rk   )rS   r   rj   rk   )rX   r   rj   rk   )rS   r   rj   rk   )rS   r   rj   rk   )rS   r   rj   rk   )rS   r   rj   rk   )rS   r	   rj   rk   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r6   r:   rE   rI   rL   rN   rT   rW   r]   ra   rd   rf   rh   Ú__classcell__)rB   s   @r5   r   r      sI   ø„ ñó60õ45õ"0õ(õ'õ#ó%õóóóó÷%rC   r   N)ro   Ú
__future__r   Ú
mypy.nodesr   r   r   r   r   r	   r
   r   r   r   r   r   r   r   Úmypy.optionsr   Úmypy.reachabilityr   r   r   Úmypy.traverserr   r   r_   rC   r5   ú<module>rv      sB   ðÙ )å "÷÷ ÷ ÷ õ  !÷ñ õ
 ,ôA%Ð"2õ A%rC   