
    Ji                       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+             ZJej                  d_ej                  d`ej                  daej                  dbiZOej                  daej                  dcej                  ddej                  deej                  dfej                  dgej                  dhej                  diej                  djej                  dkej                  dlej                  dmej                  dbiZ]ej                  dnej                  doiZ`ej                  dpej                  dqej                  drej                  dsej                  dtej                  duej                  dvej                  dwej                  dxej                  dyi
Zki e@dz e2d{ e9d| e6d} e>d~ eGd eCd e3d e?d eDd e4d e,d eFd e/d eHd e-d e.d e0d e8d eAd e=d e7d e;d e<d eId eJd e1d e5d e:d eBd eEd iZlddZmddZnddZoddZpddZqddZrddZsddddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZtddZuddZvdd	 	 	 	 	 	 	 	 	 ddZwddZxddZydd	 	 	 	 	 	 	 	 	 ddZzdddZ{ddZ|ddZ}ddZ~dddZddZddZddZddZddZdddd	 	 	 	 	 	 	 	 	 	 	 	 	 ddZddd	 	 	 	 	 	 	 	 	 	 	 ddZddZddZddZ G d de      Zi ej                  enej                  eo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:                  eej<                  eej>                  eej@                  eejB                  eejD                  eejF                  eejH                  eejJ                  eejL                  eiZded<   ddZddd	 	 	 	 	 	 	 	 	 ddZddejV                  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     n/var/www/html/BankruptcyAI-uat/bankruptcy-ai/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	# 	cDd@PZabbb	c  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  Y%d=P=U=UVVV'?R?W?WXXXY 	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      sN     '4 W///'4 ;BC4t.v.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      ss     Ij17GH::! 	

N7:uzz#BMfMMF 
 ((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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"     hz$4t$))Chs   (*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   Nreturnrp   )r   Iterator[str | Expr]r5   boolr   r   )r   r?   )r[   r
   r   dict[str, Any]r   r   )r   r   r   __doc__rv   rx   rE   r|   r~   propertyrg   r   r   r   r   r   r   r   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  sl     $T*
$++a.tjZ^___[[_ 	MEIe$LLL	M 	` 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.first$  s     {{1~r3   c                .    | j                   j                  S )zThe path of this attribute.)r   r   rt   s    r4   r   zExprAttribute.path)  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   leftrp   rC   rightTr;   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.iterate?  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   4  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.iterateS  s}     $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   J  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_pathe  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.iteratej  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   \  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 t        |||      E d {    % y 7 K7 	w)NTr=   r   rN   )r@   rG   r   zipr   r   )ru   r5   r   opcomps        r4   rE   zExprCompare.iterate|  s{     $T*
$))$UYZZZDNND,<,<= 	LHBbT)Od
KKK	L 	[ Ls"   (A:A6AA:.A8/A:8A:Nr   r   r2   r3   r4   r   r   q  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|      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!     izsEfdE:is   r   r;   })rU   r   r   r   rz   s     r4   rE   zExprDict.iterate  sL     	iSQUQZQZ\`\g\gMhi
 	
 	

 		
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   Sequence[Expr]
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  s3     	$**4BUBZBZ[[[	 	\s   .<:
<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)	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   s+     
bt444	 	5    .,
.Nr   r   r2   r3   r4   r  r    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_pathA  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.iterateH  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  &  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.iterateU  s     	$**4000   )')Nr   r   r2   r3   r4   r  r  N  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.iteratea  s     
$**4000r  Nr   r   r2   r3   r4   r  r  Z  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   )lenr  	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.iterateo  sq    	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   r  r  f  s     2''
&* [r3   r  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   r2  r2    s    !&* r3   r2  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)Nr4  r;   r   r5  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   r9  r9    s    4!&* r3   r9  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   r?  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_collectionrI  r^   	Exceptionresolvedrt   s    r4   rM  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+     cUY:dD)Pd.A.A[.PPcs   +-)rM  basesrL  any)ru   rQ  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   rS  rL  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   rU  rL  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.r4  )r   rt   s    r4   is_type_parameterzExprName.is_type_parameter  s     d))))r3   )rB  objectr   r   )r5   r   r   zIterator[ExprName]r   r   )r   zModule | Class | Noner   )r   r   r   r   r   rb   r?  rC  rE   r|   r   r   r   rM  rS  rU  rW  rY  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.iterate  s<     $++D111$**4000 	20s!   A
A"A
 AA
A
Nr   r   r2   r3   r4   r\  r\    s    5L&* 1r3   r\  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   r$  Nr  
annotationstr | Expr | Noner*  )
r   r   r   r   r   r   r(  r$  r`  r*  r2   r3   r4   r_  r_    s;    >
I'==D-="J"!%G%r3   r_  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   r6  rz   s     r4   rE   zExprSet.iterate1  r7  r  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	)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@  r;  r<  Nr   r   r2   r3   r4   rf  rf  7  s    3!&* r3   rf  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]`.Nra  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   rj  rk  rz   s     r4   rE   zExprSlice.iterateS  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   rj  rk  rE   r2   r3   r4   ri  ri  H  s7     #E##E#"D
"&* 4r3   ri  c                  v    e Zd ZU dZded<   	 ded<   	 ddddZe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   r4  r5  )rG   r   r@   ro  r   r   rz   s     r4   rE   zExprSubscript.iterateg  sV     $))$QUAVWWW	$**4BUBZBZ[[[		 	X 	\s!   %A'A#1A'A%
A'%A'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   r   rC   r   r   r   )r"  r>   r?   r|   rB   r   	_to_binop)rR   r   r   r   s       r4   ru  zExprSubscript._to_binopn  s    x=A"KD%$%~~'%&)$5AA&&x}&<eT"OO%EdRu==r3   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|rt  ztyping.Optionalr   rs  )r   ro  )
r   ru  ro  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   )rR   r   r   rp   r   rB   )r   zExprBinOp | ExprSubscriptr   )r   r   r   r   r   rE   staticmethodru  r|   r   r   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  s?    NRmm\Jr3/bR\\^C\]]
 	
