o
    ]i4                     @   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$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   \/var/www/html/stock_analysis/be/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
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 )zSetup 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 )	zBuild 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rq||| }td	|}|dur|d|  }|d||< q|s|S | D ]\}}td
|}|std| d| }| j| jtjtj fv rt|}|j!| "|| qd| 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}	|rdnd 	dtd   | | jD ]7}t|tttfrq	|jd dd d  |jrׇ fdd|j D }	d| 	d qrd s  rd rd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   <module>   sN    @


 i
