
    i                   ^   U d Z ddlmZ ddlZddlmZmZmZ ddlZddl	m
ZmZmZ ddlmZ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! 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/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZn dd	lompZp dd
lqmrZrmsZsmtZtmuZumvZvmwZwmxZxmyZymzZz ddl{m|Z| ddl}m~Z~ ddlmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZ eeeee         f                  Z ee(g d          Zded<    G d d          Z	 dsdtdZdud"Zdvd%Zdwd*Z	 dxdyd,Zdzd.Zd{d0Zd|d2Zd}d4Zd~d6Zdd8Zdd:Zdd<Zdd?Zdd@ZddAZddCZddEZddGZg dHZdedI<   dJdKgZdedL<   g dMZdedN<   g dOZdedP<   ddRZddSZddVZddWZdd[Zdd\Zdd]Zdd_ZddaZdddZddeZddfZ	 dddhZddjZddlZddpZddrZdS )a  Python parser that directly constructs a native AST (when compiled).

Use a Rust extension to generate a serialized AST, and deserialize the AST directly
to a mypy AST.

NOTE: This is work in progress. To use this, you need to manually build the
      ast_serialize Rust extension. See the README at https://github.com/mypyc/ast_serialize.

Expected benefits over mypy.fastparse:
 * No intermediate non-mypyc Python-level AST created, to improve performance
 * Parsing doesn't need GIL => use multithreading to construct serialized ASTs in parallel
 * Produce import dependencies without having to build an AST => helps parallel type checking
 * Support all Python syntax even if mypy is running on an older Python version
 * Generate an AST even if there are syntax errors
 * Potential to support incremental parsing (quickly process modified sections in a file)
 * Stripping function bodies in third-party code can happen earlier, for extra performance
    )annotationsN)AnyFinalcast)
read_floatread_intread_str)message_registrynodestypes)DICT_STR_GENEND_TAGLIST_GENLIST_INTLITERAL_FLOATLITERAL_NONELITERAL_STRLOCATION
ReadBufferTag	read_boolr   r	   read_str_optread_tag)L	ARG_KINDSARG_POSIMPORT_METADATAIMPORTALL_METADATAIMPORTFROM_METADATAMISSING_FALLBACKArgument
AssertStmtAssignmentExprAssignmentStmt	AwaitExprBlock	BreakStmt	BytesExprCallExprClassDefComparisonExprComplexExprConditionalExprContextContinueStmt	DecoratorDelStmtDictExprDictionaryComprehensionEllipsisExpr
ExpressionExpressionStmtFileRawData	FloatExprForStmtFuncDefGeneratorExpr
GlobalDeclIfStmtImport	ImportAll
ImportBase
ImportFrom	IndexExprIntExpr
LambdaExprListComprehensionListExpr	MatchStmt
MemberExprMypyFileNameExprNonlocalDeclOperatorAssignmentStmtOpExprOverloadedFuncDefOverloadPartPassStmt	RaiseStmtRefExpr
ReturnStmtSetComprehensionSetExpr	SliceExprStarExpr	StatementStrExpr	SuperExprTemplateStrExprTempNodeTryStmt	TupleExprTypeAliasStmt	TypeParam	UnaryExprVar	WhileStmtWithStmt	YieldExprYieldFromExpr)Options)		AsPatternClassPatternMappingPattern	OrPatternPatternSequencePatternSingletonPatternStarredPatternValuePattern)"infer_reachability_of_if_statement)special_function_elide_names)AnyTypeCallableArgumentCallableTypeEllipsisTypeInstance
ProperTypeRawExpressionType	TupleTypeTypeTypedDictTypeTypeList	TypeOfAnyUnboundType	UnionType
UnpackType)unnamed_functionr   _dummy_fallbackc                  &    e Zd ZddZdddddZdS )Stateoptionsrf   returnNonec                0    || _         g | _        d| _        d S )Nr   )r   errors	num_funcs)selfr   s     O/root/projects/qq-shell/venv/lib64/python3.11/site-packages/mypy/nativeparse.py__init__zState.__init__   s    ,.    FNblockercodemessagestrlineintcolumnr   boolr   
str | Nonec               F    | j                             |||||d           dS )aH  Report an error at a specific location.

        Args:
            message: Error message to display
            line: Line number where error occurred
            column: Column number where error occurred
            blocker: If True, this error blocks further analysis
            code: Error code for categorization
        )r   r   r   r   r   N)r   append)r   r   r   r   r   r   s         r   	add_errorzState.add_error   s:    $ 	VG]abb	
 	
 	
 	
 	
r   )r   rf   r   r   )r   r   r   r   r   r   r   r   r   r   r   r   )__name__
__module____qualname__r   r    r   r   r   r      sN            
 
 
 
 
 
 
 
r   r   Ffilenamer   r   rf   skip_function_bodiesr   imports_onlyr   2tuple[MypyFile, list[dict[str, Any]], TypeIgnores]c                   t           j                            |           rt          g g           }| |_        |g g fS t	          | ||          \  }}}}}	}
t          |          }t          |          }t          |          }|rg }nt          |||          }t          |          }t          ||          }| |_        |	|_
        |r&t          |||t          |          |	|
          |_        |
|_        ||j        z   }|||fS )a  Parse a Python file using the native Rust-based parser.

    Uses the ast_serialize Rust extension to parse Python code and deserialize
    the resulting AST directly into mypy's native AST representation.

    Args:
        filename: Path to the Python source file to parse
        options: Mypy options affecting parsing behavior (e.g., Python version)
        skip_function_bodies: If True, many function and method bodies are omitted from
            the AST, useful for parsing stubs or extracting signatures without full
            implementation details
        imports_only: If True create an empty MypyFile with actual serialized defs
            stored in binary_data.

    Returns:
        A tuple containing:
        - MypyFile: The parsed AST as a mypy AST node
        - list[dict[str, Any]]: List of parse errors and deserialization errors
        - TypeIgnores: List of (line_number, ignored_codes) tuples for type: ignore comments
    )ospathisdirrH   parse_to_binary_astr   r   r   read_statementsdeserialize_importsis_partial_stub_packager6   dictraw_datauses_template_stringsr   )r   r   r   r   nodebr   ignoresimport_bytesis_partial_packager   datanstatedefsimports
all_errorss                    r   native_parser      s!   2 
w}}X B	R| 	Hg/CDD PAvw&8:O a==DA'NNE /udA..!,//GD'""DDI#5D  
#|VT']]4FH]
 
 "7D%,&JW$$r   r   r   r   c                :    t          |           t          k    sJ d S N)r   r   )r   s    r   expect_end_tagr      s    D>>W$$$$$$r   tagr   c                D    t          |           x}|k    s
