o
    w!g<                  	   @  s  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
 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 erJd 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&dddKd!d"Z'dddLd&d'Z(dMd+d,Z)dNd.d/Z*dOd0d1Z+dOd2d3Z,dOd4d5Z-dOd6d7Z.dOd8d9Z/dOd:d;Z0dPd<d=Z1dQd>d?Z2dRdCdDZ3dSdFdGZ4dTdHdIZ5e$ee+e$ee(e$e e-e$ee,e$e#e.e$e!e/e$e"e0gZ6dJS )U    )annotations)suppress)	dataclassfield)TYPE_CHECKINGAnyCallable)
DocstringAttributeDocstringParameterDocstringRaiseDocstringReturnDocstringSectionDocstringSectionAttributesDocstringSectionParametersDocstringSectionRaisesDocstringSectionReturnsDocstringSectionText)docstring_warning)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,    [/mnt/skqttb/ctump_chatbot/chatbot/lib/python3.10/site-packages/_griffe/docstrings/sphinx.py	<genexpr>:   s    z%_FieldType.matches.<locals>.<genexpr>)anyr*   )selfr,   r4   r3   r5   matches1   s   	z_FieldType.matchesN)r,   r-   r"   r.   )__name__
__module____qualname____doc____annotations__r9   r4   r4   r4   r5   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.r-   r,   int
next_index	list[str]directive_partsvalueFr.   invalidN)r:   r;   r<   r=   r>   rE   r4   r4   r4   r5   r?   =   s   
 r?   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_factoryrB   descriptionzdict[str, DocstringParameter]
parameterszdict[str, str]param_typeszdict[str, DocstringAttribute]
attributesattribute_typeszlist[DocstringRaise]
exceptionsNzDocstringReturn | Nonereturn_value
str | Nonereturn_type)r:   r;   r<   r=   r   listrH   r>   dictrI   rJ   rK   rL   rM   rN   rP   r4   r4   r4   r5   rF   H   s   
 rF   )warn_unknown_params	docstringr   rS   r.   optionsr   r"   list[DocstringSection]c                K  s   t  }d|i|}| j}d}|t|k r?|| }tD ]}||r.|j| ||fi |} nq|j| |d7 }|t|k st|S )a!  Parse a Sphinx-style docstring.

    Parameters:
        docstring: The docstring to parse.
        warn_unknown_params: Warn about documented parameters not appearing in the signature.
        **options: Additional parsing options.

    Returns:
        A list of docstring sections.
    rS   r      )	rF   lineslen_field_typesr9   r+   rH   append_parsed_values_to_sections)rT   rS   rU   parsed_valuesrX   curr_line_indexr,   
