
    ni:                      U d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	m
Z
 ddlmZmZ ddlmZmZmZmZmZmZmZmZ dd	lmZmZ dd
lmZmZm Z!m"Z#m$Z% ddl&m'Z' ddl(Z)ddl*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5mZm6Z6m7Z7m8Z8m9Z9m Z m:Z:m;Z;m<Z<m=Z=m>Z>m"Z"m?Z?m@Z@mAZAmBZBm$Z$mCZCmDZDmEZEmFZF ddlGmHZH ddlImJZJmKZKmLZL ddlMmNZNmOZOmPZP erddlQmRZR e G d de                      ZS G d d          ZTerddlUZ) ed          ZVeWeXef         ZYdeZd<   dZ[deZd<   dZ\deZd<   dZ]deZd<   dZ^deZd<   dZ_deZd <   dZ`deZd!<   dZadeZd"<   dZbdeZd#<   dZcdeZd$<   e[d%e\d&e]d'e^d(iZddeZd)<   d* ede                                D             ZfdeZd+<   d,ddd,d,ddd-ZgdeZd.<   d/d0d1d2d3d4d5d6d7d8d9
ZhdeZd:<   d;d<iZideZd=<   d7d8d>ZjdeZd?<   d@dAdBdCdDZkdeZdE<   dFZldeZdG<   dHZmdeZdI<    G dJ dKeT          Zne' G dL dMen                      Zoe' G dN dOen                      Zp G dP dQep          ZqepZrdeZdR<   e' G dS dTen                      ZseteXdUedV         f         ZudeZdW<    G dX dYes          Zv G dZ d[eo          Zw G d\ d]ew          Zx G d^ d_ew          Zy G d` daew          Zzg dbZ{deZdc<    G dd deen          Z|edf         Z}deZdg<    G dh die|eseo          Z~ G dj dken          ZdZdeZdl<   dZdeZdm<   dZdeZdn<    G do dp          Ze{g dqz   ZdeZdr<    G ds dte|          Zeg duz   ZdeZdv<   dZdeZdw<   dZdeZdx<   dZdeZdy<    G dz d{eeseo          Ze~efZdeZd|<    G d} d~eseo          Zg dZdeZd<    G d des          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d deo          Z G d dep          Z G d dep          Zd}dZ G d dep          Z G d dep          Z G d dep          Z G d dep          Z G d dep          Z G d dep          Z G d de          Z G dĄ de          Ze G dƄ de                      Zej        ZdeZd<   ej        ZdeZd<   ej        ZdeZd<   ej        ZdeZd<   ej        ZdeZd<   ej        ZdeZd<   eeeeeefZdeZd<    G dτ dep          Z G dф dep          Z G dӄ dep          Z G dՄ dep          Z G dׄ dep          Z G dل dep          Z G dۄ dep          ZeeeeefZ G d݄ dep          Z G d߄ dep          Z G d dep          Z G d dep          Z G d dep          Z G d dep          Z G d dep          Z G d deep          Z G d dep          Z G d dep          Z G d dep          Z G d dep          Z G d dep          Z G d dep          Z G d dep          Z G d dep          Z G d dep          Z G d d ep          ZdZdeZd<   dZdeZd<   dZdeZd<   dZdeZd<    G d desep          ZefZdeZd<    G d d	eզ          Z G d
 deզ          Z G d deզ          Z G d dep          Z G d dep          Z G d dep          Z G d dep          Z G d dep          Z G d dep          Z G d dep          Z G d dep          Z eh d          ZdeZd<    eh d           ZdeZd!<    G d" dVes          Z G d# d$e          Z ed%          Zd&eZd'<    ed(          Zd&eZd)<    ed*          Zd&eZd+<    ed,          ZdeZd-<    G d. d/es          Z G d0 d1es          Z G d2 dU          Z G d3 d4eWeXef                   Z G d5 d6          Zd~d:Zdd=Zdd@ZddBZddEZdF  e            e                                D             ZdeZdG<   ddNZ	 dddSZddUZddWZddZZ	 ddd_Zd`ZdaeZdb<   dcZdaeZdd<   deZdaeZdf<   dgZdaeZdh<   diZ daeZdj<   dkZdaeZdl<   dmZdaeZdn<   doZdaeZdp<   dqZdaeZdr<   dsZdaeZdt<   duZdaeZdv<   dwZdaeZdx<   ddyZddd|Z	dS (  z4Abstract syntax tree node classes (i.e. parse tree).    )annotationsN)abstractmethod)defaultdict)IteratorSequence)Enumunique)TYPE_CHECKINGAnyCallableFinalOptionalTypeVarUnioncast)	TypeAlias	TypeGuard)
read_floatread_intread_str	write_int	write_str)trait) DICT_STR_GENDT_SPECEND_TAGLIST_GENLIST_STRLITERAL_COMPLEXLITERAL_NONE
ReadBufferTagWriteBuffer	read_boolr   read_int_listread_int_opt	read_jsonread_literalr   read_str_listread_str_optread_str_opt_listread_tag
write_boolr   write_int_listwrite_int_opt
write_jsonwrite_literalr   write_str_listwrite_str_optwrite_str_opt_list	write_tag)Options)	is_sunderis_typeshed_file
short_type)ExpressionVisitorNodeVisitorStatementVisitor)Patternc                      e Zd Zd ZdS )	NotParsedN)__name__
__module____qualname__VALUE     G/var/www/html/gpu-tools/venv/lib/python3.11/site-packages/mypy/nodes.pyr?   r?   A   s        EEErE   r?   c                  0    e Zd ZdZdZddd	Z	 	 	 dddZd
S )Contextz@Base type for objects that are valid as error message locations.linecolumnend_line
end_columnrJ   intrK   returnNonec                >    || _         || _        d | _        d | _        d S NrI   )selfrJ   rK   s      rF   __init__zContext.__init__K   s"    	$(&*rE   NtargetContext | int
int | NonerL   rM   c                    t          |t                    r|| _        n0|j        | _        |j        | _        |j        | _        |j        | _        ||| _        ||| _        |	|| _        dS dS )zIf target is a node, pull line (and column) information
        into this node. If column is specified, this will override any column
        information coming from a node.
        N)
isinstancerO   rJ   rK   rL   rM   )rT   rV   rK   rL   rM   s        rF   set_linezContext.set_lineQ   sw     fc"" 	0DIIDI -DK"ODM$/DO DK$DM!(DOOO "!rE   )rN   rN   )rJ   rO   rK   rO   rP   rQ   NNN
rV   rW   rK   rX   rL   rX   rM   rX   rP   rQ   )r@   rA   rB   __doc__	__slots__rU   r[   rD   rE   rF   rH   rH   F   s\        JJ<I+ + + + + "#!%) ) ) ) ) ) )rE   rH   T
_TypeAliasJsonDictr   LDEF   GDEF   MDEF   UNBOUND_IMPORTEDREVEAL_TYPEREVEAL_LOCALSLITERAL_YESLITERAL_TYPE
LITERAL_NOLdefGdefMdefUnboundImported
node_kindsc                    i | ]\  }}||	S rD   rD   ).0_name_kinds      rF   
<dictcomp>rx      s    QQQleUUEQQQrE   inverse_node_kindsz__builtins__.str)r@   r^   __path____file____package____annotations____spec__implicit_module_attrsbuiltins.listbuiltins.dictbuiltins.setbuiltins.frozensetzcollections.ChainMapzcollections.Counterzcollections.defaultdictzcollections.dequezcollections.OrderedDictzbuiltins.str)
typing.Listtyping.Dict
typing.Settyping.FrozenSetztyping.ChainMapztyping.Counterztyping.DefaultDictztyping.Dequeztyping.OrderedDicttyping.LiteralStringtype_aliasesr   )rh      type_aliases_source_versions)ztyping_extensions.OrderedDictztyping_extensions.LiteralStringtyping_extensions_aliasesr   r   r   r   )r   r   r   r   reverse_builtin_aliases)ztyping.runtime_checkableztyping_extensions.runtimez#typing_extensions.runtime_checkableRUNTIME_PROTOCOL_DECOSz<lambda>LAMBDA_NAMEc                  .    e Zd ZdZdZddZddZddZdS )Nodez4Common base class for all non-type parse tree nodes.rD   rP   strc                    |                      t          j                            t	                                          S Noptions)acceptmypystrconvStrConvr6   rT   s    rF   __str__zNode.__str__   s+    {{4<//		/BBCCCrE   r   r6   c                t    |                      t          j                            |                    }|sJ |S r   )r   r   r   r   )rT   r   as      rF   str_with_optionszNode.str_with_options   s4    KK,,W,==>>rE   visitorNodeVisitor[T]r`   c                <    t          dt          |                     NzNot implementedRuntimeErrortyperT   r   s     rF   r   zNode.accept       ,d4jj999rE   NrP   r   )r   r6   rP   r   r   r   rP   r`   )r@   rA   rB   r^   r_   r   r   r   rD   rE   rF   r   r      s_        >>ID D D D   
: : : : : :rE   r   c                      e Zd ZdZdZd	dZdS )
	StatementzA statement node.rD   r   StatementVisitor[T]rP   r`   c                <    t          dt          |                     r   r   r   s     rF   r   zStatement.accept   r   rE   Nr   r   rP   r`   r@   rA   rB   r^   r_   r   rD   rE   rF   r   r      s3        I: : : : : :rE   r   c                      e Zd ZdZdZd	dZdS )

ExpressionzAn expression node.rD   r   ExpressionVisitor[T]rP   r`   c                <    t          dt          |                     r   r   r   s     rF   r   zExpression.accept   r   rE   Nr   r   rP   r`   r   rD   rE   rF   r   r      s3        I: : : : : :rE   r   c                      e Zd ZdZdZdS )FakeExpressionzA dummy expression.

    We need a dummy expression in one place, and can't instantiate Expression
    because it is a trait and mypyc barfs.
    rD   N)r@   rA   rB   r^   r_   rD   rE   rF   r   r      s          IIIrE   r   Lvaluec                      e Zd ZdZdZeedd                        Zeedd                        Zedd            Z	e
dd
            ZddZe
dd            ZdS )
SymbolNodez+Nodes that can be stored in a symbol table.rD   rP   r   c                    d S rS   rD   r   s    rF   namezSymbolNode.name
  	     	rE   c                    d S rS   rD   r   s    rF   fullnamezSymbolNode.fullname  r   rE   rb   c                    d S rS   rD   r   s    rF   	serializezSymbolNode.serialize  s    rE   datac                    |d         }t                               |          }| ||          S t          d|           )N.classzunexpected .class )deserialize_mapgetNotImplementedError)clsr   	classnamemethods       rF   deserializezSymbolNode.deserialize  sI    N	 $$Y//6$<<!"By"B"BCCCrE   r#   rQ   c                <    t          d| j        j         d          )NzCannot serialize 	 instance)r   	__class__r@   rT   r   s     rF   writezSymbolNode.write!  s!    !"Xdn6M"X"X"XYYYrE   r!   c                2    t          d| j         d          )NzCannot deserialize r   )r   r@   r   r   s     rF   readzSymbolNode.read$  s    !"O"O"O"OPPPrE   Nr   rP   rb   )r   rb   rP   r   r   r#   rP   rQ   r   r!   rP   r   )r@   rA   rB   r^   r_   propertyr   r   r   r   classmethodr   r   r   rD   rE   rF   r   r     s        55I   ^ X    ^ X    ^ D D D [DZ Z Z Z Q Q Q [Q Q QrE   r   SymbolTableNodeTypeInfo
Definitionc                  l    e Zd ZU dZdZdZded<   ded<   ded<   d	ed
<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   	 	 d;d< fd$Zd=d&Ze	d>d'            Z
e	d>d(            Zd?d,Zd@d-ZdAd/ZdBd2ZdCd4ZedDd6            ZdEd8ZedFd:            Z xZS )GMypyFilez1The abstract syntax tree of a single source file.)	_fullnamepathdefs
alias_depsmodule_refsis_bomnamesimportsignored_linesskipped_linesis_stubis_cache_skeletonis_partial_stub_packageplugin_depsfuture_import_flags_is_typeshed_file)r   r   r   r   r   r   list[Statement]r   zdefaultdict[str, set[str]]r   zset[str]r   boolr   SymbolTabler   list[ImportBase]r   zdict[int, list[str]]r   zset[int]r   r   r   r   zdict[str, set[str]]r   r   bool | Noner   FNdict[int, list[str]] | NonerP   rQ   c                   t                                                       || _        d| _        d| _        || _        || _        t          t                    | _	        t                      | _
        i | _        |r|| _        ni | _        t                      | _        d| _        d| _        d| _        d| _        t                      | _        d | _        d S )Nrd   r    F)superrU   r   rJ   rK   r   r   r   setr   r   r   r   r   r   r   r   r   r   r   )rT   r   r   r   r   r   s        rF   rU   zMypyFile.__init__j  s     			%c**55 	$!.D!#D UU	!&',$#&55 !%rE   Iterator[Definition]c                6    t          | j        | j                  S )zyReturn all definitions within the module (including nested).

        This doesn't include imported definitions.
        )local_definitionsr   r   r   s    rF   r   zMypyFile.local_definitions  s    
 !T];;;rE   c                T    | j         sdn| j                             d          d         S )Nr   .rN   r   splitr   s    rF   r   zMypyFile.name  s(    JrrT^-A-A#-F-Fr-JJrE   c                    | j         S rS   r   r   s    rF   r   zMypyFile.fullname  
    ~rE   r   r   r`   c                ,    |                     |           S rS   )visit_mypy_filer   s     rF   r   zMypyFile.accept      &&t,,,rE   c                    t          | j                  dk    o6t          j                            | j                                      d          S )Nr   z	__init__.)lenr   osbasename
startswithr   s    rF   is_package_init_filezMypyFile.is_package_init_file  s:    49~~"Zrw'7'7	'B'B'M'Mk'Z'ZZrE   flagc                    || j         v S rS   )r   )rT   r  s     rF   is_future_flag_setzMypyFile.is_future_flag_set  s    t///rE   r   r6   c                \    | j         t          |j        | j                  | _         | j         S rS   )r   r8   abs_custom_typeshed_dirr   rT   r   s     rF   r8   zMypyFile.is_typeshed_file  s-    !)%5g6UW[W`%a%aD"%%rE   rb   c           	         d| j         | j                            | j                   | j        | j        | j        t          | j                  dS )Nr   )r   r   r   r   r   r   r   )r   r   r   r   r   r   sortedr   r   s    rF   r   zMypyFile.serialize  sL     Z))$.99|I'+'C#)$*B#C#C
 
 	
rE   r   c                F   |d         dk    s
J |            t          g g           }|d         |_        t                              |d                   |_        |d         |_        |d         |_        |d         |_        d|_        t          |d	                   |_
        |S )
Nr   r   r   r   r   r   r   Tr   )r   r   r   r   r   r   r   r   r   r   r   r   r   trees      rF   r   zMypyFile.deserialize  s    H~+++T+++Bk* ,,T'];;
IL	'+,E'F$!%#&t,A'B#C#C rE   r#   c                   t          |t                     t          || j                   | j                            || j                   t          || j                   t          || j                   t          || j	                   t          |t          | j                             t          |t                     d S rS   )r5   	MYPY_FILEr   r   r   r   r-   r   r   r   r2   r  r   r   r   s     rF   r   zMypyFile.write  s    $	"""$'''
t~...4&&&$	"""45666tVD$<==>>>$     rE   r!   c                   t          |          t          k    sJ t          g g           }t          |          |_        t
                              |          |_        t          |          |_	        t          |          |_
        t          |          |_        t          t          |                    |_        d|_        t          |          t           k    sJ |S NT)r,   r  r   r   r   r   r   r   r$   r   r   r   r   r)   r   r   r   r  s      rF   r   zMypyFile.read  s    ~~****B!$ %%d++
 TNN	'0$#&}T':':#;#; !%~~((((rE   )FN)
r   r   r   r   r   r   r   r   rP   rQ   )rP   r   r   r   rP   r   )r  r   rP   r   )r   r6   rP   r   r   )r   rb   rP   r   r   )r   r!   rP   r   )r@   rA   rB   r^   r_   __match_args__r}   rU   r   r   r   r   r   r
  r  r8   r   r   r   r   r   __classcell__r   s   @rF   r   r   -  s2        ;;I& .N NNNIII**** LLL (''' MMM "!!!$$$$!!!!"""" 59& & & & & & &:< < < < K K K XK    X- - - -[ [ [ [0 0 0 0& & & &	
 	
 	
 	
 
 
 
 [
! ! ! !    [    rE   r   c                  R     e Zd ZU dZdZded<   ded<   ded<   ded<   d fdZ xZS )
ImportBasez%Base class for all import statements.)is_unreachableis_top_levelis_mypy_onlyassignmentsr   r   r!  r"  zlist[AssignmentStmt]r#  rP   rQ   c                    t                                                       g | _        d| _        d| _        d| _        d S NF)r   rU   r#  r   r!  r"  rT   r   s    rF   rU   zImportBase.__init__  s?    #!!rE   rP   rQ   )r@   rA   rB   r^   r_   r}   rU   r  r  s   @rF   r  r    s|         //QI &%%%" " " " " " " " " "rE   r  c                  @     e Zd ZU dZdZdZded<   d fdZddZ xZ	S )Importzimport m [as n])idslist[tuple[str, str | None]]r*  rP   rQ   c                V    t                                                       || _        d S rS   )r   rU   r*  )rT   r*  r   s     rF   rU   zImport.__init__  s$    rE   r   r   r`   c                ,    |                     |           S rS   )visit_importr   s     rF   r   zImport.accept  s    ##D)))rE   )r*  r+  rP   rQ   r   
r@   rA   rB   r^   r_   r  r}   rU   r   r  r  s   @rF   r)  r)    so         IN%%%%     * * * * * * * *rE   r)  c                  T     e Zd ZU dZdZdZded<   ded<   ded<   d fdZddZ xZ	S )
ImportFromzfrom m import x [as y], ...)idr   relativer   r2  rO   r3  r+  r   rP   rQ   c                r    t                                                       || _        || _        || _        d S rS   )r   rU   r2  r   r3  )rT   r2  r3  r   r   s       rF   rU   zImportFrom.__init__  s2    
 rE   r   r   r`   c                ,    |                     |           S rS   )visit_import_fromr   s     rF   r   zImportFrom.accept      ((...rE   )r2  r   r3  rO   r   r+  rP   rQ   r   r/  r  s   @rF   r1  r1     s         %%+I0NGGGMMM''''! ! ! ! ! !/ / / / / / / /rE   r1  c                  J     e Zd ZU dZdZdZded<   ded<   d fd	ZddZ xZ	S )	ImportAllzfrom m import *)r2  r3  r   r2  rO   r3  rP   rQ   c                d    t                                                       || _        || _        d S rS   )r   rU   r2  r3  )rT   r2  r3  r   s      rF   rU   zImportAll.__init__  s+     rE   r   r   r`   c                ,    |                     |           S rS   )visit_import_allr   s     rF   r   zImportAll.accept$      ''---rE   )r2  r   r3  rO   rP   rQ   r   r/  r  s   @rF   r9  r9    su         "I'NGGGMMM! ! ! ! ! !
. . . . . . . .rE   r9  )is_propertyis_class	is_staticis_finalFUNCBASE_FLAGSc                       e Zd ZdZdZd fdZeedd                        Zedd            Z	edd
            Z
 xZS )FuncBasea  Abstract base class for function-like nodes.

    N.B: Although this has SymbolNode subclasses (FuncDef,
    OverloadedFuncDef), avoid calling isinstance(..., FuncBase) on
    something that is typed as SymbolNode.  This is to work around
    mypy bug #3603, in which mypy doesn't understand multiple
    inheritance very well, and will assume that a SymbolNode
    cannot be a FuncBase.

    Instead, test against SYMBOL_FUNCBASE_TYPES, which enumerates
    SymbolNode subclasses that are also FuncBase subclasses.
    )
r   unanalyzed_typeinfor>  r?  r@  rA  is_explicit_overrideis_type_check_onlyr   rP   rQ   c                    t                                                       d | _        d | _        t          | _        d| _        d| _        d| _        d| _	        d| _
        d| _        d| _        d S )NFr   )r   rU   r   rE  FUNC_NO_INFOrF  r>  r?  r@  rA  rG  rH  r   r&  s    rF   rU   zFuncBase.__init__F  sk     37	=A 	  $)!"'rE   r   c                    d S rS   rD   r   s    rF   r   zFuncBase.nameZ  r   rE   c                    | j         S rS   r   r   s    rF   r   zFuncBase.fullname_  r  rE   r   c                (    | j          p