J |            d S r   )r   )r   r   actuals      r   
expect_tagr     s,    tnn$F,,,f,,,,,r   r   r   r   list[Statement]c                    g }| j         }t          |          D ]'}t          | |          }|                    |           (| j         |dz   k    rt	          | |          }|S )N   )r   rangeread_statementr   fix_function_overloads)r   r   r   r   old_num_funcs_stmts          r   r   r     sm    DOM1XX  eT**D***%eT22Kr   Btuple[bytes, list[dict[str, Any]], TypeIgnores, bytes, bool, bool]c                    t          j        | ||j        |j        |j        |j                  \  }}}}}|t          d|          |||d         |d         fS )N)r   python_versionplatformalways_truealways_falsezlist[dict[str, Any]]r   r   )ast_serializeparser   r   r   r   r   )r   r   r   	ast_bytesr   r   r   ast_datas           r   r   r     sz     :G9L1-!'): : :6Ivwh 	#V,,%&() r   rW   c                    t                    }|t          j        k    rt                     S |t          j        k    rt          t                     t                    } fdt          |          D             }t                    }t                    }t                     }t          |t                    sJ d|_        t          |j                  }|j        |_        d|_        t%          |||          }	||	_        ||	_        |j        |	_        |j        |	_        t-                     |	S |t          j        k    rCt1          t3                               }
t5          |
|
j                   t-                     |
S |t          j        k    rt;                     }t3                     }t=                    }|rt?                     }nd }t=                    }tA          ||||          }tC          |           t          |tD                    rt5          ||           t-                     |S |t          j#        k    ratI                    }t3                     }t3                     }tK          |||          }	tC          |	           t-                     |	S |t          j&        k    rt3                     }tO                     }t                    }g }g }t          |          D ]H}|(                    t3                                |(                    tO                                It=                    }|rtO                     }nd }|}t          tS          |          dz
  dd          D ]}tU          ||         g||         g|          }||         j        |_        ||         j        |_        ||j        |_        |j        |_        n$||         j        |_        ||         j        |_        tW          |g          }t5          ||           tU          |g|g|          }tC          |           t-                     |S |t          j,        k    rTt=                    }|rt3                     }nd }t[          |          }	tC          |	           t-                     |	S |t          j.        k    ryt=                    } | rt3                     }!nd }!t=                    }"|"rt3                     }#nd }#t_          |!|#          }	tC          |	           t-                     |	S |t          j0        k    ret3                     }$t=                    }%|%rt3                     }&nd }&tc          |$|&          }	tC          |	           t-                     |	S |t          j2        k    rbt3                     }tO                     }tg                     }ti          |||          }	tC          |	           t-                     |	S |t          j5        k    rt3                     }'t3                     }tO                     }tg                     }t=                    }(tm          |'|||          }	|(|	_7        tC          |	           t-                     |	S |t          j8        k    rt                    })g }*g }+t          |)          D ]s},t3                     }-|*(                    |-           t=                    }.|.r&t3                     }/|+(                    |/           ^|+(                    d            ttO                     }t=                    }(ts          |*|+|          }	|(|	_7        tC          |	           t-                     |	S |t          j:        k    r/tw                      }	tC          |	           t-                     |	S |t          j<        k    r/t{                      }	tC          |	           t-                     |	S |t          j>        k    r/t                      }	tC          |	           t-                     |	S |t          j@        k    rt                    })g }0t          |)          D ]K},tI                    }1t=                    }2|2rtI                    }3nd }3|0(                    |1|3f           Lt          |0          }	tC          |	           t-                     |	S |t          jB        k    rt                    }4tI                    }5t                    })g }6t          |)          D ]K},tI                    }1t=                    }2|2rtI                    }3nd }3|6(                    |1|3f           Lt          |5|4|6          }	tC          |	           t-                     |	S |t          jD        k    rOtI                    }5t                    }4t          |5|4          }	tC          |	           t-                     |	S |t          jF        k    rt                     S |t          jH        k    rt                     S |t          jJ        k    rt                     S |t          jL        k    r@t3                     }t          |          }	tC          |	           t-                     |	S |t          jN        k    rut                    })g }7t          |)          D ]$},|7(                    tI                               %t          |7          }	tC          |	           t-                     |	S |t          jP        k    rut                    })g }7t          |)          D ]$},|7(                    tI                               %t          |7          }	tC          |	           t-                     |	S |t          jR        k    r t3                     }8t                    }9g }:g };g }<t          |9          D ]},t                     }=|:(                    |=           t=                    }>|>r&t3                     }?|;(                    |?           n|;(                    d            tO                     }|<(                    |           t          |8|:|;|<          }	tC          |	           t-                     |	S J |            )Nc                0    g | ]}t                    S r   read_expression.0ir   r   s     r   
<listcomp>z"read_statement.<locals>.<listcomp>.  s#    PPPqoeT22PPPr   TF)type
new_syntaxr   r   )Ur   r   FUNC_DEF_STMTread_func_def	DECORATORr   r   read_int_barer   r   r   
isinstancer9   is_decoratedra   namer   is_readyr/   r   end_line
end_columnr   	EXPR_STMTr5   r   set_line_column_rangeexprASSIGNMENT_STMTread_expression_listr   	read_typer#   read_locr[   OPERATOR_ASSIGNMENT_STMTr	   rK   IF_STMT
read_blockr   lenr<   r%   RETURN_STMTrR   
RAISE_STMTrP   ASSERT_STMTr!   
WHILE_STMTread_optional_blockrb   FOR_STMTr8   is_async	WITH_STMTrc   	PASS_STMTrO   
BREAK_STMTr&   CONTINUE_STMTr.   IMPORTr=   IMPORT_FROMr@   
IMPORT_ALLr>   	CLASS_DEFread_class_defTYPE_ALIAS_STMTread_type_alias_stmtTRY_STMTread_try_stmtDEL_STMTr0   GLOBAL_DECLr;   NONLOCAL_DECLrJ   
MATCH_STMTread_patternrF   )@r   r   r   n_decorators
decoratorsr   r   fdefvarr   eslvaluesrvaluehas_typetype_annotationr   aoplvaluer   bodynum_elif
elif_exprselif_bodiesr   has_else	else_bodycurrent_else	elif_stmtif_stmt	has_valuevaluehas_excexchas_from	from_exprtesthas_msgmsgindexr   r   	expr_listtarget_listr   context_expr
has_targettargetidsr   
has_asnameasnamerelative	module_idnames
decl_namessubjectn_casespatternsguardsbodiespattern	has_guardguards@   ``                                                              r   r   r   &  s   
4..C
e!!!UD)))			4"""$T**PPPPPE,<O<OPPP
~~$eT**$((((( $)nn9z3//	/t			OE48899b"'***t		%	%	%&ud33 --T?? 	#'t44OO"Ot__
7FZXXXqfh'' 	-!&!,,,t	.	.	.d^^ -- --%b&&99tt			ud++%&& D>>
x 	8 	8AoeT::;;;z%667777T?? 	"5$//III ! s:*B33 	; 	;A
1Q0@,OOI']/IN)!}3I'%1%:	"'3'>	$$%0^%<	"'21~'@	$ !)--L!,	::::$$66wt	!	!	!dOO	 	#E400EEE%  tt	 	 	 D// 	!%..CCCT?? 	't44IIIi((tt	!	!	!ud++D// 	!%..CCC$$$tt	 	 	 ud++%&&'t44	tY//tt			t,,ud++%&&'t44	T??udD)44 tt			TNN	/1q 	) 	)A*5$77L\***"4J )(55""6****""4((((%&&T??	;55 tt			zztt	 	 	 {{tt	#	#	#~~tt			TNNq 	' 	'AD>>D"4J !$JJf~&&&&c{{tt	!	!	!D>>TNN	TNNq 	) 	)AD>>D"4J !$LL$(((()Xu55tt	 	 	 TNN	D>>H--tt			eT***	%	%	%#E4000			UD)))			ud++t}}tt	!	!	!TNN
q 	. 	.Ahtnn----*%%tt	#	#	#TNN
q 	. 	.Ahtnn----J''tt	 	 	 !%..4..*,w 
	  
	 A"5$//GOOG$$$!$I $'t44e$$$$d###eT**DMM$(FF;;ttcr   tuple[list[Argument], bool]c                   t          |t                     t          |          }g }d}t          |          D ]7}t	          |          }t          |          }t          |         }t          |          }	|	rt          | |          }
d}nd}
t          |          }|rt          | |          }nd}t          |          }| j
        j        r>|
<t          |t                    o
|j        dk    }t          |
t                    r||
_        t#          ||
          }d|_        d|_        t)          ||
|||          }t+          ||           t-          ||           |                    |           9||fS )z}Read function/lambda parameters from the buffer.

    Returns:
        A tuple of (arguments list, has_annotations flag)
    FTNr   )r   r   r   r   r	   r   r   r   r   r   r   implicit_optionalr   rI   r   r~   optionalra   is_inferredis_argumentr    r   r   r   )r   r   n_args	argumentshas_annr   arg_namearg_kind_intarg_kindr  annhas_defaultdefaultpos_onlyrD  r  args                    r   read_parametersrR  F  s}    tX4  FIG6]]  D>>~~\*T?? 	E4((CGGCoo 	%eT22GGGT?? =* 	(s!'844O9OH#{++ ('(C  sC(H==sc3'''gr   list[TypeParam]c           
         g }t                    }t          |          D ]}t                    }t                    }t	                    }|rt                     }nd}t          t                     t                    }	 fdt          |	          D             }
t	                    }|rt                     }nd}|                    t          ||||
|                     |S )z(Read type parameters (PEP 695 generics).Nc                0    g | ]}t                    S r   r   r   r   r   r   s     r   r   z$read_type_params.<locals>.<listcomp>  s#    BBBQ)E4((BBBr   )
r   r   r   r	   r   r   r   r   r   r_   )r   r   type_paramsr   r   kindr   	has_boundupper_boundn_valuesvaluesrN  rO  s   ``           r   read_type_paramsr^  r  s   #%KdA1XX P P~~~~dOO	 	#E400KKK4""" &&BBBBB%//BBBoo 	t,,GGG9T4fgNNOOOOr   r9   c                
   | xj         dz  c_         t          |          }t          | |          \  }}t          |          r|D ]	}d|_        
