
    (ph6                         S SK r S SKrS SKJr  S SKrS SKJr  S SKJ	r	J
r
  S SKJr  S SKJrJrJr  S SKJrJrJr   " S S	5      r\\R,                  R/                  S
5       " S S5      5       5       rg)    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                      \ rS rSr\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r	\S 5       r
\S 5       r\S	 5       r\S
 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       r\S 5       rSrg)TestEntropy   c                    UR                  / SQ5      nUR                  / SQ5      n[        R                  " X"5      n[        R                  " X#5      n[        XAR                  S5      5        [	        U* UR                  S5      5        g )N)      ?皙?333333?)皙?g      ?g?        )asarrayr   entropyr   r   )selfxppkqkeselfedoubles         Q/var/www/html/venv/lib/python3.13/site-packages/scipy/stats/tests/test_entropy.pytest_entropy_positive!TestEntropy.test_entropy_positive   sa     ZZ(ZZ)*b%--'zz"~.xB0    c                    UR                  S5      n[        R                  " USS9n[        UR	                  US-
  5      UR                  S5      5        UR                  S5      nUR                  UR                  S5      S:  UR                  S5      U5      n[        R                  " X$5      n[        R                  " X$SS9n[        UR	                  X5-  [        R                  " S5      -
  5      UR                  S5      5        g )N          @baseg      @gh㈵>   )
onesr   r   r   absr   wherearangemathlog)r   r   r   Sr   S2s         r   test_entropy_baseTestEntropy.test_entropy_base   s    WWR[MM"2&rvva"f~rzz%'89WWR[XXbiima'B<MM"!]]2+rvvadTXXb\12BJJu4EFr"   c                     UR                  / SQ5      n[        [        R                  " U5      UR                  S5      5        g )N)r         ?r%   g R^?r   r   r   r   )r   r   xs      r   test_entropy_zeroTestEntropy.test_entropy_zero%   s2     JJ|$a(

#67	9r"   c                     UR                  SS/SS/SS//5      nUR                  SS/SS/SS//5      n[        [        R                  " X#5      UR                  SS/5      5        g )Nr   r   333333?r   r   gN!0?2?r5   r   r   r   r   s       r   test_entropy_2dTestEntropy.test_entropy_2d,   sh    ZZ#sc3Z#s<=ZZ#sc3Z#s<=b-

Iz#:;	=r"   c                 x   UR                  SS/SS/SS//5      nUR                  SS/SS/SS//5      n[        [        R                  " X#5      UR                  UR                  S/5      5        UR                  SS/SS/SS//5      n[        [        R                  " X#5      UR                  SS/5      5        g )	Nr   r   r:   r   r   r   r;   g^fTF?)r   r   r   r   infr<   s       r   test_entropy_2d_zero TestEntropy.test_entropy_2d_zero3   s    ZZ#sc3Z#s<=ZZ#sc3Z#s<=b-

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

J
#;<	>r"   c                     UR                  SS/SS/SS//5      n[        [        R                  " USS9UR                  / SQ5      5        g )	Nr   r   r:   r   r      axis)R^?rG   gD%+?r5   r   r   r   s      r   $test_entropy_base_2d_nondefault_axis0TestEntropy.test_entropy_base_2d_nondefault_axis>   sF    ZZ#sc3Z#s<=bq1

#GH	Jr"   c                     UR                  SS/SS/SS//5      nUR                  SS/SS/SS//5      n[        [        R                  " X#SS9UR                  / SQ5      5        g )	Nr   r   r:   r   r   rD   rE   ){[<?rL   gC8X?r5   r<   s       r   test_entropy_2d_nondefault_axis+TestEntropy.test_entropy_2d_nondefault_axisD   sg    ZZ#sc3Z#s<=ZZ#sc3Z#s<=b15

#GH	Jr"   c                     UR                  SS/SS/SS//5      nUR                  SS/SS//5      nSn[        R                  " [        US9   [        R
                  " X#5        S S S 5        g ! , (       d  f       g = f)Nr   r   r:   r   r   /Array shapes are incompatible for broadcasting.match)r   pytestr   
ValueErrorr   r   )r   r   r   r   messages        r   test_entropy_raises_value_error+TestEntropy.test_entropy_raises_value_errorK   si    ZZ#sc3Z#s<=ZZ#sc3Z01C]]:W5MM"! 655s   A--
A;c                     UR                  SS/SS/SS//5      n[        [        R                  " USS9[        R                  " U5      5        g Nr   r   r:   r   r   r   rE   r5   rH   s      r   1test_base_entropy_with_axis_0_is_equal_to_default=TestEntropy.test_base_entropy_with_axis_0_is_equal_to_defaultS   sD    ZZ#sc3Z#s<=bq1b)	+r"   c                     UR                  SS/SS/SS//5      nUR                  SS/SS/SS//5      n[        [        R                  " X#SS9[        R                  " X#5      5        g rY   r5   r<   s       r   ,test_entropy_with_axis_0_is_equal_to_default8TestEntropy.test_entropy_with_axis_0_is_equal_to_defaultY   se    ZZ#sc3Z#s<=ZZ#sc3Z#s<=b15b-	/r"   c                     UR                  SS/SS/SS//5      n[        [        R                  " UR                  5      [        R                  " USS95        g Nr   r   r:   r   r   rD   rE   r   r   r   r   TrH   s      r   test_base_entropy_transposed(TestEntropy.test_base_entropy_transposed`   sH    ZZ#sc3Z#s<=bdd+bq1	3r"   c           	          UR                  SS/SS/SS//5      nUR                  SS/SS/SS//5      n[        [        R                  " UR                  UR                  5      [        R                  " X#SS95        g r`   ra   r<   s       r   test_entropy_transposed#TestEntropy.test_entropy_transposedf   so    ZZ#sc3Z#s<=ZZ#sc3Z#s<=bddBDD1b15	7r"   c                    [         R                  R                  S5      nUR                  UR                  S5      5      nUR                  UR                  S5      5      n[        R
                  " X4SS9n[        US   [        R
                  " X4S   5      5        [        US   [        R
                  " X4S	   5      5        g )
Nl   @UC<   )   rD   rE   r   )r   .rD   )rD   .)nprandomdefault_rngr   r   r   r   )r   r   rngr6   yress         r   test_entropy_broadcasting%TestEntropy.test_entropy_broadcastingm   s    ii##$56JJszz!}%JJszz&)*mmAr*Aa6 ;<Aa6 ;<r"   c                     UR                  S5      nUR                  S5      nSn[        R                  " [        US9   [        R
                  " X#5        S S S 5        g ! , (       d  f       g = f)N)
   rD      )   rj   rP   rQ   r)   rS   r   rT   r   r   )r   r   r6   rp   rU   s        r   test_entropy_shape_mismatch'TestEntropy.test_entropy_shape_mismatchv   sI    GGK GGGC]]:W5MM! 655s   A
