U
    Kvf!                     @   s   d Z ddlZddlmZ ddlmZmZ ddlZddl	m
Z ddlmZ ddlm  mZ ddlmZ dZG dd	 d	ZG d
d dZG dd dZG dd dZG dd dZG dd dZG dd dZG dd dZG dd dZdd ZdS )z(
Test functions for models.robust.scale
    N)standard_normal)assert_almost_equalassert_equalnorm)mad   c                   @   s`   e Zd Ze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 )TestChemc                 C   s@   t dddddddddddd	d
d
d
dddddddddg| _d S )Ng@g333333@g      @g@gffffff@g333333@g=
ףp=@g@g(\
@g333333@g      @g@g@g)\(@gQ@g33333<@)nparraychemcls r   G/tmp/pip-unpacked-wheel-2v6byqio/statsmodels/robust/tests/test_scale.pysetup_class   s6    zTestChem.setup_classc                 C   s   t t| jdt d S )Ng1w-!@)r   r
   Zmeanr   DECIMALselfr   r   r   	test_mean7   s    zTestChem.test_meanc                 C   s   t t| jdt d S )NgGz@)r   r
   medianr   r   r   r   r   r   test_median:   s    zTestChem.test_medianc                 C   s   t t| jdt d S )Ngbg
?)r   scaler   r   r   r   r   r   r   test_mad=   s    zTestChem.test_madc                 C   s   t t| jdt d S )Ng[ A?)r   r   iqrr   r   r   r   r   r   test_iqr@   s    zTestChem.test_iqrc                 C   s   t t| jdt d S )Ngao?)r   r   qn_scaler   r   r   r   r   r   test_qnC   s    zTestChem.test_qnc                 C   s   t t| jd dt d S )Nr   g=פ	@r   r   huberr   r   r   r   r   r   test_huber_scaleF   s    zTestChem.test_huber_scalec                 C   s   t t| jd dt d S )N   giq?r   r   r   r   r   test_huber_locationI   s    zTestChem.test_huber_locationc                 C   sd   t j }d|_t j|d}tt | jd || jd t tt | jd || jd t d S )Ng      ?r   r   r!   )	r   normsZHuberTtHuberr   r   r   r   )r   nhr   r   r   test_huber_huberTL   s    
    zTestChem.test_huber_huberTc                 C   sB   t jt j d}t|| jd dt t|| jd dt d S )Nr   r   g^e	@r!   gɫs^?)r   r%   r#   ZHampelr   r   r   )r   hhr   r   r   test_huber_HampelW   s    zTestChem.test_huber_HampelN)__name__
__module____qualname__classmethodr   r   r   r   r   r   r    r"   r(   r*   r   r   r   r   r	      s   
r	   c                   @   s0   e Zd Zedd Zdd Zdd Zdd Zd	S )
TestMadc                 C   s   t jd td| _d S N1  (   
   r
   randomseedr   Xr   r   r   r   r   ^   s    zTestMad.setup_classc                 C   s   t | j}t|jd d S Nr4   r   r   r8   r   shaper   mr   r   r   r   c   s    zTestMad.test_madc                 C   sj   t d}t t|stt d}ttj|ddt d t d}ttj|ddt d d S )	Nr   r4   d   r   r!   axisr4   r   r@   r@   r   r   r@   r@   r   )r
   emptyisnanr   r   AssertionErrorr   r   rG   r   r   r   test_mad_emptyg   s    


zTestMad.test_mad_emptyc              	   C   s~   t j| jdd}t|jd tt t j| jd d W 5 Q R X tt j| jddt	j
t	| jd ddtd t d S )Nr   )centerr:   r!   rA   g      ?)r   r   r8   r   r<   pytestraises	TypeErrorr   r
   r   absGaussianZppfr   )r   r&   r   r   r   test_mad_centero   s    "zTestMad.test_mad_centerN)r+   r,   r-   r.   r   r   rK   rR   r   r   r   r   r/   ]   s
   
r/   c                   @   s8   e Zd Zedd Zdd Zdd Zdd Zd	d
 ZdS )TestMadAxesc                 C   s   t jd td| _d S Nr1   r3   r4      r5   r   r   r   r   r   |   s    zTestMadAxes.setup_classc                 C   s    t j| jdd}t|jd d S Nr   rA   )r4   rV   r;   r=   r   r   r   
test_axis0   s    zTestMadAxes.test_axis0c                 C   s    t j| jdd}t|jd d S Nr!   rA   )r3   rV   r;   r=   r   r   r   
test_axis1   s    zTestMadAxes.test_axis1c                 C   s    t j| jdd}t|jd d S N   rA   r2   r;   r=   r   r   r   
test_axis2   s    zTestMadAxes.test_axis2c                 C   s    t j| jdd}t|jd d S NrE   rA   r2   r;   r=   r   r   r   test_axisneg1   s    zTestMadAxes.test_axisneg1N	r+   r,   r-   r.   r   rX   rZ   r]   r_   r   r   r   r   rS   {   s   
rS   c                   @   s(   e Zd Zedd Zdd Zdd ZdS )TestIqrc                 C   s   t jd td| _d S r0   r5   r   r   r   r   r      s    zTestIqr.setup_classc                 C   s   t | j}t|jd d S r9   r   r   r8   r   r<   r=   r   r   r   r      s    zTestIqr.test_iqrc              	   C   s   t d}t t|stt d}ttj|ddt d t d}ttj|ddt d t jd	d
}tt	 t| W 5 Q R X d S Nr   r?   r!   rA   rC   rD   rE   rF   r   )r<   )
r
   rG   rH   r   r   rI   r   rM   rN   
ValueErrorrJ   r   r   r   test_iqr_empty   s    


zTestIqr.test_iqr_emptyN)r+   r,   r-   r.   r   r   re   r   r   r   r   ra      s   
ra   c                   @   s8   e Zd Zedd Zdd Zdd Zdd Zd	d
 ZdS )TestIqrAxesc                 C   s   t jd td| _d S rT   r5   r   r   r   r   r      s    zTestIqrAxes.setup_classc                 C   s    t j| jdd}t|jd d S rW   rb   r=   r   r   r   rX      s    zTestIqrAxes.test_axis0c                 C   s    t j| jdd}t|jd d S rY   rb   r=   r   r   r   rZ      s    zTestIqrAxes.test_axis1c                 C   s    t j| jdd}t|jd d S r[   rb   r=   r   r   r   r]      s    zTestIqrAxes.test_axis2c                 C   s    t j| jdd}t|jd d S r^   rb   r=   r   r   r   r_      s    zTestIqrAxes.test_axisneg1Nr`   r   r   r   r   rf      s   
