
    5[g/                         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y)    N)raises)assert_allclose)stats)array_api_compatible)xp_assert_closexp_assert_equalxp_assert_lessc                       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y)TestEntropyc                    |j                  g d      }|j                  g d      }t        j                  ||      }t        j                  ||      }t        ||j                  d             t	        | |j                  d             y )N)      ?皙?333333?)皙?g      ?g?        )asarrayr   entropyr   r	   )selfxppkqkeselfedoubles         Y/var/www/html/bid-api/venv/lib/python3.12/site-packages/scipy/stats/tests/test_entropy.pytest_entropy_positivez!TestEntropy.test_entropy_positive   sg     ZZ(ZZ)*b"%--B'rzz"~.xB0    c                    |j                  d      }t        j                  |d      }t        |j	                  |dz
        |j                  d             |j                  d      }|j                  |j                  d      dk  |j                  d      |      }t        j                  ||      }t        j                  ||d      }t        |j	                  ||z  t        j                  d      z
        |j                  d             y )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[MM"2&rvva"f~rzz%'89WWR[XXbiima'B<MM"b!]]2r+rvvadTXXb\12BJJu4EFr   c                     |j                  g d      }t        t        j                  |      |j                  d             y )N)r   g      ?r   g R^?r   r   r   r   )r   r   xs      r   test_entropy_zerozTestEntropy.test_entropy_zero#   s2     JJ|$a(

#67	9r   c                     |j                  ddgddgddgg      }|j                  ddgddgddgg      }t        t        j                  ||      |j                  ddg             y )Nr   r   333333?r   r   gN!0?2?r-   r   r   r   r   s       r   test_entropy_2dzTestEntropy.test_entropy_2d*   sj    ZZ#sc3Z#s<=ZZ#sc3Z#s<=b"-

Iz#:;	=r   c                 x   |j                  ddgddgddgg      }|j                  ddgddgddgg      }t        t        j                  ||      |j                  |j                  dg             |j                  ddgddgddgg      }t        t        j                  ||      |j                  ddg             y )	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"-

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

J
#;<	>r   c                     |j                  ddgddgddgg      }t        t        j                  |d      |j                  g d             y )	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<   sF    ZZ#sc3Z#s<=bq1

#GH	Jr   c                     |j                  ddgddgddgg      }|j                  ddgddgddgg      }t        t        j                  ||d      |j                  g d             y )	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   si    ZZ#sc3Z#s<=ZZ#sc3Z#s<=b"15

#GH	Jr   c                     |j                  ddgddgddgg      }|j                  ddgddgg      }d}t        j                  t        |      5  t	        j
                  ||       d d d        y # 1 sw Y   y xY w)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   sk    ZZ#sc3Z#s<=ZZ#sc3Z01C]]:W5MM"b! 655s   A//A8c                     |j                  ddgddgddgg      }t        t        j                  |d      t        j                  |             y 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   sD    ZZ#sc3Z#s<=bq1b)	+r   c                     |j                  ddgddgddgg      }|j                  ddgddgddgg      }t        t        j                  ||d      t        j                  ||             y rK   r-   r3   s       r   ,test_entropy_with_axis_0_is_equal_to_defaultz8TestEntropy.test_entropy_with_axis_0_is_equal_to_defaultW   si    ZZ#sc3Z#s<=ZZ#sc3Z#s<=b"15b"-	/r   c                     |j                  ddgddgddgg      }t        t        j                  |j                        t        j                  |d             y Nr   r   r1   r   r   r9   r:   r   r   r   r   Tr=   s      r   test_base_entropy_transposedz(TestEntropy.test_base_entropy_transposed^   sH    ZZ#sc3Z#s<=bdd+bq1	3r   c                     |j                  ddgddgddgg      }|j                  ddgddgddgg      }t        t        j                  |j                  |j                        t        j                  ||d             y rP   rQ   r3   s       r   test_entropy_transposedz#TestEntropy.test_entropy_transposedd   sq    ZZ#sc3Z#s<=ZZ#sc3Z#s<=bddBDD1b"15	7r   c                    t         j                  j                  d      }|j                  |j                  d            }|j                  |j                  d            }t	        j
                  ||d      }t        |d   t	        j
                  ||d                t        |d   t	        j
                  ||d	                y )
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    ii##$56JJszz!}%JJszz&)*mmAqr*Aa6 ;<Aa6 ;<r   c                     |j                  d      }|j                  d      }d}t        j                  t        |      5  t	        j
                  ||       d d d        y # 1 sw Y   y xY w)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   sK    GGK GGGC]]:W5MM!Q 655s    A  A)c                     |j                  d      }d}t        j                  t        |      5  t	        j
                  |d       d d d        y # 1 sw Y   y xY w)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<    GGBK5]]:W5MM!"% 655s   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      s2   1 1 	G 	G 9 9 = = > > J J
 J J " " + +
 / / 3 3
 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                  j                  dg d	      d
        ZdddddZe
