U
    Ãmœdg  ã                   @   s°   d Z ddlZddlmZmZ ddlm  mZ	 ddl
mZm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dS )zL
Created on Wed May 16 22:21:26 2018

Author: Josef Perktold
License: BSD-3
é    N)Úassert_allcloseÚassert_equal)Úapprox_fprimeÚapprox_hessc                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚCheckPenaltyc                    sb   | j ‰ | j}t ‡ fdd„|D ƒ¡}t||d d d… dd� tˆ  dt |d ¡ ¡ddd� d S )Nc                    s   g | ]}ˆ   t |¡¡‘qS © )ÚfuncÚnpÚ
atleast_1d©Ú.0Úxi©Úpenr   ú^/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/base/tests/test_penalties.pyÚ
<listcomp>   s     z.CheckPenalty.test_symmetry.<locals>.<listcomp>éÿÿÿÿç»½×Ùß|Û=)Úrtolr   )r   Úparamsr	   Úarrayr   r   r
   )ÚselfÚxÚpr   r   r   Útest_symmetry   s
    zCheckPenalty.test_symmetryc                    s®   | j ‰ | j}t ‡ fdd„|D ƒ¡}t ‡ fdd„|D ƒ¡}t||ddd� t ‡ fdd„|D ƒ¡}t ‡ fdd„|D ƒ¡}|jd	kršt d
d„ |D ƒ¡}t||ddd� d S )Nc                    s   g | ]}ˆ   t |¡¡‘qS r   )Úderivr	   r
   r   r   r   r   r      s     z1CheckPenalty.test_derivatives.<locals>.<listcomp>c                    s   g | ]}t t |¡ˆ jƒ‘qS r   )r   r	   r
   r   r   r   r   r   r       s     çH¯¼šò×z>ç:Œ0âŽyE>©r   Zatolc                    s   g | ]}ˆ   t |¡¡‘qS r   ©Zderiv2r	   r
   r   r   r   r   r   #   s     c                    s   g | ]}t t |¡ˆ jƒ‘qS r   )r   r	   r
   r   r   r   r   r   r   $   s     é   c                 S   s   g | ]}t  |¡‘qS r   )r	   Zdiag)r   Úphir   r   r   r   (   s     )r   r   r	   r   r   Úndim)r   r   ZpsZpsnÚphZphnr   r   r   Útest_derivatives   s    
zCheckPenalty.test_derivativesN)Ú__name__Ú
__module__Ú__qualname__r   r$   r   r   r   r   r      s   	r   c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚTestL2Constraints0c                 C   s,   t  ddd¡}t  ||f¡| _t ¡ | _d S ©Nçš™™™™™É¿çš™™™™™É?é   ©r	   ÚlinspaceÚcolumn_stackr   ÚsmpenÚL2ConstraintsPenaltyr   ©ÚclsZx0r   r   r   Úsetup_class.   s    zTestL2Constraints0.setup_classc           
         sÔ   | j ‰ | j}|jd }tjt |¡d�}tjt |¡d�}ˆ  |j	¡}ˆ  
|j	¡}t ‡ fdd„|D ƒ¡}||fD ]\}t| |j	¡|ddd� t| 
|j	¡|ddd� t ‡ fd	d„|D ƒ¡}	t|	|d
dd� qrd S )Né   ©Úweights©Úrestrictionc                    s   g | ]}ˆ   t |¡¡‘qS r   r   r   r   r   r   r   >   s     z7TestL2Constraints0.test_equivalence.<locals>.<listcomp>r   r   r   c                    s   g | ]}ˆ   t |¡¡‘qS r   r   r   r   r   r   r   B   s     r   )r   r   Úshaper0   r1   r	   ZonesÚeyer   ÚTr   r   r   )
r   r   ÚkZpen2Zpen3ÚfÚdZd2Zpen_Zd2_r   r   r   Útest_equivalence4   s    
z#TestL2Constraints0.test_equivalenceN)r%   r&   r'   Úclassmethodr4   r@   r   r   r   r   r(   ,   s   
r(   c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚTestL2Constraints1c                 C   s<   t  ddd¡}t  ||f¡| _tjddgddggd�| _d S )Nr*   r+   r,   r5   r   r8   r-   r2   r   r   r   r4   H   s    zTestL2Constraints1.setup_classc                 C   sD   | j }| j}|j}| |j¡d  d¡}t| |j¡|ddd� d S )Nr    r   r   r   r   )r   r   r9   Údotr<   Úsumr   r   )r   r   r   Úrr>   r   r   r   Útest_valuesN   s
    zTestL2Constraints1.test_valuesN)r%   r&   r'   rA   r4   rF   r   r   r   r   rB   F   s   
