a
    ˆù»j¡V  ã                   @   sà   d Z ddlZddlZddlZddlZddlmZ ddlmZ ddl	m
Z
mZ ddlZddlZdd„ ZG dd	„ d	ƒZG d
d„ deƒZedg d¢ƒZG dd„ deƒZddd„Zdd„ Zddd„ZG dd„ deƒZG dd„ deƒZdS )z=Extract reference documentation from the NumPy source tree.

é    N)Úwarn)Ú
namedtuple)ÚCallableÚMappingc                 C   s4   | r| d   ¡ s| d= q | r0| d   ¡ s0| d= q| S )z<Remove leading and trailing blank lines from a list of linesr   éÿÿÿÿ©Ústrip)Úl© r
   ú;E:\soccer\ml_env\Lib\site-packages\scipy/_lib/_docscrape.pyÚstrip_blank_lines   s
    r   c                   @   sj   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zddd„Zdd„ ZdS )ÚReaderz!A line-based string reader.

    c                 C   s*   t |tƒr|| _n| d¡| _|  ¡  dS )zs
        Parameters
        ----------
        data : str
           String with lines separated by '\n'.

        Ú
N)Ú
isinstanceÚlistÚ_strÚsplitÚreset)ÚselfÚdatar
   r
   r   Ú__init__   s    
zReader.__init__c                 C   s
   | j | S ©N)r   ©r   Únr
   r
   r   Ú__getitem__,   s    zReader.__getitem__c                 C   s
   d| _ d S )Nr   )Ú_l©r   r
   r
   r   r   /   s    zReader.resetc                 C   s,   |   ¡ s$| | j }|  jd7  _|S dS d S )Né   Ú )Úeofr   )r   Úoutr
   r
   r   Úread2   s
    
zReader.readc                 C   s4   | | j d … D ] }| ¡ r  q0q|  j d7  _ qd S ©Nr   )r   r   )r   r	   r
   r
   r   Úseek_next_non_empty_line:   s    zReader.seek_next_non_empty_linec                 C   s   | j t| jƒkS r   ©r   Úlenr   r   r
   r
   r   r   A   s    z
Reader.eofc                 C   sb   | j }| |d … D ]J}||ƒr0| || j …   S |  j d7  _ |  ¡ r| || j d …   S qg S r"   )r   r   )r   Zcondition_funcÚstartÚliner
   r
   r   Úread_to_conditionD   s    zReader.read_to_conditionc                 C   s   |   ¡  dd„ }|  |¡S )Nc                 S   s
   |   ¡  S r   r   ©r'   r
   r
   r   Úis_emptyQ   s    z0Reader.read_to_next_empty_line.<locals>.is_empty)r#   r(   )r   r*   r
   r
   r   Úread_to_next_empty_lineN   s    zReader.read_to_next_empty_linec                 C   s   dd„ }|   |¡S )Nc                 S   s   |   ¡ ot|  ¡ ƒt| ƒkS r   )r   r%   Úlstripr)   r
   r
   r   Úis_unindentedW   s    z:Reader.read_to_next_unindented_line.<locals>.is_unindented)r(   )r   r-   r
   r
   r   Úread_to_next_unindented_lineV   s    z#Reader.read_to_next_unindented_liner   c                 C   s*   | j | t| jƒk r"| | j |  S dS d S ©Nr   r$   r   r
   r
   r   Úpeek[   s    zReader.peekc                 C   s   d  | j¡ ¡  S r/   )Újoinr   r   r   r
   r
   r   r*   a   s    zReader.is_emptyN)r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r!   r#   r   r(   r+   r.   r0   r*   r
   r
   r
   r   r      s   

r   c                   @   s   e Zd Zdd„ ZdS )Ú
ParseErrorc                 C   s(   | j d }t| dƒr$|› d| j›�}|S )Nr   Ú	docstringú in )ÚargsÚhasattrr7   )r   Úmessager
   r
   r   Ú__str__f   s    