| j        dk    S )a  If used as a method, does it have an argument for method binding (`self`, `cls`)?

        This is true for `__new__` even though `__new__` does not undergo method binding,
        because we still usually assume that `cls` corresponds to the enclosing class.
        __new__)r@  r   r   s    rF   has_self_or_cls_argumentz!FuncBase.has_self_or_cls_argumentc  s     >!;TY)%;;rE   r'  r   r  )r@   rA   rB   r^   r_   rU   r   r   r   r   rO  r  r  s   @rF   rD  rD  +  s         I     (    ^ X    X < < < X< < < < <rE   rD  )FuncDef	DecoratorOverloadPartc                       e Zd ZU dZdZded<   ded<   ded<   ded	<   d
ed<   d" fdZed#d            Zed$d            Z	ed%d            Z
d&dZd'dZed(d            Zd)dZed*d             Zd$d!Z xZS )+OverloadedFuncDefaR  A logical node representing all the variants of a multi-declaration function.

    A multi-declaration function is often an @overload, but can also be a
    @property with a setter and a/or a deleter.

    This node has no explicit representation in the source program.
    Overloaded variants must be consecutive in the source file.
    )itemsunanalyzed_itemsimpl
deprecatedsetter_index_is_trivial_selflist[OverloadPart]rU  rV  zOverloadPart | NonerW  
str | NonerX  rX   rY  rP   rQ   c                    t                                                       || _        |                                | _        d | _        d | _        d | _        d | _        |r.| 	                    |d         j
        |d         j                   d S d S Nr   )r   rU   rU  copyrV  rW  rX  rY  rZ  r[   rJ   rK   rT   rU  r   s     rF   rU   zOverloadedFuncDef.__init__  s    
 %

	 -1 	:MM%(-q99999	: 	:rE   r   c                ^    | j         r| j         d         j        S | j        J | j        j        S r^  )rU  r   rW  r   s    rF   r   zOverloadedFuncDef.name  s5    : 	":a=%% 9(((9>!rE   r   c                0   | j         | j         S t          | j                  D ]k\  }}|dk    s| j        sdnd}t	          |t
                    r|j        s
d| _          dS =t          |j                  |k    s|j	        j        s
d| _          dS ld| _         dS )zCheck we can use bind_self() fast path for this overload.

        This will return False if at least one overload:
          * Has an explicit self annotation, or Self in signature.
          * Has a non-trivial decorator.
        Nr   rd   FT)
rZ  	enumeraterU  r>  rZ   rP  is_trivial_selfr  
decoratorsfunc)rT   iitemtrivials       rF   rd  z!OverloadedFuncDef.is_trivial_self  s      ,(( ,, 		 		GAtq55(85aaaG$(( + !,1D) 55! T_%%//ty7P/(-%uu 0 !%trE   rQ  c                    | j         d         }t          |t                    sJ |j        j        sJ | j        J | j         | j                 }t          |t                    sJ |S r^  )rU  rZ   rQ  varis_settable_propertyrY  )rT   
first_itemrh  s      rF   setterzOverloadedFuncDef.setter  so     Z]
*i00000~2222 ,,,z$+,$	*****rE   r   r   r`   c                ,    |                     |           S rS   )visit_overloaded_func_defr   s     rF   r   zOverloadedFuncDef.accept      00666rE   rb   c           	         dd | j         D             | j        d n| j                                        | j        | j        d n| j                                        t          | t                    | j        | j        dS )NrT  c                6    g | ]}|                                 S rD   r   )ru   rg  s     rF   
<listcomp>z/OverloadedFuncDef.serialize.<locals>.<listcomp>       888akkmm888rE   )r   rU  r   r   rW  flagsrX  rY  )	rU  r   r   r   rW  	get_flagsrB  rX  rY  r   s    rF   r   zOverloadedFuncDef.serialize  s|    )88TZ888 I-DD493F3F3H3H I-DD493F3F3H3Ht^44/ -	
 	
 		
rE   r   c                   |d         dk    sJ t          d |d         D                       }|                    d          ot          t          t                              |d                             |_        t          |j                  dk    r|	                    |j        j
                   |                    d          Mt          j                            |d                   }t          |t          j        j                  sJ ||_        |d         |_        t%          ||d	                    |d
         |_        |d         |_        |S )Nr   rT  c                h    g | ]/}t          t          t                              |                    0S rD   )r   rR  r   r   )ru   ds     rF   ru  z1OverloadedFuncDef.deserialize.<locals>.<listcomp>  s0    RRRqT,
 6 6q 9 9::RRRrE   rU  rW  r   r   r   rw  rX  rY  )rT  r   r   rR  r   r   rW  r  rU  r[   rJ   r   typesdeserialize_typerZ   
ProperTyper   r   	set_flagsrX  rY  )r   r   restyps       rF   r   zOverloadedFuncDef.deserialize  s'   H~!44444RRDMRRR
 
 88F'L**@*@f*N*NOOCH39~~!!SX]+++88F'*--d6l;;Cc4:#899999CHZ(#tG}%%%l+/
rE   r#   c                h   t          |t                     t          |t                     t          |t	          | j                             | j        D ]}|                    |           t          j        	                    || j
                   t          || j                   | j        t          |t                     n| j                            |           t          || t                      t#          || j                   t'          || j                   t          |t*                     d S rS   )r5   OVERLOADED_FUNC_DEFr   write_int_barer  rU  r   r   r|  write_type_optr   r   r   rW  r    write_flagsrB  r3   rX  r/   rY  r   )rT   r   rh  s      rF   r   zOverloadedFuncDef.write  s	   $+,,,$!!!tS__---J 	 	DJJt
!!$	222$'''9dL))))IOOD!!!D$///dDO,,,dD-...$     rE   r!   c                   t                    t          k    sJ t          fdt          t	                              D                       }t
          j                                      }|(t          |t
          j        j	                  sJ ||_
        t                    |_        t                    }|t          k    rLt          |          |_        t!          |j                  dk    r|                    |j        j                   t)          |t*                     t-                    |_        t1                    |_        t                    t4          k    sJ |S )Nc                .    g | ]}t                    S rD   )read_overload_partru   _r   s     rF   ru  z*OverloadedFuncDef.read.<locals>.<listcomp>  s"     ^ ^ ^a!3D!9!9 ^ ^ ^rE   r   )r,   r   rT  rangeread_int_barer   r|  read_type_optrZ   r~  r   r   r   r    r  rW  r  rU  r[   rJ   
read_flagsrB  r*   rX  r&   rY  r   )r   r   r  r  tags    `   rF   r   zOverloadedFuncDef.read  s3   ~~)))) ^ ^ ^ ^5W[I\I\C]C] ^ ^ ^__j&&t,,?c4:#899999CH tnn,)$44CH39~~!!SX]+++4n---%d++'--~~((((
rE   c                >    t          d | j        D                       S )Nc              3  >   K   | ]}|                                 V  d S rS   )
is_dynamicru   rh  s     rF   	<genexpr>z/OverloadedFuncDef.is_dynamic.<locals>.<genexpr>  s,      <<4??$$<<<<<<rE   )allrU  r   s    rF   r  zOverloadedFuncDef.is_dynamic  s!    <<<<<<<<rE   )rU  r[  rP   rQ   r   r  )rP   rQ  r   r   )r   rb   rP   rT  r   )r   r!   rP   rT  )r@   rA   rB   r^   r_   r}   rU   r   r   rd  rn  r   r   r   r   r   r   r  r  r  s   @rF   rT  rT  p  s~         I ((((
: 
: 
: 
: 
: 
: " " " X"    X,    X7 7 7 7

 

 

 

    [*! ! ! !"    [*= = = = = = = =rE   rT  c                  D     e Zd ZdZdZdZ	 dd fdZ	 	 	 dd fdZ xZS )Argumentz A single argument in a FuncItem.)variabletype_annotationinitializerkindpos_onlyFr  Varr  mypy.types.Type | Noner  Expression | Noner  ArgKindr  r   rP   rQ   c                    t                                                       || _        || _        || _        || _        || _        d S rS   )r   rU   r  r  r  r  r  )rT   r  r  r  r  r  r   s         rF   rU   zArgument.__init__  sD     	 .&	 rE   NrV   rW   rK   rX   rL   rM   c                B   t                                          ||||           | j        rA| j        j        dk     r1| j                            | j        | j        | j        | j                   | j                            | j        | j        | j        | j                   d S r^  )r   r[   r  rJ   rK   rL   rM   r  )rT   rV   rK   rL   rM   r   s        rF   r[   zArgument.set_line&  s     	:>>> 	^ 0 5 9 9%%didmT_]]]ty$+t}doVVVVVrE   F)r  r  r  r  r  r  r  r  r  r   rP   rQ   r\   r]   )	r@   rA   rB   r^   r_   r  rU   r[   r  r  s   @rF   r  r    s        **RIWN ! ! ! ! ! ! !$ "#!%W W W W W W W W W W WrE   r  TYPE_VAR_KINDPARAM_SPEC_KINDTYPE_VAR_TUPLE_KINDc                      e Zd ZdZddZdS )	TypeParamr   r  upper_boundvaluesdefaultr   r   r  rO   r  r  r  list[mypy.types.Type]r  rP   rQ   c                L    || _         || _        || _        || _        || _        d S rS   r  )rT   r   r  r  r  r  s         rF   rU   zTypeParam.__init__>  s,     		&rE   N)r   r   r  rO   r  r  r  r  r  r  rP   rQ   )r@   rA   rB   r_   rU   rD   rE   rF   r  r  ;  s-        DI     rE   r  )is_overloadis_generatoris_coroutineis_async_generatoris_awaitable_coroutineFUNCITEM_FLAGSc                  F     e Zd ZdZdZdZ	 	 	 	 dd fdZddZddZ xZ	S )FuncItemz9Base class for nodes usable as overloaded function items.)	arguments	arg_names	arg_kindsmin_argsmax_pos	type_argsbodyr  r  r  r  r  expanded)r  r  r  Nr  list[Argument] | Noner  Block | Noner  mypy.types.FunctionLike | Noner  list[TypeParam] | NonerP   rQ   c                   t                                                       |pg | _        d | j        D             | _        d | j        D             | _        | j                            t                    | j                            t                    z   | _        || _	        |pt          g           | _        || _        || _        d| _        d| _        d| _        d| _        d| _        g | _        d| _        t+          t-          | j                            D ]1}| j        |         "||                                 k     r
|dz   | _        2d S )Nc                8    g | ]}|j         rd n|j        j        S rS   )r  r  r   ru   args     rF   ru  z%FuncItem.__init__.<locals>.<listcomp>v  s(    ```##,E$$CL4E```rE   c                    g | ]	}|j         
S rD   )r  r  s     rF   ru  z%FuncItem.__init__.<locals>.<listcomp>w  s    (L(L(Lc(L(L(LrE   Fr   rd   )r   rU   r  r  r  countARG_POSARG_OPTr  r  Blockr  r   rE  r  r  r  r  r  r  r  r  r  max_fixed_argc)rT   r  r  r  r  rg  r   s         rF   rU   zFuncItem.__init__m  s;    	"b``QUQ_```(L(LT^(L(L(L N0099DN<P<PQX<Y<YY1:,599		"!&"'"'(-,1#(*s4>**++ 	& 	&A~a (Q1D1D1F1F-F-F !A	& 	&rE   rO   c                    | j         S rS   )r  r   s    rF   r  zFuncItem.max_fixed_argc  s
    |rE   r   c                    | j         d u S rS   r   r   s    rF   r  zFuncItem.is_dynamic  s    yD  rE   )NNNN)
r  r  r  r  r  r  r  r  rP   rQ   )rP   rO   r  )
r@   rA   rB   r^   r_   __deletable__rU   r  r  r  r  s   @rF   r  r  V  s        CCI$ 9M ,0!.2,0& & & & & & &8   ! ! ! ! ! ! ! !rE   r  )is_decoratedis_conditionalis_trivial_bodyrd  r"  FUNCDEF_FLAGSNOT_ABSTRACTIS_ABSTRACTIMPLICITLY_ABSTRACTc                       e Zd ZdZdZdZ	 	 	 	 	 d d! fdZed"d            Zd#dZ	d$dZ
ed%d            Zd&dZed'd            Z xZS )(rP  zQFunction definition.

    This is a non-lambda function defined using 'def'.
    )rv   r  r  abstract_statusoriginal_defr  rd  has_self_attr_defr"  dataclass_transform_spec	docstringrX  original_first_arg)r   r  r   r  r   Nr   r   r  r  r  r  r  r  r  r  rP   rQ   c                F   t                                          ||||           || _        d| _        d| _        t
          | _        d| _        d | _        d| _	        d | _
        d | _        d | _        d| _        d| _        |r|d         j        j        | _        d S d | _        d S )NFr   )r   rU   rv   r  r  r  r  r  r  r"  r  r  rX  rd  r  r  r   r  )rT   r   r  r  r  r  r   s         rF   rU   zFuncDef.__init__  s     	D#y999
!#+  %>B!GK%%)&*  %!&  	+2;A,2G2LD###&*D###rE   c                    | j         S rS   rv   r   s    rF   r   zFuncDef.name  
    zrE   r   r   r`   c                ,    |                     |           S rS   )visit_func_defr   s     rF   r   zFuncDef.accept      %%d+++rE   rb   c                   d| j         | j        | j        d | j        D             | j        d n| j                                        t          | t                    | j        | j	        d n| j	                                        | j
        | j        dS )NrP  c                6    g | ]}t          |j                  S rD   rO   valueru   xs     rF   ru  z%FuncDef.serialize.<locals>.<listcomp>  s     ???1#ag,,???rE   )r   r   r   r  r  r   rw  r  r  rX  r  )rv   r   r  r  r   r   rx  r  r  r  rX  r  r   s    rF   r   zFuncDef.serialize  s      J????? I-DD493F3F3H3Ht]33#3 08 2<<>>/"&"9!
 
 	
rE   r   c                d   |d         dk    sJ t          g           }t          |d         g ||d         d nAt          t          j        j        t          j                            |d                                       }|d         |_        t          ||d                    |d         |_	        |
                    d          |_        d	 |d
         D             |_        |d         |_        |d          t                              |d                   nd |_        |d         |_        |`|`|`|S )Nr   rP  r   r   r   rw  r  r  c                (    g | ]}t           |         S rD   	ARG_KINDSr  s     rF   ru  z'FuncDef.deserialize.<locals>.<listcomp>  s    AAA!1AAArE   r  r  r  rX  )r  rP  r   r   r|  FunctionLiker}  r   r  r  r   r  r  r  DataclassTransformSpecr   r  rX  r  r  r  )r   r   r  rets       rF   r   zFuncDef.deserialize  s:   H~****RyyL <' $*14:3N3NtTZ|3\3\]]	
 	
 Z(#tG}%%%[)!%*>!?!?AAtK/@AAA"#45 ./; #..t4N/OPPP 	$
 l+MKL
rE   r#   c                x   t          |t                     t          || j                   t          j                            || j                   t          || j                   t          || t                     t          || j                   t          |d | j        D                        t          || j                   | j        t          |t$                     n| j                            |           t)          || j                   t)          || j                   t          |t.                     d S )Nc                6    g | ]}t          |j                  S rD   r  ru   aks     rF   ru  z!FuncDef.write.<locals>.<listcomp>'  s     EEEc"(mmEEErE   )r5   FUNC_DEFr   rv   r   r|  r  r   r   r  r  r4   r  r.   r  r   r  r  r    r   r3   rX  r  r   r   s     rF   r   zFuncDef.write   s   $!!!$
###
!!$	222$'''D$...4000tEEdnEEEFFF$,---(0dL)))))//555dDO,,,dD3444$     rE   r!   c                   t          |          }d }t          |          }|t          k    r t          j                            ||          }t          |g t          g           |          }t          |          |_        t          ||t                     t          |          |_        d t          |          D             |_        t          |          |_        t          |          }|t          k    r,|t"          k    sJ t$                              |          |_        t+          |          |_        t+          |          |_        |`|`|`t          |          t6          k    sJ |S )Nc                (    g | ]}t           |         S rD   r  r  s     rF   ru  z FuncDef.read.<locals>.<listcomp>=  s    EEE22EEErE   )r   r,   r    r   r|  read_function_likerP  r  r   r  r  r+   r  r%   r  r   r  r   r  r   r  r*   rX  r  r  r  r  r   )r   r   r   r  r  r  s         rF   r   zFuncDef.read1  s4   ~~.2tnn,*//c::CdBb		3// 4m,,,)$//EEt1D1DEEE&tnntnn,'>>>>+A+F+Ft+L+LC(%d++!-d!3!3MKL~~((((
rE   )r   NNNN)r   r   r  r  r  r  r  r  r  r  rP   rQ   r   r   r   )r   rb   rP   rP  r   )r   r!   rP   rP  )r@   rA   rB   r^   r_   r  rU   r   r   r   r   r   r   r   r   r  r  s   @rF   rP  rP    s	        
I" ;N
 +/!.2,0"+ "+ "+ "+ "+ "+ "+H    X, , , ,
 
 
 
4    [@! ! ! !"    [    rE   rP  SYMBOL_FUNCBASE_TYPESc                  (    e Zd ZU dZdZdZded<   ded<   ded<   d	ed
<   ded<   d% fdZed&d            Z	ed&d            Z
ed'd            Zed(d            Zed)d            Zd*dZd+dZed,d            Zd-d!Zed.d#            Zd'd$Z xZS )/rQ  zhA decorated function.

    A single Decorator object can include any number of function decorators.
    )rf  re  original_decoratorsrk  r  )re  rk  rf  rP  rf  list[Expression]re  r  r  rk  r   r  rP   rQ   c                    t                                                       || _        || _        |                                | _        || _        d| _        d S r%  )r   rU   rf  re  r_  r  rk  r  )rT   rf  re  rk  r   s       rF   rU   zDecorator.__init__f  sN    	$#-??#4#4  rE   r   c                    | j         j        S rS   )rf  r   r   s    rF   r   zDecorator.namen      y~rE   c                    | j         j        S rS   )rf  r   r   s    rF   r   zDecorator.fullnamer      y!!rE   c                    | j         j        S rS   )rf  rA  r   s    rF   rA  zDecorator.is_finalv  r  rE   r   c                    | j         j        S rS   )rf  rF  r   s    rF   rF  zDecorator.infoz  r  rE   r  c                    | j         j        S rS   )rk  r   r   s    rF   r   zDecorator.type~  s    x}rE   r   r   r`   c                ,    |                     |           S rS   )visit_decoratorr   s     rF   r   zDecorator.accept  r  rE   rb   c                v    d| j                                         | j                                        | j        dS )NrQ  )r   rf  rk  r  )rf  r   rk  r  r   s    rF   r   zDecorator.serialize  s<    !I''))8%%''+	
 
 	
rE   r   c                    |d         dk    sJ t          t                              |d                   g t                              |d                             }|d         |_        |S )Nr   rQ  rf  rk  r  )rQ  rP  r   r  r  )r   r   decs      rF   r   zDecorator.deserialize  s\    H~,,,,++DL992stTY{?[?[\\}-
rE   r#   c                    t          |t                     | j                            |           | j                            |           t          || j                   t          |t                     d S rS   )r5   	DECORATORrf  r   rk  r-   r  r   r   s     rF   r   zDecorator.write  sc    $	"""	t4)***$     rE   r!   c                T   t          |          t          k    sJ t                              |          }t          |          t          k    sJ t
                              |          }t          |g |          }t          |          |_        t          |          t          k    sJ |S rS   )
r,   r  rP  r   VARr  rQ  r$   r  r   )r   r   rf  rk  r  s        rF   r   zDecorator.read  s    ~~))))||D!!~~$$$$hhtnnb#&&#D//~~((((
rE   c                4    | j                                         S rS   )rf  r  r   s    rF   r  zDecorator.is_dynamic      y##%%%rE   )rf  rP  re  r  rk  r  rP   rQ   r   r  )rP   r   rP   r  r   r   )r   rb   rP   rQ  r   )r   r!   rP   rQ  )r@   rA   rB   r^   r_   r  r}   rU   r   r   r   rA  rF  r   r   r   r   r   r   r   r  r  r  s   @rF   rQ  rQ  T  s         
 TI2NMMM    ))))HHH! ! ! ! ! !    X " " " X" " " " X"    X    X- - - -
 
 
 
    [! ! ! !    [& & & & & & & &rE   rQ  )is_selfis_clsis_initialized_in_classis_staticmethodis_classmethodr>  rl  is_suppressed_importis_classvaris_abstract_varrA  is_index_varfinal_unset_in_classfinal_set_in_initexplicit_self_typeis_readyis_inferredinvalid_partial_typefrom_module_getattrhas_explicit_valueallow_incompatible_override	VAR_FLAGSc                       e Zd ZdZdZdZdd fdZedd            Zedd            Z	ddZ
ddZddZed d            Zd!dZed"d            Z xZS )#r  zPA variable.

    It can refer to global/local variable or a data attribute.
    )rv   r   rF  r   setter_typefinal_valuer  r  r   r!  r  r  r  r>  rl  r  r  rA  r  r  r  r  r  r#  r$  r%  r"  )r   r   r)  Nr   r   r   r  rP   rQ   c                   t                                                       || _        d| _        t          | _        || _        d | _        d| _        d| _	        d| _
        | j        d u | _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d | _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d S )Nr   FT)r   rU   rv   r   VAR_NO_INFOrF  r   r(  r  r  r   r!  r  r  r  r>  rl  r  r  r  r  rA  r)  r  r  r  r#  r$  r%  r"  )rT   r   r   r   s      rF   rU   zVar.__init__  s   
	,0	;?9,',$$# $)! $! %*! GK$)!!& #(#(  #(+0( %*!!!rE   c                    | j         S rS   r  r   s    rF   r   zVar.name!  r  rE   c                    | j         S rS   r   r   s    rF   r   zVar.fullname%  r  rE   c                d    | j         p| j        }d|dt          t          |                      dS )Nz<Var z at >)r   r   hexr2  rT   r   s     rF   __repr__zVar.__repr__)  s5    })	3t333r$xx==3333rE   r   r   r`   c                ,    |                     |           S rS   )	visit_varr   s     rF   r   z
Var.accept-  s      &&&rE   rb   c           	         d| j         | j        | j        d n| j                                        | j        d n| j                                        t          | t                    d}| j        
| j        |d<   |S )Nr  )r   r   r   r   r(  rw  r)  )rv   r   r   r   r(  rx  r&  r)  r   s     rF   r   zVar.serialize0  s     J I-DD493F3F3H3H#'#3#;44AQA[A[A]A]tY//
 
 '"&"2DrE   r   c                (   |d         dk    sJ |d         }|d         d n$t           j                            |d                   }|d         d n$t           j                            |d                   }t          ||          }|@t	          |t           j        j                  rt	          |t           j        j                  sJ ||_        d|_        |d         |_	        t          ||d                    |                    d	          |_        |S )
Nr   r  r   r   r(  Fr   rw  r)  )r   r|  r}  r  rZ   r~  CallableTyper(  r   r   r  r   r)  )r   r   r   r   r(  vs         rF   r   zVar.deserialize?  s	   H~&&&&F|F|+tt1L1LTRX\1Z1Z M"* D,,T--@AA 	
 dOO+tz'<==  ;
(?@@   $
:&!T']###//rE   r#   c                   t          |t                     t          || j                   t          j                            || j                   t          j                            || j                   t          || j	                   t          || t                     t          || j                   t          |t                     d S rS   )r5   r  r   rv   r   r|  r  r   r(  r   r  r&  r1   r)  r   r   s     rF   r   z	Var.writeV  s    $$
###
!!$	222
!!$(8999$'''D$	***dD,---$     rE   r!   c                   t          |          }t          j                            |          }t	          ||          }d }t          |          }|t          k    r;|t          j        j        k    sJ t          j        j        	                    |          }||_
        d|_        t          |          |_        t          ||t                     t          |          }|t          k    r0t!          t#          |          t#          |                    |_        n |t          k    rt'          ||          |_        t          |          t(          k    sJ |S r%  )r   r   r|  r  r  r,   r    CALLABLE_TYPEr7  r   r(  r   r   r  r&  r   complexread_float_barer)  r(   r   )r   r   r   r  r8  r(  r  s          rF   r   zVar.read`  s   ~~j&&t,,cNN6:tnn,$*22222*166t<<K#
