o
    w!g                     @  sJ	  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	 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red dlmZmZmZ d dlmZ d dlm Z m!Z! dddddZ"dddddZ#dd#d$Z$dd(d)Z%i Z&d*e'd+< ej(d,krde&d-< eG d.d& d&Z)edd/die&G d0d1 d1e)Z*edd/die&G d2d3 d3e)Z+edd/die&G d4d5 d5e)Z,edd/die&G d6d7 d7e)Z-edd/die&G d8d9 d9e)Z.edd/die&G d:d; d;e)Z/edd/die&G d<d= d=e)Z0edd/die&G d>d? d?e)Z1edd/die&G d@dA dAe)Z2edd/die&G dBdC dCe)Z3edd/die&G dDdE dEe)Z4edd/die&G dFdG dGe)Z5edd/die&G dHdI dIe)Z6edd/die&G dJdK dKe)Z7edd/die&G dLdM dMe)Z8edd/die&G dNdO dOe)Z9edd/die&G dPdQ dQe)Z:edd/die&G dRdS dSe)Z;edd/die&G dTdU dUe)Z<edd/die&G dVdW dWe)Z=edd/dXie&G dYdZ dZe)Z>edd/die&G d[d\ d\e)Z?edd/die&G d]d^ d^e)Z@edd/die&G d_d` d`e)ZAedd/die&G dadb dbe)ZBedd/die&G dcdd dde)ZCedd/die&G dedf dfe)ZDedd/die&G dgdh dhe)ZEedd/die&G didj dje)ZFedd/die&G dkdl dle)ZGedd/die&G dmdn dne)ZHejIdoejJdpejKdqejLdriZMejNdqejOdsejPdtejQduejRdvejSdwejTdxejUdyejVdzejWd{ejXd|ejYd}ejZdriZ[ej\d~ej]diZ^ej_dej`dejadejbdejcdejddejedejfdejgdejhdi
Zid	ddZjd
ddZkdddZldddZmdddZndddZodXdXdXdXddddZpdddZqdddZrdXddddZsdddZtdddZudXddddZvddddZwdddZxdddńZydddȄZzddd˄Z{ddd΄Z|dddфZ}dddԄZ~dddׄZd ddڄZdXdXdXdۜd!dd߄ZdXdd"ddZd#ddZd$ddZd%ddZi ejejejekejelejemejenejeoejepejeqejerejesejetejeuejevejewejexejeyejezeje{eje|eje}eje~ejeejeejeejeejeejeejeiZde'd< d&ddZddd'ddZdejddd(ddZdZe	eddZe	eded  dZe	edXdZe	edXed dZe	edXdZe	edXed dZdS ()      )annotationsN)	dataclass)fields)partial)zip_longest)TYPE_CHECKINGAnyCallable)get_parameters)LogLevelParameterKind)NameResolutionError)logger)IterableIteratorSequence)Path)ClassModuleTflatelement#str | Expr | tuple[str | Expr, ...]r   boolreturnIterator[str | Expr]c                c  sd    t | tr| V  d S t | tr | D ]}t||dE d H  qd S |r-| jddE d H  d S | V  d S )Nr   T)
isinstancestrtuple_yielditerate)r   r   elem r"   U/mnt/skqttb/ctump_chatbot/chatbot/lib/python3.10/site-packages/_griffe/expressions.pyr      s   



r   elements-Iterable[str | Expr | tuple[str | Expr, ...]]joint
str | Exprc                c  sl    t | }ztt||dE d H  W n
 ty   Y d S w |D ]}t||dE d H  t||dE d H  qd S Nr   )iterr   nextStopIteration)r$   r&   r   itr   r"   r"   r#   _join)   s   r-   +str | bool | Expr | list[str | Expr] | Nonekwargsr   str | bool | None | list | dictc                   s:   t | trt| fi  S t | tr fdd| D S | S )Nc                   s   g | ]
}t |fi  qS r"   )_field_as_dict.0r!   r/   r"   r#   
<listcomp>@   s    z"_field_as_dict.<locals>.<listcomp>)r   Expr_expr_as_dictlist)r   r/   r"   r4   r#   r1   9   s
   

r1   
expressionr6   dict[str, Any]c                   s2    fddt t dd dD } j|d< |S )Nc                   s2   i | ]}|j d kr|j tt |j fi qS parent)namer1   getattr)r3   fieldr9   r/   r"   r#   
<dictcomp>E   s
    
z!_expr_as_dict.<locals>.<dictcomp>c                 S  s   | j S N)r=   )fr"   r"   r#   <lambda>G   s    z_expr_as_dict.<locals>.<lambda>)keycls)sorted	getfields	classname)r9   r/   r   r"   r@   r#   r7   D   s
   
