
    iKj                       U d dl mZ d dl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 d dlmZmZmZ d dlmZ d d	lmZmZ d d
lmZ d dlmZ erd dlmZmZmZ d dlmZ d dl m!Z!m"Z"m#Z#  G d de	      Z$dde$jJ                  d	 	 	 	 	 	 	 	 	 ddZ&dd	 	 	 	 	 	 	 ddZ'	 	 	 	 	 	 ddZ(ddZ)dddddZ*e G d d             Z+ edd        G d! d"e+             Z, edd        G d# d$e+             Z- edd        G d% d&e+             Z. edd        G d' d(e+             Z/ edd        G d) d*e+             Z0 edd        G d+ d,e+             Z1 edd        G d- d.e+             Z2 edd        G d/ d0e+             Z3 edd        G d1 d2e+             Z4 edd        G d3 d4e+             Z5 edd        G d5 d6e+             Z6 edd        G d7 d8e+             Z7 edd        G d9 d:e+             Z8 edd        G d; d<e+             Z9 edd        G d= d>e+             Z: edd        G d? d@e+             Z; edd        G dA dBe+             Z< edd        G dC dDe+             Z= edd        G dE dFe+             Z> edd        G dG dHe+             Z? edd        G dI dJe+             Z@ edd        G dK dLe+             ZA edd        G dM dNe+             ZB edd        G dO dPe+             ZC edd        G dQ dRe+             ZD edd        G dS dTe+             ZE edd        G dU dVe+             ZF edd        G dW dXe+             ZG edd        G dY dZe+             ZH edd        G d[ d\e+             ZI edd        G d] d^e+             ZJ edd        G d_ d`e+             ZK edd        G da dbe+             ZLej                  dcej                  ddej                  deej                  dfiZQej                  deej                  dgej                  dhej                  diej                  djej                  dkej                  dlej                  dmej                  dnej                  doej                  dpej                  dqej                  dfiZ_ej                  drej                  dsiZbej                  dtej                  duej                  dvej                  dwej                  dxej                  dyej                  dzej                  d{ej                  d|ej                  d}i
Zmi eAd~ e2d e:d e6d e?d eId eDd e3d e@d eEd e4d e,d eGd e/d eJd e-d e.d e0d e8d eBd e>d e7d e<d e=d eKd eLd e1d e5d e;d eCd eFd iZnddZoddZpddZqddZrddZsddZtddZuddddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZvddZwddZxdd	 	 	 	 	 	 	 	 	 ddZyddZzddZ{dd	 	 	 	 	 	 	 	 	 ddZ|dddZ}ddZ~ddZddZdddZddZddZddZddZddZdddd	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddd	 	 	 	 	 	 	 	 	 	 	 ddZddZddZddZ G d de      Zi ej                  epej                  eqej                  erej                   esej"                  etej$                  euej&                  evej(                  ewej*                  exej,                  eyej.                  ezej0                  e{ej2                  e|ej4                  e}ej6                  e~ej8                  eej:                  eej<                  eej>                  eej@                  eejB                  eejD                  eejF                  eejH                  eejJ                  eejL                  eejN                  eejP                  eiZded<   ejV                  dk\  r<ddĄZ	 	 	 	 	 	 	 	 ddńZej]                  ej^                  eej`                  ei       ddƄZdddǜ	 	 	 	 	 	 	 	 	 ddȄZddejf                  ddʜ	 	 	 	 	 	 	 	 	 	 	 	 	 dd˄ZdZ eedͫ      Z eededz  ϫ      Z eedͫ      Z eededz  ϫ      Z eedͫ      Z eededz  ϫ      Z eedͫ      Z eededz  ϫ      Zy)    )annotationsN)	dataclass)fields)IntEnumauto)partial)TYPE_CHECKINGAnyProtocol)get_parameters)LogLevelParameterKind)NameResolutionError)logger)IterableIteratorSequence)Path)ClassFunctionModulec                  2   e Zd Z e       Z e       Z e       Z e       Z e       Z e       Z	 e       Z
 e       Z e       Z e       Z e       Z e       Z e       Z e       Z e       Z e       Z e       Z e       Z e       Z e       Z e       Zy)_OperatorPrecedenceN)__name__
__module____qualname__r   NONEYIELDASSIGNSTARREDLAMBDAIF_ELSEORANDNOTCOMP_MEMB_IDBIT_ORBIT_XORBIT_ANDLEFT_RIGHT_SHIFTADD_SUBMUL_DIV_REMAINPOS_NEG_BIT_NOTEXPONENTAWAITCALL_ATTRIBUTEATOMIC     m/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/griffe/_internal/expressions.pyr   r      s     6DFEVFfGVFfG	B
&C
&C6LVFfGfGvfGVNfOvHFEVNVFr3   r   TF)flatis_leftouter_precedencec             #    K   t        | t              rt        |       }d}||k  rd}nY||k(  rTt        | t              xs! t        | t              xr | j
                  dk(  }|r|rd}nt        | t        t        f      r|sd}|r*d |r| j                  d      E d {    n|  d y |r| j                  d      E d {    y |  y t        | t              r| D ]  }t        ||||      E d {     y |  y 7 d7 @7 w)NFT**(r5   )r5   r7   r6   )

isinstanceExpr_get_precedence	ExprIfExp	ExprBinOpoperator
ExprBoolOpiteratetuple_yield)elementr5   r6   r7   element_precedenceneeds_parensis_right_assocelems           r4   rG   rG   B   s     '4 ,W5 00L#33'; 7I.K73C3Ct3K  #'LGi%<=g#I"???555ID111M	GU	#Dd@PZabbb   6
 2
 cs6   BD	D%D	D1D	6D7D	D	D	r;   c             #  F  K   t        |       }	 t        t        |      |t        j                        E d{    |D ]J  }t        ||t        j                        E d{    t        ||t        j                        E d{    L y7 T# t
        $ r Y yw xY w7 <7 w)zApply a separator between elements.

    The caller is assumed to provide their own grouping
    (e.g. lists, tuples, slice) and will prevent parentheses from being added.
    r5   r7   N)iterrG   nextr   r   StopIteration)elementsjointr5   itrH   s        r4   _joinrU   m   s      
hB $r(@S@X@XYYY %d=P=U=UVVV'?R?W?WXXX  	Z  	WXsU   B!(B BB $B! B!#B!BB!B 	BB!BB!B!c                    t        | t              rt        | fi |S t        | t              r| D cg c]  }t	        |fi | c}S | S c c}w N)r>   r?   _expr_as_dictlist_field_as_dict)rH   kwargsrL   s      r4   rZ   rZ      sR     '4 W///'4 ;BC74t.v.7CCN Ds   A	r?   c           
         t        t        |       d       D ci c]<  }|j                  dk7  r+|j                  t        t	        | |j                        fi |> }}| j
                  |d<   |S c c}w )Nc                    | j                   S rW   )name)fs    r4   <lambda>z_expr_as_dict.<locals>.<lambda>   s    r3   )keyparentcls)sorted	getfieldsr^   rZ   getattr	classname)
