
    Ug/                         d dl Z d dlZd dlmZ d dlZd dlmZ d dlm	Z	 d dl
mZ d dlmZmZmZ  G d d          Z G d	 d
          ZdS )    N)raises)assert_allclose)stats)array_api_compatible)xp_assert_closexp_assert_equalxp_assert_lessc                   X   e Zd Zed             Zed             Zed             Zed             Zed             Zed             Z	ed             Z
ed             Zed	             Zed
             Zed             Zed             Zed             Zed             Zed             ZdS )TestEntropyc                 D   |                     g d          }|                     g d          }t          j        ||          }t          j        ||          }t          ||                     d                     t	          | |                     d                     d S )N)      ?皙?333333?)皙?g      ?g?        )asarrayr   entropyr   r	   )selfxppkqkeselfedoubles         ]/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/scipy/stats/tests/test_entropy.pytest_entropy_positivez!TestEntropy.test_entropy_positive   s     ZZ((ZZ)))**b"%%-B''rzz"~~...xB00000    c                 n   |                     d          }t          j        |d          }t          |                    |dz
            |                    d                     |                     d          }|                    |                    d          dk     |                    d          |          }t          j        ||          }t          j        ||d          }t          |                    ||z  t          j	        d          z
            |                    d                     d S )N          @baseg      @gh㈵>   )
onesr   r   r	   absr   wherearangemathlog)r   r   r   Sr   S2s         r   test_entropy_basezTestEntropy.test_entropy_base   s    WWR[[M"2&&&rvva"f~~rzz%'8'8999WWR[[XXbiimma'B<<M"b!!]2r+++rvvadTXb\\122BJJu4E4EFFFFFr   c                     |                     g d          }t          t          j        |          |                     d                     d S )N)r   g      ?r   g R^?r   r   r   r   )r   r   xs      r   test_entropy_zerozTestEntropy.test_entropy_zero#   sQ     JJ|||$$a((

#677	9 	9 	9 	9 	9r   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   s       r   test_entropy_2dzTestEntropy.test_entropy_2d*   s    ZZ#sc3Z#s<==ZZ#sc3Z#s<==b"--

Iz#:;;	= 	= 	= 	= 	=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        ||          |                     |j        dg                     |                     ddgddgddgg          }t          t          j        ||          |                     ddg                     d S )	Nr   r   r1   r   r   r   r2   g^fTF?)r   r   r   r   infr3   s       r   test_entropy_2d_zeroz TestEntropy.test_entropy_2d_zero1   s    ZZ#sc3Z#s<==ZZ#sc3Z#s<==b"--

BFJ#788	: 	: 	: ZZ#sc3Z#s<==b"--

J
#;<<	> 	> 	> 	> 	>r   c                     |                     ddgddgddgg          }t          t          j        |d          |                     g d                     d S )	Nr   r   r1   r   r      axis)R^?r<   gD%+?r-   r   r   r   s      r   $test_entropy_base_2d_nondefault_axisz0TestEntropy.test_entropy_base_2d_nondefault_axis<   sn    ZZ#sc3Z#s<==bq111

#G#G#GHH	J 	J 	J 	J 	J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   r1   r   r   r9   r:   ){[<?r@   gC8X?r-   r3   s       r   test_entropy_2d_nondefault_axisz+TestEntropy.test_entropy_2d_nondefault_axisB   s    ZZ#sc3Z#s<==ZZ#sc3Z#s<==b"1555

#G#G#GHH	J 	J 	J 	J 	Jr   c                    |                     ddgddgddgg          }|                     ddgddgg          }d}t          j        t          |          5  t	          j        ||           d d d            d S # 1 swxY w Y   d S )Nr   r   r1   r   r   /Array shapes are incompatible for broadcasting.match)r   pytestr   
ValueErrorr   r   )r   r   r   r   messages        r   test_entropy_raises_value_errorz+TestEntropy.test_entropy_raises_value_errorI   s    ZZ#sc3Z#s<==ZZ#sc3Z011C]:W555 	" 	"M"b!!!	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	"s   A::A>A>c                     |                     ddgddgddgg          }t          t          j        |d          t          j        |                     d S Nr   r   r1   r   r   r   r:   r-   r=   s      r   1test_base_entropy_with_axis_0_is_equal_to_defaultz=TestEntropy.test_base_entropy_with_axis_0_is_equal_to_defaultQ   s`    ZZ#sc3Z#s<==bq111b))	+ 	+ 	+ 	+ 	+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          t          j        ||                     d S rK   r-   r3   s       r   ,test_entropy_with_axis_0_is_equal_to_defaultz8TestEntropy.test_entropy_with_axis_0_is_equal_to_defaultW   s    ZZ#sc3Z#s<==ZZ#sc3Z#s<==b"1555b"--	/ 	/ 	/ 	/ 	/r   c                     |                     ddgddgddgg          }t          t          j        |j                  t          j        |d                     d S Nr   r   r1   r   r   r9   r:   r   r   r   r   Tr=   s      r   test_base_entropy_transposedz(TestEntropy.test_base_entropy_transposed^   sb    ZZ#sc3Z#s<==bd++bq111	3 	3 	3 	3 	3r   c                    |                     ddgddgddgg          }|                     ddgddgddgg          }t          t          j        |j        |j                  t          j        ||d                     d S rP   rQ   r3   s       r   test_entropy_transposedz#TestEntropy.test_entropy_transposedd   s    ZZ#sc3Z#s<==ZZ#sc3Z#s<==bdBD11b"1555	7 	7 	7 	7 	7r   c                    t           j                            d          }|                    |                    d                    }|                    |                    d                    }t	          j        ||d          }t          |d         t	          j        ||d                              t          |d         t	          j        ||d	                              d S )
Nl   @UC<   )   r9   r:   r   )r   .r9   )r9   .)nprandomdefault_rngr   r   r   r   )r   r   rngr.   yress         r   test_entropy_broadcastingz%TestEntropy.test_entropy_broadcastingk   s    i##$566JJszz!}}%%JJszz&))**mAqr***Aa6 ; ;<<<Aa6 ; ;<<<<<r   c                     |                     d          }|                     d          }d}t          j        t          |          5  t	          j        ||           d d d            d S # 1 swxY w Y   d S )N)
   r9      )   rX   rC   rD   r#   rF   r   rG   r   r   )r   r   r.   r^   rH   s        r   test_entropy_shape_mismatchz'TestEntropy.test_entropy_shape_mismatcht   s    GGK  GGGC]:W555 	  	 M!Q	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   A++A/2A/c                     |                     d          }d}t          j        t          |          5  t	          j        |d           d d d            d S # 1 swxY w Y   d S )Nrb   z!`base` must be a positive number.rD   r    re   )r   r   r.   rH   s       r   test_input_validationz!TestEntropy.test_input_validation|   s    GGBKK5]:W555 	& 	&M!"%%%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&s   AAAN)__name__
