U
    Kvf>                     @   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 rt|| }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   V/tmp/pip-unpacked-wheel-2v6byqio/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 )NA 2      sizer      r#   r$   g{Gz?r   g"3@gy~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~gYU9?g7L4HAgXE޿gi4g
g(5
?g >r(   r)   familygZ'&?glTOg F6?gSпgPv0οg/m8,տgLƼg3ڪ$?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	}|| qt	|}t
|t dddgddd d S )Nr!   r"   r%   r   r'   r#   r8   皙?r:   gNA~6rſguŌgJOcֿ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	}|| qt	|}t
|t dddgddd d S )Nr!   r"   r%   r   r'   r#   r8   rG   r:   gYRAg        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Ip|}Kٿr6   rR   	init_kwdsrH   rI   rJ   ܞ =¿皰d׿Y9ҿ@CHĐӿ_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'   	thresholdgp=
ף?)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olsdbZn_modZfitOLSnZolsnZprobZfitGLMdbZglmdbZfitGLMnZglmnr   r   r   test_debiased_v_average  s@    (r   )$Z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'$