r7   zdict[str, bool]_dataclass_opts)   
   slotsc                   @  s   e Zd ZdZd'ddZd(ddZd	d
d)ddZd*ddZd+ddZe	d'ddZ
e	d'ddZe	d'ddZe	d'ddZe	d,ddZe	d,d d!Ze	d,d"d#Ze	d,d$d%Zd&S )-r6   zBase class for expressions.r   r   c                 C  s   d dd | jddD S )N c                 s  s$    | ]}t |tr|n|jV  qd S rB   )r   r   r=   r2   r"   r"   r#   	<genexpr>Y      " zExpr.__str__.<locals>.<genexpr>Tr   )joinr    selfr"   r"   r#   __str__X   s   zExpr.__str__r   c                 c  s    | j ddE dH  dS )z.Iterate on the expression syntax and elements.Fr   N)r    rR   r"   r"   r#   __iter__[   s   zExpr.__iter__Tr   r   r   c                c  s    dE dH  dS )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.
        r"   Nr"   rS   r   r"   r"   r#   r    _   s   zExpr.iteratec                 C  s   | S )zModernize the expression.

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

        Returns:
            A modernized expression.
        r"   rR   r"   r"   r#   	modernizer   s   zExpr.modernizer/   r   r:   c                 K  s   t | fi |S )zReturn the expression as a dictionary.

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


        Returns:
            A dictionary.
        )r7   )rS   r/   r"   r"   r#   as_dict|   s   
zExpr.as_dictc                 C     | j jS )zThe expression class name.)	__class____name__rR   r"   r"   r#   rI         zExpr.classnamec                 C     t | S z%Path of the expressed name/attribute.r   rR   r"   r"   r#   path   r\   z	Expr.pathc                 C  r]   r^   r_   rR   r"   r"   r#   canonical_path   r\   zExpr.canonical_pathc                 C  s$   | j ddd ddd dS )z/Name of the expressed name/attribute/parameter..   ())ra   rsplitsplitremovesuffixrR   r"   r"   r#   canonical_name   s   $zExpr.canonical_namec                 C     t | to	| jdkS )z4Whether this attribute is annotated with `ClassVar`.ClassVarr   ExprSubscriptrj   rR   r"   r"   r#   is_classvar      zExpr.is_classvarc                 C  s   t | to| j dkS )z#Whether this expression is a tuple.r   )r   rn   rj   lowerrR   r"   r"   r#   is_tuple   s   zExpr.is_tuplec                 C  rk   )z'Whether this expression is an iterator.r   rm   rR   r"   r"   r#   is_iterator   rp   zExpr.is_iteratorc                 C  rk   )z'Whether this expression is a generator.	Generatorrm   rR   r"   r"   r#   is_generator   rp   zExpr.is_generatorNr   r   )r   r   r   r   r   r   )r   r6   )r/   r   r   r:   r   r   )r[   
__module____qualname____doc__rT   rU   r    rW   rX   propertyrI   r`   ra   rj   ro   rr   rs   ru   r"   r"   r"   r#   r6   T   s.    




eqc                   @  sn   e Zd ZU dZded< 	 dddd
dZdddZedddZedddZ	ed ddZ
ed ddZdS )!ExprAttributezAttributes like `a.b`.zlist[str | Expr]valuesTr   r   r   r   r   c                c      t | jd|dE d H  d S )Nrb   r   r-   r   rV   r"   r"   r#   r          zExprAttribute.iteratevalueExprNameNonec                 C  s"   |j du r	| j|_ | j| dS )zpAppend a name to this attribute.

        Parameters:
            value: The expression name to append.
        N)r<   lastr   append)rS   r   r"   r"   r#   r      s   
zExprAttribute.appendc                 C  
   | j d S )z/The last part of this attribute (on the right).rd   r   rR   r"   r"   r#   r      s   
zExprAttribute.lastr'   c                 C  r   )z/The first part of this attribute (on the left).r   r   rR   r"   r"   r#   first   s   
zExprAttribute.firstr   c                 C  rY   )zThe path of this attribute.)r   r`   rR   r"   r"   r#   r`      r\   zExprAttribute.pathc                 C  rY   )z%The canonical path of this attribute.)r   ra   rR   r"   r"   r#   ra      r\   zExprAttribute.canonical_pathNrw   )r   r   r   r   )r   r   )r   r'   rv   )r[   ry   rz   r{   __annotations__r    r   r|   r   r   r`   ra   r"   r"   r"   r#   r~      s   
 

