a
    ˆù»j/-  ã                   @   sl   d dl Zd dlmZmZ d dlmZmZmZ d dlZd dlm	Z
 d dlmZ G dd„ dƒZG dd„ dƒZdS )	é    N)Úassert_equalÚassert_allclose)Úassert_Úassert_almost_equalÚassert_array_almost_equal)Úraisesc                   @   s„   e Z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d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS ) ÚTestEntropyc                 C   sD   g d¢}g d¢}t  ||¡}t  ||¡}td|kƒ t|dkƒ d S )N)ç      à?çš™™™™™É?ç333333Ó?)çš™™™™™¹?g      Ð?gÍÌÌÌÌÌä?ç        )ÚstatsÚentropyr   )ÚselfÚpkÚqkZeselfZedouble© r   úDE:\soccer\ml_env\Lib\site-packages\scipy/stats/tests/test_entropy.pyÚtest_entropy_positive   s    z!TestEntropy.test_entropy_positivec                 C   s„   t  dt¡}tj|dd�}tt|d ƒdk ƒ t  dt¡}d|d d…< t ||¡}tj||dd�}tt|| t  d¡ ƒdk ƒ d S )Né   g       @©Úbaseg      @gñhãˆµøä>é   )ÚnpZonesÚfloatr   r   r   ÚabsÚlog)r   r   ÚSr   ZS2r   r   r   Útest_entropy_base   s    zTestEntropy.test_entropy_basec                 C   s   t t g d¢¡ddd� d S )N)r   é   é   g ŠöR^ä?é   )Údecimal)r   r   r   )r   r   r   r   Útest_entropy_zero!   s    ÿzTestEntropy.test_entropy_zeroc                 C   sF   ddgddgddgg}ddgddgddgg}t t ||¡ddgƒ d S )Nr   r
   ç333333ã?r   r	   gN!ü0ç¾È?çÈó2íÒÇ?©r   r   r   ©r   r   r   r   r   r   Útest_entropy_2d&   s
    ÿzTestEntropy.test_entropy_2dc                 C   sj   ddgddgddgg}ddgddgddgg}t t ||¡tjdgƒ d|d d< t t ||¡d	dgƒ d S )
Nr   r
   r%   r   r	   r   r&   r   g¯^fTðFÆ?)r   r   r   r   Úinfr(   r   r   r   Útest_entropy_2d_zero,   s    ÿÿz TestEntropy.test_entropy_2d_zeroc                 C   s2   ddgddgddgg}t tj|dd�g d¢ƒ d S )	Nr   r
   r%   r   r	   r    ©Úaxis)çæòöR^ä?r.   gD%¬†+å?r'   ©r   r   r   r   r   Ú$test_entropy_base_2d_nondefault_axis6   s    ÿz0TestEntropy.test_entropy_base_2d_nondefault_axisc                 C   sJ   ddgddgddgg}ddgddgddgg}t tj||dd�g d¢ƒ d S )	Nr   r
   r%   r   r	   r    r,   )ç.c}“Í?r1   g„aÀ’«XÀ?r'   r(   r   r   r   Útest_entropy_2d_nondefault_axis;   s
    ÿz+TestEntropy.test_entropy_2d_nondefault_axisc                 C   s:   ddgddgddgg}ddgddgg}t ttj||ƒ d S )Nr   r
   r%   r   r	   )Úassert_raisesÚ