A,c                     UR                  S5      nSn[        R                  " [        US9   [        R
                  " USS9  S S S 5        g ! , (       d  f       g = f)Nru   z!`base` must be a positive number.rQ   r&   rx   r   r   r6   rU   s       r   test_input_validation!TestEntropy.test_input_validation~   s<    GGBK5]]:W5MM!"% 655s   A
A N)__name__
__module____qualname____firstlineno__r   r    r1   r7   r=   rA   rI   rM   rV   rZ   r]   rc   rf   rr   ry   r~   __static_attributes__r   r"   r   r   r      s2   1 1 	G 	G 9 9 = = > > J J
 J J " " + +
 / / 3 3
 7 7 = =     & &r"   r   skip_xp_backendsc                      \ rS rSrSrS rS rS r\R                  R                  SSS9S	 5       r\R                  R                  SSS9S
 5       rS r\R                  R                  S/ SQ5      S 5       rSSSSS.rSSSSS.r\\\\0r\R                  R                  S/ SQ5      \R                  R                  S\\/5      S 5       5       r\R                  R                  S/ SQ5      S 5       r\R                  R                  SSS9\R                  R                  S/ SQ5      \R                  R                  S/ SQ5      S 5       5       5       rS rg!)"TestDifferentialEntropy   z
Vasicek results are compared with the R package vsgoftest.

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