zParseError.__str__N)r2   r3   r4   r<   r
   r
   r
   r   r6   e   s   r6   Ú	Parameter)ÚnameÚtypeÚdescc                   @   sŽ  e Zd ZdZddgg g g g g g g g g g g g g ddi dœZi fdd„Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdMdd„ZdZdZdZde e d e d Ze dd ¡Ze d!d"¡Zd#Ze d$e d% ¡Ze d&e d' e d( d d) e ¡Zd*Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ ZdNd4d5„ZdOd7d8„Z dPd:d;„Z!d<d=„ Z"d>d?„ Z#d@dA„ Z$dBdC„ Z%dDdE„ Z&dFdG„ Z'dHdI„ Z(dQdJdK„Z)dLS )RÚNumpyDocStringzƒParses a numpydoc string to an abstract representation

    Instances define a mapping from section title to structured data.

    r   )Ú	SignatureÚSummaryúExtended SummaryÚ
ParametersÚReturnsÚYieldsÚReceivesÚRaisesÚWarnsúOther ParametersÚ
AttributesÚMethodsúSee AlsoÚNotesÚWarningsÚ
ReferencesÚExamplesÚindexc              
   C   sj   |}t  |¡ d¡}t|ƒ| _t | j¡| _z|  	¡  W n, t
yd } z||_‚ W Y d }~n
d }~0 0 d S ©Nr   )ÚtextwrapÚdedentr   r   Ú_docÚcopyÚdeepcopyÚsectionsÚ_parsed_dataÚ_parser6   r7   )r   r7   ÚconfigZorig_docstringÚer
   r
   r   r   Œ   s    
zNumpyDocString.__init__c                 C   s
   | j | S r   )r[   )r   Úkeyr
   r
   r   r   ™   s    zNumpyDocString.__getitem__c                 C   s,   || j vr| jd| dd� n
|| j |< d S )NzUnknown section %sF©Úerror)r[   Ú_error_location)r   r_   Úvalr
   r
   r   Ú__setitem__œ   s    
zNumpyDocString.__setitem__c                 C   s
   t | jƒS r   )Úiterr[   r   r
   r
   r   Ú__iter__¢   s    zNumpyDocString.__iter__c                 C   s
   t | jƒS r   )r%   r[   r   r
   r
   r   Ú__len__¥   s    zNumpyDocString.__len__c                 C   sh   | j  ¡  | j  ¡ rdS | j  ¡  ¡ }| d¡r4dS | j  d¡ ¡ }| dt|ƒ ¡pf| dt|ƒ ¡S )NFú
.. index::Tr   ú-ú=)rW   r#   r   r0   r   Ú
startswithr%   )r   Úl1Úl2r
   r
   r   Ú_is_at_section¨   s    


zNumpyDocString._is_at_sectionc                 C   sb   d}d}t |ƒD ]\}}| ¡ r q&qt |d d d… ƒD ]\}}| ¡ r8 qNq8||t|ƒ| … S )Nr   r   )Ú	enumerater   r%   )r   ÚdocÚiÚjr'   r
   r
   r   Ú_strip¶   s    zNumpyDocString._stripc                 C   sJ   | j  ¡ }|  ¡ sF| j  ¡ sF| j  d¡ ¡ s6|dg7 }|| j  ¡ 7 }q
|S )Nr   r   )rW   r+   rn   r   r0   r   )r   Úsectionr
   r
   r   Ú_read_to_next_sectionÃ   s    

z$NumpyDocString._read_to_next_sectionc                 c   sn   | j  ¡ sj|  ¡ }|d  ¡ }| d¡r<||dd … fV  q t|ƒdk rPtV  q ||  |dd … ¡fV  q d S )Nr   ú..r   é   )rW   r   ru   r   rk   r%   ÚStopIterationrs   )r   r   r>   r
   r
   r   Ú_read_sectionsÎ   s    

zNumpyDocString._read_sectionsFc           	      C   sŠ   t |ƒ}g }| ¡ s†| ¡  ¡ }d|v r@| d¡d d… \}}n|rPd| }}n
|d }}| ¡ }t|ƒ}t|ƒ}| t	|||ƒ¡ q|S )Nú : rw   r   )
r   r   r!   r   r   r.   Údedent_linesr   Úappendr=   )	r   ÚcontentÚsingle_element_is_typeÚrÚparamsÚheaderÚarg_nameZarg_typer@   r
   r
   r   Ú_parse_param_listÚ   s    
