U
    mdd                     @   s|  d 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	m
Z
mZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm  mZ G d	d
 d
ee	ZG dd dee
ZG dd deeZG dd deeZG dd dZG dd deZG dd deZG dd deZG dd deZ G dd deZ!G dd deZ"G dd  d eZ#G d!d" d"eZ$G d#d$ d$eZ%G d%d& d&eZ&G d'd( d(eZ'G d)d* d*eZ(G d+d, d,e(Z)G d-d. d.e(Z*G d/d0 d0e(Z+G d1d2 d2e(Z,G d3d4 d4e(Z-G d5d6 d6eZ.G d7d8 d8e.Z/G d9d: d:e.Z0G d;d< d<e.Z1G d=d> d>eZ2G d?d@ d@e2Z3G dAdB dBe2Z4G dCdD dDe2Z5G dEdF dFe2Z6dS )GzL
Created on Sun May 10 12:39:33 2015

Author: Josef Perktold
License: BSD-3
    N)assert_allcloseassert_equal)PoissonLogitProbit)GLMfamily)TheilGLS)PenalizedMixinc                   @   s   e Zd ZdS )PoissonPenalizedN__name__
__module____qualname__ r   r   ^/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/base/tests/test_penalized.pyr      s   r   c                   @   s   e Zd ZdS )LogitPenalizedNr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdS )ProbitPenalizedNr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdS )GLMPenalizedNr   r   r   r   r   r   "   s   r   c                   @   sT   e Zd Zedd Zedd Zdd Zejj	dd Z
ejj	d	d
 Zdd ZdS )CheckPenalizedPoissonc                 C   s   t jd d\}}d}t j||dt j|dd   d d }|d9 }d|d d df< t |}d	t d|d  |d |< ||}| |}|| _|| _	|| _
d
| _d| _td d d | _|| _d| _tjdd
d| _|   d S )Ni )  
            ?      g333333?r   g      ?-C6?ư>F皙?)Zc0)nprandomseedrandZzerosarangedot_generate_endog	k_nonzeroxyrtolatolslice
exog_indexk_paramsskip_hessiansmpenZSCADSmoothedpenalty_initialize)clsZnobsZk_varsr'   r(   betalinpredr)   r   r   r   setup_class(   s4    


z!CheckPenalizedPoisson.setup_classc                 C   s&   t |}t jd t j|}|S )N  )r    expr!   r"   Zpoissonr3   r5   mur)   r   r   r   r&   E   s    
z%CheckPenalizedPoisson._generate_endogc              	   C   s   | j }| j}t|jdk | j t|j| j |j| j| j	d t|j
| j |j
| j| j	d t 0 tdt t|j| j |j| j| j	d W 5 Q R X t| | dd d S )Nr   r*   r+   ignore皙?r*   )res1res2r   paramssumr.   r   r-   r*   r+   bsewarningscatch_warningssimplefilterRuntimeWarningpvaluespredictselfr?   r@   r   r   r   test_params_tableL   s"     
 z'CheckPenalizedPoisson.test_params_tablec                 C   s   | j   d S N)r?   summaryrK   r   r   r   test_summary[   s    z"CheckPenalizedPoisson.test_summaryc                 C   sD   | j  }t| tstt| ts.tt| ts@td S rM   )r?   Zsummary2
isinstanceZas_latexstrAssertionErrorZas_htmlZas_text)rK   Zsummr   r   r   test_summary2_   s    
z#CheckPenalizedPoisson.test_summary2c                 C   s   | j }|jd }t|jtr$ddini }t|jj|f|| j |jj|f|| j dd | j	st| jt
rx| j }}n| jd d d f }| j}|jj|jf|||f }|jj|jf|||f }t||dd d S )N\(\?scaler   g?r>   {Gz?)r?   rA   rQ   modelr   r   scorer-   Zscore_numdiffr/   r,   ZhessianZhessian_numdiff)rK   r?   pkwdsZidx1Zidx2Zh1Zh2r   r   r   test_numdifff   s    
z"CheckPenalizedPoisson.test_numdiffN)r   r   r   classmethodr6   r&   rL   pytestmarkZsmokerP   rT   r\   r   r   r   r   r   &   s   



