U
    Ãmœd¢>  ã                   @   sä   d dl Zd dlmZmZmZ d dlmZ d dl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 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„ Zdd„ Zdd„ Z dd „ Z!d!d"„ Z"d#d$„ Z#dS )%é    N)Úassert_equalÚassert_Úassert_allclose)ÚOLS)ÚGLM)ÚBinomial)Ú
_calc_gradÚ_calc_wdesign_matÚ_est_regularized_debiasedÚ_join_debiasedÚ_est_regularized_naiveÚ_est_unregularized_naiveÚ_join_naiveÚDistributedModelc           	      c   sÐ   |j d }t || ¡}t || ¡}|||  }d}||d k rŠt|| ƒ}t||d  ƒ}| ||… |||…dd…f fV  |d7 }q6t|| ƒ}t||d  | ƒ}| ||… |||…dd…f fV  dS )úpartitions datar   é   N)ÚshapeÚnpÚceilÚfloorÚint)	ÚendogÚexogÚ
partitionsÚn_exogÚn_partÚremZstpÚiiZjj© r   úk/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/base/tests/test_distributed_estimation.pyÚ	_data_gen   s    
"
r    c                  C   st   t j d¡ t jjdd�} t jjdddd�}t jjdd�}t|| ƒ}t||dd	i ƒ}t|t  d
ddg¡ddd� d S )NéA¤ ©é2   é   ©Úsizer   é   r#   r$   g{®Gáz„?r   g§"ÆÂ3@g’yä~ÀgÙ^zoL@ç�íµ ÷Æ°>©ZatolZrtol)	r   ÚrandomÚseedÚnormalÚrandintr   r   r   Úarray)ÚXÚyÚbetaÚmodÚgradr   r   r   Útest_calc_grad"   s    
 ÿr4   c               	   C   sÌ   t j d¡ t jjdd�} t jjdddd�}t jjdd�}t|| ƒ}t||i ƒ}t|t  ddd	gd
ddgdddgg¡ddd� t	|| t
ƒ d�}t||i ƒ}t|t  dddgdddgdddgg¡ddd� d S )Nr!   )r$   r$   r%   r   r'   r$   g>éD‚©æô?gÏôc™~™¿g¼Yƒ÷U9õ?gç7L4HAá¿g°XÃEîéÞ¿g”i4¹ƒæ¿gïô¥·Ÿ
Àg(5
Éà?gÿÌ >°ãÁ¿r(   r)   ©ÚfamilygZÔ'¹Ã&Ú?gléÑTOæ¿g F�6ŽÚ?gƒS°ÆÙÐ¿gˆ½PÀv0Î¿g/m8,üÕ¿g×L¾ÙæÆ¼¿g�½3Úª$’?g°«ÉSVs¿)r   r*   r+   r,   r-   r   r	   r   r.   r   r   )r/   r0   r1   r2   Zdmatr   r   r   Útest_calc_wdesign_mat3   s,    
þ ýþ ýr7   c            	      C   s´  t j d¡ t jjdd�} t jjdddd�}t jjdd�}t|| ƒ}t|dddd	id
�}|d }|d }|d }|d }tt|t	ƒƒ t
|j|jƒ t
|j|jƒ tt|tƒƒ tt|tƒƒ t
t|ƒt|ƒƒ t
|d jdƒ tt|d tƒƒ t|| tƒ d�}t|dddd	id
�}|d }|d }|d }|d }tt|t	ƒƒ t
|j|jƒ t
|j|jƒ tt|tƒƒ tt|tƒƒ t
t|ƒt|ƒƒ t
|d jdƒ tt|d tƒƒ d S )Nr!   r"   r%   r   r'   r#   r$   Úalphaç      à?©Úfit_kwdsr   )r'   r5   )r   r*   r+   r,   r-   r   r
   r   Ú