z NumpyDocString._parse_param_listz:(?P<role>\w+):z'`(?P<name>(?:~\w+\.)?[a-zA-Z0-9_\.-]+)`z(?P<name2>[a-zA-Z0-9_\.-]+)ú(ú|ú)ÚroleZrolenextr>   Znamenextz/(?P<description>\s*:(\s+(?P<desc>\S+.*))?)?\s*$z^\s*z\s*z^\s*(?P<allfuncs>z(?P<morefuncs>([,]\s+z)*)z(?P<trailing>[,\.])?rv   c                    s,  g }‡ fdd„}g }|D �]}|  ¡ s(qˆ j |¡}d}|rp| d¡}| d¡rp|rpˆ jd| d¡|f dd� |sŽ| d	¡rŽ| |  ¡ ¡ q|�rg }| d
¡}	|	  ¡ s¬qú||	ƒ\}
}}| |
|f¡ |	|d…   ¡ }	|	r¢|	d dkr¢|	dd…   ¡ }	q¢tt	d|gƒƒ}| ||f¡ qt
d| ƒ‚q|S )zµ
        func_name : Descriptive text
            continued text
        another_func_name : Descriptive text
        func_name1, func_name2, :meth:`func_name`, func_name3

        c                    sL   ˆ j  | ¡}|std|  ƒ‚| d¡}|r4| d¡n| d¡}||| ¡ fS )zMatch ':role:`name`' or 'name'.ú%s is not a item namer‡   r>   Zname2)Ú	_func_rgxÚmatchr6   ÚgroupÚend)ÚtextÚmr‡   r>   r   r
   r   Úparse_item_name  s    