r   c                   @   s   e Zd Zedd ZdS )TestPenalizedPoissonNonePenalc                 C   sR   | j | j }}t||}|jdd| _t||}d|_|jdddd| _d| _d S Nr   dispbfgsd   methodmaxiterrc   h㈵>	r)   r(   r   fitr@   r   
pen_weightr?   r+   r3   r)   r(   modpmodr   r   r   r2      s    

z)TestPenalizedPoissonNonePenal._initializeNr   r   r   r]   r2   r   r   r   r   r`   ~   s   r`   c                   @   s   e Zd Zedd ZdS )TestPenalizedPoissonNoPenalc                 C   sR   | j | j }}t||}|jdd| _t||}d|_|jdddd| _d| _d S ra   rj   rm   r   r   r   r2      s    

z'TestPenalizedPoissonNoPenal._initializeNrp   r   r   r   r   rq      s   rq   c                   @   s   e Zd Zedd ZdS )TestPenalizedGLMPoissonNoPenalc                 C   sb   | j | j }}t||t d}| | _t||t | jd}d|_	|jdddd| _
d| _d S )Nr   r	   penalr   rd   re   rf   ri   )r)   r(   r   r	   r   rk   r@   r   r1   rl   r?   r+   rm   r   r   r   r2      s    
z*TestPenalizedGLMPoissonNoPenal._initializeNrp   r   r   r   r   rr      s   rr   c                   @   s   e Zd Zedd ZdS )TestPenalizedPoissonOraclec                 C   s   | j | j }}t||d d d | jf }|jdd| _t||| jd}| jd9  _d|j	_
|jdddd| _td | jd | _d	| _d S )
Nr   rb   rt         ?r=   rd   re   rf   {Gzt?r)   r(   r   r'   rk   r@   r   r1   rl   rt   taur?   r,   r-   r+   rm   r   r   r   r2      s    z&TestPenalizedPoissonOracle._initializeNrp   r   r   r   r   ru      s   ru   c                   @   s   e Zd Zedd ZdS )TestPenalizedGLMPoissonOraclec                 C   s   | j | j }}t||d d d | jf t d}| | _t||t | j	d}| j
d9  _
d|j_|jddd| _td | jd | _d| _d S )	Nr   rs   rw   r=   rd   re   )rg   rh   rx   r)   r(   r   r'   r	   r   rk   r@   r   r1   rl   rt   rz   r?   r,   r-   r+   rm   r   r   r   r2      s    $
z)TestPenalizedGLMPoissonOracle._initializeNrp   r   r   r   r   r{      s   r{   c                   @   s    e Zd Zedd Zdd ZdS )TestPenalizedPoissonOracleHCc                 C   s   | j | j }}d}t||d d d | jf }|j|dddd| _t||| jd}| jd9  _d|j	_
|j|dddd| _td | jd | _d	| _d S )
NHC0rd   re   r   cov_typerg   rh   rc   rv   rw   r=   rx   ry   r3   r)   r(   r   rn   ro   r   r   r   r2      s    

z(TestPenalizedPoissonOracleHC._initializec                 C   s   | j }| j}t| j jd dddd d}t| j j| tddddg}td	d
ddg}t|jd | j	 |dd t|j
d | j	 |dd t|jd | j	 || jd t|j
d | j	 |dd d S )Nr~   3Standard Errors are heteroscedasticity robust (HC0)FdescriptionZ	adjust_dfuse_tZscaling_factori!+P?S?}.?ȋ?8;͜?XEg.{?!	?ň!y?h㈵>r+   r   r>   rW   )r?   r@   r   r   cov_kwdsr    arrayr   rA   r'   rC   r+   rK   r?   r@   r   rA   rC   r   r   r   test_cov_type   s*        z*TestPenalizedPoissonOracleHC.test_cov_typeNr   r   r   r]   r2   r   r   r   r   r   r}      s   
r}   c                   @   s   e Zd Zedd ZdS )TestPenalizedGLMPoissonOracleHCc                 C   s   | j | j }}d}t||d d d | jf t d}|j|dddd| _t||t | j	d}| j
d9  _
d	|j_|j|dddd| _td | jd | _d
| _d S )Nr~   r   rd   re   r   r   rs   rw   r=   rx   r|   r   r   r   r   r2      s    $