r~   c                   @  s@   e Zd ZU dZded< 	 ded< 	 ded< 	 dddddZdS )	ExprBinOpzBinary operations like `a + b`.r'   leftr   operatorrightTr   r   r   r   r   c                c  s>    t | j|dE d H  d| j dV  t | j|dE d H  d S Nr    )r   r   r   r   rV   r"   r"   r#   r       s   zExprBinOp.iterateNrw   r[   ry   rz   r{   r   r    r"   r"   r"   r#   r         
 r   c                   @  6   e Zd ZU dZded< 	 ded< 	 dddddZdS )
ExprBoolOpz!Boolean operations like `a or b`.r   r   Sequence[str | Expr]r   Tr   r   r   r   r   c                c  s&    t | jd| j d|dE d H  d S )Nr   r   )r-   r   r   rV   r"   r"   r#   r       s   $zExprBoolOp.iterateNrw   r   r"   r"   r"   r#   r         
 r   c                   @  sD   e Zd ZU dZded< 	 ded< 	 eddd	Zd
ddddZdS )ExprCallzCalls like `f()`.r6   functionr   	argumentsr   r   c                 C  rY   z1The canonical path of this subscript's left part.)r   ra   rR   r"   r"   r#   ra     r\   zExprCall.canonical_pathTr   r   r   r   c                c  s<    t | j|dE d H  dV  t| jd|dE d H  dV  d S )Nr   re   , rf   )r   r   r-   r   rV   r"   r"   r#   r      s
   
zExprCall.iterateNrv   rw   )r[   ry   rz   r{   r   r|   ra   r    r"   r"   r"   r#   r      s   
 r   c                   @  s@   e Zd ZU dZded< 	 ded< 	 ded< 	 dd	dddZdS )ExprComparezComparisons like `a > b`.r'   r   zSequence[str]	operatorsr   comparatorsTr   r   r   r   r   c                c  sD    t | j|dE d H  dV  tt| jg | jddd|dE d H  d S )Nr   r   )	fillvalue)r   r   r-   r   r   r   rV   r"   r"   r#   r       s   (zExprCompare.iterateNrw   r   r"   r"   r"   r#   r     r   r   c                   @  sN   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dZdS )ExprComprehensionz(Comprehensions like `a for b in c if d`.r'   targetiterabler   
conditionsFr   is_asyncTr   r   r   r   c                c  sl    | j rdV  dV  t| j|dE d H  dV  t| j|dE d H  | jr4dV  t| jd|dE d H  d S d S )Nzasync zfor r   z in  if )r   r   r   r   r   r-   rV   r"   r"   r#   r    4  s   zExprComprehension.iterateNrw   )r[   ry   rz   r{   r   r   r    r"   r"   r"   r#   r   '  s   
 r   c                   @  ,   e Zd ZU dZded< 	 dddd
dZdS )ExprConstantzConstants like `"a"` or `1`.r   r   Tr   r   r   r   r   c                c  s    | j V  d S rB   )r   rV   r"   r"   r#   r    L  s   zExprConstant.iterateNrw   r   r"   r"   r"   r#   r   E  
   
 r   c                   @  r   )ExprDictzDictionaries like `{"a": 0}`.zSequence[str | Expr | None]keysr   r   Tr   r   r   r   r   c                c  s:    dV  t dd t| j| jD d|dE d H  dV  d S )N{c                 s  s*    | ]\}}|d u rdn|d|fV  qd S )Nr   : r"   )r3   rE   r   r"   r"   r#   rO   ]  s   ( z#ExprDict.iterate.<locals>.<genexpr>r   r   })r-   zipr   r   rV   r"   r"   r#   r    Z  s   
