U
    Kvf  ã                   @   sx  d dl Zd dlmZmZmZ d dlZd dlmZ	 d dl
mZ d dlmZmZmZ zd dlZdZW n ek
rx   dZY nX dd„ Zd	d
„ Zej dddg¡ej de ¡ ejddejdde ¡ e e	j¡eje	jdd ddœdg¡ej dddg¡dd„ ƒƒƒZejjej dddg¡ej de ¡ dddgejdddddgejdddddge ¡ dddgg¡dd „ ƒƒƒZdS )!é    N)Úassert_allcloseÚassert_array_equalÚassert_equal)Úknockoff_regeffects)ÚRegressionFDRÚ_design_knockoff_equiÚ_design_knockoff_sdpTFc            	      C   s¼   t j d¡ t jjdd} t| ƒ\}}}t j||fdd}t  |j|¡}|dd…dd…f }|dd …dd …f }|dd…dd …f }t||ddd	 t|| t  	|t  
d¡ ¡ddd	 d S )
Né&	  ©é
   é   ©Úsizeé   ©Zaxisr   r   ç-Cëâ6?©ZrtolZatol)ÚnpÚrandomÚseedÚnormalr   ÚconcatenateÚdotÚTr   ÚdiagÚones©	ZexogZexog1Zexog2ÚslZexogaZgmatZcm1Zcm2Zcm3© r   úI/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/stats/tests/test_knockoff.pyÚ	test_equi   s    r    c            	      C   sÄ   t sd S tj d¡ tjjdd} t| ƒ\}}}tj||fdd}t |j|¡}|dd…dd…f }|dd …dd …f }|dd…dd …f }t	||ddd	 t	|| t 
|t d¡ ¡d
d
d	 d S )Nr	   r
   r   r   r   r   r   r   r   gñhãˆµøä>)Ú
has_cvxoptr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Útest_sdp%   s    r"   Úpé1   é2   Útester)Zpursuitr   )ZL1_wtÚalpha)Zfit_kwsÚmethodZequiÚsdpc                 C   s|   |dkrt sd S tj d¡ d}tjj|d}tjj|| fd}t||||d}tt|jƒ| ƒ tt|j	ƒ| ƒ | 
¡  d S )Nr)   i€	  éÈ   r   )Zdesign_method)r!   r   r   r   r   r   r   ÚlenÚstatsÚfdrÚsummary)r#   r&   r(   ÚnÚyÚxÚknr   r   r   Útest_testers<   s    r3   ztester,n,p,esi,  éd   é   g      @i¸  r*   c                 C   sŒ  | dkrt sd S tj d¡ d}d}d}| dkr8t s8d S d\}}	t|ƒD ]}
tjj||fd}|t t || d¡¡ }|d	t |¡  }t 	|d d …d|…f |¡tjj|d }t
|||ƒ}| |¡}t |j|k¡}t |j|d … |k¡}||t|d
ƒ 7 }|	t |jd|… |k¡7 }	t |j| k¡d
t |j|k¡  }t||k dƒ qH|	| }	|| }t|	dkdƒ t||d k dƒ d S )Nr)   iâ¨  é   gš™™™™™É?r   )r   r   r   r   éÿÿÿÿr   Tg333333ã?gš™™™™™¹?)r!   r   r   r   Úranger   ÚsqrtÚsumZaranger   r   Ú	thresholdr,   ÚmaxZmeanr   r   )r(   r&   r/   r#   ÚesZnposZ
target_fdrZnrepr-   ÚpowerÚkr1   Zcoeffr0   r2   ÚtrÚcpÚfpZestimated_fdrr   r   r   Útest_simX   s8    *
ÿrC   ) Znumpyr   Znumpy.testingr   r   r   ZpytestZstatsmodels.apiÚapiÚsmZstatsmodels.statsr   ZkrZstatsmodels.stats._knockoffr   r   r   Zcvxoptr!   ÚImportErrorr    r"   ÚmarkZparametrizeZCorrelationEffectsZForwardEffectsZ
OLSEffectsZRegModelEffectsZOLSr3   ZslowrC   r   r   r   r   Ú<module>   sD   




ÿú	ü