\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`.Nra  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  +-&rw  ^///<<@%r  r9   >>andorz==z!=<z<=>z>=iszis notinznot inc                "    t         j                  S rW   r   r1   _s    r4   r`   r`         +22 r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`         /66 r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`   	      077 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`     r  r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`     s    ,33 r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`     s    *11 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`     r  r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`     s    .55 r3   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`     s    +:: r3   c                v    dt         j                  ij                  | j                  t         j                        S )Nr  )r   r%   r   rC   r-   es    r4   r`   r`     s*    E#6#:#:;??

L_LoLop r3   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  rw  )	r   r.   r,   r+   r*   r)   r(   r'   rC   r  s    r4   r`   r`     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`   '  s%    "5"9"9ATAWAWXYZYcYcd r3   c                "    t         j                  S rW   )r   r&   r  s    r4   r`   r`   (  s    .;; r3   c                "    t         j                  S rW   )r   r"   r  s    r4   r`   r`   )  s    ,44 r3   c                "    t         j                  S rW   )r   r   r  s    r4   r`   r`   *  r  r3   c                "    t         j                  S rW   r   r!   r  s    r4   r`   r`   +  s    -44 r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`   -  s     3 : : r3   c                "    t         j                  S rW   r   r    r  s    r4   r`   r`   .  s    !4!<!< r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`   /  s    199 r3   c                "    t         j                  S rW   r   r   r  s    r4   r`   r`   0  s    ,22 r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`   1  s    066 r3   c                "    t         j                  S rW   r   r   r  s    r4   r`   r`   4  s    !4!9!9 r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`   5  s    /44 r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`   6  s    .33 r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`   7  s    055 r3   c                "    t         j                  S rW   r  r  s    r4   r`   r`   8  s    ,11 r3   c                L    t        j                  t        |       d       |       S )Nc                "    t         j                  S rW   r  r  s    r4   r`   z!_get_precedence.<locals>.<lambda>=  s    5H5M5M r3   )_precedence_mapr   type)exprs    r4   r@   r@   <  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  @  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  L  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  T  s@    T$'']#6:kkBUv	(	(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  [  s    dii262H@D		Jvc64V4JOJTXTaTab5F5&F8FvFbL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  b  sc    tyy&+F+-1XX6rb	"6484D4DEDf	'	'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  j  sj    t{{F@@@tyy&+F+>BhhG	6	,V	,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>      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  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    sZ    KO99UC&f"?"?	?U6:kkBUv	(	(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    sY    txx*6*tzz6,V,26//B3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    sC    txx*6*26//B3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    s6     [_[f[fgRW&MdMfMghhgs   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^   r$  r`  r*  )r  r  )	r  r   r  r_  r>   rp   safe_get_expressionr  r  )r  rb   r[   r^   r  r$  r*  s          r4   _build_lambdar    s     +9*C

 

 'aw gs+  (uU

 DIIv00 

s   9A:c           
     h    t        | j                  D cg c]  }t        ||fi | c}      S c c}w rW   )r2  eltsr  r  rb   r[   r  s       r4   _build_listr    s+    DIIFbVB1&1FGGF   /c                    t        t        | j                  |fi || j                  D cg c]  }t        ||fi | c}      S c c}w rW   )r9  r  r
  r   r  s       r4   _build_listcompr    sB    txx:6:fjfufu<v_bVC=ZSY=Z<vww<vr  c                0    t        | j                  ||      S rW   )r   id)r  rb   r?  r[   s       r4   _build_namer    s    DGGVV,,r3   c                n    t        t        | j                  |fi |t        | j                  |fi |      S rW   )r\  r  r   r   r  s      r4   _build_named_exprr!    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   )rc  r  r  r  s       r4   
