
    tKgvG                        d dl Z d dlZd dlmZ d dlZd dlmZmZm	Z	m
Z
 d dlZd dlmZ d dlmZmZmZmZmZmZm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mZm Z  eejB                  jE                  d
      gZ#ejB                  jH                  Z$ ejJ                  g d      jM                  d      Z' ejJ                  ddgddgddgddgddgddgddgddgddgddgddgg      Z( ejJ                  ddgddgddgg      Z) ejJ                  ddgddgddgg      Z* ejJ                  g d       Z+ G d! d"      Z, G d# d$      Z- e$d%&       G d' d(             Z.y))    N)deepcopy)assert_array_equalassert_equalassert_suppress_warnings)raises)kmeanskmeans2py_vqvqwhitenClusterError
_krandinit)_vq)array_api_compatible)matrix)SCIPY_ARRAY_APIcopycov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?      )\(?r-   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ؿr6   gQ@
ףp=
g\(\?r=   g=
ףp=?q=
ףp      ?333333?r!   Q@r   gHzG@g333333gףp=
@gGzg)\(@r5   g333333?r;   g\(\?gRQg(\ @r/   rH   gףp=
	rI   r8   g
ףp=
?gQg?Qg\(\@q=
ףpgq=
ףp@r!   g\(\g(\r<   g?g)\(gQ	@gGzg?g\(\gQ@ffffff      @r-   \(\?g=
ףp=
g
ףp=
@ףp=
r.   HzGgQ?Qg
ףp=
?r0   g(\?r   gףp=
rL   (\?g{Gzg@gRQgQ@gQrA   g
ףp=
Gz@gr%   g(\gHzG@gGz gGzp=
ףrT   g
ףp=
gp=
ףg      gQ@rR   gq=
ףp?rM   gGz@rQ   g{Gz?gQۿgp=
ף?g\(\gHzG@g      g(\r?   r   gq=
ףpg333333?gzG r4   {GzQ? gQ{Gz=
ףp=@g)\(gp=
ף
@gQr#   gq=
ףpg
ףp=
r(   gHzG?(\g
ףp=
?gQ	g333333?rE   r$   g)\(gzG@gQg(\	@QrF   r>   gQ	@r[   g{Gz?rK   r7   r5   gffffff@r   gGz@r/   rN   g(\g333333rB   gHzG?rG   gffffff?gffffffgRQ?gQgq=
ףp?      g(\@r9   g{Gz@ggGz?gHzGgQr*   r2   g333333r:   gq=
ףpgffffff?g
ףp=
rN   r)   gףp=
@g333333g\(\@gGzgףp=
?g\(\rW   g)\(g
ףp=
@grZ   gffffff=
ףp=@gg?r1   g      @g      gGz@p=
ףr:   gGzr    gHzGgGz?gףp=
rC   rY   g(\@gGz
rS   gQgGz@gGzgRQ@r   g
ףp=
?(\g{Gz?rX         ?Qr^   gHzGgQ@rR   gGz?r   g)\(̿rb   g333333?gzGr4   gQg{Gz@RQg333333@rU   {Gz
@gzGg@g
ףp=
r,   g)\( gGz?r_   gQ?r3   g{Gz@rP   rc   r\   rW   r9   g{GzĿg=
ףp=gQrJ   gffffff?rV   rd   rR   g?gGzrO   rD   g(\?r   g\(\?r`   r   r"   rT   g(\gzG @      g      @      rg   	               g@      @g333333@r@   gUUUUUU@gUUUUUU@g      @g      @g      @rF   )r   rl   rg   rg   rg   rg   rl   rg   rl   rl   rl   c                       e Zd Zd Z eddg      d        Zd Zej                  j                  e
d      d	        Zy
)
TestWhitenc                     |j                  ddgddgddgddgd	d
gg      }|j                  ddgddgddgddgddgg      }t        t        |      |d       y )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       _/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/cluster/tests/test_vq.pytest_whitenzTestWhiten.test_whitenS   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    	jax.numpy)jax arrays do not support item assignment)reasonsc                    |j                  g dg dg dg      }|j                  g dg dg dg      }t        j                  d      5 }t        j                  d	       t	        t        |      |d
       t        t        |      d       t        t        |d   j                  t                     d d d        y # 1 sw Y   y xY w)N)        ra   gJJ@)r   ra   g I 1?)r   ra   gKX@)r   ra   g/?)r   ra   g@?)r   ra   g?T)recordalwaysr|   r}   rl   )r   warningscatch_warningssimplefilterr   r   r   lenr   
issubclasscategoryRuntimeWarning)r   r   r   r   ws        r   test_whiten_zero_stdzTestWhiten.test_whiten_zero_stda   s     **3335 6 jj...0 1 $$D1Q!!(+F3Kt<Q#Jqu~~~>? 211s   A(B<<Cc           	          |j                   |j                  |j                   fD ]7  }|j                  d|gddgddgddgdd	gg      }t        t        t
        |       9 y 
Nrs   rt   ru   rv   rw   rx   ry   rz   r{   )naninfr   assert_raises
ValueErrorr   r   r   	bad_valuer   s       r   test_whiten_not_finitez!TestWhiten.test_whiten_not_finites   si    "&&0I**z95):6):6):6):6	8 9C
 *fc2 1r   )`np.matrix` unsupported in array API modereasonc           	          t         j                  t         j                  t         j                   fD ]1  }t        d|gddgddgddgdd	gg      }t	        t
        t        |       3 y r   )npr   r   r   r   r   r   r   s       r   test_whiten_not_finite_matrixz(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__r   r   r   r   pytestmarkskipifr   r    r   r   rq   rq   Q   s`    9 kJKM@M@ 3 [[J  L3L3r   rq   c                   v   e Zd Z ed      d        Zej                  j                  ed      d        Z	 eddg      d	        Z
ej                  j                  ed      d
        Z ed      d        Z eddg      d        Z eddg      d        Z ed      d        Z ed      d        Zy)TestVqTcpu_onlyc                     t        j                  t        d   gt        d   gt        d   gg      }t        |j	                  t              |j	                  |            d   }t        ||j	                  t        |j                        d       y )Nr   rl   rg   dtypeFcheck_dtype)r   concatenateXr   r   r   LABEL1int64r   r   initclabel1s       r   
test_py_vqzTestVq.test_py_vq   sk    11178rzz!}bjj&78;

6
 B$)	+r   r   r   c                     t        j                  t        d   gt        d   gt        d   gg      }t        t	        t              t	        |            d   }t        |t               y Nr   rl   rg   )r   r   r   r   r   r   r   r   s       r   test_py_vq_matrixz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                 \   t        j                  t        d   gt        d   gt        d   gg      }t        j                  |j                  t              |j                  |            \  }}t        |t               t	        |j                  t              |j                  |            \  }}y r   )r   r   r   r   r   r   r   r   r   r   r   r   _s        r   test_vqzTestVq.test_vq   sy    11178FF2::a="**U*;<	66*"**Q-E!231r   c                 ,   t        j                  t        d   gt        d   gt        d   gg      }t        j                  t        t              t        |            \  }}t        |t               t	        t        t              t        |            \  }}y r   )r   r   r   r   r   r   r   r   r   s        r   test_vq_matrixzTestVq.test_vq_matrix   si     11178FF6!9fUm4	66*&)VE]+1r   c                    t         d d df   }|d d }t        j                  ||      \  }}|j                  |      }|j                  |      }t	        |d d t
        j                  f   |d d t
        j                  f         \  }}t        ||j                  ||j                        d       t        ||j                  |             y )Nr   rh   r   Fr   )	r   r   r   r   r   r   newaxisr   r   )r   r   datar   abtatbs           r   
test_vq_1dzTestVq.test_vq_1d   s     AwRavvdE"1zz$

5!tArzzM*E!RZZ-,@ABBJJqJ9uMBJJqM*r   c                     |j                  ddg|j                        }|j                  |j                        }t	        t
        t        j                  ||       y )Nra   g       @r   )r   float64astypefloat32r   	TypeErrorr   r   )r   r   r   r   s       r   test__vq_sametypezTestVq.test__vq_sametype   s@    JJSzJ4HHRZZ iA.r   c                 v    |j                  ddgt              }t        t        t        j
                  ||       y )Nrl   rg   r   )r   intr   r   r   r   )r   r   r   s      r   test__vq_invalid_typezTestVq.test__vq_invalid_type   s*    JJ1vSJ)iA.r   c                 H   t         j                  j                  dd      }t         j                  j                  dd      }t        j                  ||      \  }}t        |j                  |      |j                  |            \  }}t        ||j                  |      d       t        ||j                  ||j                        d       |j                  t         j                        }|j                  t         j                        }t        j                  ||      \  }}t        |j                  |      |j                  |            \  }}t        ||j                  ||j                        d       t        ||j                  ||j                        d       y )N   rh   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_nfeatzTestVq.test_vq_large_nfeat   s2   IINN2r"IINN1b)	vva+JJqM2::i0
 	bjj.T:

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