t          | |          }t          |          }t          |          }|rt          | |          }	nd }	t          |          }
|
rt          | |          }d}nd }|rRt          d |D             d |D             d |D             |r|nt          t          j                  t                    }nd }t          |||||	          }|rd|_        t!          ||           |r8|j        |_        |j        |_        ||_        |                                |_        t-          |           |S )Nr   Tc                \    g | ])}|j         r|j         nt          t          j                  *S r   r  rr   r}   unannotatedr   rQ  s     r   r   z!read_func_def.<locals>.<listcomp>  sC        (+':^##	H]@^@^  r   c                    g | ]	}|j         
S r   rY  rc  s     r   r   z!read_func_def.<locals>.<listcomp>  s    +++#SX+++r   c                8    g | ]}|j         rd n|j        j        S r   rP  variabler   rc  s     r   r   z!read_func_def.<locals>.<listcomp>  s(    NNNSS\8TTs|'8NNNr   )typ	type_args)r   r	   rR  rq   rP  r   r   r^  r   rt   rr   r}   rb  r   r9   is_coroutiner   r   r   
definitioncopy_modifiedunanalyzed_typer   )r   r   r   rH  rI  rQ  r  r   has_type_paramsrX  has_return_typereturn_typeri  func_defs                 r   r   r     s   	OOqOOD>>D(55Iw#D))   	  	 CCLLeT""DH  ooO &ud33ooO t,,  $   ,++++NNINNN&JKKGI4I,J,J	
 	
 tY#MMMH % $T8
 7=_
!#&#4#4#6#6 4Or   r)   c                    t                    }t                     }t                     }t          t                     t                    } fdt          |          D             }t                    }|rt                     }nd }t          t                     t                    }	g }
t          |	          D ]8}t                    }t                     }|
                    ||f           9|
r"t          |
                              d          nd }|
rd |
D             nd }t          |||r|nd |||          }||_        t!          |           t#                     |S )Nc                0    g | ]}t                    S r   r   rW  s     r   r   z"read_class_def.<locals>.<listcomp>  s#    LLL1/%..LLLr   	metaclassc                (    g | ]\  }}|d k    ||fS )ru  r   )r   kvs      r   r   z"read_class_def.<locals>.<listcomp>  s*    IIIDAq[8H8H!Q8H8H8Hr   )base_type_exprsru  keywordsrj  )r	   r   r   r   r   r   r   r   r^  r   r   r   r   getr)   r  r   r   )r   r   r   r  ry  r  r  ro  rX  
n_keywordsrz  r   keyr$  ru  filtered_keywords	class_defs   ``               r   r  r    s   D>>DeT""D*5$77OtX &&LLLLLLl8K8KLLLJ  ooO &ud33 t\"""t$$JH: & &tnnt,,e%%%% 4<EX"";///IMU_IIHIIII[_+:D"  I &IT94r   r^   c           
         t                     }t          |t                    sJ dt          |                       t	                    }|dk    rg }t          |          D ]}t                    }t                    }t                    }|rt                     }	nd}	t          t                     t	                    }
 fdt          |
          D             }t                    }|rt                     }nd}|                    t          |||	||                     ng }t                     }t          |          }t          ||           t!          |g          }d|_        d|_        d|_        d|_        t+          g |          }t          ||           t-          |||          }t/          |           t1                     |S )z"Read PEP 695 type alias statement.z+Expected NameExpr for type alias name, got r   Nc                0    g | ]}t                    S r   rV  rW  s     r   r   z(read_type_alias_stmt.<locals>.<listcomp>  s#    FFFit,,FFFr   r   )r   r   rI   r   r   r   r   r	   r   r   r   r   r   r_   rR   r   r%   r   r   r   r   rC   r^   r   r   )r   r   r   n_type_paramsrX  r   rY  
param_namerZ  r[  r\  r]  rN  rO  
value_exprreturn_stmtblocklambda_exprr   s   ``                 r   r  r    s   5$''DdH%%aa'aUYZ^U_U_'a'aaaa!$''Mq}%% 	Z 	ZAD>>D!$J!$I #'t44" tX&&&$T**HFFFFFeHooFFFF#D//K #E400yT;PWXXYYYY)	Z,  --J Z((K+z222;-  EEJELENER''K+z222{K88DT44Kr   r\   c                t   t          | |          }t          |          }g }t          |          D ]N}t          |          }|r&t	          | |          }|                    |           9|                    d            Og }t          |          D ]\}t          |          }	|	r4t          |          }
t          |
          }|                    |           G|                    d            ]g }t          |          D ]'}t          | |          }|                    |           (t          |          }|rt          | |          }nd }t          |          }|rt          | |          }nd }t          |          }t          ||||||          }||_	        t          ||           t          |           |S r   )r   r   r   r   r   r   r	   rI   r\   is_starr   r   )r   r   r  num_handlers
types_listr   r  exc_type	vars_listhas_namevar_namevar_exprhandlershandler_bodyr  r  has_finallyfinally_bodyr  r   s                       r   r  r  '  s   eT""DD>>L*,J<   $ $T?? 	$&ud33Hh''''d####')I<   # #T?? 	#~~H))HX&&&&T""""H<   & &!%..%%%%H ud++			D//K !%.. ooG4J)\RRDDLT44Kr   rz   c                    t                    }|t          j        k    r*t                    }t	          t
                     t                    }t           fdt          |          D                       }t                    }t                    }|t          k    rd }n(|t          k    rt                    }nJ d|             t                    }|t          k    rd }	n(|t          k    rt                    }	nJ d|             t          |||||	          }
t          |
           t                     |