z7NumpyDocString._parse_see_also.<locals>.parse_item_nameNr@   ZtrailingzGUnexpected comma or period after function list at index %d of line "%s"Fr`   ú Zallfuncsr   ú,r   rˆ   )r   Ú	_line_rgxrŠ   r‹   rb   rŒ   rk   r|   r   Úfilterr6   )r   r}   Úitemsr�   Úrestr'   Z
line_matchÚdescriptionÚfuncsr�   r>   r‡   Z	match_endr
   r   r   Ú_parse_see_also  sF    		

ÿÿü
zNumpyDocString._parse_see_alsoc                 C   sz   dd„ }i }|  d¡}t|ƒdkr<||d   d¡ƒd |d< |D ]4}|  d¡}t|ƒd	kr@||d	   d¡ƒ||d < q@|S )
zU
        .. index:: default
           :refguide: something, else, and more

        c                 S   s   dd„ | D ƒS )Nc                 S   s   g | ]}|  ¡ ‘qS r
   r   ©Ú.0Úsr
   r
   r   Ú
<listcomp>Q  ó    zFNumpyDocString._parse_index.<locals>.strip_each_in.<locals>.<listcomp>r
   )Úlstr
   r
   r   Ústrip_each_inP  s    z2NumpyDocString._parse_index.<locals>.strip_each_inz::r   r‘   r   Údefaultú:rw   )r   r%   )r   rt   r}   rŸ   r    r'   r
   r
   r   Ú_parse_indexJ  s    

zNumpyDocString._parse_indexc                 C   s€   |   ¡ rdS | j ¡ }d dd„ |D ƒ¡ ¡ }t d¡}| |¡rX|| d< |   ¡ sXqqXq|durh|| d< |   ¡ s||  ¡ | d< dS )	z%Grab signature (if given) and summaryNr�   c                 S   s   g | ]}|  ¡ ‘qS r
   r   r™   r
   r
   r   rœ   e  r�   z1NumpyDocString._parse_summary.<locals>.<listcomp>z^([\w., ]+=)?\s*[\w\.]+\(.*\)$rB   rC   rD   )	rn   rW   r+   r1   r   ÚreÚcompilerŠ   ru   )r   ÚsummaryZsummary_strÚcompiledr
   r
   r   Ú_parse_summary]  s    


zNumpyDocString._parse_summaryc                 C   s.  | j  ¡  |  ¡  t|  ¡ ƒ}dd„ |D ƒ}d|v }d|v }|rP|rPd}t|ƒ‚|shd|v rhd}t|ƒ‚|D ]¼\}}| d¡s´d	d
„ | d¡D ƒ}d |¡}|  	|¡r´|  
d| ¡ |dv rÌ|  |¡| |< ql|dv rè| j|dd�| |< ql| d¡�r|  ||¡| d< ql|dk�r |  |¡| d< ql|| |< qld S )Nc                 S   s   h | ]\}}|’qS r
   r
   )rš   rt   r}   r
   r
   r   Ú	<setcomp>x  r�   z(NumpyDocString._parse.<locals>.<setcomp>rF   rG   z5Docstring contains both a Returns and Yields section.rH   z5Docstring contains a Receives section but not Yields.rv   c                 s   s   | ]}|  ¡ V  qd S r   )Ú
capitalizer™   r
   r
   r   Ú	<genexpr>†  r�   z(NumpyDocString._parse.<locals>.<genexpr>r�   zThe section %s appears twice)rE   rK   rL   rM   )rF   rG   rI   rJ   rH   T)r~   rh   rS   rN   )rW   r   r§   r   ry   Ú
ValueErrorrk   r   r1   Úgetrb   rƒ   r¢   r˜   )r   rZ   Zsection_namesZhas_returnsZ
has_yieldsÚmsgrt   r}   r
   r
   r   r\   s  s>    



ÿÿ
zNumpyDocString._parseTc                 C   sh   t | dƒrJzt | j¡}W n ty0   d }Y n0 |d| j› d|› d� }|rXt|ƒ‚nt|dd� d S )NÚ_objz in the docstring of r8   Ú.é   )Ú
stacklevel)r:   ÚinspectÚgetsourcefiler®   Ú	TypeErrorr«   r   )r   r­   ra   Úfilenamer
   r
   r   rb   š  s    


zNumpyDocString._error_locationri   c                 C   s   |t |ƒ| gS r   ©r%   )r   r>   Úsymbolr
   r
   r   Ú_str_header©  s    zNumpyDocString._str_headeré   c                 C   s$   g }|D ]}|d| | g7 }q|S )Nr�   r
   )r   rp   Úindentr    r'   r
   r
   r   Ú_str_indent¬  s    zNumpyDocString._str_indentc                 C   s*   | d r | d   dd¡gdg S dgS d S )NrB   Ú*z\*r   )Úreplacer   r
   r
   r   Ú_str_signature²  s    zNumpyDocString._str_signaturec                 C   s   | d r| d dg S g S d S )NrC   r   r
   r   r
   r
   r   Ú_str_summary¸  s    zNumpyDocString._str_summaryc                 C   s   | d r| d dg S g S d S )NrD   r   r
   r   r
   r
   r   Ú_str_extended_summary¾  s    z$NumpyDocString._str_extended_summaryc                 C   s”   g }| | r�||   |¡7 }| | D ]b}g }|jr<| |j¡ |jrN| |j¡ |d |¡g7 }|jr"d |j¡ ¡ r"||  |j¡7 }q"|dg7 }|S )Nrz   r   )r¸   r>   r|   r?   r1   r@   r   r»   )r   r>   r    ÚparamÚpartsr
   r
   r   Ú_str_param_listÄ  s    
zNumpyDocString._str_param_listc                 C   s4   g }| | r0||   |¡7 }|| | 7 }|dg7 }|S r/   )r¸   )r   r>   r    r
   r
   r   Ú_str_sectionÔ  s    
zNumpyDocString._str_sectionc           
      C   s  | d sg S g }||   d¡7 }|dg7 }d}| d D ]´\}}t|tƒsJJ ‚g }|D ]J\}}|rrd|› d|› d�}	n |rŠd|› d|› d�}	nd| }	| |	¡ qRd |¡}	||	g7 }|rÒ||  d	 |¡g¡7 }d}q4d
}||  | jg¡7 }q4|rø|dg7 }|dg7 }|S )NrN   r   Tr¡   z:`ú`z`%s`_ú, r�   F)r¸   r   r   r|   r1   r»   Úempty_description)
r   Ú	func_roler    Zlast_had_descr—   r@   ÚlinksÚfuncr‡   Úlinkr
   r
   r   Ú_str_see_alsoÜ  s6    




zNumpyDocString._str_see_alsoc                 C   sz   | d }g }d}|  dd¡}|r$d}|d| g7 }| ¡ D ].\}}|dkrLq:d}|d |d |¡¡g7 }q:|rr|S dS d S )	NrS   Fr    r   Tz.. index:: %sz
   :{}: {}rÆ   )r¬   r”   Úformatr1   )r   Úidxr    Zoutput_indexZdefault_indexrt   Z
referencesr
   r
   r   Ú
_str_indexü  s    zNumpyDocString._str_indexc                 C   s¢   g }||   ¡ 7 }||  ¡ 7 }||  ¡ 7 }dD ]}||  |¡7 }q,||  d¡7 }||  |¡7 }dD ]}||  |¡7 }q`dD ]}||  |¡7 }qx||  ¡ 7 }d |¡S )N)rE   rF   rG   rH   rK   rI   rJ   rP   )rO   rQ   rR   )rL   rM   r   )r¾   r¿   rÀ   rÃ   rÄ   rÌ   rÏ   r1   )r   rÈ   r    Z
param_listr›   r
   r
   r   r<     s    zNumpyDocString.__str__N)F)T)ri   )r¹   )r   )*r2   r3   r4   r5   rZ   r   r   rd   rf   rg   rn   rs   ru   ry   rƒ   Ú_roleZ_funcbacktickZ