6
 BPUVr   c                    t         j                  j                  dd      dz  }t         j                  j                  dd      dz  }t        j                  ||      \  }}t        |j                  |      |j                  |            \  }}t        ||j                  |      d       t        ||j                  ||j                        d	       y )
N
   rk   i@B rg   r|   r}   r   Fr   )
r   r   r   r   r   r   r   r   r   r   r   s           r   test_vq_large_featureszTestVq.test_vq_large_features   s    IINN2q!G+IINN1a(72	vva+JJqM2::i0
 	bjj.T:

6
 BPUVr   N)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-P,QR4 S4 [[J  L,L, t$
+ %
+ d-P,QR/ S/
 d-P,QR/ S/ t$W %W. t$
W %
Wr   r   Tr   c                      e Zd Zd Zd Zej                  j                  ed      d        Z	d Z
d Zej                  j                  ed      d        Zd	 Zd
 Zd Z eddgd      d        Zej                  j                  ej&                  dk(  d      d        Zd Zd Zd Z eddgd      d        Z eddgd      d        Zd Z eddgd      d        Zy)	TestKMeanc                 0   d}d}t         j                  j                  |      }t         j                  j                  |      }dt         j                  j                  ||      z  d|z  z
  }dt         j                  j                  ||      z  d|z  z   }t        j                  |j                  d   |j                  d   z   |ft         j
                        }||d |j                  d    |||j                  d   d  t        |j                  |      d       y )Ni,  d   i'  i N  r   rg   )r   r   randnemptyshaper   r	   r   )	r   r   dnm1m2xyr   s	            r   test_large_featureszTestKMean.test_large_features   s     YY__QYY__QBIIOOAq))EBJ6BIIOOAq))EBJ6xxaggaj0!4bjjA[aggajQWWQZ[rzz$#r   c                 F   t         j                  j                  d       t        j                  t        d   gt        d   gt        d   gg      }t        |j                  t              |j                  |      d      d   }t        ||j                  t                     y Ni1  r   rl   rg   iter)	r   r   seedr   r   r	   r   r   CODET2r   r   r   code1s       r   test_kmeans_simplezTestKMean.test_kmeans_simple   sp    
		u11178rzz!}bjj&7a@Crzz&12r   r   r   c                    t         j                  j                  d       t        j                  t        d   gt        d   gt        d   gg      }t        t        t              t        |      d      d   }t        |t               y r   )	r   r   r   r   r   r	   r   r   r   r   s       r   test_kmeans_simple_matrixz#TestKMean.test_kmeans_simple_matrix  s`     			u11178vay&-a8;v&r   c                 0   |j                  t              }|j                  ddgddgddgg      }t        ||       t               5 }|j	                  t
        d       t        ||d	       d d d        t        t        t        ||d
	       y # 1 sw Y   "xY w)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_clusterz"TestKMean.test_kmeans_lost_cluster  s    zz+&