S |t          j        k    r-t	          t
                     t                    } fdt          |          D             }t                    }t                    }|t          k    rd }n(|t          k    rt                    }nJ d|             t                    }|t          k    rd }	n(|t          k    rt                    }	nJ d|             t#          ||          }||_        |	|_        t                    |_        t          |           t                     |S |t          j        k    rpt	          t
                     t                    } fdt          |          D             }t-          |          }t          |           t                     |S |t          j        k    rt	          t
                     t                    } fd	t          |          D             }t                    }t1          |t2          |
          }t          |           t                     |S |t          j        k    r$t	          t
                     t                    }fdt          |          D             }t	          t
                     t                    } fdt          |          D             }i }g }t7          ||          D ]9\  }}|-t9          |t:                    sJ |                    |           4|||<   :t?          |tA                      tA                      t2                    }||_!        t          |           t                     |S |t          j"        k    r/tG                      }t          |           t                     |S |t          j$        k    rt                    }|dk    rt                    }n|dk    rtK                    }ni|dk    rt                    }nS|dk    rt                    }n=|dk    r*t                    }|t          k    sJ d|             d }nJ d|             tM          ||          }t          |           t                     |S |t          j'        k    rQtQ                     }t                    }tS          ||          }t          |           t                     |S |t          j*        k    rtW                     S J |            )Nc              3  8   K   | ]}t                    V  d S r   rV  r   s     r   	<genexpr>zread_type.<locals>.<genexpr>_  s-      >>Yud++>>>>>>r   Fz&Unexpected tag for original_str_expr: z*Unexpected tag for original_str_fallback: )empty_tuple_indexoriginal_str_exproriginal_str_fallbackc                0    g | ]}t                    S r   rV  r   s     r   r   zread_type.<locals>.<listcomp>  #    :::A5$'':::r   )uses_pep604_syntaxc                0    g | ]}t                    S r   rV  r   s     r   r   zread_type.<locals>.<listcomp>  r  r   c                0    g | ]}t                    S r   rV  r   s     r   r   zread_type.<locals>.<listcomp>  r  r   )implicitc                .    g | ]}t                    S r   )r   )r   r   r   s     r   r   zread_type.<locals>.<listcomp>  s!    555qT""555r   c                0    g | ]}t                    S r   rV  r   s     r   r   zread_type.<locals>.<listcomp>  s#    ;;;Q)E4((;;;r   zbuiltins.boolzbuiltins.intbuiltins.strzbuiltins.bytesz
typing.Anyz,Expected LITERAL_NONE for invalid type, got zUnsupported RawExpressionType: )from_star_syntax),r   r   UNBOUND_TYPEr	   r   r   r   tupler   r   r   r   read_str_barer~   r   r   
UNION_TYPEr   r  r  is_evaluated	LIST_TYPEr|   
TUPLE_TYPEry   r   TYPED_DICT_TYPEzipr   rw   r   r{   setextra_items_fromELLIPSIS_TYPEru   RAW_EXPRESSION_TYPEr   rx   UNPACK_TYPEr   r   	CALL_TYPEread_call_type)r   r   r   r   r   argsr  tr  r  unbounditemsr  union	type_listr  
tuple_typekeysr]  td_itemsr  r}  valtypeddict_typeellipsis_type	type_namer$  raw_type
inner_typer  unpacks   ``                             r   r   r   Y  s   
4..C
e   ~~4"""$>>>>>U1XX>>>>>%dOOTNN $+ -d 3 3FF1FFFFFTNN$(!!+$1$$7$7!!JJqJJJJJ//"7
 
 
 	wt	 	 	 4"""$:::::q:::&t__TNN $+ -d 3 3FF1FFFFFTNN$(!!+$1$$7$7!!JJqJJJJJ%4FGGG"3&;#&t__ut			4"""$:::::q:::UOO	y!!!t	 	 	 4"""$:::::q:::T??uoIII
z"""t	%	%	%4"""$5555E!HH5554"""$;;;;;%((;;;D&)) 	$ 	$HC{!#z22222 '',,,, #&xOO*:'~&&&t	#	#	#$}%%%t	)	)	)TNN	''dOOEE.((TNNEE.((TNNEE***TNNEE,&&4..C,&&&(\WZ(\(\&&&EEGGIGGGGG$UI66x   t	!	!	!ud++
$T??J9IJJJvt			eT***cr   ri  r   c                >    t          | t                    r| j        S dS )zCExtract qualified name from a type (for Arg constructor detection).N)r   r~   r   ri  s    r   stringify_type_namer    s     #{## x4r   c                    t          | t                    r| j        dk    r| j        S t          | t                    r| j        dk    rdS | j        S dS )z;Extract argument name from a type (for Arg name parameter).r  r   N)r   rx   base_type_nameliteral_valuer~   r   r  s    r   extract_arg_namer    s]    #()) c.@N.R.R  	C	%	%  8v4x4r   c                R    t                     }t          t                     t                    } fdt	          |          D             }t          t                     t                    }g }t	          |          D ]n}t                    }|t          k    rd}	n(|t          k    rt                    }	nJ d|             t                     }
|	                    |	|
f           ot          |          }t          t          j                  }t          |           t                     |s5                     t"          j        j        |j        |j        dd           |S d}d}t          t          j                  }|}d}t/          |          D ][\  }}|dk    r|}d}|d	k    rt1          |          }d}(                     t"          j        j        |j        |j        dd           \|D ]\  }	}
|	d
k    rZ|H|rF                     t"          j                            |          j        |j        |j        dd           t1          |
          }f|	dk    rO||urH|rF                     t"          j                            |          j        |j        |j        dd           |
}                     t"          j                            |	          j        |j        |j        dd           t=          |||          }t?          ||           |S )zRead Call in type context - check if it's an Arg/DefaultArg/VarArg/KwArg constructor.

    This performs validation and error reporting similar to mypy/fastparse.py.
    c                0    g | ]}t                    S r   rV  rW  s     r   r   z"read_call_type.<locals>.<listcomp>	  s#    :::qIeT"":::r   NFz!Unexpected tag for keyword name: Tmiscr   r   r   r   r   ) r   r   r   r   r   r   r   r   r  r   r  rr   r}   
from_errorr   r   r   r
   ARG_CONSTRUCTOR_NAME_EXPECTEDr$  r   r   special_form	enumerater  ARG_CONSTRUCTOR_TOO_MANY_ARGSMULTIPLE_VALUES_FOR_NAME_KWARGformatMULTIPLE_VALUES_FOR_TYPE_KWARGARG_CONSTRUCTOR_UNEXPECTED_ARGrs   r   )r   r   callee_typerG  r  n_kwargskwargsr   tag_kwkw_namekw_valueconstructorinvalidr   name_set_from_positionaldefault_typeri  typ_set_from_positionalr   rQ  call_args   ``                   r   r  r    s   
 E4((K tX4  F:::::E&MM:::D tXT""HF8__ 	+ 	+$\!!GG{""#D))GGFFfFFFFFUD))w)**** &k22K i*++GT74 	:@LN 	 	
 	
 	
  D$9122LC# D//  366C&*##!VV#C((D'+$$ OO >D      $  f$<$CJJ;WW]LN       $H--DD,&&+B&$CJJ;WW]LN       CC OO ?FFwOOU       T;77H(G,,,Or   rk   c                	    t                    }|t          j        k    rt                    }|rt	                     }nd}t                    }|r/t                    }t          |          }t          |           nd}t          ||          }t          |           t                     |S |t          j
        k    r[t                    }	 fdt          |	          D             }
t          |
          }t          |           t                     |S |t          j        k    r@t                     }t!          |          }t          |           t                     |S |t          j        k    rSt                    }|t$          k    rd}n|dk    }t'          |          }t          |           t                     |S |t          j        k    r[t                    }	 fdt          |	          D             }
