
    (phJ                        S SK r S SKrS SKJr  S SKJr  S SKrS SKJ	r	J
r
JrJr  S SKrS SKJr  S SKJrJrJrJrJrJrJr  S SKJr  S SKJr  S S	KJr  S S
KJr   S SK!J"r"J#r#J$r$J%r%J&r&  \\RN                  RQ                  S5      /r)\RN                  RT                  r*\RV                  " / SQ5      RY                  S5      r-\RV                  " SS/SS/SS/SS/SS/SS/SS/SS/SS/SS/SS//5      r.\RV                  " SS/SS/SS//5      r/\RV                  " SS/SS/S S!//5      r0\RV                  " / S"Q5      r1 " S# S$5      r2 " S% S&5      r3\*" S'S(9 " S) S*5      5       r4g)+    N)deepcopyLock)assert_array_equalassert_equalassert_suppress_warnings)raises)kmeanskmeans2py_vqvqwhitenClusterError
_krandinit)_vq)array_api_compatible)matrix)array_api_extra)SCIPY_ARRAY_APIarray_namespacexp_copyxp_assert_closexp_assert_equalskip_xp_backends(  ggQ?Gz
ףp=
?gRQ gQ@gQgffffff?333333g)\(@zG(\?gGzgQ
@RQgffffff@gQg
ףp=
ףp=
gQ@g      q=
ףp@皙gHzG@g
ףp=
g333333@gQgQ?\(\gQ@gGzzG@g=
ףp={Gz?g      皙@gQg      ?\(\g\(\	@QgQ?=
ףp=gHzGѿ(\ gr*   gq=
ףp?g(\gp=
ף@QgQ?g\(\ףp=
@gQg)\(@gp=
ף Q@g=
ףp=g(\@gQ gp=
ף?gq=
ףpgQ?      )\(?r0   g)\( @g=
ףp=r&   =
ףp= g\(\@gGzg333333?ףp=
g(\ҿr)   gGz	@gffffffgGz?gQgGz?(\r.   g(\gGz@gffffff(\?gQQgzG\(\@\(\g(\@皙g      @r$   (\?g)\(gQ@gp=
ףg=
ףp=?gp=
ף @g(\g(\?GzgQ@gQg\(\@gp=
ף
Q@{Gz gp=
ףg
@Qgffffff@zGg?
ףp=
?g=
ףp=Q?r>   gRQ?Qg)\(?gQg)\(@gRQgQ@r!   gQ@p=
ףgRQؿr9   gQ@
ףp=
g\(\?r@   g=
ףp=?q=
ףp      ?333333?r$   Q@r"   gHzG@g333333gףp=
@gGzg)\(@r8   g333333?r>   g\(\?gRQg(\ @r2   rK   gףp=
	rL   r;   g
ףp=
?gQg?Qg\(\@q=
ףpgq=
ףp@r$   g\(\g(\r?   g?g)\(gQ	@gGzg?g\(\gQ@ffffff      @r0   \(\?g=
ףp=
g
ףp=
@ףp=
r1   HzGgQ?Qg
ףp=
?r3   g(\?r   gףp=
rO   (\?g{Gzg@gRQgQ@gQrD   g
ףp=
Gz@gr(   g(\gHzG@gGz gGzp=
ףrW   g
ףp=
gp=
ףg      gQ@rU   gq=
ףp?rP   gGz@rT   g{Gz?gQۿgp=
ף?g\(\gHzG@g      g(\rB   r   gq=
ףpg333333?gzG r7   {GzQ? gQ{Gz=
ףp=@g)\(gp=
ף
@gQr&   gq=
ףpg
ףp=
r+   gHzG?(\g
ףp=
?gQ	g333333?rH   r'   g)\(gzG@gQg(\	@QrI   rA   gQ	@r^   g{Gz?rN   r:   r8   gffffff@r   gGz@r2   rQ   g(\g333333rE   gHzG?rJ   gffffff?gffffffgRQ?gQgq=
ףp?      g(\@r<   g{Gz@ggGz?gHzGgQr-   r5   g333333r=   gq=
ףpgffffff?g
ףp=
rQ   r,   gףp=
@g333333g\(\@gGzgףp=
?g\(\rZ   g)\(g
ףp=
@gr]   gffffff=
ףp=@gg?r4   g      @g      gGz@p=
ףr=   gGzr#   gHzGgGz?gףp=
rF   r\   g(\@gGz
rV   gQgGz@gGzgRQ@r   g
ףp=
?(\g{Gz?r[         ?Qra   gHzGgQ@rU   gGz?r"   g)\(̿re   g333333?gzGr7   gQg{Gz@RQg333333@rX   {Gz
@gzGg@g
ףp=
r/   g)\( gGz?rb   gQ?r6   g{Gz@rS   rf   r_   rZ   r<   g{GzĿg=
ףp=gQrM   gffffff?rY   rg   rU   g?gGzrR   rG   g(\?r   g\(\?rc   r    r%   rW   g(\gzG @      g      @      rj   	               g@      @g333333@rC   gUUUUUU@gUUUUUU@g      @g      @g      @rI   )r   ro   rj   rj   rj   rj   ro   rj   ro   ro   ro   c                       \ rS rSrS r\R                  S 5       r\" SSS9S 5       r	S r
\R                  R                  \S	S9S
 5       rSrg)
TestWhitenS   c                     UR                  SS/SS/SS/SS/S	S
//5      nUR                  SS/SS/SS/SS/SS//5      n[        [        U5      USS9  g )Ng&cJ^|Y@g`q@gս	@g}&?J?gUH~
@g?gK=E@gFMp?g|H@gH|?cw&?gbA|?D=?k2?'B?);"~?|d=?z?|?Ry?h㈵>rtol)asarrayr   r   )selfxpdesiredobss       N/var/www/html/venv/lib/python3.13/site-packages/scipy/cluster/tests/test_vq.pytest_whitenTestWhiten.test_whitenU   s    **z:6'4'4'4'4	6 7 jj:z2%z2%z2%z2%z2	4 5
 	sW48    c                     [        5       $ Nr   r   s    r   whiten_lockTestWhiten.whiten_lockc   	    vr   	jax.numpy)jax arrays do not support item assignmentreasonc                    UR                  / SQ/ SQ/ SQ/5      nUR                  / SQ/ SQ/ SQ/5      nU   [        R                  " SS9 n[        R                  " S	5        [	        [        U5      US
S9  [        [        U5      S5        [        [        US   R                  [        5      5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)N)        rd   gJJ@)r   rd   g I 1?)r   rd   gKX@)r   rd   g/?)r   rd   g@?)r   rd   g?T)recordalwaysr   r   ro   )r   warningscatch_warningssimplefilterr   r   r   lenr   
issubclasscategoryRuntimeWarning)r   r   r   r   r   ws         r   test_whiten_zero_stdTestWhiten.test_whiten_zero_stdg   s     **3335 6 jj...0 1 ((5%%h/sW4@SVQ'
1R5>>>BC 6 [55 [s$   CA&C2C
C	C
C"c           	          UR                   UR                  UR                  * 4 H8  nUR                  SU/SS/SS/SS/SS	//5      n[        [        [
        U5        M:     g 
Nrw   rx   ry   rz   r{   r|   r}   r~   r   )naninfr   assert_raises
ValueErrorr   r   r   	bad_valuer   s       r   test_whiten_not_finite!TestWhiten.test_whiten_not_finite{   si    "&&0I**z95):6):6):6):6	8 9C
 *fc2 1r   )`np.matrix` unsupported in array API modec           	          [         R                  [         R                  [         R                  * 4 H2  n[        SU/SS/SS/SS/SS	//5      n[	        [
        [        U5        M4     g r   )npr   r   r   r   r   r   r   s       r   test_whiten_not_finite_matrix(TestWhiten.test_whiten_not_finite_matrix   sg     "&&0I:y1%z2%z2%z2%z2	4 5C
 *fc2 1r    N)__name__
__module____qualname____firstlineno__r   pytestfixturer   r   r   r   markskipifr   r   __static_attributes__r   r   r   rt   rt   S   su    9 ^^  kHJDJD$3 [[J  L3L3r   rt   c                   B   \ rS rSr\" SS9S 5       r\R                  R                  \	SS9S 5       r
\" SSS	9S
 5       r\R                  R                  \	SS9S 5       r\" SS9S 5       r\" SSS	9S 5       r\" SSS	9S 5       r\" SS9S 5       r\" SS9S 5       rSrg)TestVq   Tcpu_onlyc                    [         R                  " [        S   /[        S   /[        S   //5      n[        UR	                  [        5      UR	                  U5      5      S   n[        X1R	                  [        UR                  S9SS9  g )Nr   ro   rj   dtypeFcheck_dtype)r   concatenateXr   r   r   LABEL1int64r   r   initclabel1s       r   
test_py_vqTestVq.test_py_vq   si    11178rzz!}bjj&78;

6
 B$)	+r   r   r   c                     [         R                  " [        S   /[        S   /[        S   //5      n[        [	        [        5      [	        U5      5      S   n[        U[        5        g Nr   ro   rj   )r   r   r   r   r   r   r   r   s       r   test_py_vq_matrixTestVq.test_py_vq_matrix   sN     11178vay&-0366*r   z!`_vq` only supports NumPy backend)np_onlyr   c                 ^   [         R                  " [        S   /[        S   /[        S   //5      n[        R                  " UR                  [        5      UR                  U5      5      u  p4[        U[        5        [	        UR                  [        5      UR                  U5      5      u    ng r   )r   r   r   r   r   r   r   r   r   r   r   r   _s        r   test_vqTestVq.test_vq   sw    11178FF2::a="**U*;<	66*"**Q-E!231r   c                 .   [         R                  " [        S   /[        S   /[        S   //5      n[        R                  " [        [        5      [        U5      5      u  p4[        U[        5        [	        [        [        5      [        U5      5      u    ng r   )r   r   r   r   r   r   r   r   r   s        r   test_vq_matrixTestVq.test_vq_matrix   sg     11178FF6!9fUm4	66*&)VE]+1r   c                    [         S S 2S4   nUS S n[        R                  " X#5      u  pEUR                  U5      nUR                  U5      n[	        US S 2[
        R                  4   US S 2[
        R                  4   5      u  pg[        XaR                  XAR                  S9SS9  [        XqR                  U5      5        g )Nr   rk   r   Fr   )	r   r   r   r   r   r   newaxisr   r   )r   r   datar   abtatbs           r   
test_vq_1dTestVq.test_vq_1d   s     AwRavvd"zz$

5!tArzzM*E!RZZ-,@AJJqJ9uMJJqM*r   c                     UR                  SS/UR                  S9nUR                  UR                  5      n[	        [
        [        R                  X#5        g )Nrd   g       @r   )r   float64astypefloat32r   	TypeErrorr   r   )r   r   r   r   s       r   test__vq_sametypeTestVq.test__vq_sametype   s>    JJSzJ4HHRZZ i.r   c                 n    UR                  SS/[        S9n[        [        [        R
                  X"5        g )Nro   rj   r   )r   intr   r   r   r   )r   r   r   s      r   test__vq_invalid_typeTestVq.test__vq_invalid_type   s(    JJ1vSJ)i.r   c                    [         R                  R                  SS5      n[         R                  R                  SS5      n[        R                  " X#5      u  pE[        UR                  U5      UR                  U5      5      u  pg[        XqR                  U5      SS9  [        XaR                  XAR                  S9SS9  UR                  [         R                  5      nUR                  [         R                  5      n[        R                  " X#5      u  pE[        UR                  U5      UR                  U5      5      u  pg[        XqR                  XQR                  S9SS9  [        XaR                  XAR                  S9SS9  g )N   rk   r   r   r   Fr   )r   randomrandr   r   r   r   r   r   r   r   r   r   r   r   r   	code_bookcodes0dis0codes1dis1s           r   test_vq_large_nfeatTestVq.test_vq_large_nfeat   s   IINN2r"IINN1b)	vva+JJqM2::i0
 	jj.T:

6
 BPUVHHRZZ $$RZZ0	vva+JJqM2::i0
 	jjZZj@tL

6
 BPUVr   c                    [         R                  R                  SS5      S-  n[         R                  R                  SS5      S-  n[        R                  " X#5      u  pE[        UR                  U5      UR                  U5      5      u  pg[        XqR                  U5      SS9  [        XaR                  XAR                  S9SS	9  g )
N
   rn   i@B rj   r   r   r   Fr   )
r   r   r   r   r   r   r   r   r   r   r   s           r   test_vq_large_featuresTestVq.test_vq_large_features   s    IINN2q!G+IINN1a(72	vva+JJqM2::i0
 	jj.T:

6
 BPUVr   r   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s   t$+ %+ [[J  L+L+ d+NO4 P4 [[J  L,L, t$
+ %
+ d+NO/ P/
 d+NO/ P/ t$W %W. t$
W %
Wr   r   Tr   c                      \ rS rSrS rS r\R                  R                  \	SS9S 5       r
S rS r\R                  R                  \	SS9S	 5       rS
 rS rS r\" SSS9S 5       r\R&                  S 5       r\R                  R                  \R,                  S:H  SS9S 5       rS rS rS r\" SSS9S 5       r\R                  R8                  \" SSS9S 5       5       rS r\" SSS9S 5       rSr g)	TestKMean   c                 (   SnSn[         R                  R                  U5      n[         R                  R                  U5      nS[         R                  R                  X25      -  SU-  -
  nS[         R                  R                  X25      -  SU-  -   n[         R                  " UR                  S   UR                  S   -   U4[         R
                  5      nXhS UR                  S   & XxUR                  S   S & [        UR                  U5      SSS9  g )	Ni,  d   i'  i N  r   rj   ro   seed)r   r   randnemptyshaper   r   r   )	r   r   dnm1m2xyr   s	            r   test_large_featuresTestKMean.test_large_features   s     YY__QYY__QBIIOOA))EBJ6BIIOOA))EBJ6xxaggaj0!4bjjA[aggajQWWQZ[ 	rzz$+r   c                 B   [         R                  R                  S5      n[         R                  " [        S   /[        S   /[        S   //5      n[        UR                  [        5      UR                  U5      SUS9S   n[        XAR                  [        5      5        g Ni1  r   ro   rj   iterrng)	r   r   default_rngr   r   r   r   r   CODET2r   r   r  r   code1s        r   test_kmeans_simpleTestKMean.test_kmeans_simple  st    ii##E*11178rzz!}bjj&7aSI!Lzz&12r   r   r   c                    [         R                  R                  S5      n[         R                  " [        S   /[        S   /[        S   //5      n[        [        [        5      [        U5      SUS9S   n[        U[        5        g r  )	r   r   r  r   r   r   r   r   r  r  s        r   test_kmeans_simple_matrix#TestKMean.test_kmeans_simple_matrix  sf     ii##E*11178vay&-aSA!Dv&r   c                 (   UR                  [        5      nUR                  SS/SS/SS//5      n[        X#5        [        5        nUR	                  [
        S5        [        X#SS	9  S S S 5        [        [        [        X#S
S	9  g ! , (       d  f       N#= f)Ng5 g!{gL^ @g͛`d?g8}g?kzKOne of the clusters is empty. Re-run kmeans with a different initializationwarn)missingraise)	r   TESTDATA_2Dr   r	   filterUserWarningr   r   r   )r   r   r   initksups        r   test_kmeans_lost_cluster"TestKMean.test_kmeans_lost_cluster  s    zz+&

Z5'4(+68 9 	t CJJ{23 D0	 ! 	lGT'J ! s   !B
Bc                 $   [         R                  R                  S5      nUR                  [         R                  " [
        S   /[
        S   /[
        S   //5      5      n[        (       a  UR                  /O[         R                  [        /nU H}  n[        U" [
        5      U" U5      SUS9S   n[        U" [
        5      U" U5      SUS9S   n[        XaR                  [        5      5        [        XqR                  [        5      5        M     g NNa r   ro   rj   r  )r   r   r  r   r   r   r   r   r   r   CODET1r  )r   r   r  r   arraystpr  code2s           r   test_kmeans2_simpleTestKMean.test_kmeans2_simple$  s    ii##H-

2>>AaD6AaD6AaD6*BCD!0"**rzz66JBBqE2e91#>qAEBqE2e91#>qAEE::f#56E::f#56 r   c                    [         R                  R                  S5      nUR                  [         R                  " [
        S   /[
        S   /[
        S   //5      5      n[        [        [
        5      [        U5      SUS9S   n[        [        [
        5      [        U5      SUS9S   n[        U[        5        [        U[        5        g r.  )r   r   r  r   r   r   r   r   r   r0  r  )r   r   r  r   r  r3  s         r   test_kmeans2_simple_matrix$TestKMean.test_kmeans2_simple_matrix/  s     ii##H-

2>>AaD6AaD6AaD6*BCDq	6%=qcB1Eq	6%=qcB1Ev&v&r   c                     UR                  [        5      nUS S 2S4   nUS S n[        XAS9n[        X5SSS9S     [        X5SS9S     g )Nr   rk   r   ro   )r  r  rj   r  )r   r&  r   r   )r   r   r   data1r   codes         r   test_kmeans2_rank1TestKMean.test_kmeans2_rank1:  sT    zz+&QT
bq	u$ 	!!,Q/!$Q'r   c                 V    UR                  [        5      nUS S 2S4   n[        USSS9  g )Nr   rj   ro   r;  )r   r&  r   )r   r   r   r<  s       r   test_kmeans2_rank1_2TestKMean.test_kmeans2_rank1_2E  s)    zz+&QT
qq!r   c                 |    UR                  [        5      nUR                  US5      S S2S S 24   n[        US5        g )Nr   r   r   rj   )r   r&  reshaper   )r   r   r   s      r   test_kmeans2_high_dimTestKMean.test_kmeans2_high_dimJ  s9     zz+&zz$)#2#q&1ar   r   r   c                    [         R                  R                  S5      nUR                  [        5      nSn[        X4SUS9  [        US S 2S4   USUS9  [        X4SUS9  [        US S 2S4   USUS9  [        5        nUR                  SS9  [        X4S	US9  [        US S 2S4   US	US9  S S S 5        g ! , (       d  f       g = f)
Nr/  rk   pointsminitr  ro   ++z%One of the clusters is empty. Re-run.)messager   )r   r   r  r   r&  r   r	   r'  )r   r   r  r   kr*  s         r   test_kmeans2_initTestKMean.test_kmeans2_initQ  s     ii##H-zz+&xS1QT
AX37t-QT
ATs3  CJJFJGD85DAJs; !  s   =.B44
Cc                     [        5       $ r   r   r   s    r   
krand_lockTestKMean.krand_lockd  r   r   win32zFails with MemoryError in Wine.c                    UR                  [        5      nUR                  US5      UR                  US5      S S2S S 24   /n[        S5      n[	        U5      nU   U Hv  n[
        R                  R                  S5      n[        X5Xv5      n[        R                  " UR                  US9n	[        R                  " UR                  US9n
[        XSS9  Mx     S S S 5        g ! , (       d  f       g = f)	Nrh   rD  r   g    .A  r:  gI+?)atol)r   r&  rE  r   r   r   r   r  r   xpxcovTr   )r   r   rR  r   datasrN  xp_testr  initorig_covinit_covs              r   test_krandinitTestKMean.test_krandinith  s     zz+&D(+D(+CRCF35H!$'ii++D1!$3877466g677466g6@  ZZs   A=C!!
C/c                 N    [        [        [        UR                  / 5      S5        g )Nrj   )r   r   r   r   r   r   s     r   test_kmeans2_emptyTestKMean.test_kmeans2_emptyx  s    j'2::b>1=r   c                    [        [        [        UR                  [        5      S5        [        [        [
        UR                  [        5      S5        [        [        [
        UR                  [        5      UR                  / 5      5        g )Nr   )r   r   r   r   r   r   rc  s     r   test_kmeans_0kTestKMean.test_kmeans_0k|  sL    j&"**Q-;j'2::a=!<j'2::a="**R.Ir   c                     UR                  / SQUR                  S9n[        USSS9n[        US   UR                  S/UR                  S95        [        US   UR                  SUR                  S9S	   5        g )
N)ro   rj   rk   rl   r   r   ro   g 7yAC)threshr   rr   g333333@r   r   r   r   r   )r   r   r  ress       r   test_kmeans_large_thres!TestKMean.test_kmeans_large_thres  sn    JJ'rzzJ:Q$'A

B4rzz
 BCA

+=RZZ
 PQS TUr   c                     [         R                  R                  S5      nUR                  SS/SS//UR                  S9n[        UR                  [        5      SSUS	9u  pE[        XC5        g )
Nl   C.t gC:g>g#~j?g'1:	g-'@r   rj   rL  rJ  )r   r   r  r   r   r   r&  r   )r   r   r  prev_resrl  r   s         r   test_kmeans2_kpp_low_dim"TestKMean.test_kmeans2_kpp_low_dim  sk     ii##$78::U3 )624;=::  GK0!4SI&r   c           	      N   [         R                  R                  S5      nSnSn[         R                  " S[         R                  " U5      -  S[         R                  " U5      -  /5      n[         R                  " UR                  US   [         R                  " U5      US9UR                  US   [         R                  " U5      US9/5      nUR                  U5      n[        US	S
US9u  px[        UR                  U5      UR                  UR                  U5      5      5        g )Nl   <DM]4r  r   rn   r   )sizero   rj   rL  rJ  )r   r   r  vstackonesmultivariate_normaleyer   r   r   sign)	r   r   r  n_dimru  centersr   rl  r   s	            r   test_kmeans2_kpp_high_dim#TestKMean.test_kmeans2_kpp_high_dim  s    
 ii##$56))Q/"''%.02 3 yy##GAJuD#I##GAJuD#I
 
 zz$q#6bggbjj.A&BCr   c                    UR                  / SQUR                  S9n[        X!R                  SS/5      5      n[        US   UR                  SS/UR                  S95        [        US   UR                  S	UR                  S9S
   5        g )N)r   r   ro   ro      r   r`   gGz?r   gٿg       @ro   g?r   rk  )r   r   r   rl  s       r   test_kmeans_diff_convergence&TestKMean.test_kmeans_diff_convergence  sy    jj-RZZj@S**c4[12A

D2;bjj
 IJA

+=RZZ
 PQS TUr   c           	         S[         R                  R                  S5      [         R                  R                  S5      /nU H  n[	        U5      n[	        U5      nUR                  [        5      n[        USUS9u  px[        USUS9u  p[        Xy5        S H(  n
[        USXS9u  px[        USXS9u  p[        Xy5        M*     M     g )NrV  rj   r  )r   rI  rL  )rK  r  )
r   r   RandomStater  r   r   r&  r   r   r   )r   r   	seed_listr  seed1seed2r   res1r   res2rK  s              r   #test_kmeans_and_kmeans2_random_seed-TestKMean.test_kmeans_and_kmeans2_random_seed  s    
 "))''-ryy/D/DT/J
	 DTNETNE::k*DT151GDT151GDD'3!$C!$C+ 4 r   r   N)!r   r   r   r   r  r  r   r   r   r   r   r+  r4  r7  r>  rA  rF  r   rO  r   rR  sysplatformr`  rd  rg  rm  rq  thread_unsafer}  r  r  r   r   r   r   r  r     s   ,$3 [[J  L'L'K 	7 [[J  L'L'	("
 kHJ<J<" ^^  [[/@  BABA>JV kHJ'J' [[kHJDJ D"V kHJ,J,r   r  )5r   r  copyr   	threadingr   numpyr   numpy.testingr   r   r   r	   r   r
   r   scipy.cluster.vqr   r   r   r   r   r   r   scipy.clusterr   scipy.conftestr   scipy.sparse._sputilsr   
scipy._libr   rX  scipy._lib._array_apir   r   r   r   r   r   usefixtures
pytestmarkr   arrayrE  r&  r   r0  r  r   rt   r   r  r   r   r   <module>r     s    
      *8 8 8  / ( -  #FKK$;$;<N$OP
;;// hh %
 %J 78K R HHsAhAA!fq!fq!fq!f!fq!fq!fq!f. / 
FF#F#F#% 
& 
FE?F#F#% 
& 
3	4:3 :3z\W \WB 4 P, P, !P,r   