
    Y	g3                     D   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e	      Z G d	 d
 edd            Z ej6                  d      Z ej6                  d      Z ej6                  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jB                         ed d!ejB                        gZ" G d" d#      Z#d$e$d%efd&Z%ejL                  d'fd(ed)ed*e$d%e$fd+Z'y),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                        e Zd ZdZdZ	 dZ	 dZy)SectionTypezTypes of sections.r   r      N)__name__
__module____qualname____doc__SINGULARMULTIPLESINGULAR_OR_MULTIPLE     X/var/www/html/hubwallet-dev/venv/lib/python3.12/site-packages/docstring_parser/google.pyr   r      s    H%H#.r    r   c                       e Zd ZdZy)SectionzA docstring section.N)r   r   r   r   r   r    r!   r#   r#   (   s    r    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            	           e Zd ZdZ	 ddej
                  ej                  e      fdZd Z	de
de
defd	Zed
ede
defd       Zed
ede
de
defd       Zd
efdZde
defdZy)GoogleParserz#Parser for Google-style docstrings.Nsectionsc                     |st         }|D ci c]  }|j                  | c}| _        || _        | j	                          yc c}w )zSetup sections.

        :param sections: Recognized sections or None to defaults.
        :param title_colon: require colon after section title.
        N)DEFAULT_SECTIONStitler9   title_colon_setup)selfr9   r=   ss       r!   __init__zGoogleParser.__init__C   s<     'H-56!6& 7s   Ac                     | j                   rd}nd}t        j                  ddj                  d | j                  D              z   dz   |z   dz   t        j
                        | _        y )	N: z^(|c              3   (   K   | ]
  }d | d  yw)()Nr   ).0ts     r!   	<genexpr>z&GoogleParser._setup.<locals>.<genexpr>X   s     7A1#Qx7s   rH   z	[ 	]*$flags)r=   recompilejoinr9   M	titles_re)r?   colons     r!   r>   zGoogleParser._setupQ   sh    EEhh7778  	
 $$
r    textr<   returnc                    | j                   |   }|j                  t        j                  k(  rt        j                  |      r|j                  t        j                  k(  r| j                  ||      S d|vrt        d|d      |j                  dd      \  }}|rT|d   dk(  r|dd n|}d|v r0|j                  dd      \  }}|dz   t        j                  |      z   }|j                  d      }| j                  |||      S )	zBuild docstring element.

        :param text: docstring element text
        :param title: title of section containing element
        :return:
        rC   zExpected a colon in .r   r    N
)r9   typer   r   MULTIPLE_PATTERNmatchr   _build_single_metar   splitinspectcleandocstrip_build_multi_meta)r?   rT   r<   sectionbeforedesc
first_linerests           r!   _build_metazGoogleParser._build_meta_   s     --& LLK<<<$**40\\[111**7D99d?3D81=>> zz#q)#Aw#~484Dt|#'::dA#6 
D!D(7+;+;D+AA::d#D%%gvt<<r    rc   re   c                    | j                   t        t        z  v r*t        | j                   g|d | j                   t        v       S | j                   t        v rt        | j                   g|d       S | j                   t        v rt        | j                   gd |      S | j                   t        v rt        d      t        | j                   g|      S )Nargsdescription	type_nameis_generatorrk   rl   rm   )rk   snippetrl   zExpected paramenter name.rk   rl   )keyr
   r   r   r	   r   r   r   r   r   r   )rc   re   s     r!   r]   zGoogleParser._build_single_meta}   s    ;;*_<<#kk] $[[O;	  ;;/)"kk]  ;;++#kk]Dd  ;;.(8997;;-TBBr    rd   c                    | j                   t        v rt        j                  |      }|rJ|j	                  dd      \  }}|j                  d      rd}|d d }n"|j                  d      rd}|d d }n	d}n|d }}d }t        j                  |      }|r|j	                  d      nd }t        | j                   |g|||||	      S | j                   t        t        z  v r+t        | j                   |g||| j                   t        v 
      S | j                   t        v rt        | j                   |g||      S t        | j                   |g|      S )Nr   r   