t+          |
          }t          |           t                     |S |t          j        k    rrt                    }|r/t                    }t          |          }t          |           nd}t/          |          }t          |           t                     |S |t          j        k    rt                    }	g }g }t          |	          D ]L}t                     }t	                     }|                    |           |                    |           Mt                    }|r/t                    }t          |          }t          |           nd}t5          |||          }t          |           t                     |S |t          j        k    rt9          t:          t                               }t                    } fdt          |          D             }t                    }g }g } t          |          D ]K}t                    }t	                     }|                    |           |                     |           Lt=          ||||           }!t          |!           t                     |!S J d|             )z$Read a pattern node from the buffer.Nc                0    g | ]}t                    S r   r  rW  s     r   r   z read_pattern.<locals>.<listcomp>  #    @@@!L--@@@r   r   c                0    g | ]}t                    S r   r  rW  s     r   r   z read_pattern.<locals>.<listcomp>  r  r   c                0    g | ]}t                    S r   r  rW  s     r   r   z read_pattern.<locals>.<listcomp>  s#    NNNQ|E400NNNr   FzUnknown pattern tag: )r   r   
AS_PATTERNr   r  r	   rI   r   rg   r   
OR_PATTERNr   r   rj   VALUE_PATTERNr   ro   SINGLETON_PATTERNr   rm   SEQUENCE_PATTERNrl   STARRED_PATTERNrn   MAPPING_PATTERNr   ri   CLASS_PATTERNr   rQ   rh   )"r   r   r   has_patternr>  r  name_strr   
as_patternr   r;  
or_patternr   value_patternsingleton_tagr$  singleton_patternsequence_patternstarred_patternr  r]  r   r}  has_restrest_strrestmapping_pattern	class_refn_positionalpositionalsr|  keyword_keyskeyword_valuesclass_patterns"   ``                                r   r  r  n  s   
4..C
eoo 	"5$//GGGT?? 	~~HH%%DT4    Dw--
z"""t	 	 	 TNN@@@@@uQxx@@@x((
z"""t	#	#	#ud++$T**}%%%t	'	'	' L((EE "Q&E,U33()))t  	&	&	&TNN@@@@@uQxx@@@*844'(((t	%	%	%T?? 	~~HH%%DT4    D(..'''t	%	%	%TNNq 	! 	!A!%..C --EKKMM%    T?? 	~~HH%%DT4    D(vt<<'''t	#	#	#/%">">??	~~NNNNN%:M:MNNNd^^
z"" 	) 	)A4..C --E$$$!!%(((($Y\>ZZ}%%%t33c33333r   r%   c                   t          |t          j                   t          |t                     t	          |          }t          |          }|dk    r2t          g |          }t          ||           t          |           |S t          | ||          }t          |           t          ||          }|d         j
        |_
        |d         j        |_        |d         j        |_        |d         j        |_        |S )Nr   is_unreachabler   )r   r   BLOCKr   r   r   r%   r   r   r   r   r   r   r   r   r   r   r  r   r  s         r   r   r     s    tU[!!!tXdAt__NAvv"^444qt E4++t!N3331Q4;rU^
u'r   Block | Nonec                    t          t          j                   t          t                     t	                    }t                    }|dk    rd }nu fdt          |          D             }t          ||          }|d         j        |_        |d         j	        |_	        |d         j
        |_
        |d         j        |_        t                     |S )Nr   c                0    g | ]}t                    S r   )r   r   s     r   r   z'read_optional_block.<locals>.<listcomp>  s#    ;;;Q^E4((;;;r   r  r   )r   r   r  r   r   r   r   r%   r   r   r   r   r   r	  s   ``    r   r   r     s    tU[!!!tXdAt__NAvv;;;;;%((;;;!N3331Q4;rU^
u'4Hr   )+-*@/%z**z<<z>>|^&z//bin_opsandorbool_ops)
z==z!=<z<=>z>=iszis notinznot incmp_ops)~notr  r  	unary_opsr4   c                #    t                    }|t          j        k    r4t                     }t	                     }t          t                     t                    }fdt          |          D             }t          t                     t                    }g }t          |          D ]l}	t                    }|t          k    r|                    d            2|t          k    r#|                    t                               `J d|             t          ||||          }
t          |
           t!                     |
