
    M/PhU                         d Z ddlmZ ddlmZ ddlZddlZddlZddlZddl	m
Z
 d Zd Z G d d	          Z ed
g d          Z G d de          Z G d d          Zd ZddZdS )z,
Substantially copied from NumpyDoc 1.0pre.
    )
namedtuple)MappingN)
ParseErrorc                 v    t          j        d                    |                                         d          S )z"Deindent a list of lines maximally
)textwrapdedentjoinsplit)liness    [/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/statsmodels/tools/docstring.pydedent_linesr      s,    ?499U++,,224888    c                     | r9| d                                          s| d= | r| d                                          | r9| d                                          s| d= | r| d                                          | S )z<Remove leading and trailing blank lines from a list of linesr   striplines    r   strip_blank_linesr      s    
 tAw}} G  tAw}} 
 tBx~~'' H  tBx~~'' Kr   c                   V    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 ZddZd ZdS )Readerz%
    A line-based string reader.
    c                     t          |t                    r|| _        n|                    d          | _        |                                  dS )zq
        Parameters
        ----------
        data : str
           String with lines separated by '
'.
        r   N)
isinstancelist_strr   reset)selfdatas     r   __init__zReader.__init__!   sC     dD!! 	)DII

4((DI

r   c                     | j         |         S N)r   r   ns     r   __getitem__zReader.__getitem__/   s    y|r   c                     d| _         d S )Nr   )	_line_numr   s    r   r   zReader.reset2   s    r   c                 l    |                                  s| | j                 }| xj        dz  c_        |S dS )N    )eofr'   )r   outs     r   readzReader.read5   s8    xxzz 	t~&CNNaNNJ2r   c                 x    | | j         d          D ])}|                                r d S | xj         dz  c_         *d S Nr*   )r'   r   )r   r   s     r   seek_next_non_empty_linezReader.seek_next_non_empty_line=   sQ    ))* 	$ 	$Dzz|| $!#		$ 	$r   c                 <    | j         t          | j                  k    S r"   r'   lenr   r(   s    r   r,   z
Reader.eofD   s    ~TY//r   c                     | j         }| |d          D ]V} ||          r| || j                  c S | xj         dz  c_         |                                 r| || j         dz            c S Wg S r0   )r'   r,   )r   condition_funcstartr   s       r   read_to_conditionzReader.read_to_conditionG   s    L 	8 	8D~d## 4EDN23333NNaNNxxzz 8EDNQ$6677778	r   c                 Z    |                                   d }|                     |          S )Nc                 ,    |                                   S r"   r   r   s    r   is_emptyz0Reader.read_to_next_empty_line.<locals>.is_emptyT   s    zz||##r   )r1   r8   )r   r;   s     r   read_to_next_empty_linezReader.read_to_next_empty_lineQ   s9    %%'''	$ 	$ 	$ %%h///r   c                 2    d }|                      |          S )Nc                     |                                  o1t          |                                           t          |           k    S r"   )r   r4   lstripr   s    r   is_unindentedz:Reader.read_to_next_unindented_line.<locals>.is_unindentedZ   s0    ::<<ES%7%73t99%DEr   )r8   )r   r@   s     r   read_to_next_unindented_linez#Reader.read_to_next_unindented_lineY   s*    	F 	F 	F %%m444r   r   c                 f    | j         |z   t          | j                  k     r| | j         |z            S dS Nr+   r3   r#   s     r   peekzReader.peek_   s3    >ADI..*++2r   c                 \    d                     | j                                                   S rC   )r
   r   r   r(   s    r   r;   zReader.is_emptye   s%    7749%%++----r   Nr   )__name__
