o
    hE                  	   @  sH  d dl mZ d dlmZ d dlmZmZ d dlmZm	Z	m
Z
mZ d dlmZ d dlmZmZmZmZmZmZmZmZmZmZ d dlmZmZ erTd dlmZ d d	lmZ e d
Z!e dZ"e dZ#e dZ$e dZ%e dZ&e dZ'eddG dd dZ(eG dd dZ)eG dd dZ*G dd deddZ+ddddUd'd(Z,ddddVd,d-Z-dWd1d2Z.dd3dXd6d7Z/dd3dYd8d9Z0dd3dYd:d;Z1dd3dYd<d=Z2dd3dYd>d?Z3ddd@dZdBdCZ4dd3dYdDdEZ5d[dFdGZ6dd3d\dHdIZ7d]dMdNZ8d^dPdQZ9d_dRdSZ:e(e"e0e(e!e-e(e$e2e(e#e1e(e'e3e(e%e4e(e&e5gZ;dTS )`    )annotations)suppress)	dataclassfield)TYPE_CHECKINGAnyCallable	TypedDict)warn)
DocstringAttributeDocstringParameterDocstringRaiseDocstringReturnDocstringSectionDocstringSectionAttributesDocstringSectionParametersDocstringSectionRaisesDocstringSectionReturnsDocstringSectionText)docstring_warningparse_docstring_annotation)Expr)	Docstring)param	parameterargargumentkeykeyword)type)varivarcvar)vartype)returnsreturn)rtype)raisesraiseexcept	exceptionT)frozenc                   @  s,   e Zd ZU dZded< ded< dd
dZdS )
_FieldTypez)Maps directive names to parser functions.zfrozenset[str]namesz.Callable[[Docstring, int, _ParsedValues], int]readerlinestrr%   boolc                   s   t  fdd| jD S )zCheck if a line matches the field type.

        Parameters:
            line: Line to check against

        Returns:
            True if the line matches the field type, False otherwise.
        c                 3  s     | ]}  d | V  qdS ):N)
startswith).0namer/    c/var/www/html/openai_agents/venv/lib/python3.10/site-packages/griffe/_internal/docstrings/sphinx.py	<genexpr>;   s    z%_FieldType.matches.<locals>.<genexpr>)anyr-   )selfr/   r7   r6   r8   matches2   s   	z_FieldType.matchesN)r/   r0   r%   r1   )__name__
__module____qualname____doc____annotations__r<   r7   r7   r7   r8   r,   +   s
   
 r,   c                   @  s>   e Zd ZU dZded< ded< ded< ded< d	Zd
ed< dS )_ParsedDirectivez<Directive information that has been parsed from a docstring.r0   r/   int
next_index	list[str]directive_partsvalueFr1   invalidN)r=   r>   r?   r@   rA   rH   r7   r7   r7   r8   rB   >   s   
 rB   c                   @  s   e Zd ZU dZeedZded< eedZ	ded< eedZ
ded< eedZd	ed
< eedZded< eedZded< dZded< dZded< dS )_ParsedValuesz@Values parsed from the docstring to be used to produce sections.)default_factoryrE   descriptionzdict[str, DocstringParameter]
parameterszdict[str, str | Expr]param_typeszdict[str, DocstringAttribute]
attributeszdict[str, str]attribute_typeszlist[DocstringRaise]
exceptionsNzDocstringReturn | Nonereturn_value
str | Nonereturn_type)r=   r>   r?   r@   r   listrK   rA   dictrL   rM   rN   rO   rP   rQ   rS   r7   r7   r7   r8   rI   I   s   
 rI   c                   @  s$   e Zd ZU dZded< 	 ded< dS )SphinxOptionsz,Options for parsing Sphinx-style docstrings.r1   warn_unknown_paramswarningsN)r=   r>   r?   r@   rA   r7   r7   r7   r8   rV   W   s   
 rV   F)totalrW   rX   	docstringr   rW   r1   rX   optionsr   r%   list[DocstringSection]c          	      K  s   t  }|rtdtdd ||d}| j}d}|t|k rG|| }tD ]}||r6|j| ||fi |} nq"|j	| |d7 }|t|k st