expressionr[   fieldr   s       r4   rX   rX      sv     Ij17GHHE::! 	

N7:uzz#BMfMMH  
 ((F5MMs   AA.rF   dictrY   set)ztyping.Tupleztyping.Dictztyping.Listz
typing.Setc                      e Zd ZdZddZddZddddZddZddZe	dd	       Z
e	dd
       Ze	dd       Ze	dd       Ze	dd       Ze	dd       Ze	dd       Ze	dd       Zedd       Zy)r?   zBase class for expressions.c                R    dj                  d | j                  d      D              S )N c              3  X   K   | ]"  }t        |t              r|n|j                   $ y wrW   )r>   strr^   ).0rL   s     r4   	<genexpr>zExpr.__str__.<locals>.<genexpr>   s%     hPgz$4t$))CPgs   (*Tr;   )joinrE   selfs    r4   __str__zExpr.__str__   s'    wwhPTP\P\bfP\Pghhhr3   c              #  D   K   | j                  d      E d{    y7 w)z.Iterate on the expression syntax and elements.Fr;   N)rE   rt   s    r4   __iter__zExpr.__iter__   s     <<U<+++s     Tr;   c             #  $   K   dE d{    y7 w)a  Iterate on the expression elements.

        Parameters:
            flat: Expressions are trees.

                When flat is false, this method iterates only on the first layer of the tree.
                To iterate on all the subparts of the expression, you have to do so recursively.
                It allows to handle each subpart specifically (for example subscripts, attribute, etc.),
                without them getting rendered as strings.

                On the contrary, when flat is true, the whole tree is flattened as a sequence
                of strings and instances of [Names][griffe.ExprName].

        Yields:
            Strings and names when flat, strings and expressions otherwise.
        r2   Nr2   ru   r5   s     r4   rE   zExpr.iterate   s     " s   c                    | S )zModernize the expression.

        For example, use PEP 604 type unions `|` instead of `typing.Union`.

        Returns:
            A modernized expression.
        r2   rt   s    r4   	modernizezExpr.modernize   s	     r3   c                    t        | fi |S )zReturn the expression as a dictionary.

        Parameters:
            **kwargs: Configuration options (none available yet).


        Returns:
            A dictionary.
        )rX   )ru   r[   s     r4   as_dictzExpr.as_dict   s     T,V,,r3   c                .    | j                   j                  S )zThe expression class name.)	__class__r   rt   s    r4   rg   zExpr.classname   s     ~~&&&r3   c                    t        |       S z%Path of the expressed name/attribute.rp   rt   s    r4   pathz	Expr.path        4yr3   c                    t        |       S r   r   rt   s    r4   canonical_pathzExpr.canonical_path   r   r3   c                    | j                   j                  dd      d   j                  dd      d   j                  d      S )z/Name of the expressed name/attribute/parameter..   r:   r<   )r   rsplitsplitremovesuffixrt   s    r4   canonical_namezExpr.canonical_name   s@     ""))#q1"5;;CCBGTTUXYYr3   c                D    t        | t              xr | j                  dk(  S )z4Whether this attribute is annotated with `ClassVar`.ClassVarr>   ExprSubscriptr   rt   s    r4   is_classvarzExpr.is_classvar   !     $.T43F3F*3TTr3   c                `    t        | t              xr | j                  j                         dk(  S )z#Whether this expression is a tuple.rF   )r>   r   r   lowerrt   s    r4   is_tuplezExpr.is_tuple   s+     $.Y43F3F3L3L3NRY3YYr3   c                D    t        | t              xr | j                  dk(  S )z'Whether this expression is an iterator.r   r   rt   s    r4   is_iteratorzExpr.is_iterator   r   r3   c                D    t        | t              xr | j                  dk(  S )z'Whether this expression is a generator.	Generatorr   rt   s    r4   is_generatorzExpr.is_generator   s!     $.U43F3F+3UUr3   c                ^   t        |       dk(  rS| \  }}t        |t              r|j                         }t        |t              r|j                         }t	        |||      S t
        j                  | d d |      }| d   }t        |t              r|j                         }t	        |||      S )N   leftrC   rightr   op)lenr>   r?   r|   rB   r   	_to_binop)rR   r   r   r   s       r4   r   zExpr._to_binop   s    x=A"KD%$%~~'%&)$5AA&&x}&<eT"OO%EdRu==r3   Nreturnrp   )r   Iterator[str | Expr]r5   boolr   r   )r   r?   )r[   r
   r   dict[str, Any]r   r   )rR   Sequence[Expr]r   rp   r   rB   )r   r   r   __doc__rv   rx   rE   r|   r~   propertyrg   r   r   r   r   r   r   r   staticmethodr   r2   r3   r4   r?   r?      s    %i, '+ &
- ' '     Z Z
 U U Z Z U U V V > >r3   )eqslotsc                      e Zd ZU dZded<   	 ddddZddZddZedd	       Z	edd
       Z