tnn4I&&&tnn/!!#OD$9$9?4;P;PQQAMML  (s33AM~~((((rE   rS   )r   r   r   r  rP   rQ   r   r   r   )r   rb   rP   r  r   )r   r!   rP   r  )r@   rA   rB   r^   r_   r  rU   r   r   r   r2  r   r   r   r   r   r   r  r  s   @rF   r  r    s+        
I< 5N6* 6* 6* 6* 6* 6* 6*p    X    X4 4 4 4' ' ' '       [,! ! ! !    [    rE   r  c                  P    e Zd ZU dZdZdZded<   ded<   ded<   d	ed
<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   	 	 	 	 	 d3d4 fd"Zed5d#            Z	e	j
        d6d%            Z	d7d)Zd8d*Zd9d,Zed:d.            Zd;d0Zed<d2            Z xZS )=ClassDefzClass definition)r   r   r   r  	type_varsbase_type_exprsremoved_base_type_exprsrF  	metaclassre  keywordsanalyzedhas_incompatible_baseclassr  removed_statements)r   r   r   r   r   r  r   r  r  z list[mypy.types.TypeVarLikeType]r@  r  rA  rB  r   rF  r  rC  re  zdict[str, Expression]rD  rE  r   rF  r   rG  N'list[mypy.types.TypeVarLikeType] | Nonelist[Expression] | None#list[tuple[str, Expression]] | NonerP   rQ   c                N   t                                                       || _        d| _        || _        |pg | _        || _        |pg | _        g | _        t          | _
        || _        g | _        |rt          |          ni | _        d | _        d| _        d | _        g | _        d S Nr   F)r   rU   r   r   r   r@  r  rA  rB  CLASSDEF_NO_INFOrF  rC  re  dictrD  rE  rF  r  rG  )	rT   r   r   r@  rA  rC  rD  r  r   s	           rF   rU   zClassDef.__init__  s     			"b".4"')$$	"*2:X*/'%)"$rE   c                    | j         S rS   r   r   s    rF   r   zClassDef.fullname  r  rE   r8  c                    || _         d S rS   r   rT   r8  s     rF   r   zClassDef.fullname      rE   r   r   r`   c                ,    |                     |           S rS   )visit_class_defr   s     rF   r   zClassDef.accept  r  rE   c                4    | j                                         S rS   )rF  
is_genericr   s    rF   rV  zClassDef.is_generic  r  rE   rb   c                B    d| j         | j        d | j        D             dS )Nr?  c                6    g | ]}|                                 S rD   rt  ru   r8  s     rF   ru  z&ClassDef.serialize.<locals>.<listcomp>  s     @@@A!++--@@@rE   )r   r   r   r@  )r   r   r@  r   s    rF   r   zClassDef.serialize  s3     !I@@@@@	
 
 	
rE   r   c                    |d         dk    sJ t          |d         t          g           d |d         D                       }|d         |_        |S )Nr   r?  r   c                    g | ]>}t          t          j        j        t          j                            |                    ?S rD   )r   r   r|  TypeVarLikeTyper}  rY  s     rF   ru  z(ClassDef.deserialize.<locals>.<listcomp>  sG        TZ/1L1LQ1O1OPP  rE   r@  r   )r?  r  r   r   r   r  s      rF   r   zClassDef.deserialize  sj    H~++++L"II k*  	
 
 J'
rE   r#   c                    t          |t                     t          || j                   t          j                            || j                   t          || j                   t          |t                     d S rS   )
r5   	CLASS_DEFr   r   r   r|  write_type_listr@  r   r   r   s     rF   r   zClassDef.write  sf    $	"""$	"""
""4888$&&&$     rE   r!   c                    t          t          |          t          g           t          j                            |                    }t          |          |_        t          |          t          k    sJ |S rS   )	r?  r   r  r   r|  read_type_var_likesr   r,   r   r]  s      rF   r   zClassDef.read  sY    x~~uRyy$*2P2PQU2V2VWW~~~~((((
rE   )NNNNN)r   r   r   r  r@  rH  rA  rI  rC  r  rD  rJ  r  r  rP   rQ   r   r8  r   rP   rQ   r   r  r   )r   rb   rP   r?  r   )r   r!   rP   r?  )r@   rA   rB   r^   r_   r  r}   rU   r   r   rn  r   rV  r   r   r   r   r   r  r  s   @rF   r?  r?  w  s        I$ &NIIINNNKKK%%%%////%%%%----NNN        ####$$$$'''' >B37'+8<,0% % % % % % %6    X _   _- - - -& & & &
 
 
 
    [! ! ! !    [    rE   r?  c                  @     e Zd ZU dZdZdZded<   d fdZddZ xZ	S )
GlobalDeclzDeclaration global x, y, ...r   	list[str]r   rP   rQ   c                V    t                                                       || _        d S rS   r   rU   r   rT   r   r   s     rF   rU   zGlobalDecl.__init__  $    


rE   r   r   r`   c                ,    |                     |           S rS   )visit_global_declr   s     rF   r   zGlobalDecl.accept   r7  rE   r   rg  rP   rQ   r   r/  r  s   @rF   re  re    so         &&IN     / / / / / / / /rE   re  c                  @     e Zd ZU dZdZdZded<   d fdZddZ xZ	S )NonlocalDeclzDeclaration nonlocal x, y, ...rf  rg  r   rP   rQ   c                V    t                                                       || _        d S rS   ri  rj  s     rF   rU   zNonlocalDecl.__init__  rk  rE   r   r   r`   c                ,    |                     |           S rS   )visit_nonlocal_declr   s     rF   r   zNonlocalDecl.accept      **4000rE   rn  r   r/  r  s   @rF   rp  rp    so         ((IN     1 1 1 1 1 1 1 1rE   rp  c                  6     e Zd ZdZdZddd fd
ZddZ xZS )r  )r  r   F)r   r  r   r   r   rP   rQ   c               d    t                                                       || _        || _        d S rS   )r   rU   r  r   )rT   r  r   r   s      rF   rU   zBlock.__init__  s0    	 -rE   r   r   r`   c                ,    |                     |           S rS   )visit_blockr   s     rF   r   zBlock.accept$  s    ""4(((rE   )r  r   r   r   rP   rQ   r   )r@   rA   rB   r_   r  rU   r   r  r  s   @rF   r  r    sh        *I/NHM - - - - - - - -) ) ) ) ) ) ) )rE   r  c                  @     e Zd ZU dZdZdZded<   d fdZddZ xZ	S )ExpressionStmtz/An expression as a statement, such as print(s).exprr   r|  rP   rQ   c                V    t                                                       || _        d S rS   r   rU   r|  rT   r|  r   s     rF   rU   zExpressionStmt.__init__4  $    			rE   r   r   r`   c                ,    |                     |           S rS   )visit_expression_stmtr   s     rF   r   zExpressionStmt.accept8      ,,T222rE   r|  r   rP   rQ   r   r/  r  s   @rF   rz  rz  +  so         99IN     3 3 3 3 3 3 3 3rE   rz  c                       e Zd ZU dZdZdZded<   ded<   ded	<   ded
<   ded<   ded<   ded<   ded<   	 	 dd fdZddZ xZ	S )AssignmentStmtab  Assignment statement.

    The same node class is used for single assignment, multiple assignment
    (e.g. x, y = z) and chained assignment (e.g. x = y = z), assignments
    that define new names, and assignments with explicit types ("# type: t"
    or "x: t [= ...]").

    An lvalue can be NameExpr, TupleExpr, ListExpr, MemberExpr, or IndexExpr.
    )lvaluesrvaluer   rE  
new_syntaxis_alias_defis_final_definvalid_recursive_alias)r  rvaluesr   list[Lvalue]r  r   r  r  r   rE  r   r  r  r  r  NFrP   rQ   c                    t                                                       || _        || _        || _        || _        || _        d| _        d| _        d| _	        d S r%  )
r   rU   r  r  r   rE  r  r  r  r  )rT   r  r  r   r  r   s        rF   rU   zAssignmentStmt.__init__j  s]     		#$!!',$$$rE   r   r   r`   c                ,    |                     |           S rS   )visit_assignment_stmtr   s     rF   r   zAssignmentStmt.accept{  r  rE   r%  )
r  r  r  r   r   r  r  r   rP   rQ   r   r/  r  s   @rF   r  r  <  s          	I 4N    ++++  "!!! (, - - - - - - -"3 3 3 3 3 3 3 3rE   r  c                  T     e Zd ZU dZdZdZded<   ded<   ded	<   d fdZddZ xZ	S )OperatorAssignmentStmtz,Operator assignment statement such as x += 1)oplvaluer  )r  r  r  r   r  r   r  r   r  rP   rQ   c                r    t                                                       || _        || _        || _        d S rS   )r   rU   r  r  r  )rT   r  r  r  r   s       rF   rU   zOperatorAssignmentStmt.__init__  s2    rE   r   r   r`   c                ,    |                     |           S rS   )visit_operator_assignment_stmtr   s     rF   r   zOperatorAssignmentStmt.accept      55d;;;rE   )r  r   r  r   r  r   rP   rQ   r   r/  r  s   @rF   r  r    s         66*I/NGGGNNN     < < < < < < < <rE   r  c                  P     e Zd ZU dZdZded<   ded<   ded<   d fd
ZddZ xZS )	WhileStmtr|  r  	else_bodyr   r|  r  r  r  r  rP   rQ   c                r    t                                                       || _        || _        || _        d S rS   r   rU   r|  r  r  rT   r|  r  r  r   s       rF   rU   zWhileStmt.__init__  2    		"rE   r   r   r`   c                ,    |                     |           S rS   )visit_while_stmtr   s     rF   r   zWhileStmt.accept  r=  rE   )r|  r   r  r  r  r  rP   rQ   r   	r@   rA   rB   r_   r  r}   rU   r   r  r  s   @rF   r  r    s~         -I2NKKK# # # # # #. . . . . . . .rE   r  c                       e Zd ZU dZdZded<   ded<   ded<   ded<   ded	<   d
ed<   ded<   ded<   ded<   	 dd fdZddZ xZS )ForStmt)	index
index_typeunanalyzed_index_typeinferred_item_typeinferred_iterator_typer|  r  r  is_async)r  r  r|  r  r  r   r  r  r  r  r  r  r   r|  r  r  r  r  r   r  NrP   rQ   c                    t                                                       || _        || _        || _        d | _        d | _        || _        || _        || _	        d| _
        d S r%  )r   rU   r  r  r  r  r  r|  r  r  r  )rT   r  r|  r  r  r  r   s         rF   rU   zForStmt.__init__  sa     	
$%/""&&*#		"rE   r   r   r`   c                ,    |                     |           S rS   )visit_for_stmtr   s     rF   r   zForStmt.accept  r  rE   rS   )r  r   r|  r   r  r  r  r  r  r  rP   rQ   r   r  r  s   @rF   r  r    s         
I JN MMM&&&&1111....2222KKKNNN .2      &, , , , , , , ,rE   r  c                  <     e Zd ZU dZdZded<   d fdZdd
Z xZS )
ReturnStmtr{  r  r|  rP   rQ   c                V    t                                                       || _        d S rS   r~  r  s     rF   rU   zReturnStmt.__init__  r  rE   r   r   r`   c                ,    |                     |           S rS   )visit_return_stmtr   s     rF   r   zReturnStmt.accept  r7  rE   r|  r  rP   rQ   r   r  r  s   @rF   r  r    si         IN     / / / / / / / /rE   r  c                  H     e Zd ZU dZdZded<   ded<   dd fd	ZddZ xZS )
AssertStmt)r|  msgr   r|  r  r  NrP   rQ   c                d    t                                                       || _        || _        d S rS   )r   rU   r|  r  )rT   r|  r  r   s      rF   rU   zAssertStmt.__init__  s+    	rE   r   r   r`   c                ,    |                     |           S rS   )visit_assert_stmtr   s     rF   r   zAssertStmt.accept  r7  rE   rS   )r|  r   r  r  rP   rQ   r   r  r  s   @rF   r  r    sz         I$N      
/ / / / / / / /rE   r  c                  <     e Zd ZU dZdZded<   d fdZdd
Z xZS )DelStmtr{  r   r|  rP   rQ   c                V    t                                                       || _        d S rS   r~  r  s     rF   rU   zDelStmt.__init__  r  rE   r   r   r`   c                ,    |                     |           S rS   )visit_del_stmtr   s     rF   r   zDelStmt.accept  r  rE   )r|  r   rP   rQ   r   r  r  s   @rF   r  r    sf         INLLL     , , , , , , , ,rE   r  c                      e Zd ZdZddZdS )		BreakStmtrD   r   r   rP   r`   c                ,    |                     |           S rS   )visit_break_stmtr   s     rF   r   zBreakStmt.accept  r=  rE   Nr   r@   rA   rB   r_   r   rD   rE   rF   r  r    s-        I. . . . . .rE   r  c                      e Zd ZdZddZdS )	ContinueStmtrD   r   r   rP   r`   c                ,    |                     |           S rS   )visit_continue_stmtr   s     rF   r   zContinueStmt.accept  rt  rE   Nr   r  rD   rE   rF   r  r    s-        I1 1 1 1 1 1rE   r  c                      e Zd ZdZddZdS )	PassStmtrD   r   r   rP   r`   c                ,    |                     |           S rS   )visit_pass_stmtr   s     rF   r   zPassStmt.accept  r  rE   Nr   r  rD   rE   rF   r  r    s-        I- - - - - -rE   r  c                  P     e Zd ZU dZdZded<   ded<   ded<   d fd
ZddZ xZS )IfStmtr  r  r|  list[Block]r  r  r  rP   rQ   c                r    t                                                       || _        || _        || _        d S rS   r  r  s       rF   rU   zIfStmt.__init__*  r  rE   r   r   r`   c                ,    |                     |           S rS   )visit_if_stmtr   s     rF   r   zIfStmt.accept0      $$T***rE   )r|  r  r  r  r  r  rP   rQ   r   r  r  s   @rF   r  r  !  s         -I2N# # # # # #+ + + + + + + +rE   r  c                  F     e Zd ZU dZdZded<   ded<   d fdZddZ xZS )	RaiseStmt)r|  	from_exprr  r|  r  rP   rQ   c                d    t                                                       || _        || _        d S rS   )r   rU   r|  r  )rT   r|  r  r   s      rF   rU   zRaiseStmt.__init__=  s+    	"rE   r   r   r`   c                ,    |                     |           S rS   )visit_raise_stmtr   s     rF   r   zRaiseStmt.acceptB  r=  rE   )r|  r  r  r  rP   rQ   r   r  r  s   @rF   r  r  4  sw         %I*N     # # # # # #
. . . . . . . .rE   r  c                  x     e Zd ZU dZdZded<   ded<   ded<   ded	<   d
ed<   d
ed<   ded<   d fdZddZ xZS )TryStmt)r  r|  varshandlersr  finally_bodyis_starr  r  list[Expression | None]r|  list[NameExpr | None]r  r  r  r  r  r  r   r  rP   rQ   c                    t                                                       || _        || _        || _        || _        || _        || _        d| _        d S r%  )	r   rU   r  r  r|  r  r  r  r  )rT   r  r  r|  r  r  r  r   s          rF   rU   zTryStmt.__init__U  sQ     			
 "(rE   r   r   r`   c                ,    |                     |           S rS   )visit_try_stmtr   s     rF   r   zTryStmt.acceptg  r  rE   )r  r  r  r  r|  r  r  r  r  r  r  r  rP   rQ   r   r  r  s   @rF   r  r  F  s         ]IbNKKK""""MMM     $, , , , , , , ,rE   r  c                  r     e Zd ZU dZdZded<   ded<   ded<   d	ed
<   ded<   ded<   	 dd fdZddZ xZS )WithStmt)r|  rV   rE  analyzed_typesr  r  )r|  rV   r  r  r|  list[Lvalue | None]rV   r  rE  r  r  r  r  r   r  Ntarget_typerP   rQ   c                    t                                                       || _        || _        || _        g | _        || _        d| _        d S r%  )r   rU   r|  rV   rE  r  r  r  )rT   r|  rV   r  r  r   s        rF   rU   zWithStmt.__init__y  sK     		* 	rE   r   r   r`   c                ,    |                     |           S rS   )visit_with_stmtr   s     rF   r   zWithStmt.accept  r  rE   rS   )
r|  r  rV   r  r  r  r  r  rP   rQ   r   r  r  s   @rF   r  r  k  s         [I/N++++))))KKKNNN /3      - - - - - - - -rE   r  c                  d     e Zd ZU dZdZded<   ded<   ded<   d	ed
<   ded<   d fdZddZ xZS )	MatchStmt)subjectsubject_dummypatternsguardsbodies)r  r  r  r  r   r  zNameExpr | Noner  list[Pattern]r  r  r  r  r  rP   rQ   c                    t                                                       t          |          t          |          cxk    rt          |          k    sn J || _        d | _        || _        || _        || _        d S rS   )r   rU   r  r  r  r  r  r  )rT   r  r  r  r  r   s        rF   rU   zMatchStmt.__init__  sz     	8}}F::::s6{{::::::! rE   r   r   r`   c                ,    |                     |           S rS   )visit_match_stmtr   s     rF   r   zMatchStmt.accept  r=  rE   )
r  r   r  r  r  r  r  r  rP   rQ   r   r  r  s   @rF   r  r    s         LI@N""""####     . . . . . . . .rE   r  c                  d     e Zd ZU dZdZded<   ded<   ded<   d	ed
<   ded<   d fdZddZ xZS )TypeAliasStmt)r   r  r  r  
alias_node)r   r  r  NameExprr   list[TypeParam]r  
LambdaExprr  r   r  TypeAlias | Noner  rP   rQ   c                    t                                                       || _        || _        || _        d| _        d | _        d S r%  )r   rU   r   r  r  r  r  )rT   r   r  r  r   s       rF   rU   zTypeAliasStmt.__init__  sA    	"
',$rE   r   r   r`   c                ,    |                     |           S rS   )visit_type_alias_stmtr   s     rF   r   zTypeAliasStmt.accept  r  rE   )r   r  r  r  r  r  rP   rQ   r   r  r  s   @rF   r  r    s         WI3NNNN!!!!         3 3 3 3 3 3 3 3rE   r  c                  @     e Zd ZU dZdZdZded<   d fdZddZ xZ	S )IntExprzInteger literalr  rO   r  rP   rQ   c                V    t                                                       || _        d S rS   r   rU   r  rT   r  r   s     rF   rU   zIntExpr.__init__  rk  rE   r   r   r`   c                ,    |                     |           S rS   )visit_int_exprr   s     rF   r   zIntExpr.accept  r  rE   )r  rO   rP   rQ   r   r/  r  s   @rF   r  r    sl         INJJJ     , , , , , , , ,rE   r  c                  J     e Zd ZU dZdZdZded<   ded<   d fd
ZddZ xZ	S )StrExprzString literal)r  as_typer  r   r  "NotParsed | mypy.types.Type | Noner  rP   rQ   c                x    t                                                       || _        t          j        | _        d S rS   )r   rU   r  r?   rC   r  r  s     rF   rU   zStrExpr.__init__  s-    
 rE   r   r   r`   c                ,    |                     |           S rS   )visit_str_exprr   s     rF   r   zStrExpr.accept  r  rE   r  r   rP   rQ   r   r/  r  s   @rF   r  r    sz         $INJJJ 0///' ' ' ' ' '
, , , , , , , ,rE   r  seqr  rP   TypeGuard[list[StrExpr]]c                4    t          d | D                       S )Nc              3  @   K   | ]}t          |t                    V  d S rS   )rZ   r  r  s     rF   r  z"is_StrExpr_list.<locals>.<genexpr>  s,      99Tz$((999999rE   )r  )r  s    rF   is_StrExpr_listr    s    99S999999rE   c                  @     e Zd ZU dZdZdZded<   d fdZddZ xZ	S )	BytesExprzBytes literalr  r   r  rP   rQ   c                V    t                                                       || _        d S rS   r  r  s     rF   rU   zBytesExpr.__init__  rk  rE   r   r   r`   c                ,    |                     |           S rS   )visit_bytes_exprr   s     rF   r   zBytesExpr.accept  r=  rE   r  r   r/  r  s   @rF   r  r    sn         IN JJJ     . . . . . . . .rE   r  c                  @     e Zd ZU dZdZdZded<   d fdZddZ xZ	S )	FloatExprzFloat literalr  floatr  rP   rQ   c                V    t                                                       || _        d S rS   r  r  s     rF   rU   zFloatExpr.__init__  rk  rE   r   r   r`   c                ,    |                     |           S rS   )visit_float_exprr   s     rF   r   zFloatExpr.accept  r=  rE   )r  r  rP   rQ   r   r/  r  s   @rF   r  r    sl         INLLL     . . . . . . . .rE   r  c                  @     e Zd ZU dZdZdZded<   d fdZddZ xZ	S )ComplexExprzComplex literalr  r<  r  rP   rQ   c                V    t                                                       || _        d S rS   r  r  s     rF   rU   zComplexExpr.__init__)  rk  rE   r   r   r`   c                ,    |                     |           S rS   )visit_complex_exprr   s     rF   r   zComplexExpr.accept-      ))$///rE   )r  r<  rP   rQ   r   r/  r  s   @rF   r$  r$     sl         INNNN     0 0 0 0 0 0 0 0rE   r$  c                      e Zd ZdZdZd	dZdS )
EllipsisExprzEllipsis (...)rD   r   r   rP   r`   c                ,    |                     |           S rS   )visit_ellipsisr   s     rF   r   zEllipsisExpr.accept6  r  rE   Nr   r   rD   rE   rF   r*  r*  1  s3        I, , , , , ,rE   r*  c                  J     e Zd ZU dZdZdZded<   ded<   d fd	ZddZ xZ	S )StarExprzStar expression)r|  validr   r|  r   r/  rP   rQ   c                d    t                                                       || _        d| _        d S r%  )r   rU   r|  r/  r  s     rF   rU   zStarExpr.__init__D  s-    	 


rE   r   r   r`   c                ,    |                     |           S rS   )visit_star_exprr   s     rF   r   zStarExpr.acceptK  r  rE   r  r   r/  r  s   @rF   r.  r.  :  sx         !I&NKKK     - - - - - - - -rE   r.  c                  b     e Zd ZdZdZd
 fdZedd            Zej        dd	            Z xZ	S )RefExprz,Abstract base class for name-like constructs)r  noder   