|S )ap  Parse a Sphinx-style docstring.

    Parameters:
        docstring: The docstring to parse.
        warn_unknown_params: Warn about documented parameters not appearing in the signature.
        warnings: Whether to log warnings at all.
        **options: Swallowing keyword arguments for backward-compatibility.

    Returns:
        A list of docstring sections.
    zDPassing additional options is deprecated, these options are ignored.   )
stacklevelrZ   r      )rI   r
   DeprecationWarninglineslen_field_typesr<   r.   rK   append_parsed_values_to_sections)	r[   rW   rX   r\   parsed_valuesrb   curr_line_indexr/   
field_typer7   r7   r8   parse_sphinx`   s&   
rj   offsetrC   rg   c                K  s  t | ||d}|jr|jS d }t|jdkr|jd }n?t|jdkr1t|jd | }|jd }n*t|jdkrK|jd }|rJt| dd|j d n|rXt| dd|j d |jS ||jv ro|rlt| dd	| d |jS |r|rt	t
7 | jj}	||	vrd
| d}
d| d| fD ]}||	v r|
d| d7 }
 nqt| d|
 W d    n1 sw   Y  t| ||||d}t| |}t|||j|d|j|< |jS )NrX   r^   r`      r   &Failed to parse field directive from ''zDuplicate parameter entry for 'zParameter 'z+' does not appear in the function signature*z**z. Did you mean 'z'?)r5   
annotationrK   rG   )_parse_directiverH   rD   rc   rF   r   r   r/   rL   r   AttributeErrorparent_determine_param_annotation_determine_param_defaultr   rG   )r[   rk   rg   rW   rX   r\   parsed_directivedirective_typer5   paramsmessagestarred_namerr   defaultr7   r7   r8   _read_parameter   s\   	




r~   r5   r0   rR   c              	   C  s.   z
| j j|  jW S  ttfy   Y d S w )N)ru   rL   lstripr}   rt   KeyError)r[   r5   r7   r7   r8   rw      s
   rw   rl   ry   str | Expr | Nonec             	   C  s   d }|j |}|d ur|}|d ur|}|r(|d ur(|d ur(t| dd| d |d u rTz| jj|  j}W |S  ttfyS   |rPt| dd| d Y |S Y |S w |S )Nr   %Duplicate parameter information for 'rp   zNo matching parameter for ')	rM   getr   ru   rL   r   rr   rt   r   )r[   r5   ry   rg   rX   rr   parsed_param_typer7   r7   r8   rv      s(   rv   c          
      K  s   t | ||d}|jr|jS t|j }t|| }t|jdkr&|jd }n|r3t	| dd|j
 d |jS ||j|< |j|}	|	d urZ|	jd u rP||	_|jS t	| dd| d |jS )Nrl   r^   r`   r   z#Failed to get parameter name from 'rp   r   )rs   rH   rD   _consolidate_descriptive_typerG   stripr   rc   rF   r   r/   rM   rL   r   rr   )
r[   rk   rg   rX   r\   rx   param_type_str
param_type
param_namer   r7   r7   r8   _read_parameter_type   s$   


r   c          	      K  s   t | ||d}|jr|jS t|jdkr|jd }n|r't| dd|j d |jS d }|j|}|d ur9|}nt	t
tt | j| j}W d    n1 sPw   Y  ||jv ri|rft| dd| d |jS t|||jd|j|< |jS )	Nrl   r^   r`   r   ro   rp   zDuplicate attribute entry for 'r5   rr   rK   )rs   rH   rD   rc   rF   r   r/   rO   r   r   rt   r   	TypeErrorru   rr   rN   r   rG   )	r[   rk   rg   rX   r\   rx   r5   rr   parsed_attribute_typer7   r7   r8   _read_attribute  s2   
r   c          	      K  s   t | ||d}|jr|jS t|j }t|jdkr!|jd }n|r.t| dd|j	 d |jS ||j
|< |j|}|d urW|jd u rK||_|jS |rWt| dd| d |jS )Nrl   r^   r`   r   z#Failed to get attribute name from 'rp   z%Duplicate attribute information for ')rs   rH   rD   r   rG   r   rc   rF   r   r/   rO   rN   r   rr   )	r[   rk   rg   rX   r\   rx   attribute_typeattribute_name	attributer7   r7   r8   _read_attribute_typeG  s$   

r   c                K  sn   t | ||d}|jr|jS t|jdkr'|jd }|jt||jd |jS |r4t	| dd|j
 d |jS )Nrl   r^   r`   )rr   rK   r   z*Failed to parse exception directive from 'rp   )rs   rH   rD   rc   rF   rP   re   r   rG   r   r/   )r[   rk   rg   rX   r\   rx   ex_typer7   r7   r8   _read_exceptione  s   