z+TestPenalizedGLMPoissonOracleHC._initializeNrp   r   r   r   r   r      s   r   c                   @   s   e Zd Zedd ZdS )TestPenalizedPoissonGLMOracleHCc                 C   s   | j | j }}d}t||| jd}| jd9  _d|j_|j|dddd| _t	||t
 | jd	}| jd9  _d|j_|j|dddd| _td d d | _d
| _d S )Nr~   rv   rw   r=   rd   re   r   r   rs   r   )r)   r(   r   r1   rl   rt   rz   rk   r@   r   r	   r   r?   r,   r-   r+   r   r   r   r   r2     s     

z+TestPenalizedPoissonGLMOracleHC._initializeNrp   r   r   r   r   r     s   r   c                   @   s   e Zd Zedd ZdS )#TestPenalizedPoissonOraclePenalizedc                 C   s   | j | j }}t||d d d | jf | jd}|jdddd| _t||| jd}|jddddd| _td | jd | _	d| _
d S 	Nrv   rd   re   r   rf   Frg   rh   trimrc   MbP?)r)   r(   r   r'   r1   rk   r@   r?   r,   r-   r+   rm   r   r   r   r2   +  s    "z/TestPenalizedPoissonOraclePenalized._initializeNrp   r   r   r   r   r   )  s   r   c                   @   s    e Zd Zedd Zdd ZdS )$TestPenalizedPoissonOraclePenalized2c                 C   s   | j | j }}t||d d d | jf | jd}| jd9  _d|j_t	ddddg}|j
|d d	d
dd| _t	ddddddddddg
}t||| jd}| jd9  _d|j_|j
|d d	d
ddd| _td | jd | _d| _| j| _d S )Nrv   r   r=   jsR?y?.Ps.?>#?r   rd   re   r   )start_paramsrg   rh   rc   eBCR?繓8?.?RHދ?:$ž`zܴ?Lh>qsľ釘_};
cclҾT)r   rg   rh   r   rc   :0yE>r)   r(   r   r'   r1   rl   rt   rz   r    r   rk   r@   r?   r,   r-   r+   r.   )r3   r)   r(   rn   sp2params_notrimro   r   r   r   r2   =  sB    "        
   z0TestPenalizedPoissonOraclePenalized2._initializec                 C   s4   t | jj| jd  d t | jj| jd  d d S Nr   r   r?   rA   r'   rC   rO   r   r   r   
test_zerosW  s    z/TestPenalizedPoissonOraclePenalized2.test_zerosNr   r   r   r]   r2   r   r   r   r   r   r   ;  s   
r   c                   @   s    e Zd Zedd Zdd ZdS )&TestPenalizedPoissonOraclePenalized2HCc                 C   s   | j | j }}d}t||d d d | jf | jd}| jd9  _d|j_t	ddddg}|j
|d	 |d
ddd| _t	ddddddddddg
}t||| jd}| jd9  _d|j_|j
|d	 |d
dddd| _td | jd | _d| _| j| _d S )Nr~   rv   r   r=   r   r   r   r   r   rd   re   r   )r   r   rg   rh   rc   r   r   r   r   r   r   r   r   r   r   T)r   r   rg   rh   r   rc   g-q=r   )r3   r)   r(   r   rn   r   r   ro   r   r   r   r2   a  sF    "            z2TestPenalizedPoissonOraclePenalized2HC._initializec                 C   s   | j }| j}t| j jd t| j jjd dddd d}t| j j| t| j j| j jj tddddg}td	d
ddg}t|j	d | j
 |dd t|jd | j
 |dd t|j	d | j
 |dd t|jd | j
 |dd d S )Nr~   r   Fr   r   r   r   r   r   r   r   r   r   r   ri   r>   )r?   r@   r   r   Zresults_constrainedr   r    r   r   rA   r'   rC   r   r   r   r   r   {  s.        z4TestPenalizedPoissonOraclePenalized2HC.test_cov_typeNr   r   r   r   r   r   _  s   