c                    [         R                  R                  S5      nUR                  S5      nUR	                  UR                  5       5      n[        R                  " USS9n[        XAR	                  S5      5        [        R                  " USSS9n[        XAR	                  S5      5        [        R                  " US	SS9n[        XAR	                  S
5      5        g )Nr   d   vasicekmethod- {?rD   )window_lengthr    ?r(   =&?	rl   rm   RandomStatestandard_normalr   tolistr   differential_entropyr   )r   r   random_statevaluesr   s        r   !test_differential_entropy_vasicek9TestDifferentialEntropy.test_differential_entropy_vasicek   s    yy,,Q/--c2FMMO,,,VIF,=!>?,,V14=?,=!>?,,V14=?,=!>?r"   c                    [         R                  R                  S5      nUR                  S5      nUR	                  UR                  5       5      n[        R                  " USSS9nUR	                  / SQ5      n[        XE5        [        R                  " USSSS9nUR	                  / SQ5      n[        XE5        [        R                  " USS	SS9nUR	                  / S
Q5      n[        XE5        g )Nr   ri   r   rD   r   )rF   r   )r   gUZdpx?gE7L?)rF   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_axisLTestDifferentialEntropy.test_differential_entropy_vasicek_2d_nondefault_axis   s    yy,,Q/--h7FMMO,,,V!INjjRS%,,V!14=?jjQR%,,V!14=?jjRS%r"   c                    [         R                  R                  S5      nUR                  S5      nUR	                  UR                  5       5      nSnUR                  S   nSSUS-  U1 H@  nUR                  UUS9n[        [        US9   [        R                  " UUSS	9  S S S 5        MB     g ! , (       d  f       MT  = f)
Nr   r   zhWindow length \({window_length}\) must be positive and less than half the sample size \({sample_size}\).rD   rk   rj   )r   sample_sizerQ   )r   rF   )rl   rm   r   r   r   r   shapeformatassert_raisesrT   r   r   )r   r   r   r   	error_strr   r   formatted_error_strs           r   ,test_differential_entropy_raises_value_errorDTestDifferentialEntropy.test_differential_entropy_raises_value_error   s    yy,,Q/--h7FMMO,< 	
 ll1o ![!^[AM"+"2"2+' #3 #
 z1DE**"/ FE B FEs   B//
B>	z	jax.numpyz#JAX doesn't support item assignment)reasonc                    [         R                  R                  S5      nUR                  S5      nUR	                  UR                  5       5      n[        R                  " USS9n[        R                  " U5      n[        XE5        g )Nr   )r   ri   rE   r   )r   r   r   r   r   default_entropys         r   >test_base_differential_entropy_with_axis_0_is_equal_to_defaultVTestDifferentialEntropy.test_base_differential_entropy_with_axis_0_is_equal_to_default   sf     yy,,Q/--h7FMMO,,,V!<44V<1r"   c                    [         R                  R                  S5      nUR                  S5      nUR	                  UR                  5       5      n[        [        R                  " UR                  5      [        R                  " USS95        g )Nr   r   rD   rE   )
rl   rm   r   r   r   r   r   r   r   rb   )r   r   r   r   s       r   )test_base_differential_entropy_transposedATestDifferentialEntropy.test_base_differential_entropy_transposed   sf     yy,,Q/--h7FMMO,&&vxx0&&vA6	
r"   c                    [         R                  R                  S5      nUR                  UR	                  5       5      nSn[
        R                  " [        US9   [        R                  " USS9  S S S 5        Sn[
        R                  " [        US9   [        R                  " USS9  S S S 5        g ! , (       d  f       NH= f! , (       d  f       g = f)	Nru   z+`base` must be a positive number or `None`.rQ   r|   r&   z`method` must be one of...z	ekki-ekkir   )
rl   rm   randr   r   rS   r   rT   r   r   r}   s       r   r~   -TestDifferentialEntropy.test_input_validation   s    IINN2JJqxxz"?]]:W5&&qr2 6 /]]:W5&&q= 65	 65 65s   B2C2
C 
Cr   )r   van esebrahimicorreac                    [        U5      (       a  US:X  a  [        R                  " S5        O,[        U5      (       a  US:X  a  [        R                  " S5        US:X  a  SOSn[        R
                  R                  USS9nUR                  UR                  5       5      nUR                  [        [        R
                  R                  5       5      5      n[        R                  " XAS	9n[        XeS
S9  g )Nr   Needs array assignment.r   Needs fancy indexing.'  i@B r   sizer   r   {Gzt?)rtol)r
   rS   xfailr	   r   r   rvsr   r   floatr   r   r   )r   r   r   nr   expectedrq   s          r   test_consistency(TestDifferentialEntropy.test_consistency   s     "::&J.LL23 $$8);LL01x'EWjjnn!!n4jj&::eEJJ$6$6$89:((<E2r"   )gMbX?灕Cl?)gA`"?g)\(?)gHzG?gy&1?)gMb?r   )r   r   r   r   )gE?l?)gx?gOn?)gףp=
?g~jt?)gS?r   distc                    [        U5      (       a  US:X  a  [        R                  " S5        O,[        U5      (       a  US:X  a  [        R                  " S5        Su  pEnU R                  U   U   nUR                  US   5      UR                  US   5      pUR                  XE4SS9n
UR                  U
R                  5       5      n
UR                  [        UR                  5       5      5      n[        R                  " XUS	S
9n[        UR                  UR                  X-
  S-  5      5      USS9  [        U5      n[        UR!                  USS9U	SS9  g )Nr   r   r   r   )r   2      r   rD   r   rk   )r   r   rF   rj   r   )atol)
correctiongMb`?)r
   rS   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_entropyrq   xp_tests                 r   test_rmse_std%TestDifferentialEntropy.test_rmse_std  s%    "::&J.LL23 $$8);LL01!
&&t,V4&(jj!&=rzz(ST+?V|hhTIAh6jj&zz%"78((06RA);a(? @A%E	3!#&CA65Qr"   z	n, method))r(   r   )rv   r   )i  r   c                 B   [        U5      (       a  US:X  a  [        R                  " S5        [        R                  R                  U4SS9nUR                  UR                  5       5      n[        R                  " U5      n[        R                  " XBS9n[        XV5        g )Nr   r   r   r   r   )
r
   rS   r   r   r   r   r   r   r   r   )r   r   r   r   r   res1res2s          r   test_method_auto(TestDifferentialEntropy.test_method_auto/  su     "::&J.LL23jjnn1$Qn7jj&))#.))#=#r"   dtype)Nfloat32float64c                    [        U5      (       a  US:X  a  [        R                  " S5        / SQn[        U[	        U5      S 5      n[        U[	        U5      UR                  S5      R                  5      n[        R                  " UR                  XES9US9n[        R                  " UR                  XAR                  S9US9n[        XqR                  XS9S   5        g )Nr   r   )rD   rD   rj   ri   ri         r      r   r(   	   ru   rw   r4   )r   r   r   )r	   rS   r   getattrstrr   r   r   r   r   r   )	r   r   r   r   r6   dtype_in	dtype_outrq   r   s	            r   test_dtypes_gh21192+TestDifferentialEntropy.test_dtypes_gh21192;  s     r""v'9LL0182s5z40BE
BJJrN,@,@A	((A)FvV((AZZ)HQWXZZZ=bABr"   r   N)r   r   r   r   __doc__r   r   r   rS   markr   r   r   r~   parametrizer   norm_rmse_std_casesexpon_rmse_std_casesr   r   r   r   r   r   r   r   r"   r   r   r      s   @"&(4 [[!!+)N " P2P2 [[!!+)N " P
P

> [[X (> ?3?3 '5%3%3'5	 (6&4&4(6	 /13N [[X'RS[[VdE]3R 4 TR, [[[ +> ?$?$ [[!!+)N " P[[X'RS[[W&BCC D TPCr"   r   )r-   rS   r   r   numpyrl   scipyr   scipy.statsr   r   scipy.conftestr   scipy._lib._array_apir   r	   r
   scipy._lib._array_api_no_0dr   r   r   r   r   usefixturesr   r   r"   r   <module>r      sn      *   # / N N9 9u& u&p +,BC BC - BCr"   