, optionalTi?F)rk   rl   arg_namerm   is_optionaldefaultrj   ro   rq   )rr   r   GOOGLE_TYPED_ARG_REGEXr\   groupendswithGOOGLE_ARG_DESC_REGEXr   r
   r   r   r	   r   r   )rc   rd   re   r\   rw   rm   rx   ry   s           r!   rb   zGoogleParser._build_multi_meta   sR    ;;.(*008E&+kk!Q&7#)%%l3"&K )$3I'',"&K )#2I"'K&,d)")//5E(-ekk!n4G!kk6* !#'  ;;*_<<#kk6*  $[[O;	  ;;/)"kk6*  7;;"7TJJr    c                 V    || j                   |j                  <   | j                          y)zLAdd or replace a section.

        :param section: The new section.
        N)r9   r<   r>   )r?   rc   s     r!   add_sectionzGoogleParser.add_section   s     (/gmm$r    c                 <   t        t        j                        }|s|S t        j                  |      }| j
                  j                  |      }|r'|d|j                          }||j                         d }n|}d}|j                  dd      }|d   xs d|_	        t        |      dkD  rN|d   xs d}|j                  d      |_        |j                  d      |_        |j                         xs d|_        t#        | j
                  j%                  |            }|s|S g }	t'        t        |      dz
        D ]:  }
|	j)                  ||
   j+                         ||
dz      j                         f       < |	j)                  |d   j+                         t        |      f       t-               }t/        |	      D ]o  \  }
\  }}||
   j1                  d      }|| j2                  vr,||| }t5        j                  d	|      }||d|j                          }|j                  d      ||<   q |s|S |j7                         D ]  \  }}t5        j                  d
|      }|st9        d| d      |j1                         }| j2                  |   j:                  t<        j>                  t<        j@                  fv rAt        j                  |      }|jB                  j)                  | jE                  ||             d|z   dz   }t#        t5        j$                  ||t4        jF                              }|st9        d| d| d      g }t'        t        |      dz
        D ]:  }
|j)                  ||
   j+                         ||
dz      j                         f       < |j)                  |d   j+                         t        |      f       t/        |      D ]G  \  }
\  }}||| j                  d      }|jB                  j)                  | jE                  ||             I  |S )zbParse the Google-style docstring into its components.

        :returns: parsed docstring
        )styleNrD   rY   r   r   z

rv   z\n\Sz^\s*zCan't infer indent from ""^z(?=\S)rL   zNo specification for "z": ")$r   r   GOOGLEr_   r`   rR   searchstartr^   short_descriptionlen
startswithblank_after_short_descriptionr|   blank_after_long_descriptionra   long_descriptionlistfinditerrangeappendendr   	enumerater{   r9   rN   itemsr   rZ   r   r   r   metarh   rQ   )r?   rT   retr\   
desc_chunk
meta_chunkpartslong_desc_chunkmatchessplitsjchunksr   r   r<   meta_detailsunknown_metachunkindent_matchindentpart_re	c_matchesc_splitss                           r!   parsezGoogleParser.parse   s   
 n334J % %%d+o.Jekkmo.JJJ   q) %a 0Du:>#Ahn"O0?0J0J1C- 0?/G/G/OC,#2#8#8#:#BdC  t~~..z:;Js7|a'( 	FAMM71:>>+WQU^-A-A-CDE	Fwr{(#j/:;(0 	5OA|sAJ$$Q'EDMM) &eC0L99Wl;L'+,Bl.@.@.BC(..t4F5M	5 J #LLN 	?LE599We4L #=eWA!FGG!'')F }}U#(($$00-  ''. 0 0u => ,*CR[[e244@AI #9%UG1!MNNH3y>A-. P1!1!1!3Yq1u5E5K5K5M NOPOOYr]..0#e*=>#,X#6 ?<E3U3'--d3 0 0u =>?3	?: 
r    )NT)r   r   r   r   TOptionalListr#   rA   r>   strr   rh   staticmethodr]   rb   r   r   r   r   r    r!   r8   r8   @   s    - IM