edd       Zedd       Zy)ExprAttributezAttributes like `a.b`.zlist[str | Expr]valuesTr;   c             #     K   t        |       }t        | j                  d   ||d      E d {    | j                  dd  D ]  }d t        |||      E d {     y 7 37 	w)Nr   Tr=   r   r   rN   )r@   rG   r   )ru   r5   
precedencevalues       r4   rE   zExprAttribute.iterate  se     $T*
$++a.tjZ^___[[_EIe$LLL % 	` Ms!   +A%A!+A%A#A%#A%c                    t         j                  | j                        x}r!t        || j                  j
                        S | S N)rb   )_modern_typesgetr   ExprNamelastrb   ru   moderns     r4   r|   zExprAttribute.modernize  s:    "&&t':':;;6;F499+;+;<<r3   c                t    |j                   | j                  |_         | j                  j                  |       y)zpAppend a name to this attribute.

        Parameters:
            value: The expression name to append.
        N)rb   r   r   append)ru   r   s     r4   r   zExprAttribute.append"  s+     <<99EL5!r3   c                     | j                   d   S )z/The last part of this attribute (on the right).r   r   rt   s    r4   r   zExprAttribute.last,  s    
 {{2r3   c                     | j                   d   S )z/The first part of this attribute (on the left).r   r   rt   s    r4   firstzExprAttribute.first3  s     {{1~r3   c                .    | j                   j                  S )zThe path of this attribute.)r   r   rt   s    r4   r   zExprAttribute.path8  s     yy~~r3   c                .    | j                   j                  S )z%The canonical path of this attribute.)r   r   rt   s    r4   r   zExprAttribute.canonical_path=  s     yy'''r3   Nr   )r   zExprName | ExprAttribute)r   r   r   Noner   r   )r   
str | Exprr   )r   r   r   r   __annotations__rE   r|   r   r   r   r   r   r   r2   r3   r4   r   r     sq     2&* M
"       ( (r3   r   c                  D    e Zd ZU dZded<   	 ded<   	 ded<   	 dddd	Zy
)rB   zBinary operations like `a + b`.r   r   rp   rC   r   Tr;   c             #  D  K   t        |       }|}| j                  dk(  r(t        | j                  t              rt        |dz
        }t        | j                  ||d      E d {    d| j                   d t        | j                  ||d      E d {    y 7 87 w)Nr9   r   Tr=    F)r@   rC   r>   r   ExprUnaryOpr   rG   r   )ru   r5   r   right_precedences       r4   rE   zExprBinOp.iterateN  s     $T*
%==D Z

K%H2:>B$))$UYZZZ$--""$**4BR\abbb 	[bs$   A!B #B$2B BB B Nr   r   r   r   r   r   rE   r2   r3   r4   rB   rB   C  s(    )
M&* cr3   rB   c                  8    e Zd ZU dZded<   	 ded<   	 ddd
dZy	)rD   z!Boolean operations like `a or b`.rp   rC   Sequence[str | Expr]r   Tr;   c             #     K   t        |       }t        | j                        }t        t	        |      ||d      E d {    |D ]+  }d| j
                   d t        |||d      E d {    - y 7 57 	w)NTr=   r   F)r@   rO   r   rG   rP   rC   )ru   r5   r   rT   r   s        r4   rE   zExprBoolOp.iterateb  sv     $T*
$++$r(
TXYYYEdmm_A&&e$UZ[[[  	Z \s!   <A8A4-A8,A6-A86A8Nr   r   r2   r3   r4   rD   rD   Y  s    +M  &* \r3   rD   c                  J    e Zd ZU dZded<   	 ded<   	 edd       Zdddd	Zy
)ExprCallzCalls like `f()`.r?   functionr   	argumentsc                .    | j                   j                  S z1The canonical path of this subscript's left part.)r   r   rt   s    r4   r   zExprCall.canonical_patht  s     }}+++r3   Tr;   c             #     K   t        | j                  |t        |             E d {    d t        | j                  d|      E d {    d y 7 -7 w)NrN   r:   , r;   r<   )rG   r   r@   rU   r   rz   s     r4   rE   zExprCall.iteratey  sL     $--d_UYEZ[[[	D999	 	\9s!   %AA#AA
AANr   r   )r   r   r   r   r   r   r   rE   r2   r3   r4   r   r   k  s2    N##, , '+ r3   r   c                  D    e Zd ZU dZded<   	 ded<   	 ded<   	 dd	dd
Zy)ExprComparezComparisons like `a > b`.r   r   zSequence[str]	operatorsr   comparatorsTr;   c             #     K   t        |       }t        | j                  ||d      E d {    t        | j                  | j
                  d      D ]#  \  }}d| d t        |||      E d {    % y 7 M7 	w)NTr=   Fstrictr   rN   )r@   rG   r   zipr   r   )ru   r5   r   r   comps        r4   rE   zExprCompare.iterate  sw     $T*
$))$UYZZZDNND,<,<UKHBbT)Od
KKK L 	[ Ls"   (A<A8AA<0A:1A<:A<Nr   r   r2   r3   r4   r   r     s)    #
%%&* Lr3   r   c                  T    e Zd ZU dZded<   	 ded<   	 ded<   	 dZded	<   	 d
dddZy)ExprComprehensionz(Comprehensions like `a for b in c if d`.r   targetiterabler   
conditionsFr   is_asyncTr;   c             #  &  K   | j                   rd d t        | j                  |      E d {    d t        | j                  |      E d {    | j                  r%d t        | j                  d|      E d {    y y 7 Y7 87 
w)Nzasync zfor r;   z in  if )r   rG   r   r   r   rU   rz   s     r4   rE   zExprComprehension.iterate  s{     ==N$++D111$--d333??LT__f4@@@  	23 As3   /BB"BB/BBBBBNr   )r   r   r   r   r   r   rE   r2   r3   r4   r   r     s6    2;$$9Hd%&* 	Ar3   r   c                  ,    e Zd ZU dZded<   	 ddddZy)	ExprConstantzConstants like `"a"` or `1`.rp   r   Tr;   c             #  (   K   | j                    y wrW   )r   rz   s     r4   rE   zExprConstant.iterate  s     jjs   Nr   r   r2   r3   r4   r   r     s    &J&* r3   r   c                  8    e Zd ZU dZded<   	 ded<   	 ddd
dZy	)ExprDictzDictionaries like `{"a": 0}`.zSequence[str | Expr | None]keysr   r   Tr;   c             #     K   d t        d t        | j                  | j                  d      D        d|      E d {    d y 7 	w)N{c              3  4   K   | ]  \  }}|dn|d|f  y w)Nr   : r2   )rq   ra   r   s      r4   rr   z#ExprDict.iterate.<locals>.<genexpr>  s$     wMvzsEfdE:Mvs   Fr   r   r;   })rU   r   r   r   rz   s     r4   rE   zExprDict.iterate  sO     	wSQUQZQZ\`\g\gpuMvw
 	
 	

 		
s   =AA	 
ANr   r   r2   r3   r4   r   r     s    '
%%  &* r3   r   c                  D    e Zd ZU dZded<   	 ded<   	 ded<   	 dddd	Zy
)ExprDictCompz0Dict comprehensions like `{k: v for k, v in a}`.r   ra   r   r   
generatorsTr;   c             #     K   d t        | j                  |      E d {    d t        | j                  |      E d {    d t        | j                  d|      E d {    d y 7 P7 /7 w)Nr   r;   r   r   r   )rG   ra   r   rU   r   rz   s     r4   rE   zExprDictComp.iterate  se     	$((...
$**4000	#D999	 	/09s3   A8A2"A8A4#A8(A6)
A84A86A8Nr   r   r2   r3   r4   r   r     s'    :	O!&* r3   r   c                  ,    e Zd ZU dZded<   	 ddddZy)	ExprExtSlicez Extended slice like `a[x:y, z]`.r   dimsTr;   c             #  P   K   t        | j                  d|      E d {    y 7 w)Nr   r;   )rU   r  rz   s     r4   rE   zExprExtSlice.iterate  s     Dt444s   &$&Nr   r   r2   r3   r4   r   r     s    *
&* 5r3   r   c                  ,    e Zd ZU dZded<   	 ddddZy)	ExprFormattedz Formatted string like `{1 + 1}`.r   r   Tr;   c             #  |   K   d t        | j                  |t        j                        E d {    d y 7 	wNr   rN   r   rG   r   r   r   rz   s     r4   rE   zExprFormatted.iterate  3     	$**4BUBZBZ[[[	 	\   .<:
<Nr   r   r2   r3   r4   r  r    s    *&* r3   r  c                  8    e Zd ZU dZded<   	 ded<   	 ddd
dZy	)ExprGeneratorExpz5Generator expressions like `a for b in c for d in e`.r   rH   r   r   Tr;   c             #     K   t        | j                  |      E d {    d t        | j                  d|      E d {    y 7 )7 w)Nr;   r   rG   rH   rU   r   rz   s     r4   rE   zExprGeneratorExp.iterate  s>     $,,T222	#D999 	39s!   AA#AA	A	ANr   r   r2   r3   r4   r  r    s    ?!&* :r3   r  c                  D    e Zd ZU dZded<   	 ded<   	 ded<   	 ddd
dZy	)rA   z Conditions like `a if b else c`.r   bodytestorelseTr;   c             #    K   t        |       }t        | j                  ||d      E d {    d t        |dz         }t        | j                  ||      E d {    d t        | j                  t              r%| j                  j                  |      E d {    y t        | j                  ||d      E d {    y 7 7 k7 +7 w)	NTr=   r   r   rN   z else r;   F)	r@   rG   r  r   r  r>   r  rA   rE   )ru   r5   r   test_outer_precedences       r4   rE   zExprIfExp.iterate  s     $T*
$))$UYZZZ !4JN C$))$AVWWW dkk9-{{***555dkkz[`aaa 	[
 	X 6asF   (CC1CCACC
!C CCC
CCNr   r   r2   r3   r4   rA   rA     s)    *

&* br3   rA   c                  ,    e Zd ZU dZded<   	 ddddZy)	ExprInterpolationz,Template string interpolation like `{name}`.r   r   Tr;   c             #  |   K   d t        | j                  |t        j                        E d {    d y 7 	wr  r  rz   s     r4   rE   zExprInterpolation.iterate/  r  r	  Nr   r   r2   r3   r4   r  r  (  s    6&* r3   r  c                  ,    e Zd ZU dZded<   	 ddddZy)	ExprJoinedStrz!Joined strings like `f"a {b} c"`.r   r   Tr;   c             #  `   K   d t        | j                  d|      E d {    d y 7 	w)Nzf'rn   r;   'rU   r   rz   s     r4   rE   zExprJoinedStr.iterate=  +     
bt444	 	5    .,
.Nr   r   r2   r3   r4   r  r  6  s    +  &* r3   r  c                  f     e Zd ZU dZded<   	 ded<   	 dZded<   	 ed fd	       Zd
dddZ xZ	S )ExprKeywordzKeyword arguments like `a=b`.rp   r^   r   r   NExpr | Noner   c                    | j                   r&| j                   j                   d| j                   dS t        t        |   S )zPath of the expressed keyword.r:   r<   )r   r   r^   superr  )ru   r   s    r4   r   zExprKeyword.canonical_path^  s;     ==mm2231TYYKqAA[$66r3   Tr;   c             #  r   K   | j                    d t        | j                  |      E d {    y 7 w)N=r;   )r^   rG   r   rz   s     r4   rE   zExprKeyword.iteratee  s(     ii	$**4000s   -757r   r   )
r   r   r   r   r   r   r   r   rE   __classcell__)r   s   @r4   r  r  C  sG    '
I" !Hk I7 7 '+ 1 1r3   r  c                  ,    e Zd ZU dZded<   	 ddddZy)	ExprVarPositionalz,Variadic positional parameters like `*args`.r?   r   Tr;   c             #  V   K   d t        | j                  |      E d {    y 7 w)N*r;   rG   r   rz   s     r4   rE   zExprVarPositional.iterater  s     	$**4000   )')Nr   r   r2   r3   r4   r'  r'  k  s    6K&* 1r3   r'  c                  ,    e Zd ZU dZded<   	 ddddZy)	ExprVarKeywordz,Variadic keyword parameters like `**kwargs`.r?   r   Tr;   c             #  V   K   d t        | j                  |      E d {    y 7 w)Nr9   r;   r*  rz   s     r4   rE   zExprVarKeyword.iterate~  s     
$**4000r+  Nr   r   r2   r3   r4   r-  r-  w  s    6K&* 1r3   r-  c                  8    e Zd ZU dZded<   	 ded<   	 ddd
dZy	)
ExprLambdaz(Lambda expressions like `lambda a: a.b`.zSequence[ExprParameter]
parametersr   r  Tr;   c             #  ~  K   d}d}d}t        | j                        }d |rd t        | j                  d      D ]D  \  }}|j                  t        j
                  u rd}n|j                  t        j                  u rd nf|j                  t        j                  u rd nE|j                  t        j                  u r|sd}n$|j                  t        j                  u r|sd}d |j                  t        j
                  ur|rd}d	 |j                   |j                  rO|j                  t        j                  t        j                  fvr#d
 t        |j                  |      E d {    ||k  sAd G d t        | j                  |t        j                        E d {    y 7 E7 w)NFlambdar   r   Tr)  r9   z*, z/, r$  r;   r   r   rN   )r   r1  	enumeratekindr   positional_onlyvar_positionalvar_keywordpositional_or_keywordkeyword_onlyr^   defaultrG   r  r   r   )ru   r5   pos_only	pos_or_kwkw_onlylengthindex	parameters           r4   rE   zExprLambda.iterate  sl    	T__%I )$//1 =E9~~!>!>>=#?#??	=#<#<<
