U
    Kvf')                     @   s  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mZ d dlmZ d dlmZ d dlmZmZ dDd
dZdZdZdZdZeeeeeeeZdd eD Zdd eD Zdd eD Zdd eD Zdd eD Ze	jdeeddd Z e	jdeeddd Z!e	jdeeddd Z"dd Z#d d! Z$d"d# Z%d$d% Z&e	j'(d&d'd(ge	j'(d)dd*dgd+d, Z)d-d. Z*d/d0 Z+d1d2 Z,d3d4 Z-e	j'j.d5d6 Z/e	j'(d7d*dgd8d9 Z0e	j'(d:d;d<d=gd>d? Z1d@dA Z2dBdC Z3dS )E    )BytesIO)productN)assert_allcloseassert_array_equal)tools)WLS)
RollingWLS
RollingOLSF        c                 C   s  t jd}|| |f}dd t|D }|rDt|}dg| }|dkrf||j|k }	t j	||	< |jd dkr|d d d df 
d||  }
n|
d||  }
|d|
jd	 d }|rtjd
| d}tj|||d}tj|
|dd}
tj||dd}|sd }|
||fS )Ni&:c                 S   s   g | ]}d  |qS )zx{0})format).0i r   M/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/regression/tests/test_rolling.py
<listcomp>   s     zgen_data.<locals>.<listcomp>constr
         r   z
12-31-1999)Zperiods)indexcolumnsy)r   nameweights)nprandomZRandomStateZstandard_normalranger   Zadd_constantZrandom_sampleshapenansumZ	chisquarepdZ
date_range	DataFrameSeries)nobsnvarr   pandasmissingr   rsxcolsmaskr   widxr   r   r   gen_data   s*    


&r-   )   )   r   TF)r   g?c                 C   s$   g | ]}|d  |d  dkr|qS )r      r   r   r   paramr   r   r   r   .   s      r   c                 C   s   g | ]}d  tt|qS -joinmapstrr2   r   r   r   r   /   s     c                 C   s    g | ]}t d  rt d r|qS )r1      )paramsr2   r   r   r   r   1   s       c                 C   s    g | ]}d D ]}||f qqS )r0   r   )r   r3   tfr   r   r   r   2   s       c                 C   s   g | ]}d  tt|qS r4   r6   r2   r   r   r   r   3   s     module)Zscoper;   idsc                 C   s
   t | j S Nr-   r3   requestr   r   r   data6   s    rC   c                 C   s
   t | j S r?   r@   rA   r   r   r   
basic_data;   s    rD   c                 C   s
   t | j S r?   r@   rA   r   r   r   weighted_data@   s    rE   c                 C   s$   t | tjtjfr| j| S | | S r?   )
isinstancer    r"   r!   iloc)r(   r,   r   r   r   
get_singleE   s    
rH   c                 C   s>   t | tjtjfr.| j|| | }t|S | || | S r?   )rF   r    r"   r!   rG   r   asarray)r(   r,   windowoutr   r   r   get_subK   s    
rL   c           	      C   s   | \}}}t ||d|d}tj|jd td}td|jd d D ]J}t||d}t||d}ttt	|ptt	|||d < qBt
|j| d S )Nd   rJ   r   r   )Zdtyper   )r   r   zerosr   boolr   rL   Zsqueezeanyisnanr   Z_has_nan)	rC   r   r(   r+   modZhas_nanr   _y_xr   r   r   test_has_nanR   s    
rV   c                 C   s&  | \}}}t |||dd}|jdd}td|jd D ]}t||d}t||d}|d k	rjt||d}	n
t|}	t|||	dd }
t|j	|d }t|j
|d }t||
j	 t||
j
 tt|j|d |
j tt|j|d |
j tt|j|d |
j tt|j|d |
j tt|j|d |
j t|j|
j tt|j|d |
j tt|j|d |
jd	d
 t|j|
j tt|j|d |
j tt|j|d |
j tt|j|d |
j tt|j|d |
jd	d
 tt|j|d |
jd	d
 tt|j|d |
j q6d S )NrM   )r   rJ   T)use_tr   drop)r   r&   r   :0yE>Zatol)r   fitr   r   rL   r   Z	ones_liker   rH   r;   r#   r   ZssrZllfZaicZbicZcentered_tssZdf_modelZdf_residZessZ
k_constantZ	mse_modelZ	mse_residZ	mse_totalZrsquaredZrsquared_adjZuncentered_tss)rE   r   r(   r+   rS   resr   rT   rU   _wwlsZrolling_paramsZrolling_nobsr   r   r   test_weighted_against_wls_   sP    

     r_   cov_typeZ	nonrobustZHC0rW   Tc              
   C   s  | \}}}t ||d|d}|j||d}| }|  td|jd D ]>}	t||	d}
t||	d}t|
|ddj||d}tt	|j
|	d |j
 tt	|j|	d |j tt	|j|	d |jdd	 tt	|j|	d |j tjd