Z5'4(+68 9 	tU CJJ{23 D%0	 ! 	lGT5'J ! s   %BBc                     t         j                  j                  d       |j                  t        j                  t
        d   gt
        d   gt
        d   gg            }t        r|j                  gnt         j                  t        g}|D ]  }t         |t
               ||      d      d   }t         |t
               ||      d      d   }t        ||j                  t                     t        ||j                  t                      y NiNa r   rl   rg   r   )r   r   r   r   r   r   r   r   r
   r   CODET1r   )r   r   r   arraystpr   code2s          r   test_kmeans2_simplezTestKMean.test_kmeans2_simple  s    
		x 

2>>AaD6AaD6AaD6*BCD!0"**rzz66JBBqE2e915a8EBqE2e915a8EE2::f#56E2::f#56 r   c                    t         j                  j                  d       |j                  t        j                  t
        d   gt
        d   gt
        d   gg            }t        t        t
              t        |      d      d   }t        t        t
              t        |      d      d   }t        |t               t        |t               y r  )r   r   r   r   r   r   r
   r   r   r  r   )r   r   r   r   r  s        r   test_kmeans2_simple_matrixz$TestKMean.test_kmeans2_simple_matrix&  s     			x 

2>>AaD6AaD6AaD6*BCDq	6%=q9!<q	6%=q9!<v&v&r   c                     |j                  t              }|d d df   }|d d }t        ||      }t        ||d      d    t        ||d      d    y )Nr   rh   )r   rl   r   rg   )r   r  r   r
   )r   r   r   data1r   codes         r   test_kmeans2_rank1zTestKMean.test_kmeans2_rank11  sV    zz+&QT