=#F#FFy 	=#=#==g~~]%B%BBx ..   Y^^M<X<XZgZsZs;t%t	!)"3"3$???v~
) !>* 
$))$ATAYAYZZZ @
 	[s*   E1F=3F94	F=?4F=3F;4F=;F=Nr   r   r2   r3   r4   r0  r0    s     2''
&* [r3   r0  c                  ,    e Zd ZU dZded<   	 ddddZy)	ExprListzLists like `[0, 1, 2]`.r   rR   Tr;   c             #  `   K   d t        | j                  d|      E d {    d y 7 	w)N[r   r;   ]rU   rR   rz   s     r4   rE   zExprList.iterate  +     	4888	 	9r  Nr   r   r2   r3   r4   rC  rC    s    !&* r3   rC  c                  8    e Zd ZU dZded<   	 ded<   	 ddd
dZy	)ExprListCompz*List comprehensions like `[a for b in c]`.r   rH   r   r   Tr;   c             #     K   d t        | j                  |      E d {    d t        | j                  d|      E d {    d y 7 -7 w)NrE  r;   r   rF  r  rz   s     r4   rE   zExprListComp.iterate  H     	$,,T222	#D999	 	39!   AA#AA
AANr   r   r2   r3   r4   rJ  rJ    s    4!&* r3   rJ  c                      e Zd ZU dZded<   	 dZded<   	 dZded<   	 dd	Zd
dddZddZ	e
dd       Ze
dd       Ze
dd       Ze
dd       Ze
dd       Ze
dd       Ze
dd       Zy)r   zLThis class represents a Python object identified by a name in a given scope.rp   r^   Nz1str | ExprName | Module | Class | Function | Nonerb   
str | Nonememberc                `    t        |t              r| j                  |j                  k(  S t        S )zXTwo name expressions are equal if they have the same `name` value (`parent` is ignored).)r>   r   r^   NotImplemented)ru   others     r4   __eq__zExprName.__eq__  s%    eX&99

**r3   Tr;   c             #     K   |  y wrW   r2   rz   s     r4   rE   zExprName.iterate  s     
s   c                v    t         j                  | j                        x}rt        || j                        S | S r   )r   r   r   r   rb   r   s     r4   r|   zExprName.modernize  s4    "&&t':':;;6;F4;;77r3   c                    t        | j                  t              r%| j                  j                   d| j                   S | j                  S )zThe full, resolved name.

        If it was given when creating the name, return that.
        If a callable was given, call it and return its result.
        It the name cannot be resolved, return the source.
        r   )r>   rb   r   r   r^   rt   s    r4   r   zExprName.path  s<     dkk8,kk&&'q44yyr3   c                   | j                   | j                  S t        | j                   t              r%| j                   j                   d| j                   S t        | j                   t
              r| j                    d| j                   S | j                   j                  j                  | j                  | j                         }	 |j                  | j                        S # t        $ r | j                  cY S w xY w)z2The canonical name (resolved one, not alias name).r   )rb   r^   r>   r   r   rp   membersr   rP  resolver   )ru   rb   s     r4   r   zExprName.canonical_path  s     ;;99dkk8,kk001499+>>dkk3'kk]!DII;//$$((dkkB	>>$)),," 	99	s   C# #C;:C;c                    	 | j                   j                  | j                   j                  | j                           S # t        $ r& | j                   j
                  | j                     cY S w xY w)z(The resolved object this name refers to.)rb   modules_collectionrZ  r^   	Exceptionresolvedrt   s    r4   r^  zExprName.resolved   sW    	3;;11$++2E2Edii2PQQ 	3;;''		22	3s   ;> ,A-,A-c                r    	 | j                   j                  }t        d |D              S # t        $ r Y yw xY w)z3Whether this name resolves to an enumeration class.Fc              3  ^   K   | ]%  }t        |t              xr |j                  d k(   ' yw)z	enum.EnumN)r>   r?   r   )rq   bases     r4   rr   z)ExprName.is_enum_class.<locals>.<genexpr>  s.     c]bUY:dD)Pd.A.A[.PP]bs   +-)r^  basesr]  any)ru   rb  s     r4   is_enum_classzExprName.is_enum_class  s>    	MM''E c]bccc  		s   * 	66c                N    	 | j                   j                  S # t        $ r Y yw xY w)z6Whether this name resolves to an enumeration instance.F)rb   rd  r]  rt   s    r4   is_enum_instancezExprName.is_enum_instance  s)    	;;,,, 		s    	$$c                p    	 | j                   dk(  xr | j                  j                  S # t        $ r Y yw xY w)z3Whether this name resolves to an enumeration value.r   F)r^   rb   rf  r]  rt   s    r4   is_enum_valuezExprName.is_enum_value  s7    	99'HDKK,H,HH 		s   &) 	55c                    d| j                   v S )z/Whether this name resolves to a type parameter.rE  )r   rt   s    r4   is_type_parameterzExprName.is_type_parameter$  s     d))))r3   )rS  objectr   r   )r5   r   r   zIterator[ExprName]r   r   )r   zModule | Class | Noner   )r   r   r   r   r   rb   rP  rT  rE   r|   r   r   r   r^  rd  rf  rh  rj  r2   r3   r4   r   r     s    V
I@DF=D/FJ4 '+ 
 	 	   3 3 	d 	d     * *r3   r   c                  8    e Zd ZU dZded<   	 ded<   	 ddd
dZy	)ExprNamedExprz+Named/assignment expressions like `a := b`.r?   r   r   r   Tr;   c             #     K   t        | j                  |      E d {    d t        | j                  |      E d {    y 7 (7 w)Nr;   z := )rG   r   r   rz   s     r4   rE   zExprNamedExpr.iterate3  s<     $++D111$**4000 	20s!   A
A"A
 AA
A
Nr   r   r2   r3   r4   rm  rm  *  s    5L&* 1r3   rm  c                  `    e Zd ZU dZded<   	 ej                  Zded<   	 dZded<   	 dZ	d	ed
<   y)ExprParameterz4Parameters in function signatures like `a: int = 0`.rp   r^   r   r5  Nr   
annotationstr | Expr | Noner;  )
r   r   r   r   r   r   r9  r5  rq  r;  r2   r3   r4   rp  rp  9  s;    >
I'==D-="J"!%G%r3   rp  c                  ,    e Zd ZU dZded<   	 ddddZy)	ExprSetzSets like `{0, 1, 2}`.r   rR   Tr;   c             #  `   K   d t        | j                  d|      E d {    d y 7 	w)Nr   r   r;   r   rG  rz   s     r4   rE   zExprSet.iterateN  rH  r  Nr   r   r2   r3   r4   rt  rt  G  s     ""&* r3   rt  c                  8    e Zd ZU dZded<   	 ded<   	 ddd
dZy	)ExprSetCompz)Set comprehensions like `{a for b in c}`.r   rH   r   r   Tr;   c             #     K   d t        | j                  |      E d {    d t        | j                  d|      E d {    d y 7 -7 w)Nr   r;   r   r   r  rz   s     r4   rE   zExprSetComp.iterate]  rL  rM  Nr   r   r2   r3   r4   rw  rw  T  s    3!&* r3   rw  c                  P    e Zd ZU dZdZded<   	 dZded<   	 dZded<   	 ddd
d	Zy)	ExprSlicezSlices like `[a:b:c]`.Nrr  r   upperstepTr;   c             #  ,  K   | j                   t        | j                   |      E d {    d | j                  t        | j                  |      E d {    | j                  $d t        | j                  |      E d {    y y 7 d7 77 
w)Nr;   :)r   rG   r{  r|  rz   s     r4   rE   zExprSlice.iteratep  s     ::!djjt444	::!djjt44499 Idiid333 !	 5 5 4s3   'BB.BB.BBBBBr   )	r   r   r   r   r   r   r{  r|  rE   r2   r3   r4   rz  rz  e  s7     #E##E#"D
"&* 4r3   rz  c                  d    e Zd ZU dZded<   	 ded<   	 ddddZddZedd	       Zedd
       Z	y)r   zSubscripts like `a[b]`.r   r   sliceTr;   c             #     K   t        | j                  |t        |             E d {    d t        | j                  |t        j
                        E d {    d y 7 ;7 w)NrN   rE  rF  )rG   r   r@   r  r   r   rz   s     r4   rE   zExprSubscript.iterate  sV     $))$QUAVWWW	$**4BUBZBZ[[[		 	X 	\s!   %A'A#1A'A%
A'%A'c                D   | j                   dk(  r'| j                  | j                  j                  d      S | j                   dk(  rNt	        | j                  t
              r| j                  n| j                  j                         }t        |dd      S t        t	        | j                  t
              r| j                  n| j                  j                         t	        | j                  t
              r| j                        S | j                  j                               S )Nztyping.Union|r   ztyping.Optionalr   r   )r   r  )