r   c                   @   s   e Zd Zedd ZdS )CheckPenalizedLogitc                 C   sD   ddt | |  d   }t jd t jt||k }|S )Nr   r   r7   )r    r8   meanr!   r"   r#   lenr9   r   r   r   r&     s     z#CheckPenalizedLogit._generate_endogNr   r   r   r]   r&   r   r   r   r   r     s   r   c                   @   s   e Zd Zedd ZdS )TestPenalizedLogitNoPenalc                 C   sT   | j | j }}t||}|jdd| _t||| jd}d|_|jdd| _d| _	d S )Nr   rb   rv   r   )
r)   r(   r   rk   r@   r   r1   rl   r?   r+   rm   r   r   r   r2     s    
z%TestPenalizedLogitNoPenal._initializeNrp   r   r   r   r   r     s   r   c                   @   s   e Zd Zedd ZdS )TestPenalizedLogitOraclec                 C   s   | j | j }}t||d d d | jf }|jdd| _t||| jd}| jd9  _d|j	_
|jdddd| _td | jd | _d	| _d S )
Nr   rb   rv   r   r=   rd   re   rf   rx   )r)   r(   r   r'   rk   r@   r   r1   rl   rt   rz   r?   r,   r-   r+   rm   r   r   r   r2     s    z$TestPenalizedLogitOracle._initializeNrp   r   r   r   r   r     s   r   c                   @   s   e Zd Zedd ZdS )TestPenalizedGLMLogitOraclec                 C   s   | j | j }}t||d d d | jf t d}|jdd| _t||t | j	d}| j
d9  _
d|j_|jdddd	| _td | jd | _d
| _d S )Nr   r   rb   rs   r   r=   rd   re   rf   rx   )r)   r(   r   r'   r	   Binomialrk   r@   r   r1   rl   rt   rz   r?   r,   r-   r+   rm   r   r   r   r2     s    $z'TestPenalizedGLMLogitOracle._initializeNrp   r   r   r   r   r     s   r   c                   @   s   e Zd Zedd ZdS )!TestPenalizedLogitOraclePenalizedc                 C   s   | j | j }}t||d d d | jf | jd}|jdddd| _t||| jd}|jddddd| _td | jd | _	d| _
d S r   )r)   r(   r   r'   r1   rk   r@   r?   r,   r-   r+   rm   r   r   r   r2     s    "z-TestPenalizedLogitOraclePenalized._initializeNrp   r   r   r   r   r     s   r   c                   @   s    e Zd Zedd Zdd ZdS )"TestPenalizedLogitOraclePenalized2c                 C   s   | j | j }}t||d d d | jf | jd}| jd9  _d|j_|jdddd| _	t||| jd}| jd9  _d|j_|jddddd	| _
td | jd | _d
| _| j| _d S )Nrv   r   r=   rd   re   r   rf   Tr   r   )r)   r(   r   r'   r1   rl   rt   rz   rk   r@   r?   r,   r-   r+   r.   rm   r   r   r   r2     s    "z.TestPenalizedLogitOraclePenalized2._initializec                 C   s4   t | jj| jd  d t | jj| jd  d d S r   r   rO   r   r   r   r     s    z-TestPenalizedLogitOraclePenalized2.test_zerosNr   r   r   r   r   r     s   
r   c                   @   s   e Zd Zedd ZdS )CheckPenalizedBinomCountc                 C   s|   ddt | |  d   }t jd dt t|t }|d t|d   d7  < t j||}t 	||| fS )Nr   r   r7      r   )
r    r8   r   r!   r"   onesr   intZbinomialZcolumn_stack)r3   r5   r:   Zn_trialsr)   r   r   r   r&     s     z(CheckPenalizedBinomCount._generate_endogNr   r   r   r   r   r     s   r   c                   @   s    e Zd Zedd Zdd ZdS )!TestPenalizedGLMBinomCountNoPenalc                 C   s   | j | j }}|d d d df }dtt| }t||t |d}|jddd| _	t
||t || jd}d|_|jdd	dd| j	jd
 d| _d| _d| _d S )Nr         пr	   offsetrd   re   )rg   max_start_irlsr	   r   rt   r      g?)rg   r   rh   rc   r   绽|=)r)   r(   r    r   r   r   r	   r   rk   r@   r   r1   rl   rA   r?   r+   r.   )r3   r)   r(   r   rn   ro   r   r   r   r2     s    
z-TestPenalizedGLMBinomCountNoPenal._initializec                 C   sd   | j }| j}t|j|jd |j|jd dd t|j|jd |j|jd dd d S )NrU   r   r>   )r?   r@   r   rX   rY   rA   Z	score_obsrJ   r   r   r   
test_deriv%  s      z,TestPenalizedGLMBinomCountNoPenal.test_derivN)r   r   r   r]   r2   r   r   r   r   r   r     s   
r   c                   @   s   e Zd Zedd ZdS )"TestPenalizedGLMBinomCountOracleHCc                 C   s   | j | j }}dtt| }d}t||d d d | jf t |d}|j	|dddd| _
t||t || jd}| jd	9  _d
|j_|j	|ddddd| _td | jd | _d| _d S )Nr   r~   r   newton  r   r   r   r   r=   rd   re   )r   rg   r   rh   rc   r   )r)   r(   r    r   r   r   r'   r	   r   rk   r@   r   r1   rl   rt   rz   r?   r,   r-   r+   r3   r)   r(   r   r   rn   ro   r   r   r   r2   4  s(    

 z.TestPenalizedGLMBinomCountOracleHC._initializeNrp   r   r   r   r   r   .  s   r   c                   @   s   e Zd Zedd ZdS )#TestPenalizedGLMBinomCountOracleHC2c                 C   s   | j | j }}dtt| }d}t||d d d | jf t |d}|j	|dddd| _