field_typer4   r4   r5   parse_sphinxV   s$   
r`   offsetr@   r]   c                K  sX  t | |}|jr|jS d }t|jdkr|jd }n t|jdkr,|jd }|jd }nt| dd|j d |jS ||jv rLt| dd| d |jS |rtt	7 | j
j}||vrd| d	}	d
| d| fD ]}
|
|v r{|	d|
 d7 }	 nqkt| d|	 W d    n1 sw   Y  t| |||}t| |}t|||j|d|j|< |jS )N   rW      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'?)r2   
annotationrH   rD   )_parse_directiverE   rA   rY   rC   r   r,   rI   r   AttributeErrorparent_determine_param_annotation_determine_param_defaultr
   rD   )rT   ra   r]   rS   rU   parsed_directivedirective_typer2   paramsmessagestarred_namerg   defaultr4   r4   r5   _read_parameterz   sH   





rs   r2   r-   rO   c              	   C  s.   z
| j j|  jW S  ttfy   Y d S w N)rj   rI   lstriprr   ri   KeyError)rT   r2   r4   r4   r5   rl      s
   rl   rn   c              	   C  s   d }|j |}|d ur|}|d ur|}|d ur&|d ur&t| dd| d |d u rMz| jj|  j}W |S  ttfyL   t| dd| d Y |S w |S )Nr   %Duplicate parameter information for 're   zNo matching parameter for ')	rJ   getr   rj   rI   ru   rg   ri   rv   )rT   r2   rn   r]   rg   parsed_param_typer4   r4   r5   rk      s"   rk   c                 K     t | |}|jr|jS t|j }t|jdkr|jd }nt| dd|j	 d |jS ||j
|< |j|}|d urQ|jd u rG||_|jS t| dd| d |jS )Nrb   rW   r   z#Failed to get parameter name from 're   rw   )rh   rE   rA   _consolidate_descriptive_typerD   striprY   rC   r   r,   rJ   rI   rx   rg   )rT   ra   r]   rU   rm   
param_type
param_namer   r4   r4   r5   _read_parameter_type       


r   c                 K  s   t | |}|jr|jS t|jdkr|jd }nt| dd|j d |jS d }|j|}|d ur5|}nt	t
tt | j| j}W d    n1 sLw   Y  ||jv rct| dd| d |jS t|||jd|j|< |jS )Nrb   rW   r   rd   re   zDuplicate attribute entry for 'r2   rg   rH   )rh   rE   rA   rY   rC   r   r,   rL   rx   r   ri   rv   	TypeErrorrj   rg   rK   r	   rD   )rT   ra   r]   rU   rm   r2   rg   parsed_attribute_typer4   r4   r5   _read_attribute   s.   

r   c                 K  rz   )Nrb   rW   r   z#Failed to get attribute name from 're   z%Duplicate attribute information for ')rh   rE   rA   r{   rD   r|   rY   rC   r   r,   rL   rK   rx   rg   )rT   ra   r]   rU   rm   attribute_typeattribute_name	attributer4   r4   r5   _read_attribute_type  r   r   c                 K  sf   t | |}|jr|jS t|jdkr%|jd }|jt||jd |jS t	| dd|j
 d |jS )Nrb   rW   )rg   rH   r   z*Failed to parse exception directive from 're   )rh   rE   rA   rY   rC   rM   r[   r   rD   r   r,   )rT   ra   r]   rU   rm   ex_typer4   r4   r5   _read_exception5  s   

r   c              	   K  sz   t | |}|jr|jS |jd ur|j}nz| jj}W n ty0   t| dd|j d d }Y nw t	d||j
d|_|jS )Nr   z!No return type or annotation at 're    r   )rh   rE   rA   rP   rj   rg   ri   r   r,   r   rD   rN   )rT   ra   r]   rU   rm   rg   r4   r4   r5   _read_returnH  s   

r   c                 K  sD   t | |}|jr|jS t|j }||_|j}|d ur||_|jS rt   )	rh   rE   rA   r{   rD   r|   rP   rN   rg   )rT   ra   r]   rU   rm   rP   rN   r4   r4   r5   _read_return_typea  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_linesrH   r   rI   rQ   valuesr[   r   rK   r   rN   r   rM   r   )r]   textresultparam_valuesattribute_valuesr4   r4   r5   r\   t  s   

r\   c              
   C  s|   t | j|\}}z|dd\}}}W n ty/   t| dd| d t||g ddd Y S w | }t|||d	|S )
Nr/   rb   r   z-Failed to get ':directive: value' pair from 're   r   T)rE    )_consolidate_continuation_linesrX   split
ValueErrorr   r?   r|   )rT   ra   r,   rA   _	directiverD   r4   r4   r5   rh     s   rh   rX   rB   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 )NrW   r/   r   r   )ru   rY   r0   r[   r   rstrip)rX   ra   r^   blockr4   r4   r5   r     s   r   descriptive_typec                 C  s   |  ddS )Nz or z | )replace)r   r4   r4   r5   r{     s   r{   c                 C  sX   | s| S d}d}d}t | D ]\}}|r| r|s|d7 }qd}|}q| ||d  S )NFr   rW   T)	enumerateisspace)rX   content_foundinitial_contentfinal_contentindexr,   r4   r4   r5   r     s   r   N)rT   r   rS   r.   rU   r   r"   rV   )rT   r   ra   r@   r]   rF   rS   r.   rU   r   r"   r@   )rT   r   r2   r-   r"   rO   )
rT   r   r2   r-   rn   rO   r]   rF   r"   r   )
rT   r   ra   r@   r]   rF   rU   r   r"   r@   )r]   rF   r"   rV   )rT   r   ra   r@   r"   r?   )rX   rB   ra   r@   r"   r   )r   r-   r"   r-   )rX   rB   r"   rB   )7
__future__r   
contextlibr   dataclassesr   r   typingr   r   r   _griffe.docstrings.modelsr	   r
   r   r   r   r   r   r   r   r   _griffe.docstrings.utilsr   _griffe.expressionsr   _griffe.modelsr   	frozenset_PARAM_NAMES_PARAM_TYPE_NAMES_ATTRIBUTE_NAMES_ATTRIBUTE_TYPE_NAMES_RETURN_NAMES_RETURN_TYPE_NAMES_EXCEPTION_NAMESr)   r?   rF   r`   rs   rl   rk   r   r   r   r   r   r   r\   rh   r   r{   r   rZ   r4   r4   r4   r5   <module>   s\   0
)
3

 

+