__module____qualname____doc__r    r%   r   r.   r1   r,   r8   r<   rA   rD   r;    r   r   r   r      s                 $ $ $0 0 0  0 0 05 5 5   . . . . .r   r   	Parameter)nametypedescc                   (   e Zd ZdZi ddddgdg dg dg dg d	g d
g dg dg dg dg dg dg dg dddddi iZd Zd Zd Zd Zd Z	d Z
d Zd Zd ZdDdZd Zd!Zd"Zd#ez   ez   d$z   ez   d%z   Ze                    d&d'          Ze                    d(d)          Zd*Z ej        d+ez   d,z             Z ej        d-ez   d.z   ez   d/z   d%z   d0z   ez             Zd1Zd2 Zd3 Zd4 Zd5 Zd6 ZdEd8Z dFd:Z!d; Z"d< Z#d= Z$d> Z%d? Z&d@ Z'dA Z(dGdBZ)dCS )HNumpyDocStringzParses a numpydoc string to an abstract representation

    Instances define a mapping from section title to structured data.
    	Signaturer+   SummaryExtended Summary
ParametersReturnsYieldsReceivesRaisesWarnsOther Parameters
AttributesMethodsSee AlsoNotesWarnings
ReferencesExamplesindexc                    |}t          j        |                              d          }t          |          | _        t          j        | j                  | _        	 | 	                                 d S # t          $ r}||_         d }~ww xY w)Nr   )r   r	   r   r   _doccopydeepcopysections_parsed_data_parser   	docstring)r   rk   orig_docstringes       r   r    zNumpyDocString.__init__   s    "OI..44T::	9%%	 M$-88	KKMMMMM 	 	 	(AK	s   A3 3
B
=BB
c                     | j         |         S r"   )ri   )r   keys     r   r%   zNumpyDocString.__getitem__   s     %%r   c                 `    || j         vr|                     d|z             d S || j         |<   d S )NzUnknown section %s)ri   _error_location)r   ro   vals      r   __setitem__zNumpyDocString.__setitem__   sC    d'''  !5!;<<<<<%(Dc"""r   c                 *    t          | j                  S r"   )iterri   r(   s    r   __iter__zNumpyDocString.__iter__   s    D%&&&r   c                 *    t          | j                  S r"   )r4   ri   r(   s    r   __len__zNumpyDocString.__len__   s    4$%%%r   c                    | j                                          | j                                         rdS | j                                                                         }|                    d          rdS | j                             d                                          }|                    dt          |          z            p$|                    dt          |          z            S )NF
.. index::Tr*   -=)re   r1   r,   rD   r   
startswithr4   )r   l1l2s      r   _is_at_sectionzNumpyDocString._is_at_section   s    	**,,,9==?? 	5Y^^##%%==&& 	4Y^^A$$&&}}S3r77]++Kr}}S3r77]/K/KKr   c                     d}d}t          |          D ]\  }}|                                r nt          |d d d                   D ]\  }}|                                r n||t          |          |z
           S )Nr   r   )	enumerater   r4   )r   docijr   s        r   _stripzNumpyDocString._strip   s     ~~ 	 	GAtzz||  !TTrT++ 	 	GAtzz||  1s3xx!|#$$r   c                    | j                                         }|                                 s| j                                         s{| j                             d                                          s|dgz  }|| j                                         z  }|                                 s| j                                         {|S )Nr   r+   )re   r<   r   r,   rD   r   )r   sections     r   _read_to_next_sectionz$NumpyDocString._read_to_next_section   s    )3355%%'' 	;	 	;9>>"%%++--  B4ty88:::G	 %%'' 	;	 	; r   c              #     K   | j                                         s|                                 }|d                                         }|                    d          r||dd          fV  n>t          |          dk     r