166'?3
= =C =M =< CG C3 C= C C( )K)K"%)K-0)K	)K )KV7 X# X) Xr    r8   rT   rU   c                 4    t               j                  |       S )zZParse the Google-style docstring into its components.

    :returns: parsed docstring
    )r8   r   )rT   s    r!   r   r   "  s    
 >%%r    z    	docstringrendering_styler   c                   	
 dt         j                  t        t        t        f   f	fd
dt
        dt         j                  t         j                     f	
fd}g 	| j                  r	j                  | j                         | j                  r	j                  d       | j                  r	j                  | j                         | j                  r	j                  d        |d| j                  xs g D cg c]  }|j                  d   d	k(  s| c}        |d
| j                  xs g D cg c]  }|j                  d   dk(  s| c}        |d| j                  xs g D cg c]  }|j                   r| c}        |d| j                  xs g D cg c]  }|j                   s| c}        |d| j"                  xs g        | j$                  rU| j                  sI| j$                  }	j                  |rdnd       	j                  dt'        	d         z          
|       | j(                  D ]  }t+        |t        t        t        f      r	j                  |j                  d   j-                  dd      j/                         dz          |j0                  rJ|j0                  j3                         D cg c]  }|z   	 }}	j                  dj5                  |             	j                  d        	r	d   s	j7                          	r	d   sdj5                  	      S c c}w c c}w c c}w c c}w c c}w )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                 >   d}t        | t              r|| j                  xs dz  }n#t        | t              r|| j                  xs dz  }t        | t              r$| j
                  rt        j                  k(  rdnd}nd}| j                  r|r|d| j                   | dz  }n&| j                  r|| j                   | dz  }n|dz  }|z   }| j                  rWt        j                  k(  rDd  j                  |g| j                  j                         z         }j                  |       y | j                  rN| j                  j                         ^}}d  j                  |dz   |z   g|z         }j                  |       y j                  |       y )	NrD   ru   rt   z (z):rC   rY   rX   )
isinstancer   rw   r   return_namerx   r   COMPACTrm   rl   EXPANDEDrP   
splitlinesr   )	r   headoptionalbodyfirstrg   r   r   r   s	         r!   process_onezcompose.<locals>.process_one7  s    c>*CLL&B&D-.COO)r)Dc>*s #n&<&<< !  H==Tbz44D]]s}}ohZq11DCKD}??.2I2IIxx(--3355D LL__ __779NUTxx(--tczE/A.BT.IJDLLLLr    namerk   c                 n    |r2j                  |        |D ]
  } |        j                  d       y y )NrD   )r   )r   rk   argr   r   s      r!   process_sectzcompose.<locals>.process_sect^  s:    LL !C !LL	 r    rD   zArgs:r   r&   zAttributes:r/   zReturns:zYields:zRaises:-rv   _rC   rY   )r   Unionr   r   r   r   r   Anyr   r   r   r   r   paramsrk   many_returnsrn   r+   r4   r   r   r   replacer<   rl   r   rP   pop)r   r   r   r   pr   r   llinesr   r   s    ``      @@r!   composer   *  s   %WW^%5FG%N3 affQUUm  E""Y001..R!!Y//0--RY--3LqvvayG7K!L $$*GqaffQi;.FG
 **0bGqG
 y55;N!q~~AN I,,23!7!7#Y:6S3uRy>)*C 	>#3_E
 TYYq\))#r288:S@A)-)9)9)D)D)FGAVaZGEGLL5)*R	 b			 b	 99UO M
 	H
 	H O$ Hs6   <L6
L6
4L;
L;
,M 
>M 
M
0M
M
)(r   r_   rN   typingr   collectionsr   r   enumr   commonr   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r#   rO   rz   r}   r[   r   r   r   r;   r8   r   r   r   r   r   r    r!   <module>r      s   %  	  /    $
/' 
/j(89  $$FG "

#=> 2::;<  K+"6"67FG[112L';#7#78Hg{334Hh 4 45L(K$8$89Hh 4 45L+{';';<Iz;#7#78J
K$8$89Iy+"B"BCHh @ @A  _ _D& &	 & '5&<&<nn#n n 		nr    