isinstanceÚtupler   r   ÚlistÚlenÚfloatr   r   )	r/   r0   r1   r2   ÚresZbhatr3   Zghat_lZthat_lr   r   r   Útest_est_regularized_debiasedM   s@    
rB   c                  C   sœ   t j d¡ t jjdd�} t jjdddd�}t jjdd�}t|| ƒ}t|dddd	id
�}t|j|jƒ t	|| t
ƒ d�}t|dddd	id
�}t|j|jƒ d S ©Nr!   r"   r%   r   r'   r#   r$   r8   r9   r:   r5   )r   r*   r+   r,   r-   r   r   r   r   r   r   ©r/   r0   r1   r2   rA   r   r   r   Útest_est_regularized_naivex   s    
rE   c                  C   sœ   t j d¡ t jjdd�} t jjdddd�}t jjdd�}t|| ƒ}t|dddd	id
�}t|j|jƒ t	|| t
ƒ d�}t|dddd	id
�}t|j|jƒ d S rC   )r   r*   r+   r,   r-   r   r   r   r   r   r   rD   r   r   r   Útest_est_unregularized_naive�   s    
rF   c                  C   sò   t j d¡ t jjdd�} t jjdddd�}t|| ƒ}g }tdƒD ]"}t||dddid	�}| |¡ qBt	|ƒ}t
|t  d
ddg¡ddd� t|| tƒ d�}g }tdƒD ]"}t||dddid	�}| |¡ q¦t	|ƒ}t
|t  dddg¡ddd� d S )Nr!   r"   r%   r   r'   r#   r8   çš™™™™™¹?r:   gNA~6rÅ¿gÀuÅŒðö�¿gJµOÇcÖ¿r(   r)   r5   çÉÈYØÓÅ¿çKu/3lÚ¿ç{Ic´ŽªÌ¿)r   r*   r+   r,   r-   r   Úranger
   Úappendr   r   r.   r   r   ©r/   r0   r2   Zres_lÚirA   Zjoinedr   r   r   Útest_join_debiased¢   s.    
 ÿ ÿrO   c                  C   sò   t j d¡ t jjdd�} t jjdddd�}t|| ƒ}g }tdƒD ]"}t||dddid	�}| |¡ qBt	|ƒ}t
|t  d
ddg¡ddd� t|| tƒ d�}g }tdƒD ]"}t||dddid	�}| |¡ q¦t	|ƒ}t
|t  dddg¡ddd� d S )Nr!   r"   r%   r   r'   r#   r8   rG   r:   gYü¦°RA•¿g        r(   r)   r5   )r   r*   r+   r,   r-   r   rK   r   rL   r   r   r.   r   r   rM   r   r   r   Útest_join_naive¿   s.    
 ÿ ÿrP   c                  C   sì  t j d¡ t jjdd�} t jjdddd�}tdtd�}|jt|| dƒd	d
did�}t	|j
t  dddg¡ddd� tdtd�}|jt|| dƒd	d
did�}t	|j
t  dddg¡ddd� tdtd�}|jt|| dƒd	d
did�}t	|j
t  dddg¡ddd� tdtdtƒ id�}|jt|| dƒd	d
did�}t	|j
t  dddg¡ddd� tdtdtƒ id�}|jt|| dƒd	d
did�}t	|j
t  ddd g¡ddd� tdtdtƒ id�}|jt|| dƒd	d
did�}t	|j
t  d!d"d#g¡ddd� d S )$Nr!   r"   r%   r   r'   r#   r   ©Úmodel_classÚ
sequentialr8   r9   ©Zparallel_methodr;   çúÒÛŸ‹†È¿ç$˜À­»‰¿çÆNx	N}Ö¿r(   r)   çPþî5&Ä¿çç§8¼Zž¿çÂÛƒ�/Þ¿r$   çŠ’�HÛø¿¿çI‚pª¿ç|}­K�ÐÙ¿r6   ©rR   Ú	init_kwdsrH   rI   rJ   çÜž ±Ý=Â¿çš°ýdŒ×¿çYÝê9éÒ¿ç@¢CàH¼¿çÂÁÞÄ�œÓ¿çö_ç¦Í8Ï¿©r   r*   r+   r,   r-   r   r   Úfitr    r   Úparamsr.   r   r   ©r/   r0   r2   rg   r   r   r   Útest_fit_sequentialÜ   sr    ÿ ÿÿ ÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿrj   c                  C   sì  t j d¡ t jjdd�} t jjdddd�}tdtd�}|jt|| dƒd	d
did�}t	|j
t  dddg¡ddd� tdtd�}|jt|| dƒd	d
did�}t	|j
t  dddg¡ddd� tdtd�}|jt|| dƒd	d
did�}t	|j
t  dddg¡ddd� tdtdtƒ id�}|jt|| dƒd	d
did�}t	|j
t  dddg¡ddd� tdtdtƒ id�}|jt|| dƒd	d
did�}t	|j
t  ddd g¡ddd� tdtdtƒ id�}|jt|| dƒd	d
did�}t	|j
t  d!d"d#g¡ddd� d S )$Nr!   r"   r%   r   r'   r#   r   rQ   Zjoblibr8   r9   rT   rU   rV   rW   r(   r)   rX   rY   rZ   r$   r[   r\   r]   r6   r^   rH   rI   rJ   r`   ra   rb   rc   rd   re   rf   ri   r   r   r   Útest_fit_joblib  sr    ÿ ÿÿ ÿÿ ÿÿÿ ÿÿÿ ÿÿÿ ÿrk   c                  C   s0  t j d¡ d} d}d}t jj|d�}|t j dd|¡ }t jj| |fd�}| |¡t jj| d� }t|ƒ}|jt|||ƒddid	�}t|t	t
d
�}|jt|||ƒddid	�}	t||ƒ}
|
jdd�}t|j|jƒ t|	j|jƒ t|t	t
d
�}|jt|||ƒddid	�}	t||ƒ}
|
jdd�}t|	j|jƒ d S )Nr!   éÈ   é
   r   r%   r   r'   r8   r:   ©Úestimation_methodÚjoin_method©r8   rG   )r   r*   r+   r,   r-   Údotr   rg   r    r   r   r   r   rh   Úfit_regularized)ÚNÚpÚmr1   r/   r0   Údb_modÚfitOLSdbÚnv_modÚfitOLSnvÚols_modÚfitOLSr   r   r   Útest_single_partition<  s2    ÿ