zExprDict.iterateNrw   r   r"   r"   r"   r#   r   Q  r   r   c                   @  s@   e Zd ZU dZded< 	 ded< 	 ded< 	 dddddZdS )ExprDictCompz0Dict comprehensions like `{k: v for k, v in a}`.r'   rE   r   Sequence[Expr]
generatorsTr   r   r   r   r   c                c  sV    dV  t | j|dE d H  dV  t | j|dE d H  t| jd|dE d H  dV  d S )Nr   r   r   r   r   )r   rE   r   r-   r   rV   r"   r"   r#   r    p  s   
zExprDictComp.iterateNrw   r   r"   r"   r"   r#   r   e  r   r   c                   @  r   )ExprExtSlicez Extended slice like `a[x:y, z]`.r   dimsTr   r   r   r   r   c                c  r   )Nr   r   )r-   r   rV   r"   r"   r#   r      r   zExprExtSlice.iterateNrw   r   r"   r"   r"   r#   r   z  r   r   c                   @  r   )ExprFormattedz Formatted string like `{1 + 1}`.r'   r   Tr   r   r   r   r   c                c  s&    dV  t | j|dE d H  dV  d S )Nr   r   r   r   r   rV   r"   r"   r#   r      s   
zExprFormatted.iterateNrw   r   r"   r"   r"   r#   r     r   r   c                   @  r   )ExprGeneratorExpz5Generator expressions like `a for b in c for d in e`.r'   r   r   r   Tr   r   r   r   r   c                c  s6    t | j|dE d H  dV  t| jd|dE d H  d S r   r   r   r-   r   rV   r"   r"   r#   r      s   zExprGeneratorExp.iterateNrw   r   r"   r"   r"   r#   r     r   r   c                   @  s@   e Zd ZU dZded< 	 ded< 	 ded< 	 dddddZdS )	ExprIfExpz Conditions like `a if b else c`.r'   bodytestorelseTr   r   r   r   r   c                c  sN    t | j|dE d H  dV  t | j|dE d H  dV  t | j|dE d H  d S )Nr   r   z else )r   r   r   r   rV   r"   r"   r#   r      s   zExprIfExp.iterateNrw   r   r"   r"   r"   r#   r     r   r   c                   @  r   )ExprJoinedStrz!Joined strings like `f"a {b} c"`.r   r   Tr   r   r   r   r   c                c  (    dV  t | jd|dE d H  dV  d S )Nzf'rN   r   'r   rV   r"   r"   r#   r         
zExprJoinedStr.iterateNrw   r   r"   r"   r"   r#   r     r   r   c                      sZ   e Zd ZU dZded< 	 ded< 	 dZded< 	 ed fd
dZdddddZ  Z	S )ExprKeywordzKeyword arguments like `a=b`.r   r=   r'   r   NExpr | Noner   r   c                   s(   | j r| j j d| j dS tt| jS )zPath of the expressed keyword.re   rf   )r   ra   r=   superr   rR   rZ   r"   r#   ra     s   zExprKeyword.canonical_pathTr   r   r   r   c                c  s(    | j V  dV  t| j|dE d H  d S )N=r   )r=   r   r   rV   r"   r"   r#   r      s   zExprKeyword.iteraterv   rw   )
r[   ry   rz   r{   r   r   r|   ra   r    __classcell__r"   r"   r   r#   r     s   
 r   c                   @  r   )ExprVarPositionalz,Variadic positional parameters like `*args`.r6   r   Tr   r   r   r   r   c                c       dV  t | j|dE d H  d S )N*r   r   rV   r"   r"   r#   r         zExprVarPositional.iterateNrw   r   r"   r"   r"   r#   r     r   r   c                   @  r   )ExprVarKeywordz,Variadic keyword parameters like `**kwargs`.r6   r   Tr   r   r   r   r   c                c  r   )N**r   r   rV   r"   r"   r#   r      r   zExprVarKeyword.iterateNrw   r   r"   r"   r"   r#   r     r   r   c                   @  r   )
ExprLambdaz(Lambda expressions like `lambda a: a.b`.zSequence[ExprParameter]
parametersr'   r   Tr   r   r   r   r   c                c  s(   d}d}d}t | j}dV  |rdV  t| jdD ]j\}}|jtju r'd}n,|jtju r1dV  n"|jtju r;dV  n|jtju rF|sFd}n|jtj	u rS|sSd}dV  |jtjur`|r`d}d	V  |j
V  |jr}|jtjtjfvr}d
V  t|j|dE d H  ||k rdV  qdV  t| j|dE d H  d S )NFlambdar   rc   Tr   r   z*, z/, r   r   r   r   )lenr   	enumeratekindr   positional_onlyvar_positionalvar_keywordpositional_or_keywordkeyword_onlyr=   defaultr   r   )rS   r   pos_only	pos_or_kwkw_onlylengthindex	parameterr"   r"   r#   r      s@   
zExprLambda.iterateNrw   r   r"   r"   r"   r#   r   	  r   r   c                   @  r   )ExprListzLists like `[0, 1, 2]`.r   r$   Tr   r   r   r   r   c                c  r   )N[r   r   ]r-   r$   rV   r"   r"   r#   r    ;  r   zExprList.iterateNrw   r   r"   r"   r"   r#   r   4  r   r   c                   @  r   )ExprListCompz*List comprehensions like `[a for b in c]`.r'   r   r   r   Tr   r   r   r   r   c                c  B    dV  t | j|dE d H  dV  t| jd|dE d H  dV  d S )Nr   r   r   r   r   rV   r"   r"   r#   r    K     
zExprListComp.iterateNrw   r   r"   r"   r"   r#   r   B  r   r   Fc                   @  s   e Zd ZU dZded< 	 dZded< 	 d ddZddd!ddZed"ddZ	ed"ddZ
ed#ddZed$ddZed$ddZed$ddZdS )%r   zLThis class represents a Python object identified by a name in a given scope.r   r=   Nz&str | ExprName | Module | Class | Noner<   otherobjectr   r   c                 C  s   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)rS   r   r"   r"   r#   __eq__]  s   
zExprName.__eq__Tr   r   Iterator[ExprName]c                c  s    | V  d S rB   r"   rV   r"   r"   r#   r    c  s   
zExprName.iteratec                 C  s&   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.
        rb   )r   r<   r   r`   r=   rR   r"   r"   r#   r`   f  s   zExprName.pathc                 C  sx   | j du r| jS t| j tr| j j d| j S t| j tr'| j  d| j S z| j | jW S  ty;   | j Y S w )z2The canonical name (resolved one, not alias name).Nrb   )r<   r=   r   r   ra   r   resolver   rR   r"   r"   r#   ra   r  s   