is_new_defis_inferred_defis_alias_rvalue
type_guardtype_isrP   rQ   c                    t                                                       d | _        d | _        d| _        d| _        d| _        d| _        d | _        d | _	        d S rL  )
r   rU   r  r5  r   r6  r7  r8  r9  r:  r&  s    rF   rU   zRefExpr.__init__]  sY     $	'+	
  %$26/3rE   r   c                    | j         S rS   r   r   s    rF   r   zRefExpr.fullnames  r  rE   r8  c                    || _         d S rS   r   rQ  s     rF   r   zRefExpr.fullnamew  rR  rE   r'  r   rc  )
r@   rA   rB   r^   r_   rU   r   r   rn  r  r  s   @rF   r4  r4  O  s        66	I4 4 4 4 4 4,    X _   _    rE   r4  c                  <     e Zd ZdZdZdZd fdZddZddZ xZ	S )r  zOName expression

    This refers to a local name, global name or a module.
    )r   is_special_form)r   r5  r   r   rP   rQ   c                d    t                                                       || _        d| _        d S r%  )r   rU   r   r?  )rT   r   r   s     rF   rU   zNameExpr.__init__  s.    	$rE   r   r   r`   c                ,    |                     |           S rS   )visit_name_exprr   s     rF   r   zNameExpr.accept  r  rE   rb   c                    J d|              )NFzSerializing NameExpr: rD   r   s    rF   r   zNameExpr.serialize  s    55t55555rE   )r   r   rP   rQ   r   r   )
r@   rA   rB   r^   r_   r  rU   r   r   r  r  s   @rF   r  r  |  s{         
 ,I%N% % % % % %- - - -6 6 6 6 6 6 6 6rE   r  c                  4     e Zd ZdZdZdZd fd
ZddZ xZS )
MemberExprzMember access expression x.y)r|  r   def_var)r|  r   r5  r|  r   r   r   rP   rQ   c                r    t                                                       || _        || _        d | _        d S rS   )r   rU   r|  r   rF  )rT   r|  r   r   s      rF   rU   zMemberExpr.__init__  s4    		 $(rE   r   r   r`   c                ,    |                     |           S rS   )visit_member_exprr   s     rF   r   zMemberExpr.accept  r7  rE   )r|  r   r   r   rP   rQ   r   	r@   rA   rB   r^   r_   r  rU   r   r  r  s   @rF   rE  rE    sa        &&+I-N( ( ( ( ( (/ / / / / / / /rE   rE  c                  R    e Zd ZdZdZdZdZdZdZdddZ	dddZ
ddZddZddZdS )r  r   rd   rf   rh         Fstarr   rP   c                H    | t           k    p| t          k    p|o
| t          k    S rS   )r  r  ARG_STARrT   rN  s     rF   is_positionalzArgKind.is_positional  s$    wP$'/Pd6Otx?OPrE   c                H    | t           k    p| t          k    p|o
| t          k    S rS   )	ARG_NAMEDARG_NAMED_OPT	ARG_STAR2rQ  s     rF   is_namedzArgKind.is_named  s&    y YDM$9Yd>XtyGXYrE   c                .    | t           k    p
| t          k    S rS   )r  rT  r   s    rF   is_requiredzArgKind.is_required  s    w3$)"33rE   c                .    | t           k    p
| t          k    S rS   )r  rU  r   s    rF   is_optionalzArgKind.is_optional  s    w7$-"77rE   c                .    | t           k    p
| t          k    S rS   )rP  rV  r   s    rF   r  zArgKind.is_star  s    x449#44rE   Nr  )rN  r   rP   r   r  )r@   rA   rB   r  r  rP  rT  rV  rU  rR  rW  rY  r[  r  rD   rE   rF   r  r    s         GGHIIMQ Q Q Q QZ Z Z Z Z4 4 4 48 8 8 85 5 5 5 5 5rE   r  r  r  rP  rT  rV  rU  r  c                  8     e Zd ZdZdZdZ	 dd fdZddZ xZS )CallExprzCall expression.

    This can also represent several special forms that are syntactically calls
    such as cast(...) and None  # type: ....
    )calleeargsr  r  rE  )r_  r`  r  r  Nr_  r   r`  r  r  list[ArgKind]r  list[str | None]rE  r  rP   rQ   c                    t                                                       |sd gt          |          z  }|| _        || _        || _        || _        || _        d S rS   )r   rU   r  r_  r`  r  r  rE  )rT   r_  r`  r  r  rE  r   s         rF   rU   zCallExpr.__init__  s^     	 	+T*I	"+4 !rE   r   r   r`   c                ,    |                     |           S rS   )visit_call_exprr   s     rF   r   zCallExpr.accept  r  rE   rS   )r_  r   r`  r  r  ra  r  rb  rE  r  rP   rQ   r   rJ  r  s   @rF   r^  r^    sr          IIAN '+! ! ! ! ! ! !*- - - - - - - -rE   r^  c                  <     e Zd ZU dZdZded<   d fdZdd
Z xZS )YieldFromExprr{  r   r|  rP   rQ   c                V    t                                                       || _        d S rS   r~  r  s     rF   rU   zYieldFromExpr.__init__  r  rE   r   r   r`   c                ,    |                     |           S rS   )visit_yield_from_exprr   s     rF   r   zYieldFromExpr.accept  r  rE   r  r   r  r  s   @rF   rg  rg    si         IN     3 3 3 3 3 3 3 3rE   rg  c                  <     e Zd ZU dZdZded<   d fdZdd
Z xZS )	YieldExprr{  r  r|  rP   rQ   c                V    t                                                       || _        d S rS   r~  r  s     rF   rU   zYieldExpr.__init__
	  r  rE   r   r   r`   c                ,    |                     |           S rS   )visit_yield_exprr   s     rF   r   zYieldExpr.accept	  r=  rE   r  r   r  r  s   @rF   rl  rl  	  si         IN     . . . . . . . .rE   rl  c                  h     e Zd ZU dZdZdZded<   ded<   ded<   d	ed
<   ded<   d fdZddZ xZ	S )	IndexExprzaIndex expression x[y].

    Also wraps type application such as List[int] as a special form.
    )baser  method_typerE  r  )rr  r  r   rr  r  r  rs  z&TypeApplication | TypeAliasExpr | NonerE  r  r  rP   rQ   c                    t                                                       || _        || _        d | _        d | _        t          j        | _        d S rS   )	r   rU   rr  r  rs  rE  r?   rC   r  )rT   rr  r  r   s      rF   rU   zIndexExpr.__init__(	  sC    	
 rE   r   r   r`   c                ,    |                     |           S rS   )visit_index_exprr   s     rF   r   zIndexExpr.accept0	  r=  rE   )rr  r   r  r   rP   rQ   r   r/  r  s   @rF   rq  rq  	  s          
 HI&N'''' 5444 0///' ' ' ' ' '. . . . . . . .rE   rq  c                  T     e Zd ZU dZdZdZded<   ded<   ded	<   d fdZddZ xZ	S )	UnaryExprzUnary operation)r  r|  rs  )r  r|  r   r  r   r|  r  rs  rP   rQ   c                r    t                                                       || _        || _        d | _        d S rS   )r   rU   r  r|  rs  )rT   r  r|  r   s      rF   rU   zUnaryExpr.__init__@	  s5    	rE   r   r   r`   c                ,    |                     |           S rS   )visit_unary_exprr   s     rF   r   zUnaryExpr.acceptF	  r=  rE   )r  r   r|  r   rP   rQ   r   r/  r  s   @rF   rx  rx  4	  s         -I#NGGG''''           . . . . . . . .rE   rx  c                  4     e Zd ZdZdZdZd fd	ZddZ xZS )AssignmentExprz5Assignment expressions in Python 3.8+, like "a := 2".)rV   r  rV   r  r  r   rP   rQ   c                d    t                                                       || _        || _        d S rS   )r   rU   rV   r  )rT   rV   r  r   s      rF   rU   zAssignmentExpr.__init__Q	  s+    