ValueErrorr   r   r(   r   r   r   Útest_entropy_raises_value_errorA   s    z+TestEntropy.test_entropy_raises_value_errorc                 C   s4   ddgddgddgg}t tj|dd�t |¡ƒ d S ©Nr   r
   r%   r   r	   r   r,   r'   r/   r   r   r   Ú1test_base_entropy_with_axis_0_is_equal_to_defaultF   s    ÿz=TestEntropy.test_base_entropy_with_axis_0_is_equal_to_defaultc                 C   sN   ddgddgddgg}ddgddgddgg}t tj||dd�t ||¡ƒ d S r6   r'   r(   r   r   r   Ú,test_entropy_with_axis_0_is_equal_to_defaultK   s
    
ÿz8TestEntropy.test_entropy_with_axis_0_is_equal_to_defaultc                 C   s>   t  ddgddgddgg¡}tt |j¡jtj|dd�ƒ d S ©Nr   r
   r%   r   r	   r    r,   ©r   Úarrayr   r   r   ÚTr/   r   r   r   Útest_base_entropy_transposedQ   s    ÿz(TestEntropy.test_base_entropy_transposedc                 C   s`   t  ddgddgddgg¡}t  ddgddgddgg¡}tt |j|j¡jtj||dd�ƒ d S r9   r:   r(   r   r   r   Útest_entropy_transposedV   s
    ÿz#TestEntropy.test_entropy_transposedc                 C   sn   t j d¡ t j d¡}t j dd¡}tj||dd�}t|d t ||d ¡ƒ t|d t ||d ¡ƒ d S )Nr   é   r!   r    éÿÿÿÿr,   )r   ÚrandomÚrandr   r   r   )r   ÚxÚyÚresr   r   r   Útest_entropy_broadcasting\   s    z%TestEntropy.test_entropy_broadcastingc                 C   s`   t j ddd¡}t j dd¡}d}tjt|d�� t ||¡ W d   ƒ n1 sR0    Y  d S )Né
   r    r"   é   r!   z/Array shapes are incompatible for broadcasting.©Úmatch©r   rA   rB   Úpytestr   r4   r   r   )r   rC   rD   Úmessager   r   r   Útest_entropy_shape_mismatchd   s
    z'TestEntropy.test_entropy_shape_mismatchc                 C   sP   t j d¡}d}tjt|d�� tj|dd� W d   ƒ n1 sB0    Y  d S )NrG   z!`base` must be a positive number.rI   éþÿÿÿr   rK   ©r   rC   rM   r   r   r   Útest_input_validationk   s    z!TestEntropy.test_input_validationN)Ú__name__Ú
__module__Ú__qualname__r   r   r$   r)   r+   r0   r2   r5   r7   r8   r=   r>   rF   rN   rQ   r   r   r   r   r      s   	
r   c                   @   sÌ   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	e
j dg d¢¡dd„ ƒZdddddœZe
j dee ¡ ƒ¡dd„ ƒZdddddœZe
j dee ¡ ƒ¡dd„ ƒZe
j d g d!¢¡d"d#„ ƒZd$S )%ÚTestDifferentialEntropyzº
    Vasicek results are compared with the R package vsgoftest.

    # library(vsgoftest)
    #
    # samp <- c(<values>)
    # entropy.estimate(x = samp, window = <window_length>)

    c                 C   sr   t j d¡}| d¡}tj|dd�}t|ddd� tj|ddd	�}t|d
dd� tj|ddd	�}t|ddd� d S )Nr   éd   Úvasicek©Úmethodç¿dãÁ{õ?ç�íµ ÷Æ°>©Zrtolr    )Úwindow_lengthrY   çµÄÊhäóñ?r   çÿÃ€%—õ?©r   rA   ÚRandomStateÚstandard_normalr   Údifferential_entropyr   ©r   Úrandom_stateÚvaluesr   r   r   r   Ú!test_differential_entropy_vasicek}   s    
ÿÿz9TestDifferentialEntropy.test_differential_entropy_vasicekc                 C   s„   t j d¡}| d¡}tj|ddd�}t|g d¢dd� tj|dddd	�}t|g d
¢dd� tj|dddd	�}t|g d¢dd� d S )Nr   ©r?   rV   r    rW   )r-   rY   )rZ   g‹Â.Šxõ?gOjM³ô?r[   r\   )r-   r]   rY   )r^   g\•›¨¥ñ?g�:èò?r   )r_   gpÏó§�jõ?g80¹Qd­ô?r`   rd   r   r   r   Ú4test_differential_entropy_vasicek_2d_nondefault_axis�   s0    
ý
ÿý
ÿýzLTestDifferentialEntropy.test_differential_entropy_vasicek_2d_nondefault_axisc              	   C   sˆ   t j d¡}| d¡}d}|jd }dd|d |hD ]N}|j||d�}tt|d��  tj	||dd	� W d   ƒ q41 sx0    Y  q4d S )
Nr   rh   zhWindow length \({window_length}\) must be positive and less than half the sample size \({sample_size}\).r    r@   r!   )r]   Úsample_sizerI   )r]   r-   )
r   rA   ra   rb   ÚshapeÚformatr3   r4   r   rc   )r   re   rf   Z	error_strrj   r]   Zformatted_error_strr   r   r   Ú,test_differential_entropy_raises_value_error¨   s     
ÿ
þýzDTestDifferentialEntropy.test_differential_entropy_raises_value_errorc                 C   s<   t j d¡}| d¡}tj|dd�}t |¡}t||ƒ d S )Nr   )rV   r?   r,   r`   )r   re   rf   r   Zdefault_entropyr   r   r   Ú>test_base_differential_entropy_with_axis_0_is_equal_to_defaultÁ   s
    

