
     h,                         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          Z G d d          ZdS )	    N)assert_equalassert_allclose)assert_assert_almost_equalassert_array_almost_equal)raisesc                   h    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd ZdS )TestEntropyc                     g d}g d}t          j        ||          }t          j        ||          }t          d|k               t          |dk               d S )N)      ?皙?333333?)皙?g      ?g?        )statsentropyr   )selfpkqkeselfedoubles        Z/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/scipy/stats/tests/test_entropy.pytest_entropy_positivez!TestEntropy.test_entropy_positive   sb    __b"%%-B''u3    c                    t          j        dt                    }t          j        |d          }t          t          |dz
            dk                t          j        dt                    }d|d d<   t          j        ||          }t          j        ||d          }t          t          ||z  t          j        d          z
            dk                d S )N   g       @baseg      @gh㈵>   )nponesfloatr   r   r   abslog)r   r   Sr   S2s        r   test_entropy_basezTestEntropy.test_entropy_base   s    WRM"2&&&AFe#$$$WR2A2M"b!!]2r+++AbD26"::%&&./////r   c                 R    t          t          j        g d          dd           d S )N)r         g R^?   )decimal)r   r   r   )r   s    r   test_entropy_zerozTestEntropy.test_entropy_zero"   s9    EM)))446I$&	( 	( 	( 	( 	( 	(r   c                 |    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 S )Nr   r   333333?r   r   gN!0?2?r   r   r   r   r   r   s      r   test_entropy_2dzTestEntropy.test_entropy_2d'   sd    Cj3*sCj1Cj3*sCj1!%-B"7"7#,j"9	; 	; 	; 	; 	;r   c                     ddgddgddgg}ddgddgddgg}t          t          j        ||          t          j        dg           d|d         d<   t          t          j        ||          d	dg           d S )
Nr   r   r/   r   r   r   r0   r   g^fTF?)r   r   r   r    infr2   s      r   test_entropy_2d_zeroz TestEntropy.test_entropy_2d_zero-   s    Cj3*sCj1Cj3*sCj1!%-B"7"7#%6:"6	8 	8 	8 1a!%-B"7"7#-z":	< 	< 	< 	< 	<r   c                 h    ddgddgddgg}t          t          j        |d          g d           d S )	Nr   r   r/   r   r   r)   axis)R^?r:   gD%+?r1   r   r   s     r   $test_entropy_base_2d_nondefault_axisz0TestEntropy.test_entropy_base_2d_nondefault_axis7   sU    Cj3*sCj1!%-";";";"F"F"F	H 	H 	H 	H 	Hr   c                     ddgddgddgg}ddgddgddgg}t          t          j        ||d          g d           d S )	Nr   r   r/   r   r   r)   r8   ).c}?r>   gaX?r1   r2   s      r   test_entropy_2d_nondefault_axisz+TestEntropy.test_entropy_2d_nondefault_axis<   so    Cj3*sCj1Cj3*sCj1!%-BQ"?"?"?"@"@"@	B 	B 	B 	B 	Br   c                 n    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   r2   s      r   test_entropy_raises_value_errorz+TestEntropy.test_entropy_raises_value_errorB   sH    Cj3*sCj1Cj3*%j%-R88888r   c                     ddgddgddgg}t          t          j        |d          t          j        |                     d S Nr   r   r/   r   r   r   r8   r1   r;   s     r   1test_base_entropy_with_axis_0_is_equal_to_defaultz=TestEntropy.test_base_entropy_with_axis_0_is_equal_to_defaultG   sT    Cj3*sCj1!%-";";";"'-"3"3	5 	5 	5 	5 	5r   c                     ddgddgddgg}ddgddgddgg}t          t          j        ||d          t          j        ||                     d S rE   r1   r2   s      r   ,test_entropy_with_axis_0_is_equal_to_defaultz8TestEntropy.test_entropy_with_axis_0_is_equal_to_defaultL   sp    Cj3*sCj1Cj3*sCj1!%-BQ"?"?"?"'-B"7"7	9 	9 	9 	9 	9r   c                     t          j        ddgddgddgg          }t          t          j        |j                  j        t          j        |d                     d S Nr   r   r/   r   r   r)   r8   r    arrayr   r   r   Tr;   s     r   test_base_entropy_transposedz(TestEntropy.test_base_entropy_transposedR   sc    XSzC:Sz:;;!%-"5"5"7"'-";";";	= 	= 	= 	= 	=r   c                    t          j        ddgddgddgg          }t          j        ddgddgddgg          }t          t          j        |j        |j                  j        t          j        ||d                     d S rJ   rK   r2   s      r   test_entropy_transposedz#TestEntropy.test_entropy_transposedW   s    XSzC:Sz:;;XSzC:Sz:;;!%-bd";";"="'-BQ"?"?"?	A 	A 	A 	A 	Ar   c                    t           j                            d           t           j                            d          }t           j                            dd          }t          j        ||d          }t          |d         t          j        ||d                              t          |d         t          j        ||d                              d S )Nr      r*   r)   r8   )r    randomrandr   r   r   )r   xyress       r   test_entropy_broadcastingz%TestEntropy.test_entropy_broadcasting]   s    
	qINN1INN1a  mAqr***SVU]1ad33444SVU]1ad3344444r   c                    t           j                            ddd          }t           j                            dd          }d}t          j        t
          |          5  t          j        ||           d d d            d S # 1 swxY w Y   d S )N
   r)   r+      r*   z+shape mismatch: objects cannot be broadcastmatchr    rT   rU   pytestr   rB   r   r   )r   rV   rW   messages       r   test_entropy_shape_mismatchz'TestEntropy.test_entropy_shape_mismatche   s    INN2q"%%INN2q!!?]:W555 	  	 M!Q	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   BB	Bc                     t           j                            d          }d}t          j        t
          |          5  t          j        |d           d d d            d S # 1 swxY w Y   d S )Nr[   z!`base` must be a positive number.r]   r   r_   r   rV   ra   s      r   test_input_validationz!TestEntropy.test_input_validationl   s    INN25]:W555 	& 	&M!"%%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   A!!A%(A%N)__name__