rE   r   r   r`   c                ,    |                     |           S rS   )visit_assignment_exprr   s     rF   r   zAssignmentExpr.acceptV	  r  rE   )rV   r  r  r   rP   rQ   r   rJ  r  s   @rF   r}  r}  J	  sa        ??#I(N     
3 3 3 3 3 3 3 3rE   r}  c                       e Zd ZU dZdZdZded<   ded<   ded<   d	ed
<   ded<   ded<   ded<   ded<   	 dd fdZddZ xZ	S )OpExprz^Binary operation.

    The dot (.), [] and comparison operators have more specific nodes.
    )r  leftrightrs  right_alwaysright_unreachablerE  r  )r  r  r  r   r  r   r  r  r  rs  r   r  r  TypeAliasExpr | NonerE  r  r  NrP   rQ   c                    t                                                       || _        || _        || _        d | _        d| _        d| _        || _        t          j
        | _        d S r%  )r   rU   r  r  r  rs  r  r  rE  r?   rC   r  )rT   r  r  r  rE  r   s        rF   rU   zOpExpr.__init__}	  s\     		
!!&  rE   r   r   r`   c                ,    |                     |           S rS   )visit_op_exprr   s     rF   r   zOpExpr.accept	  r  rE   rS   )
r  r   r  r   r  r   rE  r  rP   rQ   r   r/  r  s   @rF   r  r  Z	  s          
	I -NGGG''''"""" 0/// ^b' ' ' ' ' ' '+ + + + + + + +rE   r  c                  \     e Zd ZU dZdZdZded<   ded<   ded	<   d fdZddZddZ	 xZ
S )ComparisonExprz+Comparison expression (e.g. a < b > c < d).)	operatorsoperandsmethod_types)r  r  rg  r  r  r  zlist[mypy.types.Type | None]r  rP   rQ   c                r    t                                                       || _        || _        g | _        d S rS   )r   rU   r  r  r  )rT   r  r  r   s      rF   rU   zComparisonExpr.__init__	  s5    " rE   ,Iterator[tuple[str, Expression, Expression]]c              #  ~   K   t          | j                  D ]%\  }}|| j        |         | j        |dz            fV  &dS )zzIf this comparison expr is "a < b is c == d", yields the sequence
        ("<", a, b), ("is", b, c), ("==", c, d)
        rd   N)rc  r  r  )rT   rg  operators      rF   pairwisezComparisonExpr.pairwise	  s[       %T^44 	C 	CKAxDM!,dmAE.BBBBBB	C 	CrE   r   r   r`   c                ,    |                     |           S rS   )visit_comparison_exprr   s     rF   r   zComparisonExpr.accept	  r  rE   )r  rg  r  r  rP   rQ   )rP   r  r   )r@   rA   rB   r^   r_   r  r}   rU   r  r   r  r  s   @rF   r  r  	  s         559I.N....     C C C C3 3 3 3 3 3 3 3rE   r  c                  T     e Zd ZU dZdZdZded<   ded<   ded<   d fd	ZddZ xZ	S )	SliceExprznSlice expression (e.g. 'x:y', 'x:', '::2' or ':').

    This is only valid as index in index expressions.
    )begin_index	end_indexstrider  r  r  r  rP   rQ   c                r    t                                                       || _        || _        || _        d S rS   )r   rU   r  r  r  )rT   r  r  r  r   s       rF   rU   zSliceExpr.__init__	  s5     	&"rE   r   r   r`   c                ,    |                     |           S rS   )visit_slice_exprr   s     rF   r   zSliceExpr.accept	  r=  rE   )r  r  r  r  r  r  rP   rQ   r   r/  r  s   @rF   r  r  	  s          
 7I;N""""    	 	 	 	 	 	. . . . . . . .rE   r  c                  J     e Zd ZU dZdZdZded<   ded<   d fd
ZddZ xZ	S )CastExprz!Cast expression cast(type, expr).r|  r   r   r|  mypy.types.Typer   r  rP   rQ   c                d    t                                                       || _        || _        d S rS   r   rU   r|  r   rT   r|  r  r   s      rF   rU   zCastExpr.__init__	  +    				rE   r   r   r`   c                ,    |                     |           S rS   )visit_cast_exprr   s     rF   r   zCastExpr.accept	  r  rE   r|  r   r  r  rP   rQ   r   r/  r  s   @rF   r  r  	  s{         ++ I%N     
- - - - - - - -rE   r  c                  @     e Zd ZU dZdZdZded<   d fdZddZ xZ	S )TypeFormExprzTypeForm(type) expression.r  r  r   r  rP   rQ   c                V    t                                                       || _        d S rS   r   rU   r   )rT   r  r   s     rF   rU   zTypeFormExpr.__init__	  s$    			rE   r   r   r`   c                ,    |                     |           S rS   )visit_type_form_exprr   s     rF   r   zTypeFormExpr.accept	      ++D111rE   )r  r  rP   rQ   r   r/  r  s   @rF   r  r  	  so         $$IN     2 2 2 2 2 2 2 2rE   r  c                  J     e Zd ZU dZdZdZded<   ded<   d fd
ZddZ xZ	S )AssertTypeExprz1Represents a typing.assert_type(expr, type) call.r  r   r|  r  r   r  rP   rQ   c                d    t                                                       || _        || _        d S rS   r  r  s      rF   rU   zAssertTypeExpr.__init__	  r  rE   r   r   r`   c                ,    |                     |           S rS   )visit_assert_type_exprr   s     rF   r   zAssertTypeExpr.accept
      --d333rE   r  r   r/  r  s   @rF   r  r  	  s{         ;; I%N     
4 4 4 4 4 4 4 4rE   r  c                  \     e Zd ZU dZdZdZded<   ded<   ded<   	 	 	 dd fdZddZ xZ	S )
RevealExprzGReveal type expression reveal_type(expr) or reveal_locals() expression.)r|  r  local_nodesis_importedr  r|  rO   r  list[Var] | Noner  NFr  r   rP   rQ   c                    t                                                       || _        || _        || _        || _        d S rS   )r   rU   r|  r  r  r  )rT   r  r|  r  r  r   s        rF   rU   zRevealExpr.__init__
  s?     			&&rE   r   r   r`   c                ,    |                     |           S rS   )visit_reveal_exprr   s     rF   r   zRevealExpr.accept
  r7  rE   )NNF)
r  rO   r|  r  r  r  r  r   rP   rQ   r   r/  r  s   @rF   r  r  
  s         QQ>ICNIII!!!!
 #'(,!' ' ' ' ' ' '/ / / / / / / /rE   r  c                  T     e Zd ZU dZdZdZded<   ded<   ded	<   d fdZddZ xZ	S )	SuperExprzExpression super().name)r   rF  call)r   r  rF  r   r   TypeInfo | NonerF  r^  r  rP   rQ   c                r    t                                                       || _        || _        d | _        d S rS   )r   rU   r   r  rF  )rT   r   r  r   s      rF   rU   zSuperExpr.__init__-
  s2    					rE   r   r   r`   c                ,    |                     |           S rS   )visit_super_exprr   s     rF   r   zSuperExpr.accept3
  r=  rE   )r   r   r  r^  rP   rQ   r   r/  r  s   @rF   r  r  "
  s         !!(I-NIIINNN     . . . . . . . .rE   r  c                  F    e Zd ZdZdZedd            ZddZddZddZ	dS )r  zLambda expression)r  r  r  r  rP   r   c                    t           S rS   )r   r   s    rF   r   zLambdaExpr.name<
  s    rE   r   c                n    | j         j         d         }t          |t                    sJ |j        }|J |S )z/Return the expression (the body) of the lambda.rN   )r  rZ   r  r|  )rT   r  r|  s      rF   r|  zLambdaExpr.expr@
  s>    inR #z*****xrE   r   r   r`   c                ,    |                     |           S rS   )visit_lambda_exprr   s     rF   r   zLambdaExpr.acceptH
  r7  rE   r   c                    dS r%  rD   r   s    rF   r  zLambdaExpr.is_dynamicK
  s    urE   Nr   )rP   r   r   r  )
r@   rA   rB   r^   r  r   r   r|  r   r  rD   rE   rF   r  r  7
  sy        DN   X   / / / /     rE   r  c                  @     e Zd ZU dZdZdZded<   d fdZddZ xZ	S )ListExprzList literal expression [...].rU  r  rU  rP   rQ   c                V    t                                                       || _        d S rS   r   rU   rU  r`  s     rF   rU   zListExpr.__init__X
  rk  rE   r   r   r`   c                ,    |                     |           S rS   )visit_list_exprr   s     rF   r   zListExpr.accept\
  r  rE   rU  r  rP   rQ   r   r/  r  s   @rF   r  r  O
  so         ((IN     - - - - - - - -rE   r  c                  @     e Zd ZU dZdZdZded<   d fdZddZ xZ	S )DictExprz0Dictionary literal expression {key: value, ...}.r  *list[tuple[Expression | None, Expression]]rU  rP   rQ   c                V    t                                                       || _        d S rS   r  r`  s     rF   rU   zDictExpr.__init__i
  rk  rE   r   r   r`   c                ,    |                     |           S rS   )visit_dict_exprr   s     rF   r   zDictExpr.acceptm
  r  rE   )rU  r  rP   rQ   r   r/  r  s   @rF   r  r  `
  so         ::IN5555     - - - - - - - -rE   r  c                  @     e Zd ZU dZdZdZded<   d fdZddZ xZ	S )	TupleExprzXTuple literal expression (..., ...)

    Also lvalue sequences (..., ...) and [..., ...]r  r  rU  rP   rQ   c                V    t                                                       || _        d S rS   r  r`  s     rF   rU   zTupleExpr.__init__|
  rk  rE   r   r   r`   c                ,    |                     |           S rS   )visit_tuple_exprr   s     rF   r   zTupleExpr.accept
  r=  rE   r  r   r/  r  s   @rF   r  r  q
  su         7 7 IN     . . . . . . . .rE   r  c                  @     e Zd ZU dZdZdZded<   d fdZddZ xZ	S )SetExprz$Set literal expression {value, ...}.r  r  rU  rP   rQ   c                V    t                                                       || _        d S rS   r  r`  s     rF   rU   zSetExpr.__init__
  rk  rE   r   r   r`   c                ,    |                     |           S rS   )visit_set_exprr   s     rF   r   zSetExpr.accept
  r  rE   r  r   r/  r  s   @rF   r  r  
  so         ..IN     , , , , , , , ,rE   r  c                  h     e Zd ZU dZdZdZded<   ded<   ded	<   d
ed<   ded<   d fdZddZ xZ	S )GeneratorExprzGGenerator expression ... for ... in ... [ for ...  in ... ] [ if ... ].)	left_expr	sequences	condlistsr  indices)r  r  r  r  r   r  r  r  list[list[Expression]]r  
list[bool]r  r  r  rP   rQ   c                    t                                                       || _        || _        || _        || _        || _        d S rS   )r   rU   r  r  r  r  r  )rT   r  r  r  r  r  r   s         rF   rU   zGeneratorExpr.__init__
  sB     	""" rE   r   r   r`   c                ,    |                     |           S rS   )visit_generator_exprr   s     rF   r   zGeneratorExpr.accept
  r  rE   )r  r   r  r  r  r  r  r  r  r  rP   rQ   r   r/  r  s   @rF   r  r  
  s         QQNIGN%%%%! ! ! ! ! !2 2 2 2 2 2 2 2rE   r  c                  @     e Zd ZU dZdZdZded<   d fdZddZ xZ	S )ListComprehensionz,List comprehension (e.g. [x + 1 for x in a])	generatorr  r  rP   rQ   c                V    t                                                       || _        d S rS   r   rU   r  rT   r  r   s     rF   rU   zListComprehension.__init__
  $    "rE   r   r   r`   c                ,    |                     |           S rS   )visit_list_comprehensionr   s     rF   r   zListComprehension.accept
  s    //555rE   r  r  rP   rQ   r   r/  r  s   @rF   r  r  
  so         66I#N# # # # # #6 6 6 6 6 6 6 6rE   r  c                  @     e Zd ZU dZdZdZded<   d fdZddZ xZ	S )SetComprehensionz+Set comprehension (e.g. {x + 1 for x in a})r  r  r  rP   rQ   c                V    t                                                       || _        d S rS   r  r  s     rF   rU   zSetComprehension.__init__
  r  rE   r   r   r`   c                ,    |                     |           S rS   )visit_set_comprehensionr   s     rF   r   zSetComprehension.accept
  s    ..t444rE   r  r   r/  r  s   @rF   r  r  
  so         55I#N# # # # # #5 5 5 5 5 5 5 5rE   r  c                  r     e Zd ZU dZdZdZded<   ded<   ded<   d	ed
<   ded<   ded<   d fdZddZ xZ	S )DictionaryComprehensionz3Dictionary comprehension (e.g. {k: v for k, v in a})keyr  r  r  r  r  )r  r  r  r  r  r   r  r  r  r  r  r  r  r  r  r  rP   rQ   c                    t                                                       || _        || _        || _        || _        || _        || _        d S rS   )r   rU   r  r  r  r  r  r  )rT   r  r  r  r  r  r  r   s          rF   rU   z DictionaryComprehension.__init__
  sI     	
"" rE   r   r   r`   c                ,    |                     |           S rS   )visit_dictionary_comprehensionr   s     rF   r   zDictionaryComprehension.accept
  r  rE   )r  r   r  r   r  r  r  r  r  r  r  r  rP   rQ   r   r/  r  s   @rF   r   r   
  s         ==QIJNOOO%%%%! ! ! ! ! !"< < < < < < < <rE   r   c                  T     e Zd ZU dZdZdZded<   ded<   ded<   d fd
ZddZ xZ	S )ConditionalExprz+Conditional expression (e.g. x if y else z))condif_expr	else_expr)r  r  r	  r   r  r  r	  rP   rQ   c                r    t                                                       || _        || _        || _        d S rS   )r   rU   r  r  r	  )rT   r  r  r	  r   s       rF   rU   zConditionalExpr.__init__  s2    	"rE   r   r   r`   c                ,    |                     |           S rS   )visit_conditional_exprr   s     rF   r   zConditionalExpr.accept  r  rE   )r  r   r  r   r	  r   rP   rQ   r   r/  r  s   @rF   r  r  
  s         550I5N# # # # # #4 4 4 4 4 4 4 4rE   r  c                  J     e Zd ZU dZdZdZded<   ded<   d fd	ZddZ xZ	S )TypeApplicationz Type application expr[type, ...])r|  r|  r   r|  r  r|  rP   rQ   c                d    t                                                       || _        || _        d S rS   )r   rU   r|  r|  )rT   r|  r|  r   s      rF   rU   zTypeApplication.__init__  s+    	


rE   r   r   r`   c                ,    |                     |           S rS   )visit_type_applicationr   s     rF   r   zTypeApplication.accept  r  rE   )r|  r   r|  r  rP   rQ   r   r/  r  s   @rF   r  r    s{         **!I&N         
4 4 4 4 4 4 4 4rE   r  	INVARIANT	COVARIANTCONTRAVARIANTVARIANCE_NOT_READYc                       e Zd ZU dZdZded<   ded<   ded<   ded<   d	ed
<   eddfd fdZedd            Z	edd            Z
 xZS )TypeVarLikeExprzBase class for TypeVarExpr, ParamSpecExpr and TypeVarTupleExpr.

    Note that they are constructed by the semantic analyzer.
    )rv   r   r  r  varianceis_new_styler   rv   r   r  r  r  rO   r  FrN   r   r   r  r   rJ   rP   rQ   c                    t                                          |           || _        || _        || _        || _        || _        || _        d S N)rJ   )r   rU   rv   r   r  r  r  r  )	rT   r   r   r  r  r  r  rJ   r   s	           rF   rU   zTypeVarLikeExpr.__init__G  sR     	d###
!& (rE   c                    | j         S rS   r  r   s    rF   r   zTypeVarLikeExpr.nameY  r  rE   c                    | j         S rS   r   r   s    rF   r   zTypeVarLikeExpr.fullname]  r  rE   )r   r   r   r   r  r  r  r  r  rO   r  r   rJ   rO   rP   rQ   r   )r@   rA   rB   r^   r_   r}   r  rU   r   r   r   r  r  s   @rF   r  r  1  s          
 ]IJJJNNN !    
 MMM "") ) ) ) ) ) )$    X    X    rE   r  SYMBOL_NODE_EXPRESSION_TYPESc                       e Zd ZU dZdZdZded<   eddfd" fdZd#dZ	d$dZ
ed%d            Zd&dZed'd!            Z xZS )(TypeVarExprar  Type variable expression TypeVar(...).

    This is also used to represent type variables in symbol tables.

    A type variable is not valid as a type unless bound in a TypeVarLikeScope.
    That happens within:

     1. a generic class that uses the type variable as a type argument or
     2. a generic function that refers to the type variable in its signature.
    )r  )r   r  r  r  r  r  FrN   r   r   r   r  r  r  r  rO   r  r   rJ   rP   rQ   c	           	     f    t                                          |||||||           || _        d S r  )r   rU   r  )
rT   r   r   r  r  r  r  r  rJ   r   s
            rF   rU   zTypeVarExpr.__init__{  s8     	xgx\`aaarE   r   r   r`   c                ,    |                     |           S rS   )visit_type_var_exprr   s     rF   r   zTypeVarExpr.accept  rt  rE   rb   c                    d| j         | j        d | j        D             | j                                        | j                                        | j        dS )Nr   c                6    g | ]}|                                 S rD   rt  ru   ts     rF   ru  z)TypeVarExpr.serialize.<locals>.<listcomp>  s     :::q{{}}:::rE   )r   r   r   r  r  r  r  )rv   r   r  r  r   r  r  r   s    rF   r   zTypeVarExpr.serialize  sY    #J::dk:::+5577|--//
 
 	
rE   r   c           
        |d         dk    sJ t          |d         |d         d |d         D             t          j                            |d                   t          j                            |d                   |d	                   S )
Nr   r   r   r   c                L    g | ]!}t           j                            |          "S rD   r   r|  r}  rY  s     rF   ru  z+TypeVarExpr.deserialize.<locals>.<listcomp>  s(    DDDTZ((++DDDrE   r  r  r  r  )r   r   r|  r}  r   s     rF   r   zTypeVarExpr.deserialize  s    H~....LDDT(^DDDJ''](;<<J''Y88
 
 	
rE   r#   c                   t          |t                     t          || j                   t          || j                   t
          j                            || j                   | j	        
                    |           | j        
                    |           t          || j                   t          |t                     d S rS   )r5   TYPE_VAR_EXPRr   rv   r   r   r|  r`  r  r  r   r  r   r  r   r   s     rF   r   zTypeVarExpr.write  s    $&&&$
###$'''
""4555t$$$4   $&&&$     rE   r!   c           
     ^   t          t          |          t          |          t          j                            |          t          j                            |          t          j                            |          t          |                    }t          |          t          k    sJ |S rS   )	r   r   r   r|  read_type_list	read_typer   r,   r   r   r   r  s      rF   r   zTypeVarExpr.read  s    TNNTNNJ%%d++J  &&J  &&TNN
 
 ~~((((
rE   )r   r   r   r   r  r  r  r  r  r  r  rO   r  r   rJ   rO   rP   rQ   r   r   )r   rb   rP   r   r   )r   r!   rP   r   )r@   rA   rB   r^   r_   r  r}   r  rU   r   r   r   r   r   r   r  r  s   @rF   r   r   g  s         	 	 IAN "!!! ""      1 1 1 1	
 	
 	
 	
 	
 	
 	
 [	
! ! ! ! 
 
 
 [
 
 
 
 
rE   r   c                  ^    e Zd ZdZdZddZdd	Zedd            ZddZ	edd            Z
dS )ParamSpecExprrD   r   r  r  r   r   rP   r`   c                ,    |                     |           S rS   )visit_paramspec_exprr   s     rF   r   zParamSpecExpr.accept  r  rE   rb   c                    d| j         | j        | j                                        | j                                        | j        dS )Nr2  )r   r   r   r  r  r  )rv   r   r  r   r  r  r   s    rF   r   zParamSpecExpr.serialize  sF    %J+5577|--//
 
 	
rE   r   c           	         |d         dk    sJ t          |d         |d         t          j                            |d                   t          j                            |d                   |d                   S )Nr   r2  r   r   r  r  r  )r2  r   r|  r}  r   s     rF   r   zParamSpecExpr.deserialize  so    H~0000LJ''](;<<J''Y88
 
 	
rE   r#   rQ   c                @   t          |t                     t          || j                   t          || j                   | j                            |           | j                            |           t          || j	                   t          |t                     d S rS   )r5   PARAM_SPEC_EXPRr   rv   r   r  r   r  r   r  r   r   s     rF   r   zParamSpecExpr.write  s    $((($
###$'''t$$$4   $&&&$     rE   r!   c           	     "   t          t          |          t          |          t          j                            |          t          j                            |          t          |                    }t          |          t          k    sJ |S rS   )r2  r   r   r|  r/  r   r,   r   r0  s      rF   r   zParamSpecExpr.read  sp    TNNTNNJ  &&J  &&TNN
 
 ~~((((
rE   Nr   r   )r   rb   rP   r2  r   )r   r!   rP   r2  )r@   rA   rB   r_   r  r   r   r   r   r   r   rD   rE   rF   r2  r2    s        I7N2 2 2 2
 
 
 
 
 
 
 [
! ! ! ! 	 	 	 [	 	 	rE   r2  c                       e Zd ZU dZdZded<   dZeddfd! fdZd"dZ	d#dZ
ed$d            Zd%dZed&d             Z xZS )'TypeVarTupleExprz1Type variable tuple expression TypeVarTuple(...).tuple_fallbackmypy.types.Instancer3  FrN   r   r   r   r  r  r  r  rO   r  r   rJ   rP   rQ   c	           	     f    t                                          |||||||           || _        d S r  )r   rU   r=  )
rT   r   r   r  r=  r  r  r  rJ   r   s
            rF   rU   zTypeVarTupleExpr.__init__  s;     	xgx\`aaa,rE   r   r   r`   c                ,    |                     |           S rS   )visit_type_var_tuple_exprr   s     rF   r   zTypeVarTupleExpr.accept  rq  rE   rb   c                    d| j         | j        | j                                        | j                                        | j                                        | j        dS )Nr<  )r   r   r   r  r=  r  r  )rv   r   r  r   r=  r  r  r   s    rF   r   zTypeVarTupleExpr.serialize  sX    (J+5577"1;;==|--//
 
 	
rE   r   c           
     F   |d         dk    sJ t          |d         |d         t          j                            |d                   t          j        j                            |d                   t          j                            |d                   |d                   S )	Nr   r<  r   r   r  r=  r  r  )r<  r   r|  r}  Instancer   r   s     rF   r   zTypeVarTupleExpr.deserialize  s    H~!33333LJ''](;<<J++D1A,BCCJ''Y88
 
 	
rE   r#   c                t   t          |t                     | j                            |           t	          || j                   t	          || j                   | j                            |           | j                            |           t          || j
                   t          |t                     d S rS   )r5   TYPE_VAR_TUPLE_EXPRr=  r   r   rv   r   r  r  r   r  r   r   s     rF   r   zTypeVarTupleExpr.write  s    $+,,,!!$'''$
###$'''t$$$4   $&&&$     rE   r!   c           
        t          |          t          j        j        k    sJ t          j        j                            |          }t          t          |          t          |          t          j                            |          |t          j                            |          t          |                    }t          |          t          k    sJ |S rS   )r,   r   r|  INSTANCErD  r   r<  r   r/  r   r   )r   r   fallbackr  s       rF   r   zTypeVarTupleExpr.read)  s    ~~!44444:&++D11TNNTNNJ  &&J  &&TNN
 
 ~~((((
rE   )r   r   r   r   r  r  r=  r>  r  r  r  rO   r  r   rJ   rO   rP   rQ   r   r   )r   rb   rP   r<  r   )r   r!   rP   r<  )r@   rA   rB   r^   r_   r}   r  r  rU   r   r   r   r   r   r   r  r  s   @rF   r<  r<    s         ;; I''''7N ""- - - - - - -7 7 7 7	
 	
 	
 	
 	
 	
 	
 [	
! ! ! !    [    rE   r<  c                  @     e Zd ZU dZdZdZded<   d fdZddZ xZ	S )TypeAliasExprzType alias expression (rvalue).r5  r   r5  rP   rQ   c                V    t                                                       || _        d S rS   )r   rU   r5  )rT   r5  r   s     rF   rU   zTypeAliasExpr.__init__B  r  rE   r   r   r`   c                ,    |                     |           S rS   )visit_type_alias_exprr   s     rF   r   zTypeAliasExpr.acceptF  r  rE   )r5  r   rP   rQ   r   r/  r  s   @rF   rK  rK  9  sl         ))INOOO     3 3 3 3 3 3 3 3rE   rK  c                  L     e Zd ZU dZdZdZded<   ded<   dd fdZddZ xZ	S )NamedTupleExprz:Named tuple expression namedtuple(...) or NamedTuple(...).)rF  is_typedrF  r   rF  r   rR  FrP   rQ   c                d    t                                                       || _        || _        d S rS   )r   rU   rF  rR  )rT   rF  rR  r   s      rF   rU   zNamedTupleExpr.__init__V  s+    	 rE   r   r   r`   c                ,    |                     |           S rS   )visit_namedtuple_exprr   s     rF   r   zNamedTupleExpr.accept[  r  rE   r  )rF  r   rR  r   rP   rQ   r   r/  r  s   @rF   rQ  rQ  J  s|         DD$IN NNNNNN! ! ! ! ! ! !
3 3 3 3 3 3 3 3rE   rQ  c                  @     e Zd ZU dZdZdZded<   d fdZddZ xZ	S )TypedDictExprz%Typed dict expression TypedDict(...).rS  r   rF  rP   rQ   c                V    t                                                       || _        d S rS   )r   rU   rF  )rT   rF  r   s     rF   rU   zTypedDictExpr.__init__i  r  rE   r   r   r`   c                ,    |                     |           S rS   )visit_typeddict_exprr   s     rF   r   zTypedDictExpr.acceptm  r  rE   )rF  r   rP   rQ   r   r/  r  s   @rF   rX  rX  _  sn         //IN NNN     2 2 2 2 2 2 2 2rE   rX  c                  T     e Zd ZU dZdZdZded<   ded<   ded<   d fdZddZ xZ	S )EnumCallExprz5Named tuple expression Enum('name', 'val1 val2 ...').)rF  rU  r  r   rF  rg  rU  r  r  rP   rQ   c                r    t                                                       || _        || _        || _        d S rS   )r   rU   rF  rU  r  )rT   rF  rU  r  r   s       rF   rU   zEnumCallExpr.__init__~  s2    	
rE   r   r   r`   c                ,    |                     |           S rS   )visit_enum_call_exprr   s     rF   r   zEnumCallExpr.accept  r  rE   )rF  r   rU  rg  r  r  rP   rQ   r   r/  r  s   @rF   r]  r]  q  s         ??+I0N NNN####     2 2 2 2 2 2 2 2rE   r]  c                  <     e Zd ZU dZdZded<   d fdZddZ xZS )PromoteExprz2Ducktype class decorator expression _promote(...).r  mypy.types.ProperTyper   rP   rQ   c                V    t                                                       || _        d S rS   r  )rT   r   r   s     rF   rU   zPromoteExpr.__init__  r  rE   r   r   r`   c                ,    |                     |           S rS   )visit__promote_exprr   s     rF   r   zPromoteExpr.accept  rt  rE   )r   rc  rP   rQ   r   )	r@   rA   rB   r^   r_   r}   rU   r   r  r  s   @rF   rb  rb    sj         <<I     1 1 1 1 1 1 1 1rE   rb  c                  T     e Zd ZU dZdZdZded<   ded<   ded<   d fdZddZ xZ	S )NewTypeExprz NewType expression NewType(...).)r   old_typerF  r   r   r  ri  r  rF  rJ   rO   rK   rP   rQ   c                x    t                                          ||           || _        || _        d | _        d S )N)rJ   rK   )r   rU   r   ri  rF  )rT   r   ri  rJ   rK   r   s        rF   rU   zNewTypeExpr.__init__  s;     	d6222	 			rE   r   r   r`   c                ,    |                     |           S rS   )visit_newtype_exprr   s     rF   r   zNewTypeExpr.accept  r(  rE   )
r   r   ri  r  rJ   rO   rK   rO   rP   rQ   r   r/  r  s   @rF   rh  rh    s         **,I1NIII$$$$     0 0 0 0 0 0 0 0rE   rh  c                  @     e Zd ZU dZdZdZded<   d fdZddZ xZ	S )	AwaitExprzAwait expression (await ...).r{  r   r|  rP   rQ   c                V    t                                                       || _        d S rS   r~  r  s     rF   rU   zAwaitExpr.__init__  r  rE   r   r   r`   c                ,    |                     |           S rS   )visit_await_exprr   s     rF   r   zAwaitExpr.accept  r=  rE   r  r   r/  r  s   @rF   rn  rn    so         ''IN     . . . . . . . .rE   rn  c                  X     e Zd ZU dZdZded<   ded<   	 ddd	d fdZddZddZ xZ	S )TempNodezTemporary dummy node used during type checking.

    This node is not present in the original program; it is just an artifact
    of the type checker implementation. It only represents an opaque node with
    some fixed type.
    )r   no_rhsr  r   r   rt  FN)contextr  ru  Context | NonerP   rQ   c                   t                                                       || _        || _        ||j        | _        |j        | _        dS dS )zJConstruct a dummy node; optionally borrow line/column from context object.N)r   rU   r   rt  rJ   rK   )rT   r  rt  ru  r   s       rF   rU   zTempNode.__init__  sM     		DI!.DKKK rE   r   c                >    d| j         t          | j                  fz  S )NzTempNode:%d(%s))rJ   r   r   r   s    rF   r2  zTempNode.__repr__  s     DIs49~~#>>>rE   r   r   r`   c                ,    |                     |           S rS   )visit_temp_noder   s     rF   r   zTempNode.accept  r  rE   r  )r  r  rt  r   ru  rv  rP   rQ   r   r   )
r@   rA   rB   r^   r_   r}   rU   r2  r   r  r  s   @rF   rs  rs    s           #I LLL 49	)W[	) 	) 	) 	) 	) 	) 	) 	)? ? ? ?- - - - - - - -rE   rs  >   r^   rN  __dict__rU   r_   rA   __weakref__r}   __subclasshook____class_getitem____abstractmethods__EXCLUDED_PROTOCOL_ATTRIBUTES>   _order__ignore_	__order__EXCLUDED_ENUM_ATTRIBUTESc                      e Zd ZU dZdZded<   ded<   ded<   ded	<   d
ed<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded <   d!ed"<   ded#<   ded$<   ded%<   ded&<   ded'<   d!ed(<   d)ed*<   ded+<   d,ed-<   ded.<   d/ed0<   ded1<   ded2<   d3ed4<   d5ed6<   d7ed8<   d9ed:<   ded;<   d<ed=<   d>ed?<   g d@ZdAedB<   dt fdEZdudFZe	dvdG            Z
e	dvdH            ZdwdIZdxdLZdydNZe	dzdO            Ze	dzdP            Zd{dRZdvdSZdwdTZd|dUZd}dWZd~dXZddYZdZd[dd]Zdd_Zdd`ZddcZddeZdvdfZddkZddmZe ddo            Z!ddqZ"e dds            Z# xZ$S )r   a  The type structure of a single class.

    Each TypeInfo corresponds one-to-one to a ClassDef, which
    represents the AST of the class.

    In type-theory terms, this is a "type constructor", and if the
    class is generic then it will be a type constructor of higher kind.
    Where the class is used in an actual type, it's in the form of an
    Instance, which amounts to a type application of the tycon to
    the appropriate number of arguments.
    )+r   module_namedefnmro	_mro_refsbad_mrorA  is_disjoint_basedeclared_metaclassmetaclass_typer   is_abstractis_protocolruntime_protocolabstract_attributesdeletable_attributesslotsassumingassuming_proper	inferringis_enumfallback_to_anymeta_fallback_to_anyr@  has_param_spec_typebases_promote
tuple_typespecial_aliasis_named_tupletypeddict_type
is_newtypeis_intersectionmetadataalt_promotehas_type_var_tuple_typetype_var_tuple_prefixtype_var_tuple_suffix	self_typer  rH  rX  type_object_typer   r   r  r?  r  list[TypeInfo]r  zlist[str] | Noner  r   r  rA  r  mypy.types.Instance | Noner  r  r   r   r  r  r  zlist[tuple[str, int]]r  rg  r  zset[str] | Noner  z5list[tuple[mypy.types.Instance, mypy.types.Instance]]r  r  zlist[mypy.types.Instance]r  r  r  r  r@  r  r  zlist[mypy.types.ProperType]r  r  zmypy.types.TupleType | Noner  r  zmypy.types.TypedDictType | Noner  r  r  zdict[str, JsonDict]r  r  r  zmypy.types.TypeVarType | Noner  zDataclassTransformSpec | Noner  rH  r\  rX  r  r  )r  r  r  r  r  r  r  r  rA  r  r  r   FLAGSrP   rQ   c                   t                                                       |j        | _        || _        || _        || _        g | _        d| _        d| _	        g | _
        g | _        d| _        d| _        d| _        d| _        d| _        g | _        g | _        d| _        g | _        g | _        g | _        d| _        d| _        d| _        d| _        |                                  d| _        d| _        d| _        d| _        d| _         g | _!        d| _"        d| _#        d| _$        d| _%        d| _&        d| _'        d| _(        i | _)        d| _*        d| _+        d| _,        d| _-        d| _.        dS )zInitialize a TypeInfo.FN)/r   rU   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  add_type_varsrA  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rH  rX  r  )rT   r   r  r  r   s       rF   rU   zTypeInfo.__init__  sx   
	&#( ',$
"&" #% $&!
!  %15"15" %$$)!!#"$(,%"' $rE   c                   d| _         | j        j        rt          | j        j                  D ]\  }}t	          |t
          j        j                  rd| _        t	          |t
          j        j	                  r;| j         rJ d| _         || _
        t          | j        j                  |z
  dz
  | _        | j                            |j                   d S d S )NFTrd   )r  r  r@  rc  rZ   r   r|  ParamSpecTyper  TypeVarTupleTyper  r  r  appendr   )rT   rg  vds      rF   r  zTypeInfo.add_type_vars  s    ',$9 		/"49#677 / /2b$*":;; 4/3D,b$*"=>> R#;;;;37D012D.14TY5H1I1IA1MPQ1QD.%%bg....		/ 		// /rE   c                    | j         j        S )zShort name.)r  r   r   s    rF   r   zTypeInfo.name!  s     y~rE   c                    | j         S rS   r   r   s    rF   r   zTypeInfo.fullname&  r  rE   c                2    t          | j                  dk    S )z7Is the type generic (i.e. does it have type variables)?r   )r  r@  r   s    rF   rV  zTypeInfo.is_generic*  s    4>""Q&&rE   r   SymbolTableNode | Nonec                Z    | j         D ]"}|j                            |          }|r|c S #d S rS   )r  r   r   )rT   r   r   ns       rF   r   zTypeInfo.get.  sA    8 	 	C	d##A trE   r  c                4    | j         D ]}||j        v r|c S d S rS   )r  r   )rT   r   r   s      rF   get_containing_type_infoz!TypeInfo.get_containing_type_info5  s3    8 	 	Csy  


 !trE   c                \   t                      }| j        s
J d            | j        d d         D ]o}|j        rf|j                                        D ]L\  }}t          |j        t          t          t          f          r-|t          v r7|                    |           Mpt          |          S )Nz?This property can be only accessed after MRO is (re-)calculatedrN   )r   r  r  r   rU  rZ   r5  r   r   r   r  addr  )rT   membersrr  r   r5  s        rF   protocol_memberszTypeInfo.protocol_members;  s      EExZZZZZZHSbSM 	& 	&D &"&*"2"2"4"4 & &JD$!$)ih-OPP ! ;;; KK%%%%grE   c                $   g }| j                                         D ]r\  }}t          |j        t                    r:t          d |j        j        D                       r|                    |           YZt          |j        t          t          f          r|t          v s$t          |          s|                    d          rt          |j        t                    r|j        j        st          j                            |j        j                  }t          |t          j        j                  r|                                r/t          |t          j        j                  r|j        j        dk    r]|                    |           t|S )Nc              3  V   K   | ]$}t          |t                    |j        d k    V  %dS )zenum.memberN)rZ   r4  r   )ru   r  s     rF   r  z(TypeInfo.enum_members.<locals>.<genexpr>W  sM        !#w//LM1     rE   __zenum.nonmember)r   rU  rZ   r5  rQ  anyre  r  r  r   r  r7   r	  r$  r   r|  get_proper_typer   r  is_type_objrD  r   )rT   r  r   symr  s        rF   enum_memberszTypeInfo.enum_membersL  s    ))++ -	% -	%ID# #(I.. '%  "x2     
 NN4(((  CHsHo66 % 444  5t,, 5 ch,, !86 ! *44SX]CCC"3
(?@@!ILIZIZ! #3
(;<<!  H-1AAA t$$$rE   r   c                R    |                      |          }|r|S t          |          rS   )r   KeyError)rT   r   r  s      rF   __getitem__zTypeInfo.__getitem__  s*    HHTNN 	!H4.. rE   c                    d| j          dS )Nz
<TypeInfo r/  r   r   s    rF   r2  zTypeInfo.__repr__  s    ,DM,,,,rE   c                .    t          | t                     S rS   )rZ   FakeInfor   s    rF   __bool__zTypeInfo.__bool__  s     dH----rE   c                0    |                      |          d uS rS   )r   r1  s     rF   has_readable_memberzTypeInfo.has_readable_member  s    xx~~T))rE   FuncBase | Decorator | Nonec                    | j         D ]R}||j        v rG|j        |         j        }t          |t                    r|c S t          |t
                    r|c S  d S Sd S rS   )r  r   r5  rZ   r  rQ  )rT   r   r   r5  s       rF   
get_methodzTypeInfo.get_method  sx    8 	  	 Csy  y+d$9::  KKKi00  KKK44 ! trE   c                   | j         }||j                            d          s|S | j        dk    r t          j                            | g           S |}| j        dd          D ]f}|j         }||j        ||}|j                            |j        j                  r=|j                            |j        j                  r|}dd } |S )Nbuiltins.typerd   )	r  r   has_baser   r   r|  rD  r  r   )rT   declaredwinnersuper_class
super_metas        rF   calculate_metaclass_typez!TypeInfo.calculate_metaclass_type  s    *(>(>(O(OO>_,,:&&tR0008ABB< 	 	K$7J!Z_%<~#{##JO$<== ''(<== #FrE   c                   | j         }||j                            d          sd S | j        dk    rd S |}|g }nd|j        j         d| j         dg}| j        dd          D ]}|j         }||j        |.|}|                    d|j        j         d|j         d           C|j                            |j        j                  rh|j                            |j        j                  r.|}|                    d|j        j         d|j         d           d|j        j         d|j         d}d                    |           d| c S d S )Nr  "z" (metaclass of "z")rd   z > z conflicts with )r  r   r  r   r   r  r  join)rT   r  r  resolution_stepsr  r  conflicts          rF   explain_metaclass_conflictz#TypeInfo.explain_metaclass_conflict  s   *(>(>(O(O4>_,,4! ^HM$: ^ ^T] ^ ^ ^_8ABB< 	O 	OK$7J!Z_%<~# ''W,WW{?SWWW   {##JO$<== ''(<== # ''W,WW{?SWWW   ^:?3^^kFZ^^^Hjj!122NNHNNNNNtrE   F)preciser  c               V    |                      d          p| j        dk    p	| j        o| S )Nr  zabc.ABCMeta)r  r   r  )rT   r  s     rF   is_metaclasszTypeInfo.is_metaclass  s7    MM/** 6}-6$4W	
rE   r   c                6    | j         D ]}|j        |k    r dS dS )zReturn True if type has a base type with the specified name.

        This can be either via extension or via implementation.
        TF)r  r   )rT   r   r   s      rF   r  zTypeInfo.has_base  s3    
 8 	 	C|x''tt (urE   c                $    d | j         D             S )zXReturn a direct base classes.

        Omit base classes of other base classes.
        c                    g | ]	}|j         
S rD   r  )ru   rr  s     rF   ru  z0TypeInfo.direct_base_classes.<locals>.<listcomp>  s    111d	111rE   )r  r   s    rF   direct_base_classeszTypeInfo.direct_base_classes  s    
 21dj1111rE   r  mypy.types.TupleTypec                    || _         t                              |           }| j        s	|| _        dS |j        | j        _        d| j        _        dS )z.Update tuple_type and special_alias as needed.N)r  r   from_tuple_typer  rV   _is_recursiverT   r  aliass      rF   update_tuple_typezTypeInfo.update_tuple_type  sS    ))$//! 	4!&D(-D%/3D,,,rE   mypy.types.TypedDictTypec                    || _         t                              |           }| j        s	|| _        dS |j        | j        _        d| j        _        dS )z2Update typeddict_type and special_alias as needed.N)r  r   from_typeddict_typer  rV   r  r  s      rF   update_typeddict_typezTypeInfo.update_typeddict_type  sT    !--d33! 	4!&D(-D%/3D,,,rE   c                    t                      }|                     t          j                            |          t          j                            |                    S )zzReturn a string representation of the type.

        This includes the most important information about the type.
        r   )str_convtype_str_conv)r6   dumpr   r   r   r|  TypeStrVisitorr  s     rF   r   zTypeInfo.__str__  sT    
 ))yy\))')::*33G3DD  
 
 	
rE   r  mypy.strconv.StrConvr  mypy.types.TypeStrVisitorc                p   d}dfdd                     |           z   }| j        r*dd	                    fd
| j        D                        d}d                    d	                    fd| j        D                                 }g }t          | j                  D ]}|                     | j        |         j                  z   }| j        |         j        }	t          |	t                    r|	j
        r|d |	j
                   dz  }|                    |           d| j         d||d|fg}
| j        r'|
                    d | j                   d           | j        r'|
                    d | j                   d           t          j                            |
|          S )z5Return a string dump of the contents of the TypeInfo.r   r  r  rP   r   c                .    |                                S rS   )r   )r  r  s    rF   type_strzTypeInfo.dump.<locals>.type_str  s    ::m,,,rE   r   zBases(z, c              3  .   K   | ]} |          V  d S rS   rD   )ru   rr  r  s     rF   r  z TypeInfo.dump.<locals>.<genexpr>#  s+      %L%Lhhtnn%L%L%L%L%L%LrE   )zMro({})c              3  R   K   | ]!}|j                             |          z   V  "d S rS   )r   	format_id)ru   rh  r  s     rF   r  z TypeInfo.dump.<locals>.<genexpr>%  s8      TT4dmh&8&8&>&>>TTTTTTrE    (zName(NameszDeclaredMetaclass(zMetaclassType()r  )r  r  rP   r   )r  r  r  formatr  r  r   r5  rZ   r  r   r  r   r  r  r   r   dump_tagged)rT   r  r  rr  headr  r   r   descriptionr5  rU  r  s    ``        @rF   r  zTypeInfo.dump  s   
 	- 	- 	- 	- 	- 	- H..t444: 	PODII%L%L%L%L%L%L%LLLOOODIITTTT48TTTTT
 
 4:&& 	& 	&D!3!3DJt4D4I!J!JJK:d#(D$$$ ; ;:HHTY$7$7::::LL%%%%))))4w6FG" 	TLLRhht7N.O.ORRRSSS 	LLLJ((43F*G*GJJJKKK|''th'GGGrE   rb   c                   i ddd| j         d| j        d| j                            | j                  d| j                                        d| j        d| j        d	| j        d
d | j        D             dd | j	        D             dd | j
        D             d| j        d n| j                                        d| j        d n| j                                        d| j        d n| j                                        d| j        d n| j                                        d| j        d n| j                                        dt!          | t"          j                  | j        | j        t+          | j                  nd | j        | j        | j                                        nd | j        | j                                        nd | j        d}|S )Nr   r   r  r   r   r  r  r@  r  r  c                6    g | ]}|                                 S rD   rt  ru   bs     rF   ru  z&TypeInfo.serialize.<locals>.<listcomp>@  rv  rE   r  c                    g | ]	}|j         
S rD   r  ru   cs     rF   ru  z&TypeInfo.serialize.<locals>.<listcomp>A  s    1111AJ111rE   r  c                6    g | ]}|                                 S rD   rt  )ru   ps     rF   ru  z&TypeInfo.serialize.<locals>.<listcomp>B  s     >>>1>>>rE   r  r  r  r  r  rw  )r  r  r  r  r  rX  )r  r   r   r   r  r  r@  r  r  r  r  r  r  r  r  r  rx  r   r  r  r  r  r  r  r  rX  r   s     rF   r   zTypeInfo.serialize5  sK   "
j"
4+"
 "
 TZ))$-88	"

 DI''))"
 "4#;"
 "
 "4#;"
 88TZ888"
 11111"
 >>>>>"
 4#3#;44AQA[A[A]A]"
 !/7T=T=^=^=`=`"
  +39L9V9V9X9X#"
& $/"9$$t?X?X?Z?Z'"
( +39L9V9V9X9X+"
. YtX^44/"
0 +/:+AVDJ'''t$($=7;~7Q11333W[ 0< -77999/C"
 "
 "
F rE   r   c                B   t                               |d                   }t                              |d                   }|d         }t          |||          }|d         |_        d |d         D             |_        |d         |_        |d         |_        d	 |d
         D             |_        g }|d         D ]W}t          j
                            |          }t          |t          j
        j                  sJ |                    |           X||_        |d         d n)t          j
        j                            |d                   |_        |d         d n)t          j
        j                            |d                   |_        |d         d n)t          j
        j                            |d                   |_        |d         |_        |d         d n)t          j
        j                            |d                   |_        |d         d n)t          j
        j                            |d                   |_        |d         |_        |d         t5          |d                   nd |_        |d         |_        t;          ||d                    |d         }	|	$t          j
        j                            |	          nd |_        |                     d          %tB                              |d                   |_"        |                     d          |_#        |S )Nr   r  r  r   c                .    g | ]}|d          |d         fS )r   rd   rD   )ru   attrs     rF   ru  z(TypeInfo.deserialize.<locals>.<listcomp>c  s%    !]!]!]47DG"4!]!]!]rE   r  r@  r  c                V    g | ]&}t           j        j                            |          'S rD   )r   r|  rD  r   r  s     rF   ru  z(TypeInfo.deserialize.<locals>.<listcomp>f  s+    NNN1DJ'33A66NNNrE   r  r  r  r  r  r  r  r  r  r  r  rw  r  r  rX  )$r   r   r?  r   r   r  r@  r  r  r   r|  r}  rZ   r~  r  r  rD  r  r  r  r  	TupleTyper  TypedDictTyper  r  r   r  r  r  TypeVarTyper  r   r  r  rX  )