_funcplainZ	_funcnamer½   Z_funcnamenextZ_descriptionr£   r¤   r‰   r’   rÇ   r˜   r¢   r§   r\   rb   r¸   r»   r¾   r¿   rÀ   rÃ   rÄ   rÌ   rÏ   r<   r
   r
   r
   r   rA   p   sŽ   î
%þýýýüúùÿ6'


 rA   r¹   c                    s6   d| ‰ | d u rˆ S |   d¡}d ‡ fdd„|D ƒ¡S )Nr�   r   c                 3   s   | ]}ˆ | V  qd S r   r
   )rš   r	   ©Z
indent_strr
   r   rª   %  r�   zindent.<locals>.<genexpr>)r   r1   )Ústrrº   Úlinesr
   rÑ   r   rº      s
    
rº   c                 C   s   t  d | ¡¡ d¡S )z"Deindent a list of lines maximallyr   )rU   rV   r1   r   )rÓ   r
   r
   r   r{   (  s    r{   ri   c                 C   s   | d |t | ƒ  d S rT   r¶   )r�   Ústyler
   r
   r   r�   -  s    r�   c                       s4   e Zd Zddi fdd„Zdd„ Z‡ fdd„Z‡  ZS )	ÚFunctionDocrÊ   Nc                 C   sD   || _ || _|d u r2|d u r$tdƒ‚t |¡p0d}t | ||¡ d S )NzNo function or docstring givenr   )Ú_frÐ   r«   r²   ÚgetdocrA   r   )r   rÊ   r‡   rp   r]   r
   r
   r   r   2  s    zFunctionDoc.__init__c                 C   s@   t | jd| jjƒ}t | j¡r2t | jd| jjƒ}n| j}||fS )Nr2   Ú__call__)ÚgetattrrÖ   Ú	__class__r2   r²   Úisclassr   )r   Ú	func_namerÊ   r
   r
   r   Úget_func<  s
    zFunctionDoc.get_funcc                    sj   d}|   ¡ \}}dddœ}| jrR| j|vr8td| j ƒ |d | | jd¡|¡7 }|tƒ j| jd�7 }|S )Nr   ÚfunctionÚmethod)rÊ   ÚmethzWarning: invalid role %sz.. {}:: {}
    

)rÈ   )rÝ   rÐ   ÚprintrÍ   r¬   Úsuperr<   )r   r    rÊ   rÜ   Zroles©rÚ   r
   r   r<   D  s    ÿ