r   )warn_missing_typesrX   r   c             	   K  s   t | ||d}|jr|jS |jd ur|j}n!z| jj}W n ty6   |r2|r2t| dd|j d d }Y nw t	d||j
d|_|jS )Nrl   r   z!No return type or annotation at 'rp    r   )rs   rH   rD   rS   ru   rr   rt   r   r/   r   rG   rQ   )r[   rk   rg   r   rX   r\   rx   rr   r7   r7   r8   _read_returnz  s   	
r   c                K  sH   t | ||d}|jr|jS t|j }||_|j}|d ur!||_|jS )Nrl   )	rs   rH   rD   r   rG   r   rS   rQ   rr   )r[   rk   rg   rX   r\   rx   rS   rQ   r7   r7   r8   _read_return_type  s   r   c                 C  s   d t| j}t|g}| jrt| j }|t| | j	r/t| j	 }|t
| | jd ur=|t| jg | jrH|t| j |S )N
)join_strip_blank_linesrK   r   rL   rT   valuesre   r   rN   r   rQ   r   rP   r   )rg   textresultparam_valuesattribute_valuesr7   r7   r8   rf     s   

rf   c             
   C  s   t | j|\}}z|dd\}}}W n ty1   |r&t| dd| d t||g ddd Y S w | }t|||d	|S )
Nr2   r^   r   z-Failed to get ':directive: value' pair from 'rp   r   T)rH    )_consolidate_continuation_linesrb   split
ValueErrorr   rB   r   )r[   rk   rX   r/   rD   _	directiverG   r7   r7   r8   rs     s   rs   rb   rE   tuple[str, int]c                 C  s   |}| |   g}|d7 }|t| k r4| | ds4|| |    |d7 }|t| k r4| | drd|d|d fS )Nr`   r2   r   r   )r   rc   r3   re   r   rstrip)rb   rk   rh   blockr7   r7   r8   r     s   r   descriptive_typec                 C  s   |  ddS )Nz or z | )replace)r   r7   r7   r8   r     s   r   c                 C  sX   | s| S d}d}d}t | D ]\}}|r| r|s|d7 }qd}|}q| ||d  S )NFr   r`   T)	enumerateisspace)rb   content_foundinitial_contentfinal_contentindexr/   r7   r7   r8   r     s   r   N)
r[   r   rW   r1   rX   r1   r\   r   r%   r]   )r[   r   rk   rC   rg   rI   rW   r1   rX   r1   r\   r   r%   rC   )r[   r   r5   r0   r%   rR   )r[   r   r5   r0   ry   r   rg   rI   rX   r1   r%   r   )r[   r   rk   rC   rg   rI   rX   r1   r\   r   r%   rC   )r[   r   rk   rC   rg   rI   r   r1   rX   r1   r\   r   r%   rC   )rg   rI   r%   r]   )r[   r   rk   rC   rX   r1   r%   rB   )rb   rE   rk   rC   r%   r   )r   r0   r%   r0   )rb   rE   r%   rE   )<
__future__r   
contextlibr   dataclassesr   r   typingr   r   r   r	   rX   r
   "griffe._internal.docstrings.modelsr   r   r   r   r   r   r   r   r   r   !griffe._internal.docstrings.utilsr   r   griffe._internal.expressionsr   griffe._internal.modelsr   	frozenset_PARAM_NAMES_PARAM_TYPE_NAMES_ATTRIBUTE_NAMES_ATTRIBUTE_TYPE_NAMES_RETURN_NAMES_RETURN_TYPE_NAMES_EXCEPTION_NAMESr,   rB   rI   rV   rj   r~   rw   rv   r   r   r   r   r   r   rf   rs   r   r   r   rd   r7   r7   r7   r8   <module>   sv   0
5
?($4#'