r   r   r   r  r  tir  r  r'  sts
             rF   r   zTypeInfo.deserialize\  s   ''W66##DL11=)eT;//J'!]!]F[A\!]!]!]K(!%&;!<NNWNNNj! 	 	A
++A..Aa!677777OOA M"* D$00m1DEE 	 ()1 D$006J1KLL 	 $%- D$006F1GHH 	 E{ L!) D%11$|2DEE 	 $%- D)55d;K6LMM 	
 :&)-g)B3tG}%%%"&'=">"d7m$$$+ACtz-99"===UY88.//;*@*L*L/0+ +B' ..	rE   r#   c                    t          |t                     | j                            || j                   | j                            |           t          || j                   t          || j                   t          |d | j	        D                        t          |d | j	        D                        t          || j                   t          || j                   t          j                            || j                   t          |d | j        D                        t          j                            || j                   t          j                            || j                   t          j                            || j                   t          j                            || j                   t          j                            || j                   t          j                            || j                   t5          || t6          j                   t;          || j                   | j        t          |t@                     n"t          |tC          | j                             t          || j"                   t          j                            || j#                   | j$        t          |t@                     n| j$                            |           tK          || j&                   t          |tN                     d S )Nc                    g | ]\  }}|S rD   rD   )ru   r   r  s      rF   ru  z"TypeInfo.write.<locals>.<listcomp>      EEEDAqaEEErE   c                    g | ]\  }}|S rD   rD   )ru   r  ss      rF   ru  z"TypeInfo.write.<locals>.<listcomp>  r  rE   c                    g | ]	}|j         