__module____qualname__r   r'   r-   r3   r6   r<   r?   rC   rF   rH   rN   rP   rY   rb   rf    r   r   r
   r
      s             	0 	0 	0( ( (
; ; ;< < <H H H
B B B9 9 9
5 5 5
9 9 9= = =
A A A5 5 5     & & & & &r   r
   c                      e Zd ZdZd Zd Zd Zd Zd Zd Z	e
j                            dg d	          d
             ZdddddZe
j                            d ee                                                    d             ZdddddZe
j                            d ee                                                    d             Ze
j                            dg 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                 b   t           j                            d          }|                    d          }t	          j        |d          }t          |dd           t	          j        |dd	          }t          |d
d           t	          j        |dd	          }t          |dd           d S )Nr   d   vasicekmethodd{?ư>rtolr)   )window_lengthrq   h?r   À%?r    rT   RandomStatestandard_normalr   differential_entropyr   r   random_statevaluesr   s       r   !test_differential_entropy_vasicekz9TestDifferentialEntropy.test_differential_entropy_vasicek~   s    y,,Q//--c22,VIFFF5555,V14=? ? ?5555,V14=? ? ?555555r   c                 t   t           j                            d          }|                    d          }t	          j        |dd          }t          |g dd           t	          j        |ddd	          }t          |g d
d           t	          j        |ddd	          }t          |g dd           d S )Nr   rR   rn   r)   ro   )r9   rq   )rr   g.x?gOjM?rs   rt   )r9   rv   rq   )rw   g\?g:?r   )rx   gpj?g80Qd?ry   r}   s       r   4test_differential_entropy_vasicek_2d_nondefault_axiszLTestDifferentialEntropy.test_differential_entropy_vasicek_2d_nondefault_axis   s   y,,Q//--h77,V!INNN***	
 	
 	
 	
 ,V!14=? ? ?***	
 	
 	
 	
 ,V!14=? ? ?***	
 	
 	
 	
 	
 	
