ML idZddlmZddlmZmZmZmZmZm Z m Z m Z m Z m Z mZmZmZmZddlmZddlmZmZmZddlmZGddeZy ) z#Block/import reachability analysis.) annotations) AssertStmtAssignmentStmtBlockClassDefExpressionStmtForStmtFuncDefIfStmtImport ImportAll ImportFrom MatchStmtMypyFile ReturnStmt)Options)assert_will_always_fail"infer_reachability_of_if_statement%infer_reachability_of_match_statement)TraverserVisitorceZdZdZddZdfd Zdfd Zdfd Zdfd Zdfd Z ddZ dfd Z dd Z dd Z dd Zdd ZddZxZS)SemanticAnalyzerPreAnalysisaAnalyze 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, 10): import xyz # Only available in Python 3.10+ xyz.whatever() ... The block containing 'import xyz' is unreachable in Python 3 mode. The import shouldn't be processed in Python 3 mode, even if the module happens to exist. c |j|_||_||_||_d|_t |_t|jD]\}}|j|t|ts)t||s6|t|jdz krl|j|dz|jd}}|j?|xj t t|j |jdzzc_|j"Dcgc]6}|j |j$f|j |j$fks5|8c}|_|jdzd=n|j |_ycc}w)NT)platform cur_mod_id cur_mod_nodeoptionsis_global_scopeset skipped_lines enumeratedefsaccept isinstancerrlenend_linerangelineimportscolumn) selffilefnammod_idridefnnext_deflasts X/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/mypy/semanal_pass1.py visit_filez&SemanticAnalyzerPreAnalysis.visit_file:sH((    #'*u + GAt KK $ +0Gg0Vs499~))%)YYq1u%5tyy}dH}}0**c% t}}WXGX2Y.ZZ*#|| /AdiiQUQ\Q\E]/]A  IIa!eg&  "//  s 6FFc|j}d|_t| |||_|j}|jr6|jr)|j dk(r|j rd|_yyyyy)NF __getattr__T)r supervisit_func_defris_stubnameis_package_init_fileis_partial_stub_package)r-nodeold_global_scope file_node __class__s r5r:z*SemanticAnalyzerPreAnalysis.visit_func_defTs//$ t$/%%  !! ]*..0 15I - 1+" !cX|j}d|_t| |||_y)NF)r r9visit_class_def)r-r?r@rBs r5rEz+SemanticAnalyzerPreAnalysis.visit_class_defes,//$ %/rCcF|j|_t| |yN)r is_top_levelr9visit_import_fromr-r?rBs r5rIz-SemanticAnalyzerPreAnalysis.visit_import_fromks 00 !$'rCcF|j|_t| |yrG)r rHr9visit_import_allrJs r5rLz,SemanticAnalyzerPreAnalysis.visit_import_allos 00  &rCcF|j|_t| |yrG)r rHr9 visit_importrJs r5rNz(SemanticAnalyzerPreAnalysis.visit_importss 00 T"rCct||j|jD]}|j||jD]}|j||j r|j j|yyrG)rrexprr%body else_body)r-srPr?s r5 visit_if_stmtz)SemanticAnalyzerPreAnalysis.visit_if_stmtwsl*1dll;FF D KK  FF D KK   ;; KK  t $ rCc |jrL|j?|xjtt |j |jdzzc_yt ||y)Nr)is_unreachabler(r"r!r)r*r9 visit_block)r-brBs r5rWz'SemanticAnalyzerPreAnalysis.visit_blocksO  zz%""c% Q*G&HH"  ArCct||j|jD]}||j||jD]}|j|yrG)rrguardsr%bodies)r-rSguardrQs r5visit_match_stmtz,SemanticAnalyzerPreAnalysis.visit_match_stmtsV-a>XX #E  T" #HH D KK  rCcyrGr-rSs r5visit_assignment_stmtz1SemanticAnalyzerPreAnalysis.visit_assignment_stmt rCcyrGr_r`s r5visit_expression_stmtz1SemanticAnalyzerPreAnalysis.visit_expression_stmtrbrCcyrGr_r`s r5visit_return_stmtz-SemanticAnalyzerPreAnalysis.visit_return_stmtrbrCc|jj||j|jj|yyrG)rQr%rRr`s r5visit_for_stmtz*SemanticAnalyzerPreAnalysis.visit_for_stmts3  d ;; " KK  t $ #rC) r.rr/strr0rirrreturnNone)r?r rjrk)r?rrjrk)r?rrjrk)r?r rjrk)r?r rjrk)rSr rjrk)rXrrjrk)rSrrjrk)rSrrjrk)rSrrjrk)rSrrjrk)rSr rjrk)__name__ __module__ __qualname____doc__r6r:rErIrLrNrTrWr]rardrfrh __classcell__)rBs@r5rrsI6045"0 ('#%   %rCrN)ro __future__r mypy.nodesrrrrrr r r r r rrrr mypy.optionsrmypy.reachabilityrrrmypy.traverserrrr_rCr5rvsB)" ! ,A%"2A%rC