S rD   r  r  s     rF   ru  z"TypeInfo.write.<locals>.<listcomp>  s    ;;;Qaj;;;rE   )(r5   	TYPE_INFOr   r   r   r  r   r  r2   r  r.   r@  r-   r  r   r|  r`  r  r  r  r  r  r  r  r  r  r  r   r  r0   r  r  r    r  r  r  r  r3   rX  r   r   s     rF   r   zTypeInfo.write  s   $	"""
t}---	$()))$&&&tEED,DEEEFFFtEED,DEEEFFFtT^,,,41222
""4444t;;$(;;;<<<
""4777
!!$(8999
!!$(?@@@
!!$(;<<<
!!$888
!!$(;<<<D$///4''':dL))))4
!3!3444tT6777
!!$777(0dL)))))//555dDO,,,$     rE   r!   c                *
   t                                         }t                    t          k    sJ t                                        }t                    }t          |||          }t                    |_        t                    }t                    }t          t          ||                    |_        t                    |_        t                    |_        g |_        t                    t"          k    sJ t%          t'                              D ]b}t                    t(          j        j        k    sJ |j                            t(          j        j                                                 ct                    |_        t5          t          t(          j        j                 t(          j                                                |_        t                    x}	t<          k    r@|	t(          j        j        k    sJ t(          j        j                                      |_        t                    x}	t<          k    r@|	t(          j        j        k    sJ t(          j        j                                      |_         t                    x}	t<          k    r@|	t(          j        j        k    sJ t(          j        j                                      |_!        t                    x}	t<          k    r@|	t(          j        j"        k    sJ t(          j        j#                                      |_$        t                    x}	t<          k    r@|	t(          j        j%        k    sJ t(          j        j&                                      |_'        tQ          |t          j)                   tU                    |_+        t                    }	|	t<          k    r:|	tX          k    sJ fdt%          t'                              D             |_-        t                    |_.        t                    x}	t<          k    r@|	t(          j        j/        k    sJ t(          j        j0                                      |_1        t                    }	|	t<          k    r,|	td          k    sJ tf                                        |_4        tk                    |_6        t                    tn          k    sJ |S )Nc                .    h | ]}t                    S rD   )read_str_barer  s     rF   	<setcomp>z TypeInfo.read.<locals>.<setcomp>  s!    PPPd++PPPrE   )8r   r   r,   r_  r?  r   r   r   r)   r%   listzipr  r@  r$   r  r  r   r  r  r   r|  rH  r  rD  r  r   r~  r.  r  r    r  r  r  
TUPLE_TYPEr  r  TYPED_DICT_TYPEr  r  r  r  r'   r  r   r  r  TYPE_VAR_TYPEr  r  r   r  r  r*   rX  r   )
r   r   r   r  r  r  attrsstatusesr  r  s
    `        rF   r   zTypeInfo.read  s     &&~~****}}T""tnneT;//~~d## &&!%c%&:&:!;!;$T**!*4~~))))}T**++ 	< 	<AD>>TZ%88888HOODJ/44T::;;;; %T**4
 56
8Q8QRV8W8WXXD>>!Cl22$*-----!Z055d;;BND>>!Cl22$*-----$(J$7$<$<T$B$BB!D>>!Cl22$*----- $
 3 8 8 > >BD>>!Cl22$*///// J055d;;BMD>>!Cl22$*44444 $
 8 = =d C CB4X^,,,ootnn,(????PPPPU=;N;N5O5OPPPBH"/"5"5D>>!Cl22$*22222:166t<<BLtnn,'>>>>*@*E*Ed*K*KB'$T**~~((((	rE   )r   r   r  r?  r  r   rP   rQ   r'  r   r  )r   r   rP   r  )r   r   rP   r  )rP   rg  )r   r   rP   r   )r   r   rP   r   )r   r   rP   r  )rP   r  rP   r\  )r  r   rP   r   )r   r   rP   r   )rP   r  )r  r  rP   rQ   )r  r  rP   rQ   )r  r  r  r  rP   r   r   )r   rb   rP   r   r   )r   r!   rP   r   )%r@   rA   rB   r^   r_   r}   r  rU   r  r   r   r   rV  r   r  r  r  r  r2  r  r  r  r  r  r  r  r  r  r  r   r  r   r   r   r   r   r  r  s   @rF   r   r     s        
 
,I\ NNN NNN   MMMNNN2222.... /...#### , DCCCJJJJ )((( MMM  
   %$$$ *))) ,+++ ,+++  4333   "!!! $### -,,, <;;;   5444  E    .% .% .% .% .% .%`/ / / /    X    X' ' ' '          X  1 1 1 X1f! ! ! !- - - -. . . .* * * *
 
 
 
   4# # # #J /4 
 
 
 
 
 
   2 2 2 2	4 	4 	4 	4	4 	4 	4 	4	
 	
 	
 	
H H H H<% % % %N ? ? ? [?B! ! ! !B < < < [< < < < <rE   c                  "    e Zd ZdZddZdd	Zd
S )r  r  r  r   rP   rQ   c                    || _         d S rS   r/  )rT   r  s     rF   rU   zFakeInfo.__init__  s    rE   r  r   c                    |dk    rt                               | |          S t          t                               | d                    )Nr   r  )object__getattribute__AssertionError)rT   r  s     rF   r3  zFakeInfo.__getattribute__  sA    ;**4666V44T5AABBBrE   N)r  r   rP   rQ   )r  r   rP   r   )r@   rA   rB   r_   rU   r3  rD   rE   rF   r  r    sG        I,   C C C C C CrE   r  zVar is lacking infozFinal[TypeInfo]r+  zClassDef is lacking inforM  z"FuncBase for non-methods lack inforJ  z*fallback can't be filled out until semanalMISSING_FALLBACKc                       e Zd ZdZdZdZddddddd, fdZed-d            Zed-d            Z	e
d.d            Ze
d.d            Ze
d/d            Zd0d#Zd1d%Zed2d'            Zd3d)Zed4d+            Z xZS )5r   a  
    A symbol node representing a type alias.

    Type alias is a static concept, in contrast to variables with types
    like Type[...]. Namely:
        * type aliases
            - can be used in type context (annotations)
            - cannot be re-assigned
        * variables with type Type[...]
            - cannot be used in type context
            - but can be re-assigned

    An alias can be defined only by an assignment to a name (not any other lvalues).

    Such assignment defines an alias by default. To define a variable,
    an explicit Type[...] annotation is required. As an exception,
    at non-global scope non-subscripted rvalue creates a variable even without
    an annotation. This exception exists to accommodate the common use case of
    class-valued attributes. See SemanticAnalyzerPass2.check_and_set_up_type_alias
    for details.

    Aliases can be generic. We use bound type variables for generic aliases, similar
    to classes. Essentially, type aliases work as macros that expand textually.
    The definition and expansion rules are following:

        1. An alias targeting a generic class without explicit variables act as
        the given class (this doesn't apply to TypedDict, Tuple and Callable, which
        are not proper classes but special type constructors):

            A = List
            AA = List[Any]

            x: A  # same as List[Any]
            x: A[int]  # same as List[int]

            x: AA  # same as List[Any]
            x: AA[int]  # Error!

            C = Callable  # Same as Callable[..., Any]
            T = Tuple  # Same as Tuple[Any, ...]

        2. An alias using explicit type variables in its rvalue expects
        replacements (type arguments) for these variables. If missing, they
        are treated as Any, like for other generics:

            B = List[Tuple[T, T]]

            x: B  # same as List[Tuple[Any, Any]]
            x: B[int]  # same as List[Tuple[int, int]]

            def f(x: B[T]) -> T: ...  # without T, Any would be used here

        3. An alias can be defined using another aliases. In the definition
        rvalue the Any substitution doesn't happen for top level unsubscripted
        generic classes:

            A = List
            B = A  # here A is expanded to List, _not_ List[Any],
                   # to match the Python runtime behaviour
            x: B[int]  # same as List[int]
            C = List[A]  # this expands to List[List[Any]]

            AA = List[T]
            D = AA  # here AA expands to List[Any]
            x: D[int]  # Error!

    Note: the fact that we support aliases like `A = List` means that the target
    type will be initially an instance type with wrong number of type arguments.
    Such instances are all fixed either during or after main semantic analysis passes.
    We therefore store the difference between `List` and `List[Any]` rvalues (targets)
    using the `no_args` flag.

    Meaning of other fields:

    target: The target type. For generic aliases contains bound type variables
        as nested types (currently TypeVar and ParamSpec are supported).
    _fullname: Qualified name of this type alias. This is used in particular
        to track fine-grained dependencies from aliases.
    module: Module where the alias was defined.
    alias_tvars: Type variables used to define this alias.
    normalized: Used to distinguish between `A = List`, and `A = list`. Both
        are internally stored using `builtins.list` (because `typing.List` is
        itself an alias), while the second cannot be subscripted because of
        Python runtime limitation.
    line and column: Line and column on the original alias definition.
    eager: If True, immediately expand alias when referred to (useful for aliases
        within functions that can't be looked up from the symbol table)
    )
rV   r   modulealias_tvarsno_args
normalizedr  eagertvar_tuple_indexpython_3_12_type_alias)r   rV   r8  r9  NF)r8  r9  r:  r;  r=  rV   r  r   r   r7  rJ   rO   rK   r8  rH  r9  r   r:  r;  r=  rP   rQ   c               V   || _         || _        || _        |g }|| _        || _        || _        d | _        |	| _        |
| _        d | _	        t          |          D ]+\  }}t          |t          j        j                  r|| _	        ,t                                          ||           d S rS   )r   r7  rV   r8  r9  r:  r  r;  r=  r<  rc  rZ   r   r|  r  r   rU   )rT   rV   r   r7  rJ   rK   r8  r9  r:  r;  r=  rg  r'  r   s                rF   rU   zTypeAlias.__init__  s     "K&$ +/
&<# $k** 	* 	*DAq!TZ899 *()%v&&&&&rE   rF  r   c           
        |j         sJ t          |j                             t          j                            |t          j                            |j        j                                      |j	        |j
        |j        |j                  S )zGenerate an alias to the tuple type described by a given TypeInfo.

        NOTE: this doesn't set type alias type variables (for generic tuple types),
        they must be set by the caller (when fully analyzed).
        rI  )r  r   copy_modifiedr   r|  rD  type_vars_as_argsr  r@  r   r  rJ   rK   r   rF  s     rF   r  zTypeAlias.from_tuple_type  s     O)),,$*66ty7JKK  *   MIK
 
 	
rE   c           
        |j         sJ t          |j                             t          j                            |t          j                            |j        j                                      |j	        |j
        |j        |j                  S )zGenerate an alias to the TypedDict type described by a given TypeInfo.

        NOTE: this doesn't set type alias type variables (for generic TypedDicts),
        they must be set by the caller (when fully analyzed).
        r@  )r  r   rA  r   r|  rD  rB  r  r@  r   r  rJ   rK   rC  s     rF   r  zTypeAlias.from_typeddict_type  s     """"--,,$*66ty7JKK  .   MIK
 
 	
rE   c                B    | j                             d          d         S Nr   rN   r   r   s    rF   r   zTypeAlias.name      ~##C((,,rE   c                    | j         S rS   r   r   s    rF   r   zTypeAlias.fullname  r  rE   c                >    t          d | j        D                       S )Nc              3  T   K   | ]#}t          |t          j        j                  V  $d S rS   )rZ   r   r|  r  rY  s     rF   r  z0TypeAlias.has_param_spec_type.<locals>.<genexpr>  s1      UUq:a!9::UUUUUUrE   )r  r8  r   s    rF   r  zTypeAlias.has_param_spec_type  s"    UUDDTUUUUUUrE   r   r   r`   c                ,    |                     |           S rS   )visit_type_aliasr   s     rF   r   zTypeAlias.accept  r=  rE   rb   c           	         d| j         | j        | j                                        d | j        D             | j        | j        | j        d}|S )Nr   c                6    g | ]}|                                 S rD   rt  rY  s     rF   ru  z'TypeAlias.serialize.<locals>.<listcomp>  s     DDDaAKKMMDDDrE   )r   r   r7  rV   r8  r9  r:  r=  )r   r7  rV   r   r8  r9  r:  r=  r   s     rF   r   zTypeAlias.serialize  sW    !kk++--DD43CDDD|/&*&A	
 	
 rE   r   c                   |d         dk    sJ |d         }|d         }d |d         D             }t          d |D                       sJ t          j                            |d                   }|d	         }|d
         }|d         } | |||ddt	          t
          t          j        j                 |          |||	  	        S )Nr   r   r   r7  c                L    g | ]!}t           j                            |          "S rD   r*  rY  s     rF   ru  z)TypeAlias.deserialize.<locals>.<listcomp>  s(    SSS!tz22155SSSrE   r8  c              3  T   K   | ]#}t          |t          j        j                  V  $d S rS   )rZ   r   r|  r\  r&  s     rF   r  z(TypeAlias.deserialize.<locals>.<genexpr>  s1      RR:a!;<<RRRRRRrE   rV   r9  r:  r=  rN   r8  r9  r:  r=  )r  r   r|  r}  r   r&  r\  )	r   r   r   r7  r8  rV   r9  r:  r=  s	            rF   r   zTypeAlias.deserialize  s    H~,,,,
#hSStM?RSSSRRkRRRRRRRR,,T(^<<y/,'
!%&>!?sT$*"<={KK!#9

 

 

 
	
rE   r#   c                   t          |t                     t          || j                   t          || j                   | j                            |           t          j        	                    || j
                   t          || j                   t          || j                   t          || j                   t          |t                     d S rS   )r5   
TYPE_ALIASr   r   r7  rV   r   r   r|  r`  r8  r-   r9  r:  r=  r   r   s     rF   r   zTypeAlias.write  s    $
###$'''$$$$$
""4)9:::4&&&4)))44555$     rE   r!   c                p   t          |          }t          |          }t          j                            |          }t          j                            |          }t          |||dd|t          |          t          |          t          |          	  	        }t          |          t          k    sJ |S )NrN   rR  )	r   r   r|  r/  rb  r   r$   r,   r   )r   r   r   r7  rV   r8  r  s          rF   r   zTypeAlias.read  s    D>>$%%d++j44T::#dOO #,T??

 

 

 ~~((((
rE   )rV   r  r   r   r7  r   rJ   rO   rK   rO   r8  rH  r9  r   r:  r   r;  r   r=  r   rP   rQ   )rF  r   rP   r   r   r  r   r   )r   rb   rP   r   r   )r   r!   rP   r   )r@   rA   rB   r^   r_   r  rU   r   r  r  r   r   r   r  r   r   r   r   r   r  r  s   @rF   r   r   &  s       W WrI BN @D ',' ' ' ' ' ' ' 'B 
 
 
 [
* 
 
 
 [
* - - - X-    X V V V XV. . . .    
 
 
 [
,	! 	! 	! 	!    [    rE   r   c                  d    e Zd ZdZdZddddZedd            Zedd            ZddZ	ddZ
dS )PlaceholderNodea  Temporary symbol node that will later become a real SymbolNode.

    These are only present during semantic analysis when using the new
    semantic analyzer. These are created if some essential dependencies
    of a definition are not yet complete.

    A typical use is for names imported from a module which is still
    incomplete (within an import cycle):

      from m import f  # Initially may create PlaceholderNode

    This is particularly important if the imported shadows a name from
    an enclosing scope or builtins:

      from m import int  # Placeholder avoids mixups with builtins.int

    Another case where this is useful is when there is another definition
    or assignment:

      from m import f
      def f() -> None: ...

    In the above example, the presence of PlaceholderNode allows us to
    handle the second definition as a redefinition.

    They are also used to create PlaceholderType instances for types
    that refer to incomplete types. Example:

      class C(Sequence[C]): ...

    We create a PlaceholderNode (with becomes_typeinfo=True) for C so
    that the type C in Sequence[C] can be bound.

    Attributes:

      fullname: Full name of the PlaceholderNode.
      node: AST node that contains the definition that caused this to
          be created. This is useful for tracking order of incomplete definitions
          and for debugging.
      becomes_typeinfo: If True, this refers something that could later
          become a TypeInfo. It can't be used with type variables, in
          particular, as this would cause issues with class type variable
          detection.

    The long-term purpose of placeholder nodes/types is to evolve into
    something that can support general recursive types.
    )r   r5  becomes_typeinfoF)rX  r   r   r5  r   rJ   rO   rX  r   rP   rQ   c               >    || _         || _        || _        || _        d S rS   )r   r5  rX  rJ   )rT   r   r5  rJ   rX  s        rF   rU   zPlaceholderNode.__init__b  s%     "	 0			rE   c                B    | j                             d          d         S rF  r   r   s    rF   r   zPlaceholderNode.namej  rG  rE   c                    | j         S rS   r   r   s    rF   r   zPlaceholderNode.fullnamen  r  rE   rb   c                    J d            )NFz#PlaceholderNode can't be serializedrD   r   s    rF   r   zPlaceholderNode.serializer  s    ;;;;;rE   r   r   r`   c                ,    |                     |           S rS   )visit_placeholder_noder   s     rF   r   zPlaceholderNode.acceptu  r  rE   N)
r   r   r5  r   rJ   rO   rX  r   rP   rQ   r   r   r   )r@   rA   rB   r^   r_   rU   r   r   r   r   r   rD   rE   rF   rW  rW  /  s        . .` :I QV      - - - X-    X< < < <4 4 4 4 4 4rE   rW  c                      e Zd ZdZdZ	 	 	 d%dddd&dZed'd            Zed(d            Zd)dZ	d*dZ
d+dZed,d            Zd-d!Zed.d#            Zd$S )/r   a  Description of a name binding in a symbol table.

    These are only used as values in module (global), function (local)
    and class symbol tables (see SymbolTable). The name that is bound is
    the key in SymbolTable.

    Symbol tables don't contain direct references to AST nodes primarily
    because there can be multiple symbol table references to a single
    AST node (due to imports and aliases), and different references can
    behave differently. This class describes the unique properties of
    each reference.

    The most fundamental attribute is 'node', which is the AST node that
    the name refers to.

    The kind is usually one of LDEF, GDEF or MDEF, depending on the scope
    of the definition. These three kinds can usually be used
    interchangeably and the difference between local, global and class
    scopes is mostly descriptive, with no semantic significance.
    However, some tools that consume mypy ASTs may care about these so
    they should be correct.

    Attributes:
        node: AST node of definition. Among others, this can be one of
            FuncDef, Var, TypeInfo, TypeVarExpr or MypyFile -- or None
            for cross_ref that hasn't been fixed up yet.
        kind: Kind of node. Possible values:
               - LDEF: local definition
               - GDEF: global (module-level) definition
               - MDEF: class member definition
               - UNBOUND_IMPORTED: temporary kind for imported names (we
                 don't know the final kind yet)
        module_public: If False, this name won't be imported via
            'from <module> import *'. This has no effect on names within
            classes.
        module_hidden: If True, the name will be never exported (needed for
            stub files)
        cross_ref: For deserialized MypyFile nodes, the referenced module
            name; for other nodes, optionally the name of the referenced object.
        implicit: Was this defined by assignment to self attribute?
        plugin_generated: Was this symbol generated by a plugin?
            (And therefore needs to be removed in aststrip.)
        no_serialize: Do not serialize this node if True. This is used to prevent
            keys in the cache that refer to modules on which this file does not
            depend. Currently this can happen if there is a module not in build
            used e.g. like this:
                import a.b.c # type: ignore
            This will add a submodule symbol to parent module `a` symbol table,
            but `a.b` is _not_ added as its dependency. Therefore, we should
            not serialize these symbols as they may not be found during fixup
            phase, instead they will be re-added during subsequent patch parents
            phase.
            TODO: Refactor build.py to make dependency tracking more transparent
            and/or refactor look-up functions to not require parent patching.

    NOTE: No other attributes should be added to this class unless they
    are shared by all node kinds.
    )r  r5  module_publicmodule_hidden	cross_refimplicitplugin_generatedno_serializeTF)rd  re  r  rO   r5  SymbolNode | Noner`  r   rc  ra  rd  re  rP   rQ   c               v    || _         || _        || _        || _        || _        d | _        || _        || _        d S rS   )r  r5  r`  rc  ra  rb  rd  re  )rT   r  r5  r`  rc  ra  rd  re  s           rF   rU   zSymbolTableNode.__init__  sF     		* *%) 0(rE   r\  c                ,    | j         | j         j        S d S rS   )r5  r   r   s    rF   r   zSymbolTableNode.fullname  s    9 9%%4rE   r  c                    | j         }t          |t          t          f          r|j        |j        S t          |t
                    r|j        j        S d S rS   )r5  rZ   r  r  r   rQ  rk  )rT   r5  s     rF   r   zSymbolTableNode.type  sQ    ydS"7899 	di>S9i(( 	8= 4rE   c                v    t          | j        | j        | j        | j        | j                  }| j        |_        |S rS   )r   r  r5  r`  rc  ra  rb  )rT   news     rF   r_  zSymbolTableNode.copy  s8    Ity$"4dmTEW
 
 
rE   r   c                   t           | j                  dt          | j                   }t	          | j        t
                    r|d| j        j         dz  }| j        |d| j         z  }| j        r|d| j         z  }|S )N/r  r    : z cross_ref:)	rs   r  r9   r5  rZ   r   r   r   rb  )rT   r  s     rF   r   zSymbolTableNode.__str__  s    $)$>>z$)'<'<>>di,, 	,+di(++++A9 "ty"""A> 	0/t~///ArE   prefixr   rb   c                .   dt           | j                 d}| j        rd|d<   | j        sd|d<   | j        rd|d<   | j        rd|d<   t          | j        t                    r| j        j	        |d	<   n| j        J | d|             |q| j        j	        }d|v ra||dz   |z   k    rUt          | j        t                    r| j        j        s/t          | j        t                    rJ d| d            ||d	<   |S | j                                        |d<   |S )zSerialize a SymbolTableNode.

        Args:
          prefix: full name of the containing module or class; or None
          name: name of this object relative to the containing object
        r   )r   r  Tra  Fr`  rc  rd  rb  N:r   Definition of  is unexpectedly incompleter5  )rs   r  ra  r`  rc  rd  rZ   r5  r   r   r  r#  rW  r   )rT   ro  r   r   r   s        rF   r   zSymbolTableNode.serialize  ss    %6z$)?TUU 	)$(D!! 	*$)D!= 	$#D  	,'+D#$di** 	1 $	 2D9((V*<*<d*<*<(((!9-8OO FSL4$777'	377 8<@I<Y 8  *	?    N NMMMMN N N )1D%K9..00DLrE   r   c                   |d         dk    sJ t           |d                  }d|v rt          |d           }|d         |_        n>d|v s
