o
    ì6Wjî4  ã                   @   sœ  d Z ddlZddlZddlZddl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mZmZmZmZ G dd„ de	ƒZG d	d
„ d
eddƒƒZe d¡Ze d¡Ze d¡Zeddejƒeddejƒeddejƒeddejƒeddejƒeddejƒeddejƒeddejƒeddej ƒeddej ƒeddej!ƒed d!ej!ƒgZ"G d"d#„ d#ƒZ#d$ej$e% d%efd&d'„Z&ej'd(fd)ed*ed+e%d%e%fd,d-„Z(dS ).zGoogle-style docstring parsing.é    N)ÚOrderedDictÚ
namedtuple)ÚIntEnumé   )ÚEXAMPLES_KEYWORDSÚPARAM_KEYWORDSÚRAISES_KEYWORDSÚRETURNS_KEYWORDSÚYIELDS_KEYWORDSÚ	DocstringÚDocstringExampleÚDocstringMetaÚDocstringParamÚDocstringRaisesÚDocstringReturnsÚDocstringStyleÚ
ParseErrorÚRenderingStylec                   @   s    e Zd ZdZdZ	 dZ	 dZdS )ÚSectionTypezTypes of sections.r   r   é   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚSINGULARÚMULTIPLEÚSINGULAR_OR_MULTIPLE© r   r   úf/home/esfera/Documents/content_generation/venv/lib/python3.10/site-packages/docstring_parser/google.pyr      s    r   c                   @   s   e Zd ZdZdS )ÚSectionzA docstring section.N)r   r   r   r   r   r   r   r   r   (   s    r   ÚSectionBaseztitle key typez\s*(.+?)\s*\(\s*(.*[^\s]+)\s*\)z.*\. Defaults to (.+)\.z(\s*[^:\s]+:)|([^:]*\]:.*)Ú	ArgumentsÚparamÚArgsÚ
ParametersÚParamsÚRaisesÚraisesÚ
ExceptionsÚExceptÚ
AttributesÚ	attributeÚExampleÚexamplesÚExamplesÚReturnsÚreturnsÚYieldsÚyieldsc                	   @   sª   e Zd ZdZ	ddejeje  fdd„Zdd„ Z	d	e
d
e
defdd„Zedede
defdd„ƒZedede
de
defdd„ƒZdefdd„Zd	eje
 defdd„ZdS )ÚGoogleParserz#Parser for Google-style docstrings.NTÚsectionsc                 C   s*   |st }dd„ |D ƒ| _|| _|  ¡  dS )zšSetup sections.

        :param sections: Recognized sections or None to defaults.
        :param title_colon: require colon after section title.
        c                 S   s   i | ]}|j |“qS r   )Útitle)Ú.0Úsr   r   r   Ú
<dictcomp>M   ó    z)GoogleParser.__init__.<locals>.<dictcomp>N)ÚDEFAULT_SECTIONSr4   Útitle_colonÚ_setup)Úselfr4   r;   r   r   r   Ú__init__C   s
   zGoogleParser.__init__c                 C   sH   | j rd}nd}tjdd dd„ | jD ƒ¡ d | d tjd	�| _d S )
Nú:Ú z^(ú|c                 s   s   � | ]	}d |› d�V  qdS )ú(ú)Nr   )r6   Útr   r   r   Ú	<genexpr>X   s   € z&GoogleParser._setup.<locals>.<genexpr>rC   z	[ 	]*$©Úflags)r;   ÚreÚcompileÚjoinr4   ÚMÚ	titles_re)r=   Úcolonr   r   r   r<   Q   s   ÿþýüúzGoogleParser._setupÚtextr5   Úreturnc                 C   sì   | j | }|jtjkrt |¡r|jtjkr|  ||¡S d|vr(td|›d�ƒ‚| 	dd¡\}}|rEd|v rE| 	dd¡\}}|t
 |¡ }|ro|d dkrS|dd… n|}d|v rj| 	dd¡\}}|d t
 |¡ }| d¡}|  |||¡S )	z™Build docstring element.

        :param text: docstring element text
        :param title: title of section containing element
        :return:
        r?   zExpected a colon in Ú.r   Ú