t          V  n!||                     |dd                    fV  | j                                         d S d S )Nr   ..r*      )re   r,   r   r   r}   r4   StopIterationr   )r   r   rM   s      r   _read_sectionszNumpyDocString._read_sections   s      )--// 		2--//D7==??Dt$$ 2DHn$$$$TQ#####DKKQRR111111 )--// 		2 		2 		2 		2 		2r   Fc                    t          |          }g }|                                s|                                                                }d|v r!|                    d          d d         \  }}n|rd|}}n|d}}|                                }t          |          }t          |          }|                    t          |||                     |                                |S )N : r   r+   )
r   r,   r.   r   r   rA   r   r   appendrL   )	r   contentsingle_element_is_typerparamsheaderarg_namearg_typerO   s	            r   _parse_param_listz NumpyDocString._parse_param_list   s    7OO%%'' 	?VVXX^^%%F%+\\%%8%8!%<"(() 4)+VhHH)/hH1133D%%D$T**DMM)Hh==>>> %%'' 	?  r   z:(?P<role>\w+):z'`(?P<name>(?:~\w+\.)?[a-zA-Z0-9_\.-]+)`z(?P<name2>[a-zA-Z0-9_\.-]+)(|)rolerolenextrM   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>[,\.])?r   c                     g } fd}g }|D ]}|                                 s j                            |          }d}|rY|                    d          }|                    d          r/|r-                     d|                    d          |fz             |s=|                    d          r(|                    |                                            |rg }|                    d          }		 |	                                 snm ||	          \  }
}}|                    |
|f           |	|d                                          }	|	r(|	d	         d
k    r|	dd                                          }	t          t          d|g                    }|                    ||f           t          | d          |S )z
        func_name : Descriptive text
            continued text
        another_func_name : Descriptive text
        func_name1, func_name2, :meth:`func_name`, func_name3
        c                    j                             |           }|st          |  d          |                    d          }|r|                    d          n|                    d          }|||                                fS )zMatch ':role:`name`' or 'name'. is not a item namer   rM   name2)	_func_rgxmatchr   groupend)textmr   rM   r   s       r   parse_item_namez7NumpyDocString._parse_see_also.<locals>.parse_item_name  s    $$T**A ? D!=!=!=>>>776??D&*@1776???0@0@Dquuww&&r   NrO   trailingzGUnexpected comma or period after function list at index %d of line "%s" allfuncsTr   ,r*   r   )r   	_line_rgxr   r   rq   r   r}   r   r   filterr   )r   r   itemsr   restr   