rB   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestSmoothedSCADc                 C   s2   t  ddd¡}t  ||f¡| _tjddd�| _d S )Nr*   r+   r,   gš™™™™™©?)ÚtauZc0)r	   r.   r/   r   r0   ZSCADSmoothedr   r2   r   r   r   r4   X   s    zTestSmoothedSCAD.setup_classN©r%   r&   r'   rA   r4   r   r   r   r   rG   V   s   rG   c                   @   s0   e Zd Zedd„ ƒZdd„ Zdd„ Zdd„ Zd	S )
ÚTestPseudoHuberc                 C   s.   t  ddd¡}t  ||f¡| _t d¡| _d S )Nr*   r+   r,   çš™™™™™¹?)r	   r.   r/   r   r0   ÚPseudoHuberr   r2   r   r   r   r4   a   s    zTestPseudoHuber.setup_classc                 C   s$   dg}t jd|d�}t|j|ƒ d S )Nç      à?rK   r6   ©r0   rL   r   r7   ©r   Zwtsr   r   r   r   Útest_backward_compatibilityg   s    z+TestPseudoHuber.test_backward_compatibilityc                 C   s$   dg}t jd|d�}t|j|ƒ d S )Nç      ð?rK   r6   rN   ©r   r7   r   r   r   r   Útest_deprecated_priorityl   s    z(TestPseudoHuber.test_deprecated_priorityc                 C   s&   ddg}t jd|d�}t|j|ƒ d S )NrQ   ç       @rK   r6   rN   rR   r   r   r   Útest_weights_assignmentr   s    z'TestPseudoHuber.test_weights_assignmentN©r%   r&   r'   rA   r4   rP   rS   rU   r   r   r   r   rJ   _   s
   
rJ   c                   @   s0   e Zd Zedd„ ƒZdd„ Zdd„ Zdd„ Zd	S )
ÚTestL2c                 C   s,   t  ddd¡}t  ||f¡| _t ¡ | _d S r)   )r	   r.   r/   r   r0   ÚL2r   r2   r   r   r   r4   z   s    zTestL2.setup_classc                 C   s"   dg}t j|d�}t|j|ƒ d S )NrM   r6   ©r0   rX   r   r7   rO   r   r   r   rP   €   s    z"TestL2.test_backward_compatibilityc                 C   s"   dg}t j|d�}t|j|ƒ d S )NrQ   r6   rY   rR   r   r   r   rS   …   s    zTestL2.test_deprecated_priorityc                 C   s$   ddg}t j|d�}t|j|ƒ d S )NrQ   rT   r6   rY   rR   r   r   r   rU   Š   s    zTestL2.test_weights_assignmentNrV   r   r   r   r   rW   x   s
   
rW   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestNonePenaltyc                 C   s,   t  ddd¡}t  ||f¡| _t ¡ | _d S r)   )r	   r.   r/   r   r0   ZNonePenaltyr   r2   r   r   r   r4   ’   s    zTestNonePenalty.setup_classNrI   r   r   r   r   rZ   �   s   rZ   )Ú__doc__Únumpyr	   Znumpy.testingr   r   Zstatsmodels.base._penaltiesÚbaseZ
_penaltiesr0   Zstatsmodels.tools.numdiffr   r   r   r(   rB   rG   rJ   rW   rZ   r   r   r   r   Ú<module>   s   	