zExprName.canonical_pathModule | Class | Nonec                 C  s:   z| j j| j | j W S  ty   | j j| j  Y S w )z(The resolved object this name refers to.)r<   modules_collectionr   r=   	ExceptionresolvedrR   r"   r"   r#   r     s
   zExprName.resolvedc                 C  s4   z| j j}W n
 ty   Y dS w tdd |D S )z3Whether this name resolves to an enumeration class.Fc                 s  s$    | ]}t |to|jd kV  qdS )z	enum.EnumN)r   r6   ra   )r3   baser"   r"   r#   rO     rP   z)ExprName.is_enum_class.<locals>.<genexpr>)r   basesr   any)rS   r   r"   r"   r#   is_enum_class  s   zExprName.is_enum_classc                 C  s    z| j jW S  ty   Y dS w )z6Whether this name resolves to an enumeration instance.F)r<   r   r   rR   r"   r"   r#   is_enum_instance  s
   
zExprName.is_enum_instancec                 C  s*   z
| j dko	| jjW S  ty   Y dS w )z3Whether this name resolves to an enumeration value.r   F)r=   r<   r   r   rR   r"   r"   r#   is_enum_value  s
   zExprName.is_enum_value)r   r   r   r   )r   r   r   r   rv   )r   r   rx   )r[   ry   rz   r{   r   r<   r   r    r|   r`   ra   r   r   r   r   r"   r"   r"   r#   r   T  s(   
 
r   c                   @  r   )ExprNamedExprz+Named/assignment expressions like `a := b`.r6   r   r'   r   Tr   r   r   r   r   c                c  s@    dV  t | j|dE d H  dV  t | j|dE d H  dV  d S )Nre   r   z := rf   )r   r   r   rV   r"   r"   r#   r      s   
zExprNamedExpr.iterateNrw   r   r"   r"   r"   r#   r     r   r   c                   @  sF   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
< dS )ExprParameterz4Parameters in function signatures like `a: int = 0`.r   r=   r   r   Nr   
annotationstr | Expr | Noner   )
r[   ry   rz   r{   r   r   r   r   r   r   r"   r"   r"   r#   r     s   
 r   c                   @  r   )ExprSetzSets like `{0, 1, 2}`.r   r$   Tr   r   r   r   r   c                c  r   )Nr   r   r   r   r   rV   r"   r"   r#   r      r   zExprSet.iterateNrw   r   r"   r"   r"   r#   r     r   r   c                   @  r   )ExprSetCompz)Set comprehensions like `{a for b in c}`.r'   r   r   r   Tr   r   r   r   r   c                c  r   )Nr   r   r   r   r   rV   r"   r"   r#   r      r   zExprSetComp.iterateNrw   r   r"   r"   r"   r#   r     r   r   c                   @  sL   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dZdS )	ExprSlicezSlices like `[a:b:c]`.Nr   rq   upperstepTr   r   r   r   r   c                c  sp    | j d urt| j |dE d H  dV  | jd ur"t| j|dE d H  | jd ur6dV  t| j|dE d H  d S d S )Nr   :)rq   r   r   r   rV   r"   r"   r#   r      s   


zExprSlice.iteraterw   )	r[   ry   rz   r{   rq   r   r   r   r    r"   r"   r"   r#   r     s   
 r   c                   @  sR   e Zd ZU dZded< 	 ded< 	 dddddZedddZedddZdS )rn   zSubscripts like `a[b]`.r'   r   r6   sliceTr   r   r   r   r   c                c  s:    t | j|dE d H  dV  t | j|dE d H  dV  d S )Nr   r   r   )r   r   r   rV   r"   r"   r#   r      s
   
zExprSubscript.iterater   c                 C     t | jtr	| jS | jjS )z'The path of this subscript's left part.)r   r   r   r`   rR   r"   r"   r#   r`        zExprSubscript.pathc                 C  r  r   )r   r   r   ra   rR   r"   r"   r#   ra     r  zExprSubscript.canonical_pathNrw   rv   )	r[   ry   rz   r{   r   r    r|   r`   ra   r"   r"   r"   r#   rn     s   
 rn   c                   @  s:   e Zd ZU dZded< 	 dZded< 	 dddddZdS )	ExprTuplezTuples like `(0, 1, 2)`.r   r$   Fr   implicitTr   r   r   r   c                c  sL    | j sdV  t| jd|dE d H  t| jdkrdV  | j s$dV  d S d S )Nre   r   r   rc   ,rf   )r  r-   r$   r   rV   r"   r"   r#   r    &  s   