d" tt	|j|	d |jdd	 W 5 Q R X |j|jks(t|j|jks:t| }t|tjrp|j|	d  }t|d}n||	d  j}t|| qHd S )NrM   rN   )rW   r`   r   rX   )r&   r   rY   rZ   ignore)invalid)r   r1   )r   r[   Zconf_intZ
cov_paramsr   r   rL   r   r   rH   ZtvaluesZbseZpvaluesZfvaluer   ZerrstateZf_pvaluer`   AssertionErrorrW   rF   r    r!   rG   rI   ZreshapeT)rC   rW   r`   r   r(   r+   rS   r\   cir   rT   rU   r^   Zwls_ciZci_valr   r   r   test_against_wls_inference   s6    
  rf   c                 C   s   | \}}}t ||dd|d}| }t|j}tt|dd  sLttt	|s`d S t ||ddd}| }t|j}tt	|dd  std S )NrM   rX   )rJ   r&   r   c   skip)rJ   r&   )
r   r[   r   rI   r;   allisfiniterc   rQ   rR   )rC   r   r(   r+   rS   r\   r;   r   r   r   
test_raise   s    
rk   c               	   C   s   t ddd\} }}tjtdd t| |jdd W 5 Q R X tt t| |jdd	 W 5 Q R X tjtd
d t| |dd W 5 Q R X tjtd
d t| |ddd W 5 Q R X d S )Nr.   r1   Tz reset must be a positive integermatchr   )resetunknown)methodzmin_nobs must be largerr   min_nobs<   rM   )rJ   rr   )r-   pytestraises
ValueErrorr   r[   )r   r(   _r   r   r   
test_error   s    rx   c                 C   s   | \}}}t ||dd }t }|| |dd |j|}t|t|ksXtt }|j|dd |dd |j|}t|t|kstd S )Nrs   rJ   r   T)Zremove_data)	r	   r[   r   saveseek	__class__loadtyperc   )rC   r   r(   r+   r\   fhZres_unpickledr   r   r   test_save_load   s    

r   c            
      C   s   t ddddd\} }}d}tj| |gdd}tj|d||d	}| }t| |dd
}| }t|j|j tj|d|d}	|	  d S )Nr.   r/   Tr%   y ~ 1 + x0 + x1 + x2r   ZaxisrM   rJ   rC   r   ry   )rJ   rC   )	r-   r    concatr   from_formular[   r   r;   r	   )
r   r(   r+   fmlarC   rS   r\   ZaltZalt_resZols_modr   r   r   test_formula   s    r   c            
   	   C   s>  dd l m}  tddddd\}}}d}tj||gdd}tj|d	||d
}| }| }t	|| j
sjt|jdd dd |jdd dd |jddgd dd |jdgd dd |jdddgd dd tjtdd |jdd W 5 Q R X | 
 }t  td |j|d}	W 5 Q R X |	|ks,t|jd dd d S )Nr   r.   r/   Tr   r   r   r   rM   r   r1   )      )	variablesalphafigsizeZx0x1Zx2zvariable x4 is not an integerrl   Zx4)r   ra   )fig)r   r   )Zmatplotlib.pyplotZpyplotr-   r    r   r   r   r[   Zplot_recursive_coefficientrF   ZFigurerc   rt   ru   rv   warningscatch_warningssimplefilter)
Zpltr   r(   r+   r   rC   rS   r\   r   rK   r   r   r   	test_plot   sB          

r   params_onlyc           	      C   s`   | \}}}t ||d}|jd|d}|jd|d}|jd|d}t|j|j t|j|j d S )N   invrp   r   lstsqpinvr	   r[   r   r;   )	rD   r   r   r(   rw   rS   Zres_invZ	res_lstsqZres_pinvr   r   r   test_methods  s    
r   rp   r   r   r   c                 C   sD   | \}}}t ||d}|j|dd}|j|dd}t|j|j d S )Nr   Fr   Tr   )rD   rp   r   r(   rw   rS   r\   Zres_params_onlyr   r   r   test_params_only  s
    
r   c                 C   s   | \}}}t t t |s$d S t||d}| }|j|jdk  d }t||d|d}| }t |j|jdk |kst	d S )Nr   r   r   rq   )
r   rQ   rR   rI   r	   r[   r#   minri   rc   )rD   r   r(   r+   rS   r\   rr   r   r   r   test_min_nobs  s    
r   c           	      C   s   | \}}}t |}t||dddd}| }t |j}t t |d d sVtt t 	t jt 
|dddkd d }t t 
||d  std S )	Nr   2   T)rr   Z	expanding1   r   r   r   )r   rI   r	   r[   r;   ri   rR   rc   whereZcumsumrj   )	rD   r   r(   r+   ZxarS   r\   r;   firstr   r   r   test_expanding(  s    

,r   )Fr
   F)4ior   	itertoolsr   r   Znumpyr   r%   r    rt   Znumpy.testingr   r   Zstatsmodelsr   Z#statsmodels.regression.linear_modelr   Zstatsmodels.regression.rollingr   r	   r-   r#   r$   r<   r&   listr;   r>   Zbasic_paramsZweighted_paramsZweighted_idsZfixturerC   rD   rE   rH   rL   rV   r_   markZparametrizerf   rk   rx   r   r   Z
matplotlibr   r   r   r   r   r   r   r   r   <module>   sZ   



'!
!


	