J |            t                              |d                   }t          ||          }d|v r|d         |_        d|v r|d         |_        d|v r|d         |_        d	|v r|d	         |_        |S )
Nr   r   r  rb  r5  ra  r`  rc  rd  )	ry   r   rb  r   r   ra  r`  rc  rd  )r   r   r  stnoder5  s        rF   r   zSymbolTableNode.deserialize  s    H~!22222!$v,/$$T400F#K0FT>>>4>>>))$v,77D$T400Fd""#'#8F d""#'#8F ":.FO%%&*+=&>F#rE   r#   c                   t          |t                     t          || j                   t	          || j                   t	          || j                   t	          || j                   t	          || j                   d }t          | j
        t                    r| j
        j        }n| j
        J | d|             |l| j
        j        }d|v r\||dz   |z   k    rPt          | j
        t                    r| j
        j        s*t          | j
        t                    rJ d| d            |}t!          ||           |#| j
        J | j
                            |           t          |t$                     d S )Nrq  r   rr  rs  )r5   SYMBOL_TABLE_NODEr   r  r-   ra  r`  rc  rd  rZ   r5  r   r   r  r#  rW  r3   r   r   )rT   r   ro  r   rb  r   s         rF   r   zSymbolTableNode.write0  s   $)***$	"""4+,,,4+,,,4'''4.///	di** 	)	*II9((V*<*<d*<*<(((!9-8OO FSL4$777'	377 8<@I<Y 8  *	?    N NMMMMN N N !)IdI&&&9(((IOOD!!!$     rE   r!   c                   t          |          t          k    sJ t          t          |          d           }t	          |          |_        t	          |          |_        t	          |          |_        t	          |          |_        t          |          }|t          |          |_        n||_        t          |          t          k    sJ |S rS   )r,   rw  r   r   r$   ra  r`  rc  rd  r*   read_symbolr5  rb  r   )r   r   r  rb  s       rF   r   zSymbolTableNode.readO  s    ~~!22222htnnd33%dOO%dOO ( &&	"4((CHH%CM~~((((
rE   N)TFF)r  rO   r5  rf  r`  r   rc  r   ra  r   rd  r   re  r   rP   rQ   r-  r  )rP   r   r   )ro  r   r   r   rP   rb   )r   rb   rP   r   )r   r#   ro  r   r   r   rP   rQ   )r   r!   rP   r   )r@   rA   rB   r^   r_   rU   r   r   r   r_  r   r   r   r   r   r   rD   rE   rF   r   r   y  s-       9 9v	I ##) "'") ) ) ) ) )(    X    X   	 	 	 	! ! ! !F    [*! ! ! !>    [  rE   c                  f    e Zd ZdZdZddZddZdd	Zedd            Z	ddZ
edd            ZdS )r   zrStatic representation of a namespace dictionary.

    This is used for module, class and function namespaces.
    rD   rP   r   c                   g }|                                  D ]\  }}t          |t                    rm|j        dk    ra|j        pd                    d          d         t
          vr8|                    dt          |          z   dz   t          |          z              |                    d           t          |          }|	                    dd	           |dxx         d
z  cc<   d
                    |          S )Nbuiltinsr   r   rN   z  rn  z  <invalid item>r   zSymbolTable(r   
)rU  rZ   r   r   r   r   r  r   r  insertr  )rT   r   r  r  s       rF   r   zSymbolTable.__str__h  s    **,, 
	- 
	-JC%11 -Nj00-244S99"=EZZZHHTCHH_u4s5zzABBB +,,,,1II	N###	"yy||rE   c                X    t          d |                                 D                       S )Nc                @    g | ]\  }}||                                 fS rD   )r_  )ru   r  r5  s      rF   ru  z$SymbolTable.copy.<locals>.<listcomp>{  s)    MMM93S$))++.MMMrE   )r   rU  r   s    rF   r_  zSymbolTable.copyz  s'    MM

MMMNNNrE   r   rb   c                    ddi}|                                  D ],\  }}|dk    s|j        r|                    ||          ||<   -|S )Nr   r   __builtins__)rU  re  r   )rT   r   r   r  r  s        rF   r   zSymbolTable.serialize}  s]    "M2**,, 	7 	7JC
 n$$(:$#66DIIrE   r   c                    |d         dk    sJ t                      }|                                D ](\  }}|dk    rt                              |          ||<   )|S )Nr   r   )r   rU  r   r   )r   r   r  r  r  s        rF   r   zSymbolTable.deserialize  sa    H~....]]**,, 	= 	=JCh)55e<<3	rE   r#   rQ   c                L   d}|                                  D ]\  }}|dk    s|j        r|dz  }t          |t                     t	          ||           t          |           D ]?}| |         }|dk    s|j        rt          ||           |                    |||           @d S )Nr   r  rd   )rU  re  r5   r   r  r  write_str_barer   )rT   r   r   sizer  r  s         rF   r   zSymbolTable.write  s    **,, 	 	JC
 n$$(:$AIDD$%%%tT"""$<< 	- 	-CIEn$$(:$4%%%KKh,,,,	- 	-rE   r!   c                    t                    t          k    sJ t                    }t          fdt	          |          D                       S )Nc                b    g | ]+}t                    t                                        f,S rD   )r$  r   r   r  s     rF   ru  z$SymbolTable.read.<locals>.<listcomp>  s4    TTT1mD!!?#7#7#=#=>TTTrE   )r,   r   r  r   r  )r   r   r  s    ` rF   r   zSymbolTable.read  sV    ~~----T""TTTTdTTT
 
 	
rE   Nr   )rP   r   )r   r   rP   rb   )r   rb   rP   r   )r   r#   r   r   rP   rQ   )r   r!   rP   r   )r@   rA   rB   r^   r_   r   r_  r   r   r   r   r   rD   rE   rF   r   r   `  s         
 I   $O O O O
 
 
 
    [- - - -( 
 
 
 [
 
 
rE   r   c                  l    e Zd ZdZdZddddddddZddZedd            ZddZ	edd            Z
dS )r  zSpecifies how a dataclass-like transform should be applied. The fields here are based on the
    parameters accepted by `typing.dataclass_transform`.
eq_defaultorder_defaultkw_only_defaultfrozen_defaultfield_specifiersN)r  r  r  r  r  r  r   r  r  r  tuple[str, ...] | Noner  rP   rQ   c               t    ||nd| _         ||nd| _        ||nd| _        ||nd| _        ||nd| _        d S )NTFrD   r  )rT   r  r  r  r  r  s         rF   rU   zDataclassTransformSpec.__init__  sc     )3(>**D.;.G]]U2A2MSX0>0JnnPU4D4P 0 0VXrE   rb   c                ^    | j         | j        | j        | j        t	          | j                  dS Nr  )r  r  r  r  r&  r  r   s    rF   r   z DataclassTransformSpec.serialize  s6    /!/#3"1 $T%: ; ;
 
 	
rE   r   c                   t          |                    d          |                    d          |                    d          |                    d          t          |                    dg                               S )Nr  r  r  r  r  r  )r  r   tupler   s     rF   r   z"DataclassTransformSpec.deserialize  sq    %xx--((?33 HH%67788$455"488,>#C#CDD
 
 
 	
rE   r#   c                ,   t          |t                     t          || j                   t          || j                   t          || j                   t          || j                   t          || j                   t          |t                     d S rS   )
r5   r   r-   r  r  r  r  r2   r  r   r   s     rF   r   zDataclassTransformSpec.write  s    $   4)))4+,,,4-...4,---tT2333$     rE   r!   c                    t          t          |          t          |          t          |          t          |          t          t          |                              }t	          |          t
          k    sJ |S r  )r  r$   r  r)   r,   r   r0  s      rF   r   zDataclassTransformSpec.read  sk    $ #D//%dOO$T??"=#6#677
 
 
 ~~((((
rE   )r  r   r  r   r  r   r  r  r  r   rP   rQ   r   )r   rb   rP   r  r   )r   r!   rP   r  )r@   rA   rB   r^   r_   rU   r   r   r   r   r   rD   rE   rF   r  r    s        < <I #'%)'+37 '+Y Y Y Y Y Y$
 
 
 
 
 
 
 [
! ! ! ! 	 	 	 [	 	 	rE   r  r5  r   rg  c                       fd|D             S )Nc                4    g | ]}t          |          |S rD   )getattr)ru   r   r5  s     rF   ru  zget_flags.<locals>.<listcomp>  s(    :::TgdD&9&9:D:::rE   rD   )r5  r   s   ` rF   rx  rx    s    ::::U::::rE   rw  rQ   c                2    |D ]}t          | |d           d S r  )setattr)r5  rw  r   s      rF   r  r    s0     " "dD!!!!" "rE   r   r#   c                L    |D ] }t          | t          ||                     !d S rS   )r-   r  r   r5  rw  r  s       rF   r  r    s8     . .4t,,----. .rE   r!   c                P    |D ]"}t          |           rt          ||d           #d S r  )r$   r  r  s       rF   r  r    s<     & &T?? 	&D$%%%& &rE   r|  r\  c                    d}t          | j        t                    r| j        j        }n.t          | j        t                    rt          | j                  }|dS | d| j         S )zReturn the qualified name representation of a member expression.

    Return a string of form foo.bar, foo.bar.baz, or similar, or None if the
    argument cannot be represented in this form.
    Nr   )rZ   r|  r  r   rE  get_member_expr_fullname)r|  initials     rF   r  r  
  sk     G$)X&& 6).	DIz	*	* 6*4955t##	###rE   c                    i | ]V\  }}t          |          t          ur;t          |t                     r&t          |t                    r|t          uN||j        WS rD   )r   r  rZ   
issubclassr   r   )ru   r  objs      rF   rx   rx     sn       SCyy  3 !3
## ! 	: 
 	rE   r   r  ra  nodeslist[T]failCallable[[str, T], None]c                   d}d}d}d}t          | |          D ]\  }}|t          k    r|s|s|s|r |d|            d S (|t          k    r|s|s|r |d|            d S d}K|t          k    r|s|s|r |d|            d S d}n|t          k    s|t
          k    rd}|r |d|            d S |t          k    r|r |d|            d S d}d S )NFzHRequired positional args may not appear after default, named or var argsz>Positional default args may not appear after named or var argsTz/Var args may not appear after named or var argsz-A **kwargs argument must be the last argumentz'You may only have one **kwargs argument)r'  r  r  rP  rT  rU  rV  )	r  r  r  
is_var_arg	is_kw_arg
seen_namedseen_optr  r5  s	            rF   check_arg_kindsr  $  s    JIJH)U++  
d7?? Y *  ^    W__ Y * UW[\\\HHX Y * FMMMJJY$-"7"7J DdKKK Y >EEEI7 rE   function definitionSequence[str | None]r  r   c                    t                      }t          | |          D ]5\  }}|||v r |d| d| |            d S |                    |           6d S )NzDuplicate argument "z" in )r   r'  r  )r   r  r  r  
seen_namesr   r5  s          rF   check_arg_namesr  I  s     #&%%J%''  
d
 2 2D@@@;@@$GGGEEt	 rE   r   c                R    t          | j        t                    r| j        j        S dS )z.Return whether the expression is ClassVar[...]F)rZ   r5  r  r  r{  s    rF   is_class_varr  W  s&    $)S!! %y$$5rE   rf  c                `    t          | t          t          t          t          f          o| j        S )z6Check whether `node` corresponds to a final attribute.)rZ   r  rP  rT  rQ  rA  rL  s    rF   is_final_noder  ^  s#    dS'+<iHII[dm[rE   r  mypy.types.CallableTypec                L    | j         }t          |t                    r|j        }|S rS   )
definitionrZ   rQ  rf  )r  r  s     rF   get_func_defr  c  s(    J*i(( %_
rE   name_prefixrF  r  r   c              #  (  K   |                                  D ]z\  }}|}d|v r|                    d          d         }|dz   |z   }|j        }|rC|j        |k    r8|||fV  t	          |t
                    rt          |j        ||          E d{V  {dS )zIterate over local definitions (not imported) in a symbol table.

    Recursively iterate over class members and nested classes.
    z-redefr   r   N)rU  r   r5  r   rZ   r   r   r   )r   r  rF  r   symnode	shortnamer   r5  s           rF   r   r   j  s        
I 
Ig	t

8,,Q/I$y0| 	IDMX--GT))))$)) I,TZ4HHHHHHHHH
I 
IrE   2   z
Final[Tag]r  3   r  4   r  5   r  6   r  7   r,  8   r9  9   rF  :   r!  ;   rT  <   r_  =   rw  c                   t          |           }|t          k    rt                              |           S |t          k    rt
                              |           S |t          k    rt                              |           S |t          k    rt                              |           S |t          k    rt                              |           S |t          k    rt                              |           S |t          k    rt                              |           S |t           k    rt"                              |           S |t$          k    rt&                              |           S J d|             )NFzUnknown symbol tag )r,   r  r  r   r  rP  r  rQ  r!  r   r  rT  r,  r   rT  r   r9  r2  rF  r<  r   r  s     rF   ry  ry    s-   
4..C
czzxx~~
h||D!!!
i~~d###
i}}T"""
!!! %%d+++
m%%%
j~~d###
o!!$'''
!!!$$T***-------rE   r  
Tag | Nonec                    |t          |           }|t          k    rt                              |           S |t          k    rt
                              |           S J d|             )NFz Invalid tag for an OverloadPart )r,   r  rQ  r   r  rP  r  s     rF   r  r    sa    
{tnn
i~~d###
h||D!!!::S:::::rE   )r  r  rP   r  )r5  r   r   rg  rP   rg  )r5  r   rw  rg  rP   rQ   )r   r#   r5  r   rw  rg  rP   rQ   )r   r!   r5  r   rw  rg  rP   rQ   )r|  rE  rP   r\  )r  ra  r  r  r  r  rP   rQ   )r  )
r   r  r  r  r  r  r  r   rP   rQ   )r|  r  rP   r   )r5  rf  rP   r   )r  r  rP   rf  rS   )r   r   r  r   rF  r  rP   r   r   )r   r!   r  r  rP   rR  (
  r^   
__future__r   r  abcr   collectionsr   collections.abcr   r   enumr   r	   typingr
   r   r   r   r   r   r   r   typing_extensionsr   ra   r   librt.internalr   r=  r   r  r   r$  r   r  r   r  mypy_extensionsr   mypy.strconvr   
mypy.cacher   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   mypy.optionsr6   	mypy.utilr7   r8   r9   mypy.visitorr:   r;   r<   mypy.patternsr=   r?   rH   
mypy.typesr`   rN  r   rb   r}   rc   re   rg   ri   rj   rk   rl   rm   rn   rs   rU  ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r  r)  r1  r9  rB  rD  rR  rT  r  r  r  r  r  r  r  r  r  r  r  rP  r  rQ  r&  r  r?  re  rp  r  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r$  r*  r.  r4  r  rE  r  r  r  rP  rT  rV  rU  r  r^  rg  rl  rq  rx  r}  r  MaybeTypeExpressionr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r  r  r   r2  r<  rK  rQ  rX  r]  rb  rh  rn  rs  	frozensetr  r  r   r  r+  rM  rJ  r5  rW  r   r   r  rx  r  r  r  r  globalsr   r  r  r  r  r  r   r  r  r  r  r  r,  r9  rF  r!  rT  r_  rw  ry  r  rD   rE   rF   <module>r     s   : : : " " " " " " 				       # # # # # # . . . . . . . .         V V V V V V V V V V V V V V V V V V V V @ @ @ @ @ @ @ @              " ! ! ! ! !    ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !D !           = = = = = = = = = = I I I I I I I I I I &%%%%%%        %) %) %) %) %) %) %) %)P   GCLLCH~ % % % %                         
    64v?OQbc
 c c c cQQj>N>N>P>PQQQ  Q Q Q Q #"%         #" ,-+3'3*       (>w&G  G G G G
 &?'5	$ $      #" ,	" "     !           : : : : :7 : : :" : : : : : : : : : : : : : : : :    Z          !Q !Q !Q !Q !Q !Q !Q !QJ s$5x
7KKL
 L L L Lf f f f fz f f fR" " " " " " " "2* * * * *Z * * *"/ / / / / / / /*. . . . .
 . . .& MLL L L L L?< ?< ?< ?< ?<t ?< ?< ?<D !!78 8 8 8 8]= ]= ]= ]= ]=*i ]= ]= ]=@"W "W "W "W "Wt "W "W "WL                     $ ' * * *     7! 7! 7! 7! 7!x 7! 7! 7!t & ) ) )                   j j j j jh
I j j jb !27;  ; ; ; ;S& S& S& S& S&
I S& S& S&l  	    2q q q q q* q q qhy y y y yy y y yx/ / / / / / / /"1 1 1 1 19 1 1 1") ) ) ) )I ) ) ),3 3 3 3 3Y 3 3 3"@3 @3 @3 @3 @3Y @3 @3 @3F< < < < <Y < < <*. . . . .	 . . .&3, 3, 3, 3, 3,i 3, 3, 3,l/ / / / / / / // / / / / / / /", , , , ,i , , ,. . . . .	 . . .1 1 1 1 19 1 1 1- - - - -y - - -+ + + + +Y + + +&. . . . .	 . . .$", ", ", ", ",i ", ", ",J- - - - -y - - -B. . . . .	 . . .<3 3 3 3 3I 3 3 34, , , , ,j , , ,., , , , ,j , , ,,: : : :. . . . .
 . . .4. . . . .
 . . ."0 0 0 0 0* 0 0 0", , , , ,: , , ,- - - - -z - - -** * * * *j * * *Z6 6 6 6 6w 6 6 6./ / / / / / / /( 5 5 5 5 5d 5 5 5<                 " " " " "$	 $ $ $ $$	 $ $ $ $, , , , ,Wh	9mT	 T T T T!- !- !- !- !-z !- !- !-H3 3 3 3 3J 3 3 3. . . . .
 . . .. . . . .
 . . .D. . . . .
 . . .,3 3 3 3 3Z 3 3 3 1+ 1+ 1+ 1+ 1+Z 1+ 1+ 1+p !*hH 3 3 3 3 3Z 3 3 3:. . . . .
 . . .:- - - - -z - - -&2 2 2 2 2: 2 2 2"4 4 4 4 4Z 4 4 4&/ / / / / / / /8. . . . .
 . . .*    :   0- - - - -z - - -"- - - - -z - - -". . . . .
 . . .&, , , , ,j , , ,"2 2 2 2 2J 2 2 2@6 6 6 6 6
 6 6 6"5 5 5 5 5z 5 5 5" <  <  <  <  <j  <  <  <F4 4 4 4 4j 4 4 4*4 4 4 4 4j 4 4 48 	    	             . . . . .j* . . .f (7&8  8 8 8 8Q Q Q Q Q/ Q Q Qh0 0 0 0 0O 0 0 0fH H H H H H H HV3 3 3 3 3J 3 3 3"3 3 3 3 3Z 3 3 3*2 2 2 2 2J 2 2 2$2 2 2 2 2: 2 2 2.1 1 1 1 1* 1 1 10 0 0 0 0* 0 0 02. . . . .
 . . .(- - - - -z - - -F '0i  ' '     $ #,),P,P,P"Q"Q  Q Q Q Q@ @ @ @ @z @ @ @FC C C C Cx C C CB  (x(=>> > > > >$,H-G$H$H  H H H H ()M N N N N N N"(#OPP  P P P PF F F F F
 F F FRG4 G4 G4 G4 G4j G4 G4 G4Td d d d d d d dNL
 L
 L
 L
 L
$sO+, L
 L
 L
^D D D D D D D DN; ; ; ;" " " "
. . . .
& & & &$ $ $ $  GIIOO%%      " " " "R -	       \ \ \ \
    CGI I I I I, 	    "$  $ $ $ $    	                     "$  $ $ $ $	    
    	     "  " " " ". . . .0; ; ; ; ; ; ;rE   