r   r   r  rR   r>   rp   r|   rB   r   r   )ru   r   s     r4   r|   zExprSubscript.modernize  s    .0>>$**"5"5#>>>"33!+DJJ!<4::$**BVBVBXD$FCC(C8dii>Q>Q>S *4::s ;$**
 	
AEAUAUAW
 	
r3   c                z    t        | j                  t              r| j                  S | j                  j                  S )z'The path of this subscript's left part.)r>   r   rp   r   rt   s    r4   r   zExprSubscript.path  s*     dii%99yy~~r3   c                z    t        | j                  t              r| j                  S | j                  j                  S r   )r>   r   rp   r   rt   s    r4   r   zExprSubscript.canonical_path  s,     dii%99yy'''r3   Nr   )r   zExprBinOp | ExprSubscriptr   )
r   r   r   r   r   rE   r|   r   r   r   r2   r3   r4   r   r   {  sL    !
&* 	
   ( (r3   r   c                  ,    e Zd ZU dZded<   	 ddddZy)	ExprTemplateStrz$Template strings like `t"a {name}"`.r   r   Tr;   c             #  `   K   d t        | j                  d|      E d {    d y 7 	w)Nzt'rn   r;   r  r  rz   s     r4   rE   zExprTemplateStr.iterate  r  r  Nr   r   r2   r3   r4   r  r    s    .  &* r3   r  c                  D    e Zd ZU dZded<   	 dZded<   	 dddd	Zdd
Zy)	ExprTuplezTuples like `(0, 1, 2)`.r   rR   Fr   implicitTr;   c             #     K   | j                   sd t        | j                  d|      E d {    t        | j                        dk(  rd | j                   sd y y 7 2w)Nr:   r   r;   r   ,r<   )r  rU   rR   r   rz   s     r4   rE   zExprTuple.iterate  sT     }}I4888t}}"I}}I  	9s   ,A#A!3A#c           	         t        | j                  D cg c]$  }t        |t              r|n|j	                         & c}| j
                        S c c}w )N)rR   r  )r  rR   r>   rp   r|   r  )ru   els     r4   r|   zExprTuple.modernize  sC    NRmm\mJr3/bR\\^Cm\]]
 	
\s   )ANr   )r   r  )r   r   r   r   r   r  rE   r|   r2   r3   r4   r  r    s(    """HdZ&* 
r3   r  c                  8    e Zd ZU dZded<   	 ded<   	 ddd
dZy	)r   zUnary operations like `-1`.rp   rC   r   r   Tr;   c             #     K   | j                    | j                   dk(  rd t        | j                  |t        |             E d {    y 7 w)Nnotr   rN   )rC   rG   r   r@   rz   s     r4   rE   zExprUnaryOp.iterate  s=     mm==E!I$**4/RVBWXXXs   AAA	ANr   r   r2   r3   r4   r   r     s    %M&* Yr3   r   c                  0    e Zd ZU dZdZded<   	 ddddZy)		ExprYieldz Yield statements like `yield a`.Nrr  r   Tr;   c             #  x   K   d | j                   $d t        | j                   |      E d {    y y 7 w)Nyieldr   r;   )r   rG   rz   s     r4   rE   zExprYield.iterate  s6     ::!Idjjt444 "4s   /:8:r   )r   r   r   r   r   r   rE   r2   r3   r4   r  r    s    *#E#&* 5r3   r  c                  ,    e Zd ZU dZded<   	 ddddZy)	ExprYieldFromz%Yield statements like `yield from a`.r   r   Tr;   c             #  V   K   d t        | j                  |      E d {    y 7 w)Nzyield from r;   r*  rz   s     r4   rE   zExprYieldFrom.iterate  s      $**4000r+  Nr   r   r2   r3   r4   r  r    s    /&* 1r3   r  ~r  +-&r  ^///<<@%r)  r9   >>andorz==z!=<z<=>z>=iszis notinznot inc                "    t         j                  S rW   r   r1   _s    r4   r`   r`   !      +22r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`   "      /66r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`   #      077r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`   $  r  r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`   &  r  r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`   '  s    ,33r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`   (  s    *11r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`   )  r  r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`   +  r  r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`   ,  s    .55r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`   -  r  r3   c                "    t         j                  S rW   r   r0   r  s    r4   r`   r`   .      0??r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`   /  r  r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`   0  s    +::r3   c                v    dt         j                  ij                  | j                  t         j                        S )Nr  )r   r%   r   rC   r-   es    r4   r`   r`   1  s(    E#6#:#:;??

L_LoLopr3   c                   t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  t         j                  d| j                     S )N)r9   r)  r  r  r  r  r  r  r  r  r  r  r  )	r   r.   r,   r+   r*   r)   r(   r'   rC   r  s    r4   r`   r`   2  s    !** // // //!00 // (( ((!22!22 (( (( '' jjr3   c                ^    t         j                  t         j                  d| j                     S )N)r  r  )r   r$   r#   rC   r  s    r4   r`   r`   A  s#    "5"9"9ATAWAWXYZYcYcdr3   c                "    t         j                  S rW   )r   r&   r  s    r4   r`   r`   B  s    .;;r3   c                "    t         j                  S rW   )r   r"   r  s    r4   r`   r`   C  s    ,44r3   c                "    t         j                  S rW   )r   r   r  s    r4   r`   r`   D  r  r3   c                "    t         j                  S rW   r   r!   r  s    r4   r`   r`   E  s    -44r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`   G  s     3 : :r3   c                "    t         j                  S rW   r   r    r  s    r4   r`   r`   H  s    !4!<!<r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`   I  s    199r3   c                "    t         j                  S rW   r   r   r  s    r4   r`   r`   J  s    ,22r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`   K  s    066r3   c                "    t         j                  S rW   r   r   r  s    r4   r`   r`   N  s    !4!9!9r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`   O  s    /44r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`   P  s    .33r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`   Q  s    055r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`   R  s    ,11r3   c                L    t        j                  t        |       d       |       S )Nc                "    t         j                  S rW   r  r  s    r4   r`   z!_get_precedence.<locals>.<lambda>W  s    5H5M5Mr3   )_precedence_mapr   type)exprs    r4   r@   r@   V  s    tDz+MNtTTr3   c                   t        | j                  |fi |}t        |t              r&|j	                  t        | j                               |S t        |t
              r!t        |t        | j                  |      g      S t        |t              r!t        |t        | j                  d      g      S t        |t        | j                        g      S )Nrp   )_buildr   r>   r   r   r   attrrp   )noderb   r[   r   s       r4   _build_attributer  Z  s    $**f//D$&HTYY'($!dHTYY$=>??$dHTYY$>?@@$ 3455r3   c           	         t        t        | j                  |fi |t        t	        | j
                           t        | j                  |fi |      S rW   )rB   r  r   _binary_op_mapr  r   r   r  rb   r[   s      r4   _build_binopr  f  sE    tyy&+F+tDGG}%tzz6,V, r3   c                    t        t        t        | j                           | j                  D cg c]  }t        ||fi | c}      S c c}w rW   )rD   _bool_op_mapr  r   r   r  r  rb   r[   r   s       r4   _build_boolopr  n  sD    T$'']#6:kkBkUv	(	(kB Bs   A

c                    t        | j                  |fi |}| j                  D cg c]  }t        ||fi | }}| j                  D cg c]  }t        ||fd|i| }}t	        |g ||      S c c}w c c}w )Nr   )r  funcargskeywordsr   )r  rb   r[   r   argpositional_argskwargkeyword_argss           r4   _build_callr  u  s    dii262H@D		J	vc64V4	OJTXTaTabTa5F5&F8FvFTaLbH??,?@@ Kbs   A2
A7c                    t        t        | j                  |fi || j                  D cg c]  }t        t        |          c}| j                  D cg c]  }t        ||fi | c}      S c c}w c c}w rW   )r   r  r   ops_compare_op_mapr  r   )r  rb   r[   r   r   s        r4   _build_comparer  |  sm    tyy&+F+-1XX6Xrb	"X6484D4DE4DDf	'	'4DE 6Es   A.
A3c                    t        t        | j                  |fddi|t        | j                  |fi || j                  D cg c]  }t        ||fi | c}t        | j                              S c c}w )Ncompr_targetT)r   )r   r  r   rO   ifsr   r   )r  rb   r[   	conditions       r4   _build_comprehensionr    sn    t{{F@@@tyy&+F+>BhhGh	6	,V	,hGdmm$	  	Hs   A2)in_formatted_strin_joined_strparse_stringsliteral_stringsc                  t        | j                  t              rT|r|s| j                  S |rB|s@	 t        | j                  ddt        j
                  d      }t        |j                  |fi |S  t        d      d ij                  t        | j                        t              | j                        S # t        $ r# t        j                  d| j                         Y pw xY w)Nevalz<string-annotation>r   )modefilenameflagsoptimizezTried and failed to parse %r as Python code, falling back to using it as a string literal (postponed annotations might help: https://peps.python.org/pep-0563/).c                     y)Nz...r2   r  s    r4   r`   z!_build_constant.<locals>.<lambda>  s    r3   )r>   r   rp   compileastPyCF_ONLY_ASTr  r  SyntaxErrorr   debugr  r   repr)r  rb   r  r  r  r  r[   parseds           r4   _build_constantr    s     $**c"!1::
= JJ2++ fkk6<V<<CDI'++D,<dCDJJOO  \ JJ	s   (B4 4)C C c                    t        | j                  D cg c]  }|d nt        ||fi | c}| j                  D cg c]  }t        ||fi | c}      S c c}w c c}w rW   )r   r   r  r   )r  rb   r[   ra   r   s        r4   _build_dictr    sb    KO99U9C&f"?"?	?9U6:kkBkUv	(	(kB UBs
   AA
c                    t        t        | j                  |fi |t        | j                  |fi || j                  D cg c]  }t        ||fi | c}      S c c}w rW   )r   r  ra   r   r   r  rb   r[   gens       r4   _build_dictcompr    s]    txx*6*tzz6,V,26//B/3V	&v	&/B  	Cs    A)r  c               F    t        t        | j                  |fddi|      S )Nr  T)r  r  r   )r  rb   r  r[   s       r4   _build_formattedr    s$     

FTTTVTUUr3   c                    t        t        | j                  |fi || j                  D cg c]  }t        ||fi | c}      S c c}w rW   )r  r  eltr   r  s       r4   _build_generatorexpr    sG    txx*6*26//B/3V	&v	&/B B   A
c           	         t        t        | j                  |fi |t        | j                  |fi |t        | j                  |fi |      S rW   )rA   r  r  r  r  r  s      r4   _build_ifexpr    sH    tyy&+F+tyy&+F+t{{F-f- r3   )r  c          
     l    t        | j                  D cg c]  }t        ||fddi| c}      S c c}w Nr  T)r  r   r  )r  rb   r  r[   r   s        r4   _build_joinedstrr    s<     [_[f[fg[fRW&MdMfM[fghhg   1c                    | j                    t        t        | j                  |fi |      S t	        | j                   t        | j                  |fi ||      S )N)r   )r  r-  r  r   r  )r  rb   r   r[   s       r4   _build_keywordr"    sK    xxfTZZB6BCCtxx

F!Ef!EPXYYr3   c                   t        t        | j                        D cg c]4  \  }}}}t        ||d t	        |t
              r|nt        ||d            6 c}}}}t        | j                  |fi |      S c c}}}}w )NF)rb   r  )r^   r5  rq  r;  )r1  r  )	r0  r   r  rp  r>   rp   safe_get_expressionr  r  )r  rb   r[   r^   r  r5  r;  s          r4   _build_lambdar%    s     +9*C

 +D&aw gs+  (uU +D

 DIIv00 

s   9A:c           
     h    t        | j                  D cg c]  }t        ||fi | c}      S c c}w rW   )rC  eltsr  r  rb   r[   r  s       r4   _build_listr)    s/    DIIFIbVB1&1IFGGF   /c                    t        t        | j                  |fi || j                  D cg c]  }t        ||fi | c}      S c c}w rW   )rJ  r  r  r   r  s       r4   _build_listcompr,    sH    txx:6:fjfufu<vfu_bVC=ZSY=Zfu<vww<vr  c                0    t        | j                  ||      S rW   )r   id)r  rb   rP  r[   s       r4   _build_namer/    s    DGGVV,,r3   c                n    t        t        | j                  |fi |t        | j                  |fi |      S rW   )rm  r  r   r   r  s      r4   _build_named_exprr1  	  s1    V>v>tzzSY@d]c@deer3   c           
     h    t        | j                  D cg c]  }t        ||fi | c}      S c c}w rW   )rt  r'  r  r(  s       r4   
_build_setr3    s/    499E9RF2v009EFFEr*  c                    t        t        | j                  |fi || j                  D cg c]  }t        ||fi | c}      S c c}w rW   )rw  r  r  r   r  s       r4   _build_setcompr5    sH    vdhh9&9eietet;uet^aF3<YRX<Yet;uvv;ur  c           	         t        | j                  d nt        | j                  |fi || j                  d nt        | j                  |fi || j                  d       S t        | j                  |fi |      S rW   )rz  r   r  r{  r|  r  s      r4   _build_slicer7    sv    

"tzz6(LV(L

"tzz6(LV(L		!  (.dii'J6'J r3   c                B    t        t        | j                  |fi |      S rW   )r'  r  r   r  s      r4   _build_starredr9    s    VDJJA&ABBr3   r  r  subscript_slicec                  t        | j                  |fi |}|rBt        |t        t        f      r|j
                  dv rd}t        | j                  |fd|dd|}nt        | j                  |fddi|}t        ||      S )N>   typing.Literaltyping_extensions.LiteralTr:  r;  )r  r   r>   r   r   r   r  r   )r  rb   r  r  r;  r[   r   
slice_exprs           r4   _build_subscriptr@  !  s     $**f//Dd]H564;N;N S
 <
 #OJJ
 + 
 

 DJJOOO
z**r3   )r;  r  c          
     t    t        | j                  D cg c]  }t        ||fi | c}|xs |      S c c}w )N)r  )r  r'  r  )r  rb   r;  r  r[   r  s         r4   _build_tuplerB  >  s:     TYYGYrfR262YGRaRqeqrrGs   5c                x    t        t        t        | j                           t	        | j
                  |fi |      S rW   )r   _unary_op_mapr  r   r  operandr  s      r4   _build_unaryoprF  I  s-    }T$'']3VDLL&5[TZ5[\\r3   c                f    t        | j                  d       S t        | j                  |fi |      S rW   )r  r   r  r  s      r4   _build_yieldrH  M  s/    TZZ/TZZVDJJ5YRX5YZZr3   c                B    t        t        | j                  |fi |      S rW   )r  r  r   r  s      r4   _build_yield_fromrJ  Q  s    

F=f=>>r3   c                      e Zd ZddZy)_BuildCallablec                     y rW   r2   )ru   r  rb   r[   s       r4   __call__z_BuildCallable.__call__V  s    RUr3   N)r  r
   rb   Module | Classr[   r
   r   r?   )r   r   r   rN  r2   r3   r4   rL  rL  U  s    Ur3   rL  zdict[type, _BuildCallable]	_node_map)      c                B    t        t        | j                  |fi |      S rW   )r  r  r   r  s      r4   _build_interpolationrT  z  s     

F!Ef!EFFr3   c           
     l    t        | j                  D cg c]  }t        ||fddi| c}      S c c}w r  )r  r   r  r  s       r4   _build_templatestrrV  }  s<    
 aealalmalX]uf SD SF Salmnnmr   c               4    t        t        |          | |fi |S rW   )rP  r  r  s      r4   r  r    s    T$Z v888r3   rP  r  c                   | y|	 |j                   }|j                   }t        | |||      S # t        $ r d}Y w xY w)aZ  Build an expression from an AST.

    Parameters:
        node: The annotation node.
        parent: The parent used to resolve the name.
        member: The member name (for resolution in its scope).
        parse_strings: Whether to try and parse strings as type annotations.

    Returns:
        A string or resovable name or expression.
    NFrX  )moduleimports_future_annotations
ValueErrorr  )r  rb   rP  r  rZ  s        r4   get_expressionr]    sX    $ |	B]]F !' A AAM$v]KK	  	"!M	"s   / ==zD{path}:{lineno}: Failed to get expression from {node_class}: {error})rP  r  	log_level
msg_formatc               ~   	 t        | |||      S # t        $ r}|Y d}~y| j                  j                  }	 |j                  }n# t
        $ r d}Y nw xY w| j                  }	|j                  j                   d| }
|j                  ||	||
      } t        t        |j                        |       Y d}~yd}~ww xY w)a5  Safely (no exception) build a resolvable annotation.

    Parameters:
        node: The annotation node.
        parent: The parent used to resolve the name.
        member: The member name (for resolution in its scope).
        parse_strings: Whether to try and parse strings as type annotations.
        log_level: Log level to use to log a message. None to disable logging.
        msg_format: A format string for the log message. Available placeholders:
            path, lineno, node, error.

    Returns:
        A string or resovable name or expression.
    rX  Nz<in-memory>r   )r   lineno
node_classerror)r]  r]  r   r   relative_filepathr\  ra  formatrf   r   r   )r  rb   rP  r  r^  r_  rc  rb  r   ra  	error_strmessages               r4   r$  r$    s    .2dF6WW 2^^,,
	!%77D 	! D	!//05':	##f[d#e(	(112s=    	B<B7B7AB7AB7AAB77B<zG{path}:{lineno}: Failed to get %s expression from {node_class}: {error})r  rq  )r  r_  z
base classzclass keywordr  )
rH   z#str | Expr | tuple[str | Expr, ...]r5   r   r6   r   r7   r   r   r   )rR   z-Iterable[str | Expr | tuple[str | Expr, ...]]rS   r   r5   r   r   r   )rH   z+str | bool | Expr | list[str | Expr] | Noner[   r
   r   zstr | bool | None | list | dict)rh   r?   r[   r
   r   r   )r  r?   r   r   )r  zast.Attributerb   rO  r[   r
   r   r?   )r  z	ast.BinOprb   rO  r[   r
   r   r?   )r  z
ast.BoolOprb   rO  r[   r
   r   r?   )r  zast.Callrb   rO  r[   r
   r   r?   )r  zast.Comparerb   rO  r[   r
   r   r?   )r  zast.comprehensionrb   rO  r[   r
   r   r?   )r  zast.Constantrb   rO  r  r   r  r   r  r   r  r   r[   r
   r   r   )r  zast.Dictrb   rO  r[   r
   r   r?   )r  zast.DictComprb   rO  r[   r
   r   r?   )
r  zast.FormattedValuerb   rO  r  r   r[   r
   r   r?   )r  zast.GeneratorExprb   rO  r[   r
   r   r?   )r  z	ast.IfExprb   rO  r[   r
   r   r?   )
r  zast.JoinedStrrb   rO  r  r   r[   r
   r   r?   rW   )
r  zast.keywordrb   rO  r   r   r[   r
   r   r?   )r  z
ast.Lambdarb   rO  r[   r
   r   r?   )r  zast.Listrb   rO  r[   r
   r   r?   )r  zast.ListComprb   rO  r[   r
   r   r?   )
r  zast.Namerb   rO  rP  rO  r[   r
   r   r?   )r  zast.NamedExprrb   rO  r[   r
   r   r?   )r  zast.Setrb   rO  r[   r
   r   r?   )r  zast.SetComprb   rO  r[   r
   r   r?   )r  z	ast.Slicerb   rO  r[   r
   r   r?   )r  zast.Starredrb   rO  r[   r
   r   r?   )r  zast.Subscriptrb   rO  r  r   r  r   r;  r   r[   r
   r   r?   )r  z	ast.Tuplerb   rO  r;  r   r  r   r[   r
   r   r?   )r  zast.UnaryOprb   rO  r[   r
   r   r?   )r  z	ast.Yieldrb   rO  r[   r
   r   r?   )r  zast.YieldFromrb   rO  r[   r
   r   r?   )r  zast.Interpolationrb   rO  r[   r
   r   r?   )r  zast.TemplateStrrb   rO  r[   r
   r   r?   )r  zast.ASTrb   rO  r[   r
   r   r?   )
r  ast.AST | Nonerb   rO  rP  rO  r  bool | Noner   r   )r  rh  rb   rO  rP  rO  r  ri  r^  zLogLevel | Noner_  rp   r   r   )
__future__r   r  sysdataclassesr   r   re   enumr   r   	functoolsr   typingr	   r
   r   (griffe._internal.agents.nodes.parametersr   griffe._internal.enumerationsr   r   griffe._internal.exceptionsr   griffe._internal.loggerr   collections.abcr   r   r   pathlibr   griffe._internal.modelsr   r   r   r   r1   rG   rU   rZ   rX   r   r?   r   rB   rD   r   r   r   r   r   r   r   r  r  rA   r  r  r  r'  r-  r0  rC  rJ  r   rm  rp  rt  rw  rz  r   r  r  r   r  r  InvertNotUAddUSubrD  AddBitAndBitOrBitXorDivFloorDivLShiftMatMultModMultPowRShiftSubr  AndOrr  EqNotEqLtLtEGtGtEIsIsNotInNotInr  r  r@   r  r  r  r  r  r  r  r  r  r  r  r  r  r"  r%  r)  r,  r/  r1  r3  r5  r7  r9  r@  rB  rF  rH  rJ  rL  	AttributeBinOpBoolOpCallComparecomprehensionConstantDictDictCompFormattedValueGeneratorExpIfExp	JoinedStrkeywordLambdaListListCompName	NamedExprSetSetCompSliceStarred	SubscriptTupleUnaryOpYield	YieldFromrP  r   version_inforT  rV  updateInterpolationTemplateStrr  r]  rc  r$  _msg_formatget_annotationsafe_get_annotationget_base_classsafe_get_base_classget_class_keywordsafe_get_class_keywordget_conditionsafe_get_conditionr2   r3   r4   <module>r     sf   # 
 
 ! +   / / C A ; *<<??"' "P ,?,F,F(0( ( 	(
 *( (^ 	Y;YY 	Y
 Y.8 % 	 j> j> j>Z d$0(D 0(  0(f d$c c  c* d$\ \  \" d$t   ( d$L$ L  L$ d$A A  A8 d$4    d$t   $ d$4   ( d$54 5  5 d$
D 
  
 d$:t :  : d$b b  b8 d$
 
  
 d$	D 	  	 d$$1$ $1  $1N d$1 1  1 d$1T 1  1 d$'[ '[  '[T d$	t 	  	 d$4     e4 Z*t Z* !Z*z d$1D 1  1 d$
D 
  
 d$	d 	  	 d$$     d$4 4  4* d$&(D &(  &(R d$	d 	  	 d$
 
  
0 d$Y$ Y  Y d$
5 
5  
5 d$1D 1  1 JJGGUHHcHHc	 GGSJJIIsJJGGSLL$JJKKGGSHHcGGTJJGGS" GGUFFD FFDIItFFCGGTFFCGGTFFDIIxFFDIIx424 64 7	4
 74 24 34 14 24 64 54 64 ?4  ?!4" :#4$ p%4&  '4D dE4F ;474:<926 94351g4nU	6A #!$P
$P$P 	$P
 $P $P $P $P $PN #	V
VV 	V
 V 
V  	i
ii 	i
 i 
iZ"Hx-fGwC  !!+
++ 	+
 + + + 
+B "s
ss 	s
 s s 
s][?VX V)MM#)II|) JJ) HHk	)
 KK) +) LL/) HHk) LL/) () )) II|) MM#) KK) JJ)  HHk!)" LL/#)$ HHkMM$GGZKKII|KKMM#II|KKII|MM$9)	% > wGooo o 
	o 3OO/	
9 !%L
LL 	L
 L LD !%!)\%
%% 	%
 % % % %P Xt<\) 
 u=\) 
 N%@  _, 
 e<[( r3   