line_matchdescriptionfuncsr   rM   r   	match_ends   `            r   _parse_see_alsozNumpyDocString._parse_see_also  s    	' 	' 	' 	' 	'  	? 	?D::<< --d33JK (..v66##J// K ((",.."<"<d!CD  
  ?4??3#7#7 ?DJJLL)))) ?!''
330::<< ,;OD,A,A)D$	LL$...	

+1133D 0Q3#ABBx~~//0 F4+7788eT]++++ D!=!=!=>>>r   c                 n   d }i }|                     d          }t          |          dk    r- ||d                              d                    d         |d<   |D ]W}|                     d          }t          |          dk    r- ||d                              d                    ||d         <   X|S )	zS
        .. index: default
           :refguide: something, else, and more
        c                     d | D             S )Nc                 6    g | ]}|                                 S rK   r   .0ss     r   
<listcomp>zFNumpyDocString._parse_index.<locals>.strip_each_in.<locals>.<listcomp>O  s     +++!AGGII+++r   rK   )lsts    r   strip_each_inz2NumpyDocString._parse_index.<locals>.strip_each_inN  s    ++s++++r   z::r*   r   r   default:r   )r   r4   )r   r   r   r   r-   r   s         r   _parse_indexzNumpyDocString._parse_indexH  s    	, 	, 	, --%%w<<!*]71:+;+;C+@+@AA!DC	N 	A 	AD::c??D4yy1}},}T!W]]3-?-?@@DG
r   c                    |                                  rdS 	 | j                                        }d                    d |D                                                       }t          j        d          }|                    |          r|| d<   |                                  s	 ||| d<   |                                  s|                                 | d<   dS dS )	z%Grab signature (if given) and summaryNTr   c                 6    g | ]}|                                 S rK   r   r   s     r   r   z1NumpyDocString._parse_summary.<locals>.<listcomp>c  s     #?#?#?!AGGII#?#?#?r   z^([\w., ]+=)?\s*[\w\.]+\(.*\)$rR   rS   rT   )	r   re   r<   r
   r   recompiler   r   )r   summarysummary_strcompileds       r   _parse_summaryzNumpyDocString._parse_summary[  s       	F	i7799G((#?#?w#?#?#?@@FFHHKz"CDDH~~k** $/[!**,, %DO""$$ 	D'+'A'A'C'CD#$$$	D 	Dr   c                 B   | j                                          |                                  t          |                                           }d |D             }d|v }d|v }|r|rd}t          |          |sd|v rd}t          |          |D ]\  }}|                    d          sad |                    d	          D             }d	                    |          }| 	                    |          r| 
                    d
|z             |dv r|                     |          | |<   |dv r|                     |d          | |<   |                    d          r|                     ||          | d<   |dk    r|                     |          | d<   || |<   d S )Nc                     h | ]\  }}|S rK   rK   )r   r   r   s      r   	<setcomp>z(NumpyDocString._parse.<locals>.<setcomp>v  s    BBB%5WgBBBr   rV   rW   z5Docstring contains both a Returns and Yields section.rX   z5Docstring contains a Receives section but not Yields.r   c              3   >   K   | ]}|                                 V  d S r"   )
capitalizer   s     r   	<genexpr>z(NumpyDocString._parse.<locals>.<genexpr>  s*      FFa1<<>>FFFFFFr   r   zThe section %s appears twice)rU   r[   r\   r]   )rV   rW   rY   rZ   rX   T)r   rz   rc   r^   )re   r   r   r   r   
ValueErrorr}   r   r
   getrq   r   r   r   )r   rh   section_nameshas_returns
has_yieldsmsgr   r   s           r   rj   zNumpyDocString._parseq  s   	++--..BBBBB=0.
 	": 	"ICS//! 	"jM99ICS//!"* 	( 	(Wg%%d++ FF7==3E3EFFF((7++88G$$ ((6@       !% 6 6w ? ?W    !% 6 6D !7 ! !W ##L11 ( $ 1 1'7 C CWJ&&#'#7#7#@#@Z   'W?	( 	(r   c                     t          | d          r>	 t          j        | j                  }n# t          $ r d }Y nw xY w|d| j         d| dz   }t          |          )N_objz in the docstring of z in .)hasattrinspectgetsourcefiler   	TypeErrorr   )r   r   filenames      r   rq   zNumpyDocString._error_location  s    4   	 "0;;       B	BBxBBBC oos   , ;;r{   c                 *    |t          |          |z  gS r"   )r4   )r   rM   symbols      r   _str_headerzNumpyDocString._str_header  s    c$ii&())r      c                 ,    g }|D ]}|d|z  |z   gz  }|S )Nr   rK   )r   r   indentr-   r   s        r   _str_indentzNumpyDocString._str_indent  s3     	) 	)DC&L4'((CC
r   c                 Z    | d         r!| d                              dd          gdgz   S dgS )NrR   *z\*r+   )replacer(   s    r   _str_signaturezNumpyDocString._str_signature  s;     	%--c599:bTAA4Kr   c                 .    | d         r| d         dgz   S g S )NrS   r+   rK   r(   s    r   _str_summaryzNumpyDocString._str_summary  s$    	? 		?bT))Ir   c                 .    | d         r| d         dgz   S g S )NrT   r+   rK   r(   s    r   _str_extended_summaryz$NumpyDocString._str_extended_summary  s(    "# 	*+rd22Ir   c                    g }| |         r||                      |          z  }| |         D ]}g }|j        r|                    |j                   |j        r|                    |j                   |d                    |          gz  }|j        rId                    |j                                                  r||                     |j                  z  }|dgz  }|S )Nr   r+   )r   rM   r   rN   r
   rO   r   r   )r   rM   r-   parampartss        r   _str_param_listzNumpyDocString._str_param_list  s    : 	4##D)))Cd 8 8: -LL,,,: -LL,,,

5))**: 8"''%*"5"5";";"="= 84++EJ777CB4KC
r   c                 l    g }| |         r)||                      |          z  }|| |         z  }|dgz  }|S rC   )r   )r   rM   r-   s      r   _str_sectionzNumpyDocString._str_section  sI    : 	4##D)))C4:CB4KC
r   c                    | d         sg S g }||                      d          z  }d}| d         D ]\  }}t          |t                    sJ g }|D ]7\  }}|r
d| d| d}	n|r
d| d| d}	nd|z  }	|                    |	           8d                    |          }	||	gz  }|r/||                     d                    |          g          z  }d}d	}||                     | j        g          z  }|r|d
gz  }|S )Nr^   Tr   z:``z%s, r   Fr+   )r   r   r   r   r
   r   empty_description)
r   	func_roler-   last_had_descr   rO   linksfuncr   links
             r   _str_see_alsozNumpyDocString._str_see_also  sn   J 	It
+++
+ 	B 	BKE4eT*****E# # #
d '.t..t...DD '3y33D333DD$;DT""""99U##DD6MC Bt''$(8999 $ %t'')?(@AAA 	B4KC
r   c                    | d         }g }d}|                     dd          }|rd}|d|z  gz  }|                                D ];\  }}|dk    rd}|d                    |d                    |                    gz  }<|r|S dS )	Nrc   Fr   r+   Tz.. index:: %sz
   :{}: {}r   )r   r   formatr
   )r   idxr-   output_indexdefault_indexr   
referencess          r   
_str_indexzNumpyDocString._str_index  s    7m	2.. 	 L-/00#&99;; 	I 	IGZ)##LL'':1F1FGGHHCC 	J2r   c                    g }||                                  z  }||                                 z  }||                                 z  }dD ]}||                     |          z  }||                     d          z  }||                     |          z  }dD ]}||                     |          z  }dD ]}||                     |          z  }||                                 z  }d                    |          S )N)rU   rV   rW   rX   r[   rY   rZ   r`   )r_   ra   rb   )r\   r]   r   )r   r   r   r   r   r   r  r
   )r   r   r-   
