
    g                        d dl mZ d dlZd dlmZ d dlmZ d dlmZm	Z	 d dl
mZ d dlmZmZmZmZ d dlmZ d d	lmZ d d
lmZmZmZmZmZmZmZ ddZddZddZddZ edd       Z!ddZ"ddZ#ddZ$ddZ% G d de      Z&y)    )annotationsN)suppress)cache)Anycast)ParameterKind)ExprExprAttributeExprCallExprDict)	Extension)logger)	AttributeClass	DecoratorFunctionModule	Parameter
Parametersc                    | D ]D  }t        |j                  t              s|j                  j                  dk(  s8|j                  c S  y )Nzdataclasses.dataclass)
isinstancevaluer	   canonical_path)
decorators	decorators     S/var/www/openai/venv/lib/python3.12/site-packages/_griffe/extensions/dataclasses.py_dataclass_decoratorr      s;    	ioot,1O1OSj1j??"       c                   i }t        | t              r-| j                  D ]  }	 |j                  ||j                  <    |S t        | t              r_|j                  t        | j                   | j"                        D ci c]$  \  }}t%        j&                  t)        |            |& c}}       |S # t
        $ r t        t              5  | j                  j                  j                  }||j                  j                     }|j                  t        |j                               d d d        n# 1 sw Y   nxY wY  w xY wc c}}w N)r   r   	argumentsr   nameAttributeErrorr   	Exceptionfunctionparentmodules_collectionr   update
_expr_argsr   zipkeysvaluesastliteral_evalstr)exprargsargument
collectionvarkeyr   s          r   r)   r)       s    D$!H7&.nnX]]# ' K 
D(	#TYYX\XcXcIdeId:3S%%c#h/6IdefK " 7i(!%!5!5!H!HJ$X^^%B%BCCKK
399 56 )((7 fs0   B1>)E
1E 	AD0'	E 0D95E ?E c                V    t        |       x}rt        |t              rt        |      S i S r    )r   r   r   r)   )r   r0   s     r   _dataclass_argumentsr7   1   s+    $Z000jx6P$Ir   c                    | j                   rR| j                   }t        |t              r|j                  }t        |t              r|j
                  dk(  rt        |      S i S )Nzdataclasses.field)r   r   r
   lastr   r   r)   )	attributer   s     r   _field_argumentsr;   7   sM    e]+JJEeX&5+?+?CV+Ve$$Ir   c           
     p   t        | j                        }|j                  d      dk(  rg S |j                  d      dk(  }g }| j                  j	                         D ]V  }|j
                  st        t        |      }|j                  .d|j                  v sd|j                  v rd|j                  vrYt        |j                  t              r|j                  j                  dk(  rd	}t        |      }|j                  d      dk(  r|s|j                  d      dk(  rt        j                  nt        j                   }d
|v rt#        |d
   g       }n |j                  d|rd n|j$                        }|j'                  t)        |j*                  |j                  |||j,                               Y |S )NinitFalsekw_onlyTruepropertyzclass-attributezinstance-attributezdataclasses.KW_ONLYTdefault_factory)r%   r!   default)
annotationkindrC   	docstring)r7   r   getmembersr,   is_attributer   r   rD   labelsr   r	   r   r;   r   keyword_onlypositional_or_keywordr   r   appendr   r"   rF   )class_dec_argsr?   
parametersmember
field_argsrE   rC   s           r   _dataclass_parametersrS   A   s    $F$5$56H ||Fw&	 ll9%/G J..''))V,F   ( V]]* "V]]27KSYS`S`7` &++T2v7H7H7W7W[p7p *&1J ~~f%0
 jnnY76A **"88  !J."J7H,IUWX$..JDFLLY KK%00#$.._ *r r   c                `   | D ci c]  }|j                   | }}g }g }g }|j                         D ]o  }|j                  t        j                  u r|j                  |       1|j                  t        j                  u r|j                  |       _|j                  |       q ||z   |z   S c c}w r    )r"   r,   rE   r   positional_onlyrM   rK   )rP   paramparams_dictpos_onlypos_kwr?   s         r   _reorder_parametersrZ      s    2<=*5::u$*K= HFG##%::666OOE"ZZ=555NN5!MM%  & fw&& >s   B+c                F   g }	 | j                         }t        |      D ]M  }t        |j                        s|j                  t        |             | j                  j                  d       O t        | j                        sy t        j                  d| j                         |j                  t        |              t        ddd| t        t        dd t        j                   d       gt#        |       d	      }| j%                  d|       y # t        $ r d}Y w xY w)
N 	dataclasszHandling dataclass: %s__init__r   self)r"   rD   rE   rC   None)lineno	endlinenor&   rP   returns)mro
ValueErrorreversedr   r   extendrS   rJ   addr   debugpathr   r   r   r   rL   rZ   
set_member)rN   rP   rd   r&   r=   s        r   _set_dataclass_initrl      s   Jjjl 3- 1 123F;< MMk*     1 12
LL)6;;7 +F34 6d9\9\fjk
 ,
 
D j$'=  s   D D D c                ,   | j                   j                         D cg c]  }t        |t              s| }}|D ]R  }t        |j                  t
              s|j                  j                  dk(  s8| j                  |j                         T y c c}w )Nzdataclasses.InitVar)	rH   r,   r   r   rD   r	   r   
del_memberr"   )rN   rQ   
attributesr:   s       r   !_del_members_annotated_as_initvarrp      su    '-~~'<'<'>`'>V*VU^B_&'>J`	i**D1i6J6J6Y6Y]r6rinn-   as
   BBc                   | j                   |v ry |j                  | j                          t        | t              rjd| j                  vrt        |        t        |        | j                  j                         D ](  }|j                  r|j                  st        ||       * y t        | t              rR| j                  j                         D ]4  }|j                  r|j                  s|j                  s)t        ||       6 y y )Nr^   )r   rh   r   r   rH   rl   rp   r,   is_aliasis_class_apply_recursivelyr   	is_module)mod_cls	processedrQ   s      r   rt   rt      s    *MM'(()'5!W__,(-g6oo,,.F??v"695 / 
GV	$oo,,.F??(8(8FOO"695 / 
%r   c                      e Zd ZdZddZy)DataclassesExtensionzBuilt-in extension adding support for dataclasses.

    This extension creates `__init__` methods of dataclasses
    if they don't already exist.
    c               ,    t        |t                      y)z\Hook for loaded packages.

        Parameters:
            pkg: The loaded package.
        N)rt   set)r_   pkgkwargss      r   on_package_loadedz&DataclassesExtension.on_package_loaded   s     	3&r   N)r|   r   r}   r   returnr`   )__name__
__module____qualname____doc__r~   r\   r   r   ry   ry      s    'r   ry   )r   list[Decorator]r   zExpr | None)r0   r	   r   zdict[str, str | Expr])r   r   r   dict[str, Any])r:   r   r   r   )rN   r   r   list[Parameter])rP   r   r   r   )rN   r   r   r`   )rv   zModule | Classrw   zset[str]r   r`   )'
__future__r   r-   
contextlibr   	functoolsr   typingr   r   _griffe.enumerationsr   _griffe.expressionsr	   r
   r   r   _griffe.extensions.baser   _griffe.loggerr   _griffe.modelsr   r   r   r   r   r   r   r   r)   r7   r;   rS   rZ   rl   rp   rt   ry   r\   r   r   <module>r      s    # 
    .  . ! _ _ _" F FR'$#(L.6"'9 'r   