
    _Mh6                         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	m
Z
 d dlmZ d dlmZmZmZ d dlmZmZmZ  G d d	          Zeej                            d
           G d d                                  ZdS )    N)raises)stats)normexpon)array_api_compatible)array_namespaceis_array_api_strictis_jax)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/html/test/jupyter/venv/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         ?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?r2   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   r6   r   r   r   r7   g^fTF?)r   r   r   r   infr8   s       r   test_entropy_2d_zeroz TestEntropy.test_entropy_2d_zero3   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   r6   r   r      axis)R^?rA   gD%+?r2   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   r6   r   r   r>   r?   ){[<?rE   gC8X?r2   r8   s       r   test_entropy_2d_nondefault_axisz+TestEntropy.test_entropy_2d_nondefault_axisD   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   r6   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_errorK   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   r6   r   r   r   r?   r2   rB   s      r   1test_base_entropy_with_axis_0_is_equal_to_defaultz=TestEntropy.test_base_entropy_with_axis_0_is_equal_to_defaultS   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 rP   r2   r8   s       r   ,test_entropy_with_axis_0_is_equal_to_defaultz8TestEntropy.test_entropy_with_axis_0_is_equal_to_defaultY   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   r6   r   r   r>   r?   r   r   r   r   TrB   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 rU   rV   r8   s       r   test_entropy_transposedz#TestEntropy.test_entropy_transposedf   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<   )   r>   r?   r   )r   .r>   )r>   .)nprandomdefault_rngr   r   r   r   )r   r   rngr3   yress         r   test_entropy_broadcastingz%TestEntropy.test_entropy_broadcastingm   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)
   r>      )   r]   rH   rI   r'   rK   r   rL   r   r   )r   r   r3   rc   rM   s        r   test_entropy_shape_mismatchz'TestEntropy.test_entropy_shape_mismatchv   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 )Nrg   z!`base` must be a positive number.rI   r$   rj   r   r   r3   rM   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/   r4   r9   r<   rC   rF   rN   rQ   rS   rX   rZ   re   rk   ro    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   skip_xp_backendsc                      e Zd ZdZd Zd Zd Zej        	                    dd          d             Z
ej        	                    dd          d	             Zd
 Zej                            dg d          d             ZdddddZdddddZeeeeiZej                            dg d          ej                            deeg          d                         Zej                            dg d          d             Zej        	                    dd          ej                            dg d          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                    t           j                            d          }|                    d          }|                    |                                          }t          j        |d          }t          ||                    d                     t          j        |dd          }t          ||                    d                     t          j        |d	d          }t          ||                    d
                     d S )Nr   d   vasicekmethod- {?r>   )window_lengthr{    ?r&   =&?	r_   r`   RandomStatestandard_normalr   tolistr   differential_entropyr   )r   r   random_statevaluesr   s        r   !test_differential_entropy_vasicekz9TestDifferentialEntropy.test_differential_entropy_vasicek   s    y,,Q//--c22FMMOO,,,VIFFF,=!>!>???,V14=? ? ?,=!>!>???,V14=? ? ?,=!>!>?????r    c                 4   t           j                            d          }|                    d          }|                    |                                          }t          j        |dd          }|                    g d          }t          ||           t          j        |ddd          }|                    g d          }t          ||           t          j        |dd	d          }|                    g d
          }t          ||           d S )Nr   r\   rx   r>   ry   )r@   r{   )r|   gUZdpx?gE7L?)r@   r}   r{   )r~   gzG?gt?r&   )r   gl+ɍj?go4d?r   )r   r   r   r   r   refs         r   4test_differential_entropy_vasicek_2d_nondefault_axiszLTestDifferentialEntropy.test_differential_entropy_vasicek_2d_nondefault_axis   s   y,,Q//--h77FMMOO,,,V!INNNjjRRRSS%%%,V!14=? ? ?jjQQQRR%%%,V!14=? ? ?jjRRRSS%%%%%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>   r^   r]   )r}   sample_sizerI   )r}   r@   )r_   r`   r   r   r   r   shapeformatassert_raisesrL   r   r   )r   r   r   r   	error_strr   r}   formatted_error_strs           r   ,test_differential_entropy_raises_value_errorzDTestDifferentialEntropy.test_differential_entropy_raises_value_error   s0   y,,Q//--h77FMMOO,,< 	
 l1o ![!^[A 	 	M"+"2"2+' #3 # #
 z1DEEE  *"/                 	 	s   #CC	C	z	jax.numpyz#JAX doesn't support item assignment)reasonc                 0   t           j                            d          }|                    d          }|                    |                                          }t          j        |d          }t          j        |          }t          ||           d S )Nr   )rx   r\   r?   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   s     y,,Q//--h77FMMOO,,,V!<<<4V<<11111r    c                 2   t           j                            d          }|                    d          }|                    |                                          }t          t          j        |j	                  t          j        |d                     d S )Nr   r   r>   r?   )
r_   r`   r   r   r   r   r   r   r   rW   )r   r   r   r   s       r   )test_base_differential_entropy_transposedzATestDifferentialEntropy.test_base_differential_entropy_transposed   s     y,,Q//--h77FMMOO,,&vx00&vA666	
 	
 	
 	
 	
r    c                    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 )	Nrg   z+`base` must be a positive number or `None`.rI   rm   r$   z`method` must be one of...z	ekki-ekkirz   )
r_   r`   randr   r   rK   r   rL   r   r   rn   s       r   ro   z-TestDifferentialEntropy.test_input_validation   sI   INN2JJqxxzz""?]: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$   $BBB/CCCr{   )ry   van esebrahimicorreac                    t          |          r|dk    rt          j        d           n)t          |          r|dk    rt          j        d           |dk    rdnd}t          j                            |d          }|                    |                                          }|                    t          t          j        
                                                    }t	          j        ||	          }t          ||d
           d S )Nr   Needs array assignment.r   Needs fancy indexing.'  i@B r   sizer   rz   {Gzt?)rtol)r
   rK   xfailr	   r   r   rvsr   r   floatr   r   r   )r   r{   r   nr   expectedrd   s          r   test_consistencyz(TestDifferentialEntropy.test_consistency   s     ":: 	2&J..L23333 $$ 	28););L0111x''EEWjnn!!n44jj&&::eEJ$6$6$8$899::(V<<<XE222222r    )gMbX?灕Cl?)gA`"?g)\(?)gHzG?gy&1?)gMb?r   )ry   r   r   r   )gE?l?)gx?gOn?)gףp=