rf   c                   @   s0   e Zd Zedd Zdd Zdd Zdd Zd	S )
TestQnc                 C   s\   t jd tdd| _t dd| _t jjdd| _tj	j
 j| _
tj	j jj| _d S )Nr1   r3   )sizer   )r
   r6   r7   r   normalZarangerangeexponentialsmZdatasets	stacklossZload_pandasdataZsunspotsZSUNACTIVITYsunspotr   r   r   r   r      s    zTestQn.setup_classc                 C   sX   t t| jt| jt t t| jt| jt t t| jt| jt d S N)r   r   r   ri   Z	_qn_naiver   rj   rk   r   r   r   r   test_qn_naive   s    
 
 
 
 

zTestQn.test_qn_naivec                 C   sV   t t| jdt t t| jtddddgt t t| jdd dt d S )Ngŏ1w-*@gx!@gx@gx@r   i!  g"[='@@)	r   r   r   rj   r   rm   r
   r   ro   r   r   r   r   test_qn_robustbase   s    
  zTestQn.test_qn_robustbasec              	   C   s   t d}t t|stt d}ttj|ddt d t d}ttj|ddt d t jd	d
}tt	 t
| W 5 Q R X d S rc   )r
   rG   rH   r   r   rI   r   rM   rN   rd   r   rJ   r   r   r   test_qn_empty   s    


zTestQn.test_qn_emptyN)r+   r,   r-   r.   r   rq   rr   rs   r   r   r   r   rg      s
   
rg   c                   @   s8   e Zd Zedd Zdd Zdd Zdd Zd	d
 ZdS )
TestQnAxesc                 C   s   t jd td| _d S rT   r5   r   r   r   r   r      s    zTestQnAxes.setup_classc                 C   s    t j| jdd}t|jd d S rW   r   r   r8   r   r<   r=   r   r   r   rX      s    zTestQnAxes.test_axis0c                 C   s    t j| jdd}t|jd d S rY   ru   r=   r   r   r   rZ      s    zTestQnAxes.test_axis1c                 C   s    t j| jdd}t|jd d S r[   ru   r=   r   r   r   r]      s    zTestQnAxes.test_axis2c                 C   s    t j| jdd}t|jd d S r^   ru   r=   r   r   r   r_     s    zTestQnAxes.test_axisneg1Nr`   r   r   r   r   rt      s   
rt   c                   @   s    e Zd Zedd Zdd ZdS )	TestHuberc                 C   s   t jd td| _d S r0   r5   r   r   r   r   r     s    zTestHuber.setup_classc                 C   s*   t jdd}|| j\}}t|jd d S )Nr@   )maxiterr:   )r   r%   r8   r   r<   )r   r'   r>   sr   r   r   test_huber_result_shape  s    z!TestHuber.test_huber_result_shapeN)r+   r,   r-   r.   r   ry   r   r   r   r   rv     s   
rv   c                   @   s8   e Zd Zedd Zdd Zdd Zdd Zd	d
 ZdS )TestHuberAxesc                 C   s*   t jd td| _tjddd| _d S )Nr1   rU   i  gh㈵>)rw   Ztol)r
   r6   r7   r   r8   r   r%   r'   r   r   r   r   r     s    
zTestHuberAxes.setup_classc                 C   s$   | j | jdd\}}t|jd d S rW   r'   r8   r   r<   r   r>   rx   r   r   r   test_default  s    zTestHuberAxes.test_defaultc                 C   s$   | j | jdd\}}t|jd d S rY   r{   r|   r   r   r   rZ     s    zTestHuberAxes.test_axis1c                 C   s$   | j | jdd\}}t|jd d S r[   r{   r|   r   r   r   r]   !  s    zTestHuberAxes.test_axis2c                 C   s$   | j | jdd\}}t|jd d S r^   r{   r|   r   r   r   r_   %  s    zTestHuberAxes.test_axisneg1N)	r+   r,   r-   r.   r   r}   rZ   r]   r_   r   r   r   r   rz     s   
rz   c                  C   sl   t dddgdddgg} dd }t| d d}t| d |d}t|  dd}t j|| t j|| d S )	Nr   r!   r\      c                 S   s
   t | S rp   )r
   r   )xr   r   r   r>   .  s    ztest_mad_axis_none.<locals>.m)arB   )r   rB   rL   )r
   r   r   ZravelZtestingZassert_allclose)r   r>   directZcustomZaxis0r   r   r   test_mad_axis_none*  s    r   )__doc__Znumpyr
   Znumpy.randomr   Znumpy.testingr   r   rM   Zscipy.statsr   rQ   Zstatsmodels.apiapirl   Zstatsmodels.robust.scaleZrobustr   r   r   r	   r/   rS   ra   rf   rg   rt   rv   rz   r   r   r   r   r   <module>   s&   F0