r   ú N)r4   Útyper   r   ÚMULTIPLE_PATTERNÚmatchr   Ú_build_single_metar   ÚsplitÚinspectÚcleandocÚstripÚ_build_multi_meta)r=   rN   r5   ÚsectionÚbeforeÚdescÚ
first_lineÚrestr   r   r   Ú_build_meta_   s&   
ÿ
zGoogleParser._build_metar\   r^   c                 C   s‚   | j ttB v rt| j g|d | j tv d�S | j tv r"t| j g|d d�S | j tv r0t| j gd |d�S | j tv r9t	dƒ‚t
| j g|d�S )N©ÚargsÚdescriptionÚ	type_nameÚis_generator©rc   rd   re   )rc   Úsnippetrd   zExpected paramenter name.©rc   rd   )Úkeyr	   r
   r   r   r   r   r   r   r   r   )r\   r^   r   r   r   rV   ƒ   s$   ü

ÿ

ÿ
zGoogleParser._build_single_metar]   c                 C   s  | j tv rUt |¡}|r3| dd¡\}}| d¡r"d}|d d… }n| d¡r0d}|d d… }n
d}n|d }}d }t |¡}|rF| d¡nd }t| j |g|||||d	�S | j tt	B v rjt
| j |g||| j t	v d
�S | j tv ryt| j |g||d�S t| j |g|d�S )Nr   r   ú
, optionalTiöÿÿÿú?éÿÿÿÿF)rc   rd   Úarg_namere   Úis_optionalÚdefaultrb   rg   ri   )rj   r   ÚGOOGLE_TYPED_ARG_REGEXrU   ÚgroupÚendswithÚGOOGLE_ARG_DESC_REGEXr   r	   r
   r   r   r   r   )r\   r]   r^   rU   rn   re   ro   rp   r   r   r   r[   ˜   sF   





úü
ÿzGoogleParser._build_multi_metac                 C   s   || j |j< |  ¡  dS )zLAdd or replace a section.

        :param section: The new section.
        N)r4   r5   r<   )r=   r\   r   r   r   Úadd_sectionÄ   s   zGoogleParser.add_sectionc                 C   sæ  t tjd�}|s
|S t |¡}| j |¡}|r(|d| ¡ … }|| ¡ d… }n|}d}| dd¡}|d p7d|_	t
|ƒdkrX|d pDd}| d¡|_| d¡|_| ¡ pVd|_t| j |¡ƒ}|sd|S g }	tt
|ƒd ƒD ]}
|	 ||
  ¡ ||
d   ¡ f¡ qn|	 |d  ¡ t
|ƒf¡ tƒ }t|	ƒD ]2\}
\}}||
  d¡}|| jvr©q–|||… }t d	|¡}|durÁ|d| ¡ … }| d¡||< q–|sÍ|S | ¡ D ]Ÿ\}}t d
|¡}|såtd|› d�ƒ‚| ¡ }| j| jtjtj fv �rt |¡}|j! |  "||¡¡ qÑd| d }ttj||tj#d�ƒ}|�s%td|› d|› d�ƒ‚g }tt
|ƒd ƒD ]}
| ||
  ¡ ||
d   ¡ f¡ �q/| |d  ¡ t
|ƒf¡ t|ƒD ]\}
\}}|||…  d¡}|j! |  "||¡¡ �qUqÑ|S )zbParse the Google-style docstring into its components.

        :returns: parsed docstring
        )ÚstyleNr@   rQ   r   r   z

rm   z\n\Sz^\s*zCan't infer indent from "ú"ú^z(?=\S)rF   zNo specification for "z": ")$r   r   ÚGOOGLErX   rY   rL   ÚsearchÚstartrW   Úshort_descriptionÚlenÚ
startswithÚblank_after_short_descriptionrs   Úblank_after_long_descriptionrZ   Úlong_descriptionÚlistÚfinditerÚrangeÚappendÚendr   Ú	enumeraterr   r4   rH   Úitemsr   rS   r   r   r   Úmetara   rK   )r=   rN   ÚretrU   Ú
desc_chunkÚ
meta_chunkÚpartsÚlong_desc_chunkÚmatchesÚsplitsÚjÚchunksr{   r†   r5   Úmeta_detailsÚunknown_metaÚchunkÚindent_matchÚindentÚpartÚ_reÚ	c_matchesÚc_splitsr   r   r   ÚparseÍ   s~   
ÿ$

þ
&þzGoogleParser.parse)NT)r   r   r   r   ÚTÚOptionalÚListr   r>   r<   Ústrr   ra   ÚstaticmethodrV   r[   ru   r   rœ   r   r   r   r   r3   @   s,    ÿ
ÿ$ÿÿÿþ+	r3   rN   rO   c                 C   s   t ƒ  | ¡S )zZParse the Google-style docstring into its components.

    :returns: parsed docstring
    )r3   rœ   )rN   r   r   r   rœ   (  s   rœ   z    Ú	docstringÚrendering_styler—   c                    sä  dt jtttf f‡ ‡‡fdd„‰dtdt jt j f‡‡fdd„}g ‰| jr,ˆ 	| j¡ | j