r   c                 \   t           j                            d          }|                    d          }d}|j        d         }dd|dz  |hD ]^}|                    ||          }t          t          |          5  t          j	        ||d	           d d d            n# 1 swxY w Y   _d S )
Nr   r   zhWindow length \({window_length}\) must be positive and less than half the sample size \({sample_size}\).r)   rS   r*   )rv   sample_sizer]   )rv   r9   )
r    rT   rz   r{   shapeformatrA   rB   r   r|   )r   r~   r   	error_strr   rv   formatted_error_strs          r   ,test_differential_entropy_raises_value_errorzDTestDifferentialEntropy.test_differential_entropy_raises_value_error   s   y,,Q//--h77< 	
 l1o ![!^[A 	 	M"+"2"2+' #3 # #
 z1DEEE  *"/                 	 	s   <B  B$	'B$	c                     t           j                            d          }|                    d          }t	          j        |d          }t	          j        |          }t          ||           d S )Nr   )rn   rR   r8   ry   )r   r~   r   r   default_entropys        r   >test_base_differential_entropy_with_axis_0_is_equal_to_defaultzVTestDifferentialEntropy.test_base_differential_entropy_with_axis_0_is_equal_to_default   se    y,,Q//--h77,V!<<<4V<<11111r   c                     t           j                            d          }|                    d          }t	          t          j        |j                  j        t          j        |d                     d S )Nr   r   r)   r8   )r    rT   rz   r{   r   r   r|   rM   )r   r~   r   s      r   )test_base_differential_entropy_transposedzATestDifferentialEntropy.test_base_differential_entropy_transposed   sl    y,,Q//--h77&vx002&vA666	
 	
 	
 	
 	
r   c                 r   t           j                            d          }d}t          j        t
          |          5  t          j        |d           d d d            n# 1 swxY w Y   d}t          j        t
          |          5  t          j        |d           d d d            d S # 1 swxY w Y   d S )	Nr[   z+`base` must be a positive number or `None`.r]   rd   r   z`method` must be one of...z	ekki-ekkirp   )r    rT   rU   r`   r   rB   r   r|   re   s      r   rf   z-TestDifferentialEntropy.test_input_validation   s0   INN2?]:W555 	3 	3&qr2222	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 /]:W555 	> 	>&q====	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	>s#   A  A$'A$B,,B03B0rq   )ro   van esebrahimicorreac                     |dk    rdnd}t           j                            |d          }t           j                                        }t          j        ||          }t          ||d           d S )	Nr   '  i@B r   sizer~   rp   {Gzt?rt   )r   normrvsr   r|   r   )r   rq   nr   expectedrX   s         r   test_consistencyz(TestDifferentialEntropy.test_consistency   sq     x''EEWjnn!!n44:%%''(V<<<XE222222r   )gMbX?灕Cl?)gA`"?g)\(?)gHzG?gy&1?)gMb?r   )ro   r   r   r   zmethod, expectedc                    d\  }}}|\  }}t           j                            ||fd          }t           j                                        }	t          j        |||d          }
t          t          j        t          j        |
|	z
  dz                      |d           t          t          j	        |
          |d	           d S 
N)r   2      r   r   rS   )rv   rq   r9   r*   r   )atolgMb`?)
r   r   r   r   r|   r   r    sqrtmeanstdr   rq   r   repsr   mrmse_expectedstd_expectedr   true_entropyrX   s              r   test_norm_rmse_stdz*TestDifferentialEntropy.test_norm_rmse_std   s     "
a&.#|jnn4)!n<<z))++(A06RA A A|);a(? @ @AA%E	3 	3 	3 	3s\>>>>>>r   )gE?l?)gx?gOn?)gףp=
?g~jt?)gS?r   c                    d\  }}}|\  }}t           j                            ||fd          }t           j                                        }	t          j        |||d          }
t          t          j        t          j        |
|	z
  dz                      |d           t          t          j	        |
          |d	           d S r   )
r   exponr   r   r|   r   r    r   r   r   r   s              r   test_expon_rmse_stdz+TestDifferentialEntropy.test_expon_rmse_std  s     "
a&.#|kooD!91o=={**,,(A06RA A A|);a(? @ @AA%E	3 	3 	3 	3s\>>>>>>r   z	n, method))r   r   )r+   r   )i  ro   c                     t           j                            |fd          }t          j        |          }t          j        ||          }||k    sJ d S )Nr   r   rp   )r   r   r   r|   )r   r   rq   r   res1res2s         r   test_method_autoz(TestDifferentialEntropy.test_method_auto  sS     jnn1$Qn77)#..)#f===t||||||r   N)rg   rh   ri   __doc__r   r   r   r   r   rf   r`   markparametrizer   norm_rmse_std_caseslistitemsr   expon_rmse_std_casesr   r   rj   r   r   rl   rl   s   s        6 6 6 
 
 
6  22 2 2
 
 
	> 	> 	> [X (> (> (> ? ?3 3? ?3 '5%3%3'5	  [/!T"5";";"="=>>@ @? ?@ @?  (6&4&4(6	  [/!T"6"<"<">">??A A? ?A A? [[ +> +> +> ? ? ? ?  r   rl   )numpyr    numpy.testingr   r   r   r   r   r`   r   rA   scipy.statsr   r
   rl   rj   r   r   <module>r      s        7 7 7 7 7 7 7 76 6 6 6 6 6 6 6 6 6  * * * * * *      c& c& c& c& c& c& c& c&Ll l l l l l l l l lr   