zVTestDifferentialEntropy.test_base_differential_entropy_with_axis_0_is_equal_to_defaultc                 C   s8   t j d¡}| d¡}tt |j¡jtj|dd�ƒ d S )Nr   rh   r    r,   )r   rA   ra   rb   r   r   rc   r<   )r   re   rf   r   r   r   Ú)test_base_differential_entropy_transposedÉ   s    
þzATestDifferentialEntropy.test_base_differential_entropy_transposedc                 C   s�   t j d¡}d}tjt|d�� tj|dd� W d   ƒ n1 sB0    Y  d}tjt|d�� tj|dd� W d   ƒ n1 s‚0    Y  d S )	NrG   z+`base` must be a positive number or `None`.rI   rO   r   z`method` must be one of...z	ekki-ekkirX   )r   rA   rB   rL   r   r4   r   rc   rP   r   r   r   rQ   Ò   s    ,z-TestDifferentialEntropy.test_input_validationrY   )rW   úvan esÚebrahimiÚcorreac                 C   sJ   |dkrdnd}t jj|dd�}t j ¡ }t j||d�}t||dd� d S )	Nrr   é'  i@B r   ©Úsizere   rX   ç{®Gázt?r\   )r   ÚnormÚrvsr   rc   r   )r   rY   Únrx   ÚexpectedrE   r   r   r   Útest_consistencyÝ   s
    
z(TestDifferentialEntropy.test_consistency)gòÒMbXÉ?ç�•C‹lç»?)g‰A`åÐ"Ë?g)\�Âõ(¼?)gHáz®GÁ?gyé&1¬¼?)gü©ñÒMbÀ?r|   )rW   rp   rr   rq   zmethod, expectedc                 C   s|   d\}}}|\}}t jj||fdd�}t j ¡ }	t j|||dd�}
tt t |
|	 d ¡¡|dd� tt 	|
¡|d	d� d S ©
N)rs   é2   é   r   rt   r@   )r]   rY   r-   r!   rv   )Zatolgü©ñÒMb`?)
r   rw   rx   r   rc   r   r   ÚsqrtÚmeanÚstd©r   rY   rz   Zrepsry   ÚmZrmse_expectedZstd_expectedrx   Ztrue_entropyrE   r   r   r   Útest_norm_rmse_stdï   s    

ÿÿz*TestDifferentialEntropy.test_norm_rmse_std)g¢E¶óýÔÈ?ç‹lçû©ñÂ?)g¶óýÔxéÆ?gßO�—nÃ?)g×£p=
×Ã?gÛù~j¼tÃ?)g‡ÙÎ÷SÃ?r†   c                 C   s|   d\}}}|\}}t jj||fdd�}t j ¡ }	t j|||dd�}
tt t |
|	 d ¡¡|dd� tt 	|
¡|d	d� d S r}   )
r   Zexponrx   r   rc   r   r   r€   r�   r‚   rƒ   r   r   r   Útest_expon_rmse_std  s    

ÿÿz+TestDifferentialEntropy.test_expon_rmse_stdz	n, method))r   rp   )r"   rq   )ié  rW   c                 C   s:   t jj|fdd�}t  |¡}t j||d�}||ks6J ‚d S )Nr   rt   rX   )r   rw   rx   rc   )r   ry   rY   rx   Zres1Zres2r   r   r   Útest_method_auto  s    
z(TestDifferentialEntropy.test_method_autoN)rR   rS   rT   Ú__doc__rg   ri   rm   rn   ro   rQ   rL   ÚmarkZparametrizer{   Znorm_rmse_std_casesÚlistÚitemsr…   Zexpon_rmse_std_casesr‡   rˆ   r   r   r   r   rU   r   s:   
	

ü
ÿ
ü
ÿ
rU   )Únumpyr   Znumpy.testingr   r   r   r   r   rL   r   r3   Zscipy.statsr   r   rU   r   r   r   r   Ú<module>   s   f