zExprTuple.iterateNrw   )r[   ry   rz   r{   r   r  r    r"   r"   r"   r#   r    s   
 r  c                   @  r   )ExprUnaryOpzUnary operations like `-1`.r   r   r'   r   Tr   r   r   r   r   c                c  s"    | j V  t| j|dE d H  d S r(   )r   r   r   rV   r"   r"   r#   r    :  s   zExprUnaryOp.iterateNrw   r   r"   r"   r"   r#   r  1  r   r  c                   @  s0   e Zd ZU dZdZded< 	 dddddZdS )	ExprYieldz Yield statements like `yield a`.Nr   r   Tr   r   r   r   r   c                c  s4    dV  | j d urdV  t| j |dE d H  d S d S )Nyieldr   r   )r   r   rV   r"   r"   r#   r    G  s   
zExprYield.iteraterw   )r[   ry   rz   r{   r   r   r    r"   r"   r"   r#   r  @  s
   
 r  c                   @  r   )ExprYieldFromz%Yield statements like `yield from a`.r'   r   Tr   r   r   r   r   c                c  r   )Nzyield from r   r   rV   r"   r"   r#   r    V  r   zExprYieldFrom.iterateNrw   r   r"   r"   r"   r#   r	  O  r   r	  ~znot +-&|^/z//z<<@%r   r   z>>andorz==z!=<z<=>z>=iszis notinznot innodeast.Attributer<   Module | Classc                 K  s   t | j|fi |}t|tr|t| j |S t|tr(t|t| j|gS t|tr7t|t| jdgS t|t| jgS )Nr   )_buildr   r   r~   r   r   attrr   )r  r<   r/   r   r"   r"   r#   _build_attribute  s   


r  	ast.BinOpc                 K  s6   t t| j|fi |tt| j t| j|fi |S rB   )r   r  r   _binary_op_maptypeopr   r  r<   r/   r"   r"   r#   _build_binop  s
   r$  
ast.BoolOpc                   s&   t tt| j  fdd| jD S )Nc                      g | ]}t |fi  qS r"   r  r3   r   r/   r<   r"   r#   r5         z!_build_boolop.<locals>.<listcomp>)r   _bool_op_mapr!  r"  r   r#  r"   r)  r#   _build_boolop  s   r,  ast.Callc                   sT   t | jfi  fdd| jD } fdd| jD }t g ||S )Nc                   r&  r"   r'  )r3   argr)  r"   r#   r5     r*  z_build_call.<locals>.<listcomp>c                   s"   g | ]}t |fd  iqS r   r'  )r3   kwargr   r/   r<   r"   r#   r5        " )r  funcargskeywordsr   )r  r<   r/   positional_argskeyword_argsr"   r1  r#   _build_call  s   r8  ast.Comparec                   s:   t t| jfi  dd | jD  fdd| jD S )Nc                 S  s   g | ]}t t| qS r"   )_compare_op_mapr!  )r3   r"  r"   r"   r#   r5     s    z"_build_compare.<locals>.<listcomp>c                   r&  r"   r'  )r3   compr)  r"   r#   r5     r*  )r   r  r   opsr   r#  r"   r)  r#   _build_compare  s
   r=  ast.comprehensionc                   sH   t t| jfi  t| jfi   fdd| jD t| jdS )Nc                   r&  r"   r'  )r3   	conditionr)  r"   r#   r5     r*  z(_build_comprehension.<locals>.<listcomp>)r   )r   r  r   r)   ifsr   r   r#  r"   r)  r#   _build_comprehension  s   rA  )in_formatted_strin_joined_strparse_stringsliteral_stringsast.ConstantrB  rC  rD  rE  c                K  s   t | jtr9|r|s| jS |r9|s9zt| jddtjdd}W n ty.   td| j Y nw t	|j
|fi |S tddd it| jt| jS )	Nevalz<string-annotation>rc   )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                 S  s   dS )Nz...r"   )_r"   r"   r#   rD     s    z!_build_constant.<locals>.<lambda>)r   r   r   compileastPyCF_ONLY_ASTSyntaxErrorr   debugr  r   r!  getrepr)r  r<   rB  rC  rD  rE  r/   parsedr"   r"   r#   _build_constant  s(   