r4ˆ 	d¡ | jr=ˆ 	| j¡ | jrEˆ 	d¡ |d	d
d„ | jpNg D ƒƒ |ddd„ | jp[g D ƒƒ |ddd„ | jphg D ƒƒ |ddd„ | jpug D ƒƒ |d| jpg ƒ | jr¢| js¢| j}ˆ 	|r�dnd¡ ˆ 	dtˆd ƒ ¡ ˆ|ƒ | jD ]7}t|tttfƒr°q¥ˆ 	|jd  dd¡ ¡ d ¡ |jr×‡ fdd„|j ¡ D ƒ}ˆ 	d |¡¡ ˆ 	d¡ q¥ˆríˆd síˆ ¡  ˆríˆd rãd ˆ¡S )a  Render a parsed docstring into docstring text.

    :param docstring: parsed docstring representation
    :param rendering_style: the style to render docstrings
    :param indent: the characters used as indentation in the docstring string
    :returns: docstring text
    Úonec                    s<  d}t | tƒr|| jpd7 }nt | tƒr|| jpd7 }t | tƒr-| jr-ˆtjkr*dnd}nd}| jr@|r@|d| j› |› d�7 }n| jrN|| j› |› d�7 }n|d7 }ˆ | }| j	ruˆtj
krudˆ › ˆ › � |g| j	 ¡  ¡}ˆ |¡ d S | j	r—| j	 ¡ ^}}dˆ › ˆ › � |d | g| ¡}ˆ |¡ d S ˆ |¡ d S )	Nr@   rl   rk   z (z):r?   rQ   rR   )Ú
isinstancer   rn   r   Úreturn_namero   r   ÚCOMPACTre   rd   ÚEXPANDEDrJ   Ú
splitlinesr…   )r¤   ÚheadÚoptionalÚbodyÚfirstr`   )r—   r�   r£   r   r   Úprocess_one=  s6   


ÿý
ÿ"zcompose.<locals>.process_oneÚnamerc   c                    s2   |rˆ   | ¡ |D ]}ˆ|ƒ q	ˆ   d¡ d S d S )Nr@   )r…   )r¯   rc   Úarg)r�   r®   r   r   Úprocess_sectd  s   

üzcompose.<locals>.process_sectr@   zArgs:c                 S   ó   g | ]}|j d  dkr|‘qS )r   r"   ©rc   ©r6   Úpr   r   r   Ú
<listcomp>w  ó    zcompose.<locals>.<listcomp>zAttributes:c                 S   r²   )r   r+   r³   r´   r   r   r   r¶   |  r·   zReturns:c                 S   s   g | ]}|j s|‘qS r   ©rf   r´   r   r   r   r¶   �  ó    zYields:c                 S   s   g | ]}|j r|‘qS r   r¸   r´   r   r   r   r¶   …  r¹   zRaises:ú-rm   r   Ú_r?   c                    s   g | ]}ˆ | ‘qS r   r   )r6   Úl)r—   r   r   r¶   —  r9   rQ   )r�   ÚUnionr   r   r   r    rŸ   ÚAnyr|   r…   r   r�   r€   ÚparamsÚmany_returnsr'   r0   r}   r‰   r¥   rc   Úreplacer5   rd   r©   rJ   Úpop)r¢   r£   r—   r±   rŠ   r‰   Úlinesr   )r—   r�   r®   r£   r   Úcompose0  s^   ÿ '

ÿþþÿ

ÿ ÿ
rÄ   ))r   rX   rH   Útypingr�   Úcollectionsr   r   Úenumr   Úcommonr   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   rI   rq   rt   rT   r   r   r   r:   r3   rž   r    rœ   r§   rÄ   r   r   r   r   Ú<module>   sN    @


ô i
ýÿþýü