bq	Eb!t!$Q't!$Q'r   c                 \    |j                  t              }|d d df   }t        |dd       y )Nr   rg   rl   r   )r   r  r
   )r   r   r   r  s       r   test_kmeans2_rank1_2zTestKMean.test_kmeans2_rank1_2:  s)    zz+&QT
qq!r   c                 |    |j                  t              }|j                  |d      d dd d f   }t        |d       y )Nr   r   r   rg   )r   r  reshaper
   )r   r   r   s      r   test_kmeans2_high_dimzTestKMean.test_kmeans2_high_dim?  s9     zz+&zz$)#2#q&1ar   r   r   T)r   r   c                    t         j                  j                  d       |j                  t              }d}t        ||d       t        |d d df   |d       t        ||d       t        |d d df   |d       t               5 }|j                  d       t        ||d	       t        |d d df   |d	       d d d        y # 1 sw Y   y xY w)
Ni90  rh   pointsminitrl   ++z%One of the clusters is empty. Re-run.)messager   )r   r   r   r   r  r
   r   r  )r   r   r   kr	  s        r   test_kmeans2_initzTestKMean.test_kmeans2_initF  s     			uzz+&ax(QT
AX.at$QT
AT*  CJJFJGD!8,DAJ2 !  s   6CCwin32zFails with MemoryError in Wine.c                 v   |j                  t              }|j                  |d      |j                  |d      d dd d f   g}t        d      }|D ]g  }t        j
                  j                  d      }t        ||||      }t        |j                        }t        |j                        }t        ||d       i y )Nre   r  r   g    .A  gI+?)atol)r   r  r  r   r   r   default_rngr   r   Tr   )	r   r   r   datasr$  rnginitorig_covinit_covs	            r   test_krandinitzTestKMean.test_krandinitZ  s     zz+&D(+D(+CRCF35HD))''-CdAsB/D466{H466{HHhV< r   c                 N    t        t        t        |j                  g       d       y )Nrg   )r   r   r
   r   r   r   s     r   test_kmeans2_emptyzTestKMean.test_kmeans2_emptyh  s    j'2::b>1=r   c                    t        t        t        |j                  t              d       t        t        t
        |j                  t              d       t        t        t
        |j                  t              |j                  g              y )Nr   )r   r   r	   r   r   r
   r3  s     r   test_kmeans_0kzTestKMean.test_kmeans_0kl  sL    j&"**Q-;j'2::a=!<j'2::a="**R.Ir   c                    |j                  g d|j                        }t        |dd      }t        |d   |j                  dg|j                               t        |d   |j                  d|j                        d	          y )