$rU  ast.Dictc                   s.   t  fdd| jD  fdd| jD S )Nc                   s*   g | ]}|d u r
d nt |fi  qS rB   r'  )r3   rE   r)  r"   r#   r5     s   * z_build_dict.<locals>.<listcomp>c                   r&  r"   r'  r(  r)  r"   r#   r5     r*  )r   r   r   r#  r"   r)  r#   _build_dict  s   rW  ast.DictCompc                   s>   t t| jfi  t| jfi   fdd| jD S )Nc                   r&  r"   r'  r3   genr)  r"   r#   r5     r*  z#_build_dictcomp.<locals>.<listcomp>)r   r  rE   r   r   r#  r"   r)  r#   _build_dictcomp  s
   r[  )rB  ast.FormattedValuec                K  s   t t| j|fddi|S )NrB  T)r   r  r   )r  r<   rB  r/   r"   r"   r#   _build_formatted  s   r]  ast.GeneratorExpc                   ,   t t| jfi   fdd| jD S )Nc                   r&  r"   r'  rY  r)  r"   r#   r5     r*  z'_build_generatorexp.<locals>.<listcomp>)r   r  eltr   r#  r"   r)  r#   _build_generatorexp  s   ra  	ast.IfExpc                 K  s<   t t| j|fi |t| j|fi |t| j|fi |S rB   )r   r  r   r   r   r#  r"   r"   r#   _build_ifexp  s
   rc  )rC  ast.JoinedStrc                     t  fdd| jD S )Nc                   s"   g | ]}t |fd di qS )rC  Tr'  r(  r)  r"   r#   r5     r2  z$_build_joinedstr.<locals>.<listcomp>)r   r   )r  r<   rC  r/   r"   r)  r#   _build_joinedstr  s   rf  ast.keywordr   r   c                 K  sB   | j d u rtt| j|fi |S t| j t| j|fi ||dS )Nr/  )r.  r   r  r   r   )r  r<   r   r/   r"   r"   r#   _build_keyword  s   
 rh  
ast.Lambdac                   s0   t  fddt| jD t| j fi |dS )Nc                   s<   g | ]\}}}}t ||d t|tr|nt| dddqS )NF)r<   rD  )r=   r   r   r   )r   r   r   safe_get_expression)r3   r=   rL  r   r   r;   r"   r#   r5     s    
	z!_build_lambda.<locals>.<listcomp>)r   r   )r   r
   r4  r  r   r#  r"   r;   r#   _build_lambda  s   
	rk  ast.Listc                   re  )Nc                   r&  r"   r'  r3   elr)  r"   r#   r5   )  r*  z_build_list.<locals>.<listcomp>)r   eltsr#  r"   r)  r#   _build_list(     rp  ast.ListCompc                   r_  )Nc                   r&  r"   r'  rY  r)  r"   r#   r5   -  r*  z#_build_listcomp.<locals>.<listcomp>)r   r  r`  r   r#  r"   r)  r#   _build_listcomp,     ,rs  ast.Namec                 K  s   t | j|S rB   )r   idr#  r"   r"   r#   _build_name0  s   rw  ast.NamedExprc                 K  s*   t t| j|fi |t| j|fi |S rB   )r   r  r   r   r#  r"   r"   r#   _build_named_expr4  s   *ry  ast.Setc                   re  )Nc                   r&  r"   r'  rm  r)  r"   r#   r5   9  r*  z_build_set.<locals>.<listcomp>)r   ro  r#  r"   r)  r#   
_build_set8  rq  r{  ast.SetCompc                   r_  )Nc                   r&  r"   r'  rY  r)  r"   r#   r5   =  r*  z"_build_setcomp.<locals>.<listcomp>)r   r  r`  r   r#  r"   r)  r#   _build_setcomp<  rt  r}  	ast.Slicec                 K  sh   t | jd u rd n	t| j|fi || jd u rd n	t| j|fi || jd u r)d S t| j|fi |S rB   )r   rq   r  r   r   r#  r"   r"   r#   _build_slice@  s     r  ast.Starredc                 K     t t| j|fi |S rB   )r   r  r   r#  r"   r"   r#   _build_starredH     r  rD  rE  in_subscriptast.Subscriptr  c                K  st   t | j|fi |}|r)t|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   ra   r   rn   )r  r<   rD  rE  r  r/   r   r   r"   r"   r#   _build_subscriptL  s    		
r  )r  	ast.Tuplec                  s   t  fdd| jD |dS )Nc                   r&  r"   r'  rm  r)  r"   r#   r5   p  r*  z _build_tuple.<locals>.<listcomp>)r  )r  ro  )r  r<   r  r/   r"   r)  r#   _build_tuplei  s   r  ast.UnaryOpc                 K  s$   t tt| j t| j|fi |S rB   )r  _unary_op_mapr!  r"  r  operandr#  r"   r"   r#   _build_unaryops  s   $r  	ast.Yieldc                 K  s(   t | jd u r	d S t| j|fi |S rB   )r  r   r  r#  r"   r"   r#   _build_yieldw  s   (r  ast.YieldFromc                 K  r  rB   )r	  r  r   r#  r"   r"   r#   _build_yield_from{  r  r  z1dict[type, Callable[[Any, Module | Class], Expr]]	_node_mapast.ASTc                 K  s   t t|  | |fi |S rB   )r  r!  r#  r"   r"   r#   r    rq  r  rD  ast.AST | Nonebool | Nonec                C  sL   | du rdS |du rz|j }W n ty   d}Y nw |j }t| ||dS )a  Build an expression from an AST.

    Parameters:
        node: The annotation node.
        parent: The parent used to resolve the name.
        parse_strings: Whether to try and parse strings as type annotations.

    Returns:
        A string or resovable name or expression.
    NFr  )module