_build_setr#    s+    499ERF2v00EFFEr  c                    t        t        | j                  |fi || j                  D cg c]  }t        ||fi | c}      S c c}w rW   )rf  r  r
  r   r  s       r4   _build_setcompr%    sB    vdhh9&9eietet;u^aF3<YRX<Y;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   )ri  r   r  rj  rk  r  s      r4   _build_slicer'    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_starredr)    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   ro  r   )r  rb   r  r  r+  r[   r   
slice_exprs           r4   _build_subscriptr0    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_tupler2  $  s6     TYYGrfR262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_unaryopr6  /  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_yieldr8  3  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_fromr:  7  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__<  r  r3   N)r  r
   rb   Module | Classr[   r
   r   r?   )r   r   r   r>  r2   r3   r4   r<  r<  ;  s    Ur3   r<  zdict[type, _BuildCallable]	_node_mapc               4    t        t        |          | |fi |S rW   )r@  r  r  s      r4   r  r  _  s    T$Z v888r3   r?  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.
    NFrB  )moduleimports_future_annotations
ValueErrorr  )r  rb   r?  r  rD  s        r4   get_expressionrG  c  sX    $ |	B]]F !' A AAM$v]KK	  	"!M	"s   / ==zD{path}:{lineno}: Failed to get expression from {node_class}: {error})r?  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.
    rB  Nz<in-memory>r   )r   lineno
node_classerror)rG  rL  r   r   relative_filepathrF  rK  formatrf   r   r   )r  rb   r?  r  rH  rI  rM  rL  r   rK  	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  r`  )r  rI  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   r?  r[   r
   r   r?   )r  z	ast.BinOprb   r?  r[   r
   r   r?   )r  z
ast.BoolOprb   r?  r[   r
   r   r?   )r  zast.Callrb   r?  r[   r
   r   r?   )r  zast.Comparerb   r?  r[   r
   r   r?   )r  zast.comprehensionrb   r?  r[   r
   r   r?   )r  zast.Constantrb   r?  r  r   r  r   r  r   r  r   r[   r
   r   r   )r  zast.Dictrb   r?  r[   r
   r   r?   )r  zast.DictComprb   r?  r[   r
   r   r?   )
r  zast.FormattedValuerb   r?  r  r   r[   r
   r   r?   )r  zast.GeneratorExprb   r?  r[   r
   r   r?   )r  z	ast.IfExprb   r?  r[   r
   r   r?   )
r  zast.JoinedStrrb   r?  r  r   r[   r
   r   r?   rW   )
r  zast.keywordrb   r?  r   r  r[   r
   r   r?   )r  z
ast.Lambdarb   r?  r[   r
   r   r?   )r  zast.Listrb   r?  r[   r
   r   r?   )r  zast.ListComprb   r?  r[   r
   r   r?   )
r  zast.Namerb   r?  r?  r>  r[   r
   r   r?   )r  zast.NamedExprrb   r?  r[   r
   r   r?   )r  zast.Setrb   r?  r[   r
   r   r?   )r  zast.SetComprb   r?  r[   r
   r   r?   )r  z	ast.Slicerb   r?  r[   r
   r   r?   )r  zast.Starredrb   r?  r[   r
   r   r?   )r  zast.Subscriptrb   r?  r  r   r  r   r+  r   r[   r
   r   r?   )r  z	ast.Tuplerb   r?  r+  r   r  r   r[   r
   r   r?   )r  zast.UnaryOprb   r?  r[   r
   r   r?   )r  z	ast.Yieldrb   r?  r[   r
   r   r?   )r  zast.YieldFromrb   r?  r[   r
   r   r?   )r  zast.ASTrb   r?  r[   r
   r   r?   )
r  ast.AST | Nonerb   r?  r?  r>  r  bool | Noner   r  )r  rR  rb   r?  r?  r>  r  rS  rH  zLogLevel | NonerI  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  r2  r9  r   r\  r_  rc  rf  ri  r   r|  r   r  r  InvertNotUAddUSubr4  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  r!  r#  r%  r'  r)  r0  r2  r6  r8  r:  r<  	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	YieldFromr@  r   r  rG  rM  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     s   # 
 
 ! +   / / C A ; *<<??"' "P ,?,F,F(0( ( 	(
 *( (^ 	Y;YY 	Y
 Y.8 % 	 ZV ZV ZV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$$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$6(D 6(  6(r 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)	% @9 !%L
LL 	L
 L LD !%!)\%
%% 	%
 % % % %P Xt<\) 
 u=\) 
 N%@  _, 
 e<[( r3   