?g~jt?)gS?r   distc                 J   t          |          r|dk    rt          j        d           n)t          |          r|dk    rt          j        d           d\  }}}| j        |         |         }|                    |d                   |                    |d                   }	}|                    ||fd          }
|                    |
                                          }
|                    t          |	                                                    }t          j        |
||d	
          }t          |                    |                    ||z
  dz                      |d           t          |          }t          |                    |d          |	d           d S )Nr   r   r   r   )r   2      r   r>   r   r^   )r}   r{   r@   r]   r   )atol)
correctiongMb`?)r
   rK   r   r	   rmse_std_casesr   r   r   r   r   r   r   r   sqrtmeanr   std)r   r{   r   r   repsr   mr   rmse_expectedstd_expectedr   true_entropyrd   xp_tests                 r   test_rmse_stdz%TestDifferentialEntropy.test_rmse_std  s    ":: 	2&J..L23333 $$ 	28););L0111!
a&t,V4&(jj!&=&=rzz(ST+?V?V|hhT1IAh66jj&&zz%"7"788(A06RA A A|);a(? @ @AA%E	3 	3 	3 	3!#&&CA665QQQQQQr    z	n, method))r&   r   )rh   r   )i  ry   c                 ^   t          |          r|dk    rt          j        d           t          j                            |fd          }|                    |                                          }t          j        |          }t          j        ||          }t          ||           d S )Nr   r   r   r   rz   )
r
   rK   r   r   r   r   r   r   r   r   )r   r   r{   r   r   res1res2s          r   test_method_autoz(TestDifferentialEntropy.test_method_auto/  s     ":: 	4&J..L2333jnn1$Qn77jj&&)#..)#f===d#####r    dtype)Nfloat32float64c                    t          |          r|dk    rt          j        d           g d}t          |t	          |          d           }t          |t	          |          |                    d          j                  }t          j        |                    ||          |          }t          j        |                    ||j	                  |          }t          ||                    ||          d                    d S )Nr   r   )r>   r>   r]   r\   r\         r      r   r&   	   rg   ri   r1   )r   rz   rs   )r	   rK   r   getattrstrr   r   r   r   r   r   )	r   r   r{   r   r3   dtype_in	dtype_outrd   r   s	            r   test_dtypes_gh21192z+TestDifferentialEntropy.test_dtypes_gh21192;  s     r"" 	2v'9'9L01118882s5zz400BE

BJJrNN,@AA	(AX)F)FvVVV(ARZ)H)HQWXXXRZZ9Z==bABBBBBr    N)rp   rq   rr   __doc__r   r   r   rK   markrt   r   r   ro   parametrizer   norm_rmse_std_casesexpon_rmse_std_casesr   r   r   r   r   r   rs   r    r   rv   rv      s        @ @ @"& & &(  4 [!!+)N " P P2 2P P2 [!!+)N " P P
 
P P

> 
> 
> [X (> (> (> ? ?3 3? ?3 '5%3%3'5	  (6&4&4(6	  /13N [X'R'R'RSS[VdE]33R R 43 TSR, [[ +> +> +> ? ?$ $? ?$ [!!+)N " P P[X'R'R'RSS[W&B&B&BCCC C DC TSP PC C Cr    rv   )r+   rK   r   r   numpyr_   scipyr   scipy.statsr   r   scipy.conftestr   scipy._lib._array_apir   r	   r
   scipy._lib._array_api_no_0dr   r   r   r   r   usefixturesrv   rs   r    r   <module>r      sa     * * * * * *           # # # # # # # # / / / / / / N N N N N N N N N N9 9 9 9 9 9 9 9 9 9u& u& u& u& u& u& u& u&p +,,BC BC BC BC BC BC BC -, BC BC BCr    