S |t          j        k    r?t%                    }t'          |          }t          |           t!                     |S |t          j        k    rt                     }t%                    }t+          ||          }t-          |t                    r;t-          |j        t&                    r!|j        j        dk    rt3          ||          }n|}t          |           t!                     |S |t          j        k    r=t7          t%                              }t          |           t!                     |S |t          j        k    r=t;          t=                              }t          |           t!                     |S |t          j        k    rTt          t@                     tC                    }tE          |          }t          |           t!                     |S |t          j#        k    r@t	                     }tI          |          }t          |           t!                     |S |t          j%        k    r@t	                     }tM          |          }t          |           t!                     |S |t          j'        k    r@t	                     }tQ          |          }t          |           t!                     |S |t          j)        k    r1tU                     }t          |           t!                     |S |t          j+        k    rPtU                     }tY          |          }t          |           t[          ||           t!                     |S |t          j.        k    rPtU                     }t_          |          }t          |           t[          ||           t!                     |S |t          j0        k    rt                     }t                     }t=                    } fdt          |          D             } fdt          |          D             } fdt          |          D             }fdt          |          D             }tc          ||||||          }t          |           t!                     |S |t          j2        k    rTtg                    }|rt                     }nd }ti          |          }t          |           t!                     |S |t          j5        k    r@t                     }tm          |          }t          |           t!                     |S |t          j7        k    rtp          t=                             } t                     }!t                     }"ts          | |!|"          }#|!j:        |#_:        |!j;        |#_;        |"j<        |#_<        |"j=        |#_=        t!                     |#S |t          j>        k    rQt                     }$t                     }%t          |$|%          }t          |           t!                     |S |t          j@        k    rt          t=                             } t	                     }&t          |&          d	k    sJ |&d
         }|&dd          D ]O}'ts          | ||'          }|&d
         j:        |_:        |&d
         j;        |_;        |'j<        |_<        |'j=        |_=        Pt          |           t!                     |S |t          jC        k    rt                     }!t          t                     t                    }(fdt          |(          D             })t	                     }*t          |)          t          |*          k    sJ t          |)|!g|*z             }t          |           t!                     |S |t          jE        k    r[t          t=                             } t                     }+t          | |+          }t          |           t!                     |S |t          jH        k    rt          t                     t                    },g }-t          |,          D ]L}	tg                    }.|.r$|-                    t                                7|-                    d            Mt	                     }&t          t          |-|&                    }t          |          }t          |           t!                     |S |t          jL        k    rt          t@                     tC                    }/t          t@                     tC                    }0t          |/|0          }t          |          }t          |           t!                     |S |t          jO        k    rtg                    }1|1rt                     nd }2tg                    }3|3rt                     nd }4tg                    }5|5rt                     nd }6t          |2|4|6          }t          |           t!                     |S |t          jQ        k    r9t          t          t          jU                  d          }7t!                     |7S |t          jV        k    r/t                      }t          |           t!                     |S |t          jX        k    rbt                     }8t                     }9t                     }:t          |9|8|:          }t          |           t!                     |S |t          jZ        k    rt=                    };g }<t          |;          D ]}	tg                    }=|=rEt=                    }>t          |>          D ]%}?|<                    t                                &Xt7          t%                              }t          |           |<                    |           t           |<          }t!                     |S |t          j]        k    rt=                    };g }@t          |;          D ]}	tg                    r|t                     }t%                    }tg                    rt%                    }And }Atg                    rt                     }Bnd }B|@                    |||A|Bf           t7          t%                              }t          |           |@                    |           t          |@          }t          |           t!                     |S |t          j`        k    rt                     \  }C}Dt                     }E|DrNt          d |CD             d |CD             d |CD             t          t          jd                  t                    }Fnd }Ft          |C|E          }|F|_g        t          |           t!                     |S |t          jh        k    rt                     }Gt                     }t-          |Gt&                    s/t-          |Gt&                    sJ dt          |G                       t          |G|          }t          |           t!                     |S |t          jj        k    r@t                     }Ht          |H          }t          |           t!                     |S |t          jl        k    r?t%                    }t          |          }t          |           t!                     |S |t          jn        k    r@t                     }t          |          }t          |           t!                     |S |t          jp        k    rNt%                    }It;          t          |Id
                    }t          |           t!                     |S J |            )Nc                D    g | ]}t           t                             S r   )r   r   r   r   r   s     r   r   z#read_expression.<locals>.<listcomp>  s&    LLLY}T223LLLr   FzUnexpected tag for arg_name: superc                0    g | ]}t                    S r   r   rW  s     r   r   z#read_expression.<locals>.<listcomp>m  s#    MMMA?5$//MMMr   c                0    g | ]}t                    S r   r   rW  s     r   r   z#read_expression.<locals>.<listcomp>n  s#    OOOa_UD11OOOr   c                0    g | ]}t                    S r   r   rW  s     r   r   z#read_expression.<locals>.<listcomp>o  s$    TTT1)%66TTTr   c                .    g | ]}t                    S r   r   r$  s     r   r   z#read_expression.<locals>.<listcomp>p  s    AAAIdOOAAAr      r   r   c                D    g | ]}t           t                             S r   )r  r   r$  s     r   r   z#read_expression.<locals>.<listcomp>  s&    BBBw}T**+BBBr   T)no_rhsc                \    g | ])}|j         r|j         nt          t          j                  *S r   ra  rc  s     r   r   z#read_expression.<locals>.<listcomp>#  sC        ,/+>bC''GILaDbDb  r   c                    g | ]	}|j         
S r   re  rc  s     r   r   z#read_expression.<locals>.<listcomp>'  s    ///c///r   c                8    g | ]}|j         rd n|j        j        S r   rg  rc  s     r   r   z#read_expression.<locals>.<listcomp>(  s(    RRR<3<+<RRRr   z"Expected NameExpr for target, got )base)rr   r   	CALL_EXPRr   r   r   r   r   r   r   r   r   r   r  r(   r   r   	NAME_EXPRr	   rI   MEMBER_EXPRrG   r   calleer   rY   STR_EXPRrX   INT_EXPRrB   r   
FLOAT_EXPRr   read_float_barer7   	LIST_EXPRrE   
TUPLE_EXPRr]   SET_EXPRrT   GENERATOR_EXPRread_generator_exprLIST_COMPREHENSIONrD   r   SET_COMPREHENSIONrS   DICT_COMPREHENSIONr2   
YIELD_EXPRr   rd   YIELD_FROM_EXPRre   OP_EXPRr  rL   r   r   r   r   
INDEX_EXPRrA   BOOL_OP_EXPRr  r   COMPARISON_EXPRr*   
UNARY_EXPRr!  r`   	DICT_EXPRlistr  r1   COMPLEX_EXPRcomplexr+   
SLICE_EXPRrU   	TEMP_NODEr[   rr   r}   r  ELLIPSIS_EXPRr3   CONDITIONAL_EXPRr,   FSTRING_EXPRread_fstring_itembuild_fstring_joinTSTRING_EXPRread_fstring_itemsrZ   LAMBDA_EXPRrR  r   rt   rb  r   rC   r   
NAMED_EXPRr"   	STAR_EXPRrV   
BYTES_EXPRr'   
AWAIT_EXPRr$   BIG_INT_EXPRr   )Jr   r   r   r6  r  n_kinds	arg_kindsn_names	arg_namesr   cesneeattrmresultseier$  fer  r   r  	generatorr}  n_generatorsindices	sequences	condlistsr   r#  r  leftrightor2  r,  r]  r  n_opsopscomparatorsoperandn_keysr  has_keyrealimag	has_beginbegin_indexhas_end	end_index
has_stridestridetempif_exprcond	else_exprnpartsfitemsr   r   r   titemsconvformat_specrH  rI  r  ri  r1  wrapped_exprstrvalsJ   ``                                                                        r   r   r     s\   
4..C
eo --#E4004"""%%LLLLU7^^LLL	4"""%%&(	w 	D 	DA4..Cl""  &&&&##  t!4!45555CCcCCCCCfdIy99rt				TNNa[[rt		!	!	!E4((~~q$a"" 	z!(H'E'E 	!(-[bJbJb!*4!3!3FFFvt			Xd^^$$rt				Xd^^$$rt		 	 	 4'''%%urt				$UD11tt	 	 	 $UD11eqt			$UD11u~~tt	$	$	$"5$//tt	(	(	('t44	 ++ti...t	'	'	''t44		**ti...t	(	(	(eT**t,,~~MMMMM|9L9LMMMOOOOO5;N;NOOO	TTTTTl@S@STTT	AAAAU<-@-@AAA&sE7IyRZ[[tt	 	 	 dOO	 	#E400EEEtt	%	%	%t,,U##tt			Xd^^$ud++t,,2tU##;^
't	 	 	 ud++t,,u%%tt	"	"	"htnn%%eT22 6{{a!"": 	/ 	/CB,,F ).FK"1I,FM!lFO #Fvt	%	%	%ud++4"""d##BBBBU5\\BBB*5$773xx3{++++++cD6K#788tt	 	 	 x~~&!%..W%%tt			4"""t$$(*v 	" 	"AooG "OE4889999D!!!!%eT22Sv&&''tt	"	"	"4'''t$$4'''t$$d##5!!tt	 	 	 dOO	6?IoeT222TD//4;EOE4000	t__
1;E---i88tt				 677EEEt	#	#	#~~tt	&	&	&!%..ud++#E400	tWi88tt	"	"	" $v 		! 		!A$A !TNNq B BAMM"3E4"@"@AAAAB HTNN++q!!!a    !%v66t	"	"	"$[]v 	! 	!A !#E400TNNT??  #D>>DDDT?? '"4UD"A"AKK"&Kq!T;78888HTNN++q!!!a    v&&tt	!	!	!,UD99	7%&& 	 (   0/Y///RR	RRR	-..	 	CC C)T**	tt	 	 	  --t,,&(++ 	C   C CBDLLBBC C C fe,,tt			&ud33%%tt	 	 	 tt	 	 	 t,,tt	"	"	"$Sa((())rt	cr   c                     g }t                    } fdt          |          D             }t           |          S )Nc                0    g | ]}t                    S r   )rS  r   s     r   r   z&read_fstring_items.<locals>.<listcomp>b  s$    >>>ud++>>>r   )r   r   rT  )r   r   r  r   s   ``  r   rV  rV  _  sH    EA>>>>>U1XX>>>EeT5111r   r  list[Expression]c                "   t          |          dk    r|d         }t          ||           |S t          d |D                       r@d                    d |D                       }t	          |          }t          ||           |S t          |          }t	          d          }t          |d          }t          ||gt          gd g          }t          ||           t          ||           t          ||           t          ||           |S )Nr   r   c              3  @   K   | ]}t          |t                    V  d S r   )r   rX   r   items     r   r  z%build_fstring_join.<locals>.<genexpr>k  s,      
7
7:dG$$
7
7
7
7
7
7r    c                B    g | ]}t          t          |          j        S r   )r   rX   r$  r  s     r   r   z&build_fstring_join.<locals>.<listcomp>l  s%    AAA4T'4((.AAAr   join)
r   r   allr  rX   rE   rG   r(   r   set_line_column)	r   r   r  r   rb  r  str_exprmembercalls	            r   rT  rT  f  s   
5zzQQxt

7
7
7
7
777 GGAA5AAABBqzztE??Dr{{H&))FFTFWIv66DT4D$Hd###FD!!!Kr   c                   t          |          }|t          k    r.t          t          |                    }t	          ||           |S |t
          j        k    rt          | |          }t          |          }|rt          |          }d|z   dz   }nd}t          |          }|rt          | |          }	nt          d          }	t          t          |          d          }
t          |
|           t          |
||	gt          t          gd d g          }t          ||           t          |           |S t!          d|           )N{z:{}}z{:{}}r  r  zUnexpected tag )r   r   rX   r  r   r   FSTRING_INTERPOLATIONr   r   r	   rV  rG   r  r(   r   r   
ValueError)r   r   r  r  r   has_convcfmthas_specspecr  r  s               r   rS  rS  {  sD   AK=..//x   	
e)	)	)ud++ T?? 	A'F"CCC T?? 	%eT22DD2;;DGCLL(33%%%tw.@4,OOd###t.1..///r   r1  r-   srcc                6    |j         | _         |j        | _        d S r   )r   r   r1  r  s     r   r  r    s    (FKJFMMMr   c                f    |j         | _         |j        | _        |j        | _        |j        | _        d S r   )r   r   r   r   r  s     r   r   r     s-    (FKJFMlFOFr   c                     t          t                     t                    } fdt          |          D             S )Nc                0    g | ]}t                    S r   r   r   s     r   r   z(read_expression_list.<locals>.<listcomp>  s#    ;;;QOE4((;;;r   )r   r   r   r   )r   r   r   s   `` r   r   r     sD    tXdA;;;;;%((;;;;r   r:   c                H    t                     }t                    } fdt          |          D             } fdt          |          D             } fdt          |          D             }fdt          |          D             }t          |||||          S )zSHelper function to read comprehension data (shared by Generator, ListComp, SetComp)c                0    g | ]}t                    S r   r   rW  s     r   r   z'read_generator_expr.<locals>.<listcomp>  s#    IIIud++IIIr   c                0    g | ]}t                    S r   r   rW  s     r   r   z'read_generator_expr.<locals>.<listcomp>  s#    KKK!--KKKr   c                0    g | ]}t                    S r   r)  rW  s     r   r   z'read_generator_expr.<locals>.<listcomp>  s$    PPPq%eT22PPPr   c                .    g | ]}t                    S r   r+  r$  s     r   r   z'read_generator_expr.<locals>.<listcomp>  s    ===A	$===r   )r   r   r   r:   )r   r   	left_exprrl  rm  rn  ro  r   s   ``      r   r?  r?    s    t,,ID>>LIIIIIU<5H5HIIIGKKKKKu\7J7JKKKIPPPPPE,<O<OPPPI====|)<)<===HGY	8LLLr   r   c                    t          | t                     t          |           }||_        t          |           }||_        |t          |           z   |_        |t          |           z   |_        d S r   )r   r   r   r   r   r   r   )r   r   r   r   s       r   r   r     sf    tXDDI4  FDK=...DM}T222DOOOr   r   r<   c                N   t          | j                  dk    rg | j        d         _        | j        rqt          | j        j                  dk    rVt          | j        j        d         t                    r!t          | j        j        d                    dS g | j        _        dS dS dS )zRemove contents from IfStmt.

    Needed to still be able to check the conditions after the contents
    have been merged with the surrounding function overloads.
    r   r   N)r   r  r  r   r<   strip_contents_from_if_stmtr   s    r   r  r    s     49~~	!~ %#dn122a77dn)!,f55 	%'(;A(>?????"$DN	% %77r   c                4   t          | t                    sdS t          | j                  dk    r#t          | j        d         j                  dk    sdS | j        rt          | j        j                  dk    rdS t          | j        j        d                   S )z`Check stmt to make sure it is a stripped IfStmt.

    See also: strip_contents_from_if_stmt
    Fr   r   T)r   r<   r   r  r  is_stripped_if_stmtr  s    r   r  r    s    
 dF## u	NNaC	!(9$:$:a$?$?u> S!455::t t~215666r   c                l    |                      t          j        j        |j        |j        dd           dS )zIReport an error when overloads cannot be merged due to unknown condition.Fr  r   N)r   r
   FAILED_TO_MERGE_OVERLOADSr$  r   r   )r   r   s     r   fail_merge_overloadr    s@    	OO28	      r   current_overload_namec                $   t          | j        d         j                  dk    r_t          | j        d         j        d         t          t          f          s|+t          | j        d         j        d         t
                    st          | j        d         j                  dk    r\t          | j        d         j        d         t                    r1t          d | j        d         j        dd         D                       sdS t          t          t
          z  t          z  | j        d         j        d                   j        }| j	        | j	        j
        r|S t          | j	        j                  dk    rt          | j	        j        d         t          t
          t          f          r| j	        j        d         j        |k    r|S t          | j	        j        d         t                    r&t          | j	        j        d         |          |k    r|S dS )zsCheck if IfStmt contains only overloads with the same name.
    Return overload_name if found, None otherwise.
    r   r   Nr   c              3  4   K   | ]}t          |          V  d S r   )r  )r   r"  s     r   r  z-check_ifstmt_for_overloads.<locals>.<genexpr>  s+      SS#G,,SSSSSSr   )r   r  r   r/   rM   r9   r  r   r   r  r  r<   check_ifstmt_for_overloads)r   r  overload_names      r   r  r    s    	DIaL!##ty|(+i9J-KLL 	$ %049Q<,Q/99 1 ty| !!A%%ty|(,.?@@ &SSDIaL<Mcrc<RSSSSS & tW,/@@$)A,BSTVBWXX]M~!>
4>1$$ t~*1-	7DU/VWW	!#A&+}<<  t~*1-v66	!*4>+>q+ACXYY  ! 4r   "tuple[Block | None, IfStmt | None]c                   t          | |           | j        | j        d         j        du rdS | j        "| j        d         j        du r| j        j        du rd| fS | j        j        r| j        d         dfS | j        d         j        du rNt	          | j        j        d         t
                    r t          | j        j        d         |          S | j        dfS d| fS )zReturn block from IfStmt that will get executed.

    Return
        0 -> A block if sure that alternative blocks are unreachable.
        1 -> An IfStmt if the reachability of it can't be inferred,
             i.e. the truth value is unknown.
    Nr   TNNF)rp   r  r  r  r   r<   &get_executable_if_block_with_overloads)r   r   s     r   r  r    s     'tW555~$)A,"="E"Ez9Q<&%//N)U22 Tz~$ "y|T!!y|"d** dn)!,f55 	[9$.:Ma:PRYZZZ~t##:r   stmtsc           	     n
   g }g }d}d}d}d}d}d}	g }
|D ]]}d}d}d}t          |t                    r*t          ||          }|t          || j                  \  }}|t          |t
          t          f          r|j        |k    r||
                    |           |Jt          |t                    r|
                    |j                   n|                    |           d\  }}|	rt          | |	           d}	|                    |           t          |t                    r|j        }|_t          |t                    rI||k    rB||k    r;|
                    |           ||t          | |           m|Jt          |t                    r|
                    |j                   n|                    |           d\  }}t          |j        d         t                    rg|

                    t          t          t                   |j        dd                              |
                    |j        d         j                   @|                    t          t
          t          z  |j        d                              }||                    |           |}d\  }}d}	|rF||k    r@|                                }t          |t                    sJ |
                    |           |r-|
r+|
D ]&}t#          |           |                    |           'g }
t%          |          dk    r|                    |d                    n5t%          |          dk    r"|                    t          |                     d}t          |t
                    r t'          |j                  s|g}|j        }t          |t                    r|~g }|}|}d}|p|

                    t          t          t                   |j        dd                              t          t
          t          z  t          z  |j        d                   }|}	Dg }d}|                    |           _|r+|
r)|
D ]&}t#          |           |                    |           't%          |          dk    r|                    |d                    net%          |          dk    r#|                    t          |                     n/||                    |           n||                    |           |S )aq  Merge consecutive function overloads into OverloadedFuncDef nodes.

    This function processes a list of statements and combines function overloads
    (marked with @overload decorator) that have the same name into a single
    OverloadedFuncDef node. It also handles conditional overloads (overloads
    inside if statements) when the condition can be evaluated.
    Nr  r   r   r   )r   r<   r  r  r   r/   r9   r   r   rM   extendr  r  r  r   rK  popr  r   r   )r   r  retcurrent_overloadr  last_unconditional_func_deflast_if_stmtlast_if_overloadlast_if_stmt_overload_namelast_if_unknown_truth_valueskipped_if_stmtsr   if_overload_nameif_block_with_overloadif_unknown_truth_valuepoppedr"  s                    r   r   r   =  s    C+-(,.2"&LGK-115%' s! s!'+/304dF## 	9$@UVV+:4OO ?&(>
 "-4)W!566 .	222' ''555+ .0ABB >$++,<,BCCCC$++,<===1;..* 3#E+FGGG.2+##D)))$(( 8 /3i+!-4(( . $999+/DDD ##D)))%-)5'/EFFF+ .0ABB >$++,<,BCCCC$++,<===1;..05b9;LMM c ''T&\;Q;VWZXZWZ;[(\(\]]] ''(>(CB(G(MNNNN ''Y-@BXB]^_B`(a(abbbb'

<(((-B*1;...2+ 0$9=W$W$W !&&11111 ''/// &$4 &  0 ( (G/888JJw''''#% #$$))