j                  j                  d eej!                                     d        ZdddddZe
j                  j                  d eej!                                     d        Ze
j                  j                  dg d      d        Zy)TestDifferentialEntropyz
    Vasicek results are compared with the R package vsgoftest.

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

    c                 F   t         j                  j                  d      }|j                  d      }t	        j
                  |d      }t        |dd       t	        j
                  |dd	      }t        |d
d       t	        j
                  |dd	      }t        |dd       y )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    yy,,Q/--c2,,VIF5,,V14=?5,,V14=?5r   c                 X   t         j                  j                  d      }|j                  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       y )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    yy,,Q/--h7,,V!IN*	
 ,,V!14=?*	
 ,,V!14=?*	
r   c                 D   t         j                  j                  d      }|j                  d      }d}|j                  d   }dd|dz  |hD ]G  }|j                  ||      }t        t        |      5  t        j                  ||d	       d d d        I y # 1 sw Y   TxY w)
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    yy,,Q/--h7< 	
 ll1o ![!^[AM"+"2"2+' #3 #
 z1DE**"/ FE B FEs   2BB	c                     t         j                  j                  d      }|j                  d      }t	        j
                  |d      }t	        j
                  |      }t        ||       y )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   sR    yy,,Q/--h7,,V!<44V<1r   c                     t         j                  j                  d      }|j                  d      }t	        t        j                  |j                        j                  t        j                  |d             y )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   sV    yy,,Q/--h7&&vxx022&&vA6	
r   c                 f   t         j                  j                  d      }d}t        j                  t
        |      5  t        j                  |d       d d d        d}t        j                  t
        |      5  t        j                  |d       d d d        y # 1 sw Y   GxY w# 1 sw Y   y xY w)	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   s{    IINN2?]]:W5&&qr2 6 /]]:W5&&q= 65	 65 65s   B:B'B$'B0rt   )rr   van esebrahimicorreac                     |dk(  rdnd}t         j                  j                  |d      }t         j                  j                         }t        j                  ||      }t        ||d       y )	Nr   '  i@B r   sizer   rs   {Gzt?rw   )r   normrvsr   r   r   )r   rt   nr   expectedr_   s         r   test_consistencyz(TestDifferentialEntropy.test_consistency   sX     x'EWjjnn!!n4::%%'((V<XE2r   )gMbX?灕Cl?)gA`"?g)\(?)gHzG?gy&1?)gMb?r   )rr   r   r   r   zmethod, expectedc                    d\  }}}|\  }}t         j                  j                  ||fd      }t         j                  j                         }	t        j                  |||d      }
t        t        j                  t        j                  |
|	z
  dz              |d       t        t        j                  |
      |d	       y 
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&.#|jjnn4)!n<zz))+((A06RA|);a(? @A%E	3s\>r   )gE?l?)gx?gOn?)gףp=
?g~jt?)gS?r   c                    d\  }}}|\  }}t         j                  j                  ||fd      }t         j                  j                         }	t        j                  |||d      }
t        t        j                  t        j                  |
|	z
  dz              |d       t        t        j                  |
      |d	       y r   )
r   exponr   r   r   r   rZ   r   r   r   r   s              r   test_expon_rmse_stdz+TestDifferentialEntropy.test_expon_rmse_std  s     "
a&.#|kkooD!91o={{**,((A06RA|);a(? @A%E	3s\>r   z	n, method))r"   r   )rc   r   )i  rr   c                     t         j                  j                  |fd      }t        j                  |      }t        j                  ||      }||k(  sJ y )Nr   r   rs   )r   r   r   r   )r   r   rt   r   res1res2s         r   test_method_autoz(TestDifferentialEntropy.test_method_auto)  sJ     jjnn1$Qn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22
	> [[X (> ?3?3 '5%3%3'5	 [[/!"5";";"=>@?@?  (6&4&4(6	 [[/!"6"<"<">?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      s9      *  )  / R Ru& u&pl lr   