t||t || jd}| jd	9  _d
|j_|j	|dddddd| _td | jd | _d| _| j| _d S )Nr   r~   r   r   r   r   r   r   r   r=   rd   re   r   )r   rg   r   rh   rc   r   )r)   r(   r    r   r   r   r'   r	   r   rk   r@   r   r1   rl   rt   rz   r?   r,   r-   r+   r.   r   r   r   r   r2   N  s,    

  z/TestPenalizedGLMBinomCountOracleHC2._initializeNrp   r   r   r   r   r   J  s   r   c                   @   s   e Zd Zedd ZdS )CheckPenalizedGaussianc                 C   s2   t d}t jd ||t jt|  }|S )Nr   r7   )r    sqrtr!   r"   r#   r   )r3   r5   Zsig_er)   r   r   r   r&   h  s    
z&CheckPenalizedGaussian._generate_endogNr   r   r   r   r   r   f  s   r   c                   @   s   e Zd Zedd ZdS ) TestPenalizedGLMGaussianOracleHCc                 C   s   | j | j }}|d }d}t||d d d | jf t d}|j|dddd| _t||t | j	d}| j
d	9  _
d
|j_|j|dddd| _td | jd | _d| _d| _d S )Nr   r~   r   rd   re   r   r   rs   rw   r=   ri   r   )r)   r(   r   r'   r	   Gaussianrk   r@   r   r1   rl   rt   rz   r?   r,   r-   r+   r*   r   r   r   r   r2   r  s     $

z,TestPenalizedGLMGaussianOracleHC._initializeNrp   r   r   r   r   r   p  s   r   c                   @   s   e Zd Zedd ZdS )!TestPenalizedGLMGaussianOracleHC2c                 C   s   | j | j }}|d }d}t||d d d | jf t d}|j|dddd| _t||t | j	d}| j
d	9  _
d
|j_|j|ddddd| _td | jd | _| j| _d| _d| _d S )Nr   r~   r   rd   re   r   r   rs   rw   r=   Tr   rg   rh   rc   r   r   )r)   r(   r   r'   r	   r   rk   r@   r   r1   rl   rt   rz   r?   r,   r-   r.   r+   r*   r   r   r   r   r2     s$    $

 z-TestPenalizedGLMGaussianOracleHC2._initializeNrp   r   r   r   r   r     s   r   c                   @   s   e Zd Zedd ZdS )TestPenalizedGLMGaussianL2c                 C   s   | j | j }}|d }d}t||d d d | jf t d}|j|dddd| _t	|j