+A.////%&&**

,-=>>??? +/'$	** !3CDI3N3N !$(6 (,	%%D&)) !.>.J#% (8%#-1*)5$++Df?U?Z[^\^[^?_,`,`aaa'+!G+.??AWA\]_A`( ($ /E++#% (,%

4      ,   ( 	  	 G'000JJw
!!

#A&''''				"	"

$%5667777		%

#$$$$		!

<   Jr   r   byteslist[ImportBase]c                j   | sg S t          |           }t          |t                     t          |          }g }t	          |          D ]}t          |          }|t          k    ryt          |          }t          |          }t          |          }|rt          |          }	nd}	t          ||	fg          }
t          ||
           |                    |
           |t          k    rt          |          }t          |          }t          |t                     t          |          }g }t	          |          D ]K}t          |          }t          |          }|rt          |          }	nd}	|                    ||	f           Lt          |||          }
t          ||
           |                    |
           x|t          k    rUt          |          }t          |          }t!          ||          }
t          ||
           |                    |
           t#          d|           |S )zDeserialize import metadata from bytes into mypy AST nodes.

    Args:
        import_bytes: Serialized import metadata from the Rust parser

    Returns:
        List of Import and ImportFrom AST nodes with location and metadata
    Nz#Unexpected tag in import metadata: )r   r   r   r   r   r   r   r	   r   r   r=   _read_and_set_import_metadatar   r   r@   r   r>   r  )r   r   	n_importsr   r   r   r   r5  r3  r4  r   moduler_  r7  s                 r   r   r     s1     	l##DtXd##I "G9 0J 0Jtnn/!!D>>D~~H"4J !$ D&>*++D)$555NN4    '''d^^F~~HtX&&&#D))G24E7^^ - -~~&t__
 "%d^^FF!FdF^,,,,fh66D)$555NN4    &&&d^^F~~HVX..D)$555NN4     H3HHIIINr   Import | ImportFrom | ImportAllc                    t          | |           t          |           }|dz  dk    |_        |dz  dk    |_        |dz  dk    |_        dS )zRead location and metadata flags from buffer and set them on the import statement.

    Args:
        data: Buffer containing serialized data
        stmt: Import, ImportFrom, or ImportAll statement to populate with location and metadata
    r   r   r,     N)r   r   is_top_levelr  is_mypy_only)r   r   flagss      r   r  r    s\     T4 TNNE !+D 4<A-D!+Dr   )FF)
r   r   r   rf   r   r   r   r   r   r   )r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )F)r   r   r   rf   r   r   r   r   )r   r   r   r   r   rW   )r   r   r   r   r   rA  )r   r   r   r   r   rS  )r   r   r   r   r   r9   )r   r   r   r   r   r)   )r   r   r   r   r   r^   )r   r   r   r   r   r\   )r   r   r   r   r   rz   )ri  rz   r   r   )r   r   r   r   r   rk   )r   r   r   r   r   r%   )r   r   r   r   r   r
  )r   r   r   r   r   r4   )r   r   r   r   r  r  r   r4   )r1  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   rW   r   r   )r   r   r   r<   r   r   r   )r   r<   r  r   r   r   )r   r<   r   rf   r   r  )r   r   r  r   r   r   )r   r  r   r  )r   r   r   r  r   r   )__doc__
__future__r   r   typingr   r   r   r   librt.internalr   r:  r   r   r	   r  mypyr
   r   r   
mypy.cacher   r   r   r   r   r   r   r   r   r   r   r   r   
mypy.nodesr   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   rc   rd   re   mypy.optionsrf   mypy.patternsrg   rh   ri   rj   rk   rl   rm   rn   ro   mypy.reachabilityrp   mypy.sharedparserq   
mypy.typesrr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r   	mypy.utilr   rK  r  r   r   TypeIgnoresr   __annotations__r   r   r   r   r   r   r   rR  r^  r   r  r  r  r   r  r  r  r  r   r   r  r  r  r!  r   rV  rT  rS  r  r   r   r?  r   r  r  r  r  r  r   r   r  r   r   r   <module>r     sQ
    $ # " " " " " 				 # # # # # # # # # #              0 / / / / / / / / /                                 "M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M M\ !          
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 A @ @ @ @ @ 9 9 9 9 9 9                                 " ' & & & & &5d3i() ""2B;; ; ; ; ;
 
 
 
 
 
 
 
< _d5% 5% 5% 5% 5%p% % % %5 5 5 5	 	 	 	 CH    *] ] ] ]@	) ) ) )X   84 4 4 4n) ) ) )X3 3 3 3l/ / / /dN N N Nb      l l l l^e4 e4 e4 e4P   .   $ WVV V V V V$-    SSS S S S S)))	 ) ) ) )W W W Wt
2 2 2 2   *0 0 0 0D   
' ' ' '< < < <M M M M3 3 3 3% % % %7 7 7 7(    7;' ' ' ' 'T   BT T T TnE E E EP, , , , , ,r   