param_listr   s        r   __str__zNumpyDocString.__str__  s   t""$$$t  """t))+++
 		4 		4J 4''
333CCt  ,,,t!!),,,4 	( 	(A4$$Q'''CC3 	4 	4J4''
333CCt   yy~~r   N)F)r{   )r   )r+   )*rG   rH   rI   rJ   rh   r    r%   rs   rv   rx   r   r   r   r   r   _role_funcbacktick
_funcplain	_funcnamer   _funcnamenext_descriptionr   r   r   r   r   r   r   r   rj   rq   r   r   r   r   r   r   r   r   r  r  rK   r   r   rQ   rQ   l   sp        
RB4 	B 	b	
 	2 	" 	B 	" 	 	B 	b 	2 	B 	 	B  	b!" 	B#$ 	% H*  & & &) ) )' ' '& & &L L L% % %	 	 	
2 
2 
2   J E>M/Ju},t3j@4GI%%fj99M!))&*==MEL
7Y.788I
	
	 #	# 		
 	 	 	 		  
	 I 3 3 3j  &D D D,0( 0( 0(d  * * * *                <  $     r   rQ   c                   8    e Zd ZdZd Zd Zd Zd Zd
dZd Z	d	S )	Docstringzu
    Docstring modification.

    Parameters
    ----------
    docstring : str
        The docstring to modify.
    c                 R    d | _         || _        |d S t          |          | _         d S r"   )_ds
_docstringrQ   )r   rk   s     r   r    zDocstring.__init__8  s.    #F!),,r   c                 $   | j         dS t          t                    rgfd| j        d         D             }t	          |          t	                    z   t	          | j        d                   k    rt          d          || j        d<   dS )z
        Parameters
        ----------
        parameters : str, list[str]
            The names of the parameters to remove.
        Nc                 &    g | ]}|j         v|S rK   rM   )r   r   
parameterss     r   r   z/Docstring.remove_parameters.<locals>.<listcomp>K  s0     
 
 
z++ +++r   rU   z&One or more parameters were not found.)r  r   strr  r4   r   )r   r  repls    ` r   remove_parameterszDocstring.remove_parameters?  s     ?"Fj#&& 	&$J
 
 
 
,/
 
 

 t99s:&#dh|.D*E*EEEEFFF!%r   c                    | j         dS t          |t                    r|g}||| j        d         z   | j        d<   dS d}t	          | j        d                   D ]\  }}|j        |k    r|dz   } n|dk     rt                      | j        d         d|         |z   }|| j        d         |d         z  }|| j        d<   dS )a  
        Parameters
        ----------
        after : {None, str}
            If None, inset the parameters before the first parameter in the
            docstring.
        parameters : Parameter, list[Parameter]
            A Parameter of a list of Parameters.
        NrU   r   r*   r   )r  r   rL   r  r   rM   r   )r   afterr  locr   r   r   s          r   insert_parameterszDocstring.insert_parametersT  s     ?"Fj),, 	&$J=%/$(<2H%HDH\"""C%dh|&<==  5:&&a%CE ' Qww ll"Xl+DSD1J>Fdh|,STT22F%+DH\"""r   c                 r   | j         dS d                    t          t          j        |                    d                              }|| j        vr"t          d                    |                    t          |t                    s#t          | j        |         t                    r|g}|| j        |<   dS )a&  
        Parameters
        ----------
        block_name : str
            Name of the block to replace, e.g., 'Summary'.
        block : object
            The replacement block. The structure of the replacement block must
            match how the block is stored by NumpyDocString.
        Nr   z"{} is not a block in the docstring)r  r
   mapr  r   r   r  r   r   r   r   )r   
block_nameblocks      r   replace_blockzDocstring.replace_blockq  s     ?"FXXc#.*2B2B32G2GHHII
TX%%7>>zJJ   %&& 	:HZ $,
 ,
 	 GE$r   r   c                    | j         d S t          |t                    r|g}d | j        d         D             t	          |                                                                        }|r5t          d                    d	                    |                              fd|D             }t          j        | j                  }|D ]}|dk    r|dk    rg ni ||<   |||<   t          |                                          }|rt          j        |d|z            }d	                    |                    d          d	d                    }|S )
Nc                     i | ]
}|j         |S rK   r  )r   r   s     r   
<dictcomp>z0Docstring.extract_parameters.<locals>.<dictcomp>  s    KKK5UZKKKr   rU   z"{} were not found in the docstringr   c                      g | ]
}|         S rK   rK   )r   r   	ds_paramss     r   r   z0Docstring.extract_parameters.<locals>.<listcomp>  s    :::e5!:::r   rc   r   r   r   )r  r   r  r  set
differencekeysr   r   r
   rf   rg   r   r   r   r   )	r   r  r   missingfinaldsro   r-   r(  s	           @r   extract_parameterszDocstring.extract_parameters  s_   ?"Fj#&& 	&$JKKDH\4JKKK	j//,,Y^^-=-=>> 	"F388G#4#455   ;:::z:::]48$$ 	  	 Cl"" #w""B33"ggmmoo 	5/#sV|44Cii		$+,,
r   c                 *    t          | j                  S r"   )r  r  r(   s    r   r  zDocstring.__str__  s    48}}r   NrF   )
rG   rH   rI   rJ   r    r  r  r#  r/  r  rK   r   r   r  r  .  s}         - - -& & &*, , ,:% % %0   6    r   r  c                 p    | dS t          |           }|                    |           t          |          S )z
    Parameters
    ----------
    docstring : str
        The docstring to modify.
    parameters : str, list[str]
        The names of the parameters to remove.

    Returns
    -------
    str
        The modified docstring.
    N)r  r  r  )rk   r  r.  s      r   r  r    s;     	9		B$$$r77Nr   c                 8    | dS t          j        | ||          S )a  
    Non-protected indent

    Parameters
    ----------
    text : {None, str}
        If None, function always returns ""
    prefix : str
        Prefix to add to the start of each line
    predicate : callable, optional
        If provided, 'prefix' will only be added to the lines
        where 'predicate(line)' is True. If 'predicate' is not provided,
        it will default to adding 'prefix' to all non-empty lines that do not
        consist solely of whitespace characters.

    Returns
    -------

    Nr+   )	predicate)r   r   )r   prefixr3  s      r   r   r     s%    ( |r?49====r   r"   )rJ   collectionsr   collections.abcr   rf   r   r   r   statsmodels.tools.sm_exceptionsr   r   r   r   rL   rQ   r  r  r   rK   r   r   <module>r8     se    # " " " " " # # # # # #   				  6 6 6 6 6 69 9 9
  J. J. J. J. J. J. J. J.Z J{$<$<$<==	    W   Dw w w w w w w wt  *> > > > > >r   