o
    h                      @  s  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 d2ddZd3ddZd4ddZd5ddZ ed6d d!Z!d7d#d$Z"d8d&d'Z#d8d(d)Z$d9d.d/Z%G d0d1 d1eZ&dS ):    )annotationsN)suppress)cache)Anycast)ParameterKind)ExprExprAttributeExprCallExprDict)	Extension)logger)	AttributeClass	DecoratorFunctionModule	Parameter
Parameters
decoratorslist[Decorator]returnExpr | Nonec                 C  s0   | D ]}t |jtr|jjdkr|j  S qd S )Nzdataclasses.dataclass)
isinstancevaluer   canonical_path)r   	decorator r   h/var/www/html/openai_agents/venv/lib/python3.10/site-packages/griffe/_internal/extensions/dataclasses.py_dataclass_decorator   s
   
r   exprr   dict[str, str | Expr]c                 C  s   i }t | trG| jD ]:}z|j||j< W q
 tyD   tt | jj	j
}||jj }|t|j W d    n1 s=w   Y  Y q
w |S t | tr[|dd t| j| jD  |S )Nc                 S  s    i | ]\}}t t||qS r   )astliteral_evalstr).0keyr   r   r   r   
<dictcomp>-   s     z_expr_args.<locals>.<dictcomp>)r   r
   	argumentsr   nameAttributeErrorr   	Exceptionfunctionparentmodules_collectionr   update
_expr_argsr   zipkeysvalues)r    argsargument
collectionvarr   r   r   r0       s"   




r0   dict[str, Any]c                 C  s"   t |  }rt|trt|S i S )N)r   r   r
   r0   )r   r    r   r   r   _dataclass_arguments1   s   r9   	attributer   c                 C  s<   | j r| j }t|tr|j}t|tr|jdkrt|S i S )Nzdataclasses.field)r   r   r	   lastr
   r   r0   )r:   r   r   r   r   _field_arguments7   s   
r<   class_r   list[Parameter]c              
   C  s   t | j}|ddkrg S |ddk}g }| j D ]q}|jrtd|}|jd u r,qd|jv s;d|jv r<d|jvr<qt	|jt
rK|jjd	krKd
}qt|}|ddkrWq|s`|ddkrctjntj}d|v rst|d g d}n|d|rzd n|j}|t|j|j|||jd q|S )NinitFalsekw_onlyTruer   propertyzclass-attributezinstance-attributezdataclasses.KW_ONLYTdefault_factory)r,   r(   default)
annotationkindrE   	docstring)r9   r   getmembersr3   is_attributer   rF   labelsr   r   r   r<   r   keyword_onlypositional_or_keywordr
   r   appendr   r)   rH   )r=   dec_argsrA   
parametersmember
field_argsrG   rE   r   r   r   _dataclass_parametersA   sN   




rT   rQ   c                 C  sn   dd | D }g }g }g }|  D ]}|jtju r|| q|jtju r+|| q|| q|| | S )Nc                 S  s   i | ]}|j |qS r   )r)   )r%   paramr   r   r   r'      s    z'_reorder_parameters.<locals>.<dictcomp>)r3   rG   r   positional_onlyrO   rM   )rQ   params_dictpos_onlypos_kwrA   rU   r   r   r   _reorder_parameters   s   rZ   Nonec                 C  s   g }z|   }W n ty   d}Y nw t|D ]}t|jr,|t| | jd qt| js4d S t	
d| j |t|  tddd| ttdd tjd dgt|R  dd	}| d| d S )
Nr   	dataclasszHandling dataclass: %s__init__r   self)r)   rF   rG   rE   r[   )lineno	endlinenor-   rQ   returns)mro
ValueErrorreversedr   r   extendrT   rL   addr   debugpathr   r   r   r   rN   rZ   
set_member)r=   rQ   rb   r-   r?   r   r   r   _set_dataclass_init   s8   

rj   c                 C  sF   dd | j  D }|D ]}t|jtr |jjdkr | |j qd S )Nc                 S  s   g | ]	}t |tr|qS r   )r   r   )r%   rR   r   r   r   
<listcomp>   s    z5_del_members_annotated_as_initvar.<locals>.<listcomp>zdataclasses.InitVar)rJ   r3   r   rF   r   r   
del_memberr)   )r=   
attributesr:   r   r   r   !_del_members_annotated_as_initvar   s   rn   mod_clsModule | Class	processedset[str]c                 C  s   | j |v rd S || j  t| tr4d| jvrt|  t|  | j D ]}|js1|j	r1t
|| q$d S t| trO| j D ]}|jsN|jsI|j	rNt
|| q>d S d S )Nr]   )r   rf   r   r   rJ   rj   rn   r3   is_aliasis_class_apply_recursivelyr   	is_module)ro   rq   rR   r   r   r   ru      s&   





ru   c                   @  s   e Zd ZdZddd	Zd
S )DataclassesExtensionzBuilt-in extension adding support for dataclasses.

    This extension creates `__init__` methods of dataclasses
    if they don't already exist.
    pkgr   kwargsr   r   r[   c                K  s   t |t  dS )z\Hook for loaded packages.

        Parameters:
            pkg: The loaded package.
        N)ru   set)r^   rx   ry   r   r   r   
on_package   s   zDataclassesExtension.on_packageN)rx   r   ry   r   r   r[   )__name__
__module____qualname____doc__r{   r   r   r   r   rw      s    rw   )r   r   r   r   )r    r   r   r!   )r   r   r   r8   )r:   r   r   r8   )r=   r   r   r>   )rQ   r>   r   r>   )r=   r   r   r[   )ro   rp   rq   rr   r   r[   )'
__future__r   r"   
contextlibr   	functoolsr   typingr   r   griffe._internal.enumerationsr   griffe._internal.expressionsr   r	   r
   r    griffe._internal.extensions.baser   griffe._internal.loggerr   griffe._internal.modelsr   r   r   r   r   r   r   r   r0   r9   r<   rT   rZ   rj   rn   ru   rw   r   r   r   r   <module>   s*   $





I

&