__module____qualname__r   r   r+   r/   r4   r7   r>   rA   rI   rL   rN   rS   rU   r`   rf   ri    r   r   r   r      s       1 1 1 	G 	G 	G 9 9 9 = = = > > > J J J
 J J J " " " + + +
 / / / 3 3 3
 7 7 7 = = =       & & & & &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{?ư>rtolr9   )window_lengthrt   h?r"   À%?rZ   r[   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   rW   rq   r9   rr   )r;   rt   )ru   g.x?gOjM?rv   rw   )r;   ry   rt   )rz   g\?g:?r"   )r{   gpj?g80Qd?r|   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}\).r9   rY   rX   )ry   sample_sizerD   )ry   r;   )
rZ   r[   r}   r~   shapeformatassert_raisesrG   r   r   )r   r   r   	error_strr   ry   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   )rq   rW   r:   r|   )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   r9   r:   )rZ   r[   r}   r~   r   r   r   rR   )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 )	Nrb   z+`base` must be a positive number or `None`.rD   rh   r    z`method` must be one of...z	ekki-ekkirs   )rZ   r[   randrF   r   rG   r   r   )r   r.   rH   s      r   ri   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rt   )rr   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   rs   {Gzt?rw   )r   normrvsr   r   r   )r   rt   nr   expectedr_   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   )rr   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   rY   )ry   rt   r;   rX   r   )atolgMb`?)
r   r   r   r   r   r   rZ   sqrtmeanstdr   rt   r   repsr   mrmse_expectedstd_expectedr   true_entropyr_   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   rZ   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   )rc   r   )i  rr   c                     t           j                            |fd          }t          j        |          }t          j        ||          }||k    sJ d S )Nr   r   rs   )r   r   r   r   )r   r   rt   r   res1res2s         r   test_method_autoz(TestDifferentialEntropy.test_method_auto)  sS     jnn1$Qn77)#..)#f===t||||||r   N)rj   rk   rl   __doc__r   r   r   r   r   ri   rF   markparametrizer   norm_rmse_std_caseslistitemsr   expon_rmse_std_casesr   r   rm   r   r   ro   ro      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   ro   )r'   rF   r   r   numpyrZ   numpy.testingr   scipyr   scipy.conftestr   scipy._lib._array_apir   r   r	   r   ro   rm   r   r   <module>r      s      * * * * * *     ) ) ) ) ) )       / / / / / / R R R R R R R R R Ru& u& u& u& u& u& u& u&pl l l l l l l l l lr   