U
    Kvfg                     @   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   I/tmp/pip-unpacked-wheel-2v6byqio/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rt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     Hz>:0yE>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onesZ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'   r@   r4   rE   r   r   r   r   rA   F   s   
rA   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'   r@   r4   r   r   r   r   rF   V   s   rF   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      ?rJ   r6   r0   rK   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      ?rJ   r6   rM   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 )NrP          @rJ   r6   rM   rQ   r   r   r   test_weights_assignmentr   s    z'TestPseudoHuber.test_weights_assignmentNr%   r&   r'   r@   r4   rO   rR   rT   r   r   r   r   rI   _   s
   
rI   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 )NrL   r6   r0   rW   r   r7   rN   r   r   r   rO      s    z"TestL2.test_backward_compatibilityc                 C   s"   dg}t j|d}t|j| d S )NrP   r6   rX   rQ   r   r   r   rR      s    zTestL2.test_deprecated_priorityc                 C   s$   ddg}t j|d}t|j| d S )NrP   rS   r6   rX   rQ   r   r   r   rT      s    zTestL2.test_weights_assignmentNrU   r   r   r   r   rV   x   s
   
rV   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_classNrH   r   r   r   r   rY      s   rY   )__doc__Znumpyr	   Znumpy.testingr   r   Zstatsmodels.base._penaltiesbaseZ
_penaltiesr0   Zstatsmodels.tools.numdiffr   r   r   r(   rA   rF   rI   rV   rY   r   r   r   r   <module>   s   	