ÿ
r}   c            
      C   sâ   t j d¡ d} d}d}t jj|d�}|t j dd|¡ }t jj| |fd�}| |¡t jj| d� }t|ƒ}|jt|||ƒddid	�}t	t  
t  |j¡¡dƒ t|ttd
�}|jt|||ƒddid	�}	t	t  
t  |	j¡¡dƒ d S )Nr!   é(   é   r%   r   r'   r8   rG   r:   rn   )r   r*   r+   r,   r-   rr   r   rg   r    r   ÚsumÚisnanrh   r   r   )
rt   ru   rv   r1   r/   r0   rw   rx   ry   rz   r   r   r   Útest_larger_pc  s     ÿr‚   c                  C   sÎ   t j d¡ d} d}d}t jj|d�}|t j dd|¡ }t jj| |fd�}| |¡t jj| d� }t|dd	id
�}|jt|||ƒddid�}t	||ƒ}|j
dd�}	d|jdk }
d|	jdk }t|
|ƒ d S )Nr!   rl   rm   r   r%   r   r'   Ú	thresholdg¤p=
×£À?)Z	join_kwdsr8   rG   r:   rq   r   )r   r*   r+   r,   r-   rr   r   rg   r    r   rs   rh   r   )rt   ru   rv   r1   r/   r0   rw   rx   r{   r|   Znz_params_dbZnz_params_olsr   r   r   Útest_non_zero_params{  s    
r„   c                  C   s¼   t j d¡ d} d}d}t jj|d�}|t j dd|¡ }t jj| |fd�}| |¡t jj| d� }dd	„ }t|ttd
�}|j	||||ƒddid�}t
||ƒ}	|	jdd�}
t|j|
jƒ d S )Nr!   rl   rm   r   r%   r   r'   c                 s   s@   |j d }t || ¡}d}||k r<| |fV  |t|ƒ7 }qdS )r   r   N)r   r   r   r   )r   r   r   r   r   r   r   r   r   Ú_rep_data_gen£  s    

z,test_repeat_partition.<locals>._rep_data_genrn   r8   rG   r:   rq   )r   r*   r+   r,   r-   rr   r   r   r   rg   r   rs   r   rh   )rt   ru   rv   r1   r/   r0   r…   ry   rz   r{   r|   r   r   r   Útest_repeat_partition”  s     ÿ
r†   c                  C   s¦  t j d¡ d} d}d}t jj|d�}|t j dd|¡ }t jj| |fd�}| |¡t jj| d� }t|ƒ}|jt|||ƒdd	id
�}t j	 
|j| ¡}t|ttd�}	|	jt|||ƒdd	id
�}
t j	 
|
j| ¡}t||k ƒ ddt  | |¡ t jj| d� ¡  }d|dk }t|tdtƒ id�}|jt|||ƒdd	id
�}t j	 
|j| ¡}t|tdtƒ ittd�}	|	jt|||ƒdd	id
�}t j	 
|j| ¡}t||k ƒ d S )Nr!   rl   rm   é   r%   r   r'   r8   gš™™™™™É?r:   rn   r   g      ð?r9   r6   r^   )rR   r_   ro   rp   )r   r*   r+   r,   r-   rr   r   rg   r    ZlinalgZnormrh   r   r   r   Úexpr   r   )rt   ru   rv   r1   r/   r0   rw   rx   ZolsdbÚn_modZfitOLSnZolsnZprobZfitGLMdbZglmdbZfitGLMnZglmnr   r   r   Útest_debiased_v_average¸  s@    ÿ(ÿýrŠ   )$Únumpyr   Znumpy.testingr   r   r   Z#statsmodels.regression.linear_modelr   Z+statsmodels.genmod.generalized_linear_modelr   Zstatsmodels.genmod.familiesr   Z'statsmodels.base.distributed_estimationr   r	   r
   r   r   r   r   r   r    r4   r7   rB   rE   rF   rO   rP   rj   rk   r}   r‚   r„   r†   rŠ   r   r   r   r   Ú<module>   s(   (+00'$