U
    Ãmœd')  ã                   @   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   úb/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/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)Úscoper;   Úidsc                 C   s
   t | jŽ S ©N©r-   r3   ©Úrequestr   r   r   Údata6   s    rD   c                 C   s
   t | jŽ S r@   rA   rB   r   r   r   Ú
basic_data;   s    rE   c                 C   s
   t | jŽ S r@   rA   rB   r   r   r   Úweighted_data@   s    rF   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    
rI   c                 C   s>   t | tjtjfƒr.| j|| |… }t |¡S | || |… S r@   )rG   r    r"   r!   rH   r   Úasarray)r(   r,   ÚwindowÚoutr   r   r   Úget_subK   s    
rM   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 	|¡¡p€t t 	|¡¡¡||d < qBt
|j|ƒ d S )Néd   ©rK   r   r   )Zdtyper   )r   r   Zzerosr   Úboolr   rM   ZsqueezeÚanyÚisnanr   Z_has_nan)	rD   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 )NrN   )r   rK   T)Úuse_tr   Údrop)r   r&   r   ç:Œ0âŽyE>©Zatol)r   Úfitr   r   rM   r   Z	ones_liker   rI   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)rF   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 )NrN   rO   )rW   r`   r   rX   )r&   r   rY   rZ   Úignore)Úinvalid)r   r1   )r   r[   Zconf_intZ
cov_paramsr   r   rM   r   r   rI   ZtvaluesZbseZpvaluesZfvaluer   ZerrstateZf_pvaluer`   ÚAssertionErrorrW   rG   r    r!   rH   rJ   ZreshapeÚT)rD   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 … ¡¡s t‚d S )NrN   rX   )rK   r&   r   éc   Úskip)rK   r&   )
r   r[   r   rJ   r;   ÚallÚisfiniterc   rQ   rR   )rD   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é<   rN   )rK   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s˜t‚d S )Nrs   ©rK   r   T)Zremove_data)	r	   r[   r   ÚsaveÚseekÚ	__class__ÚloadÚtyperc   )rD   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axisrN   ©rK   rD   r   ry   )rK   rD   )	r-   r    Úconcatr   Úfrom_formular[   r   r;   r	   )
r   r(   r+   ÚfmlarD   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ƒ   rN   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_coefficientrG   ZFigurerc   rt   ru   rv   ÚwarningsÚcatch_warningsÚsimplefilter)
Zpltr   r(   r+   r‡   rD   rS   r\   r�   rL   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;   )	rE   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š   )rE   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¡s†t	‚d S )Nr•   r   r   rq   )
r   rQ   rR   rJ   r	   r[   r#   Úminri   rc   )rE   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 … ¡¡sžt‚d S )	Nr•   é2   T)rr   Z	expandingé1   r   rƒ   r   )r   rJ   r	   r[   r;   ri   rR   rc   ÚwhereZcumsumrj   )	rE   r   r(   r+   ZxarS   r\   r;   Úfirstr   r   r   Útest_expanding(  s    

,r£   )Fr
   F)4Úior   Ú	itertoolsr   r�   Ú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fixturerD   rE   rF   rI   rM   rV   r_   ÚmarkZparametrizerf   rk   rx   r€   rˆ   Z
matplotlibr“   r›   rœ   rž   r£   r   r   r   r   Ú<module>   sZ   



'!
!


	