ÿzFunctionDoc.__str__)r2   r3   r4   r   rÝ   r<   Ú__classcell__r
   r
   rã   r   rÕ   1  s   
rÕ   c                   @   sD   e Zd ZdgZddei fdd„Zedd„ ƒZedd	„ ƒZd
d„ Z	dS )ÚClassDocrØ   Nr   c              
   C   s„  t  |¡s|d urtd| ƒ‚|| _dtjv r<ddlm} ntƒ }| 	dd¡| _
|rf| d¡sf|d7 }|| _|d u rŽ|d u r„tdƒ‚t |¡}t | |¡ | 	d	g ¡}||u r²d }| 	d
g ¡}| 	dd¡�r€||u�r€dd„ }	d| jfd| jffD ]Œ\}
}| |
 sòg }t|ƒD ]f}||v �s|�r0||v�r0�qz,t t| j|ƒ¡}| t|d|	|ƒƒ¡ W n t�yp   Y n0 �q|| |
< qòd S )Nz$Expected a class or None, but got %rZsphinxr   )ÚALLZshow_inherited_class_membersTr¯   z&No class or documentation string givenÚmemberszexclude-membersZshow_class_membersc                 S   s   | sg S |   ¡ S d S r   )Ú
splitlines)r›   r
   r
   r   Úsplitlines_xy  s    z'ClassDoc.__init__.<locals>.splitlines_xrM   rL   r   )r²   rÛ   r«   Ú_clsÚsysÚmodulesZsphinx.ext.autodocræ   Úobjectr¬   Úshow_inherited_membersÚendswithÚ_modÚpydocr×   rA   r   ÚmethodsÚ
propertiesÚsortedrÙ   r|   r=   ÚAttributeError)r   Úclsrp   Ú
modulenameZfunc_docr]   ræ   Z_membersZ_excluderé   Úfieldr”   Zdoc_listr>   Zdoc_itemr
   r
   r   r   Z  sV    
ÿ
ÿ
ÿÿÿ
zClassDoc.__init__c                    s(   ˆ j d u rg S ‡ fdd„t ˆ j ¡D ƒS )Nc                    s<   g | ]4\}}|  d ¡r |ˆ jv rt|tƒrˆ  |¡r|‘qS )Ú_)rk   Úextra_public_methodsr   r   Ú_is_show_member©rš   r>   rÊ   r   r
   r   rœ   ’  s
   



üz$ClassDoc.methods.<locals>.<listcomp>©rê   r²   Ú
getmembersr   r
   r   r   rò   Ž  s    
zClassDoc.methodsc                    s(   ˆ j d u rg S ‡ fdd„t ˆ j ¡D ƒS )Nc                    sD   g | ]<\}}|  d ¡s|du s2t|tƒs2t |¡rˆ  |¡r|‘qS )rù   N)rk   r   Úpropertyr²   Úisdatadescriptorrû   rü   r   r
   r   rœ   œ  s
   


üz'ClassDoc.properties.<locals>.<listcomp>rý   r   r
   r   r   ró   ˜  s    
zClassDoc.propertiesc                 C   s   | j r
dS || jjvrdS dS )NTF)rî   rê   Ú__dict__)r   r>   r
   r
   r   rû   ¢  s
    zClassDoc._is_show_member)
r2   r3   r4   rú   rÕ   r   rÿ   rò   ró   rû   r
   r
   r
   r   rå   V  s   ÿ
4
	
	rå   )r¹   )ri   )r5   r²   rU   r£   rñ   Úwarningsr   Úcollectionsr   Úcollections.abcr   r   rX   rë   r   r   Ú	Exceptionr6   r=   rA   rº   r{   r�   rÕ   rå   r
   r
   r
   r   Ú<module>   s,   	L   3

%