N)rl   rg   rh   ri   r   r   rl   g 7yAC)threshr   ro   g333333@r   r   r   r	   r   )r   r   r   ress       r   test_kmeans_large_thresz!TestKMean.test_kmeans_large_thresr  sn    JJ'rzzJ:Q$'A

B4rzz
 BCA

+=RZZ
 PQS TUr   c                     |j                  ddgddgg|j                        }t        j                  j	                  d       t        |j                  t              dd	      \  }}t        ||       y )
NgC:g>g#~j?g'1:	g-'@r   *   rg   r"  r   )r   r   r   r   r   r
   r  r   )r   r   prev_resr:  r   s        r   test_kmeans2_kpp_low_dimz"TestKMean.test_kmeans2_kpp_low_dimy  sh    
 ::U3 )624;=::  G
		rK0!4@QX&r   c           	         d}d}t        j                  dt        j                  |      z  dt        j                  |      z  g      }t         j                  j	                  d       t        j                  t         j                  j                  |d   t        j                  |      |      t         j                  j                  |d   t        j                  |      |      g      }|j                  |      }t        |d	d
      \  }}t        |j                  |      |j                  |j                  |                   y )Nr   r   rk   r=  r   )sizerl   rg   r"  r   )r   vstackonesr   r   multivariate_normaleyer   r
   r   sign)r   r   n_dimrB  centersr   r:  r   s           r   test_kmeans2_kpp_high_dimz#TestKMean.test_kmeans2_kpp_high_dim  s    
 ))Q/"''%.02 3
		ryyII))'!*bffUm$)OII))'!*bffUm$)O
 
 zz$q-Qbggbjj.A&BCr   c                 .   |j                  g d|j                        }t        ||j                  ddg            }t        |d   |j                  ddg|j                               t        |d   |j                  d	|j                        d
          y )N)r   r   rl   rl      r   r]   gGz?r   gٿg       @rl   g?r   r9  )r   r   r   r:  s       r   test_kmeans_diff_convergencez&TestKMean.test_kmeans_diff_convergence  s{    jj-RZZj@S"**c4[12A

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

+=RZZ
 PQS TUr   c                    dt         j                  j                  d      t         j                  j                  d      g}|D ]  }t	        |      }t	        |      }|j                  t              }t        |d|      \  }}t        |d|      \  }	}t        ||	       dD ]2  }
t        |d|
|      \  }}t        |d|
|      \  }	}t        ||	       4  y )Nr(  rg   )r   )r   r  r"  )r!  r   )
r   r   RandomStater*  r   r   r  r	   r   r
   )r   r   	seed_listr   seed1seed2r   res1r   res2r!  s              r   #test_kmeans_and_kmeans2_random_seedz-TestKMean.test_kmeans_and_kmeans2_random_seed  s     "))''-ryy/D/DT/J
	 DTNETNE::k*DT151GD!T151GD!D$'3!$UCa!$UCad+ 4 r   N)r   r   r   r   r   r   r   r   r   r   r
  r  r  r  r  r  r   r%  sysplatformr1  r4  r6  r;  r?  rJ  rN  rV  r   r   r   r   r      se   $"3 [[J  L'L'K 	7 [[J  L'L'("
 kJK#%3%3" [[/@  B
=B
=>JV kJK#%'%' kJK#%D%D V kJK#%,%,r   r   )/r   rW  r   r   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._lib._array_apir   r   r   r   r   usefixtures
pytestmarkr   arrayr  r  r   r  r   r   rq   r   r   r   r   r   <module>rc     s    
     *8 8 8  / (  #FKK$;$;<N$OP
;;// bhh %
 %J 78K R BHHsAhAA!fq!fq!fq!f!fq!fq!fq!f. / 
FF#F#F#% 
& 
FE?F#F#% 
& 
3	443 43n\W \WB 4 I, I, !I,r   