d d	kt}t||t tj|d
d}| jd9  _|j|ddddd| _td | jd | _|j
d | _d| _d| _d S )Nr   r~   r   rd   re   r   r   r   r   )weightsrs   r   Fr   r   )r)   r(   r   r'   r	   r   rk   r@   r    r$   shapeZastypefloatr   r0   L2ConstraintsPenaltyrl   r?   r,   r-   r.   r+   r*   )r3   r)   r(   r   rn   r   ro   r   r   r   r2     s(    $


 z&TestPenalizedGLMGaussianL2._initializeNrp   r   r   r   r   r     s   r   c                   @   s    e Zd Zedd Zdd ZdS )TestPenalizedGLMGaussianL2Theilc           	      C   s   | j | j }}|d }|jd }d}t|dd  }t|||d}|jddd| _tj	|d	}t
||t |d
}| jd9  _|j|ddddd| _|| _td | jd | _|jd | _d| _d| _d S )Nr   r   r~   r   )Zr_matrixg]Nz@F)rl   r   )restrictionrs   rd   re   r   r   r   )r)   r(   r   r    eyer
   rk   r@   r0   r   r   r	   r   rl   r?   r'   r,   r-   r.   r+   r*   )	r3   r)   r(   kr   r   rn   penro   r   r   r   r2     s*    

 z+TestPenalizedGLMGaussianL2Theil._initializec                 C   s   | j }| j}t|jdk | j t|j|j| j| jd t	d d d }t|j
| |j
| d| jd t|j| |j| ddd t|j| |j| ddd t| | dd d S )Nr   r;   r   g{Gz?rx   r   r>   )r?   r@   r   rA   rB   r.   r   r*   r+   r,   rC   ZtvaluesrH   rI   )rK   r?   r@   r-   r   r   r   rL     s(       z1TestPenalizedGLMGaussianL2Theil.test_params_tableN)r   r   r   r]   r2   rL   r   r   r   r   r     s   
r   )7__doc__rD   r^   numpyr    Znumpy.testingr   r   Z#statsmodels.discrete.discrete_modelr   r   r   Z+statsmodels.genmod.generalized_linear_modelr   Zstatsmodels.genmod.familiesr	   Z(statsmodels.sandbox.regression.penalizedr
   Zstatsmodels.base._penalizedr   Zstatsmodels.base._penaltiesbaseZ
_penaltiesr0   r   r   r   r   r   r`   rq   rr   ru   r{   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sR   X($5