ValueErrorimports_future_annotationsr  )r  r<   rD  r  r"   r"   r#   get_expression  s   
r  zD{path}:{lineno}: Failed to get expression from {node_class}: {error})rD  	log_level
msg_formatr  LogLevel | Noner  r   c                C  s   zt | ||dW S  tyX } zD|du rW Y d}~dS | jj}z|j}W n ty/   d}Y nw | j}|jj d| }	|j||||	d}
tt	|j
|
 W Y d}~dS d}~ww )a  Safely (no exception) build a resolvable annotation.

    Parameters:
        node: The annotation node.
        parent: The parent used to resolve the name.
        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.
    r  Nz<in-memory>r   )r`   lineno
node_classerror)r  r   rZ   r[   relative_filepathr  r  formatr>   r   r   )r  r<   rD  r  r  r  r  r`   r  	error_strmessager"   r"   r#   rj    s$   
rj  zG{path}:{lineno}: Failed to get %s expression from {node_class}: {error}r   )rD  r  z
base classr?  )r   r   r   r   r   r   )r$   r%   r&   r'   r   r   r   r   )r   r.   r/   r   r   r0   )r9   r6   r/   r   r   r:   r"   )r  r  r<   r  r/   r   r   r6   )r  r  r<   r  r/   r   r   r6   )r  r%  r<   r  r/   r   r   r6   )r  r-  r<   r  r/   r   r   r6   )r  r9  r<   r  r/   r   r   r6   )r  r>  r<   r  r/   r   r   r6   )r  rF  r<   r  rB  r   rC  r   rD  r   rE  r   r/   r   r   r'   )r  rV  r<   r  r/   r   r   r6   )r  rX  r<   r  r/   r   r   r6   )
r  r\  r<   r  rB  r   r/   r   r   r6   )r  r^  r<   r  r/   r   r   r6   )r  rb  r<   r  r/   r   r   r6   )
r  rd  r<   r  rC  r   r/   r   r   r6   rB   )
r  rg  r<   r  r   r   r/   r   r   r6   )r  ri  r<   r  r/   r   r   r6   )r  rl  r<   r  r/   r   r   r6   )r  rr  r<   r  r/   r   r   r6   )r  ru  r<   r  r/   r   r   r6   )r  rx  r<   r  r/   r   r   r6   )r  rz  r<   r  r/   r   r   r6   )r  r|  r<   r  r/   r   r   r6   )r  r~  r<   r  r/   r   r   r6   )r  r  r<   r  r/   r   r   r6   )r  r  r<   r  rD  r   rE  r   r  r   r/   r   r   r6   )
r  r  r<   r  r  r   r/   r   r   r6   )r  r  r<   r  r/   r   r   r6   )r  r  r<   r  r/   r   r   r6   )r  r  r<   r  r/   r   r   r6   )r  r  r<   r  r/   r   r   r6   )r  r  r<   r  rD  r  r   r   )r  r  r<   r  rD  r  r  r  r  r   r   r   )
__future__r   rN  sysdataclassesr   r   rH   	functoolsr   	itertoolsr   typingr   r   r	   _griffe.agents.nodes.parametersr
   _griffe.enumerationsr   r   _griffe.exceptionsr   _griffe.loggerr   collections.abcr   r   r   pathlibr   _griffe.modelsr   r   r   r-   r1   r7   rJ   r   version_infor6   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rn   r  r  r  r	  InvertNotUAddUSubr  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,  r8  r=  rA  rU  rW  r[  r]  ra  rc  rf  rh  rk  rp  rs  rw  ry  r{  r}  r  r  r  r  r  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  r  rj  _msg_formatget_annotationsafe_get_annotationget_base_classsafe_get_base_classget_conditionsafe_get_conditionr"   r"   r"   r#   <module>   s  
^+(*Q'

!
	
  &