
    Џkh$G                        d dl Z d dlZd dlmZ d dlmZ d dlZd dl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"m#Z#m$Z$ ejJ                  jL                  Z&ejJ                  jN                  Z' ejP                  g d      jS                  d      Z* ejP                  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jP                  ddgddgddgg      Z, ejP                  ddgddgddgg      Z- ejP                  g d       Z. e!e       G d! d"             Z/ e!e       G d# d$             Z0 e!ee       G d% d&             Z1y)'    N)deepcopyLock)assert_array_equalsuppress_warnings)raises)kmeanskmeans2py_vqvqwhitenClusterError
_krandinit)_vq)matrix)array_api_extra)SCIPY_ARRAY_APIeager_warnsis_lazy_arraymake_xp_test_casexp_copyxp_assert_closexp_assert_equal(  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ؿr7   gQ@
ףp=
g\(\?r>   g=
ףp=?q=
ףp      ?333333?r"   Q@r    gHzG@g333333gףp=
@gGzg)\(@r6   g333333?r<   g\(\?gRQg(\ @r0   rI   gףp=
	rJ   r9   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=
?r1   g(\?r   gףp=
rM   (\?g{Gzg@gRQgQ@gQrB   g
ףp=
Gz@gr&   g(\gHzG@gGz gGzp=
ףrU   g
ףp=
gp=
ףg      gQ@rS   gq=
ףp?rN   gGz@rR   g{Gz?gQۿgp=
ף?g\(\gHzG@g      g(\r@   r   gq=
ףpg333333?gzG r5   {GzQ? gQ{Gz=
ףp=@g)\(gp=
ף
@gQr$   gq=
ףpg
ףp=
r)   gHzG?(\g
ףp=
?gQ	g333333?rF   r%   g)\(gzG@gQg(\	@QrG   r?   gQ	@r\   g{Gz?rL   r8   r6   gffffff@r   gGz@r0   rO   g(\g333333rC   gHzG?rH   gffffff?gffffffgRQ?gQgq=
ףp?      g(\@r:   g{Gz@ggGz?gHzGgQr+   r3   g333333r;   gq=
ףpgffffff?g
ףp=
rO   r*   gףp=
@g333333g\(\@gGzgףp=
?g\(\rX   g)\(g
ףp=
@gr[   gffffff=
ףp=@gg?r2   g      @g      gGz@p=
ףr;   gGzr!   gHzGgGz?gףp=
rD   rZ   g(\@gGz
rT   gQgGz@gGzgRQ@r   g
ףp=
?(\g{Gz?rY         ?Qr_   gHzGgQ@rS   gGz?r    g)\(̿rc   g333333?gzGr5   gQg{Gz@RQg333333@rV   {Gz
@gzGg@g
ףp=
r-   g)\( gGz?r`   gQ?r4   g{Gz@rQ   rd   r]   rX   r:   g{GzĿg=
ףp=gQrK   gffffff?rW   re   rS   g?gGzrP   rE   g(\?r   g\(\?ra   r   r#   rU   g(\gzG @      g      @      rh   	               g@      @g333333@rA   gUUUUUU@gUUUUUU@g      @g      @g      @rG   )r   rm   rh   rh   rh   rh   rm   rh   rm   rm   rm   c                   "   e Zd Zd Zd Zej                  j                  d      ej                  j                  de	j                  e	j                  e	j                   g      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 )N&cJ^|Y@g`q@ս	@g}&?J?UH~
@g?K=E@gFMp?|H@gH|?cw&?gbA|?D=?k2?'B?);"~?|d=?z?|?Ry?h㈵>rtol)asarrayr   r   )selfxpdesiredobss       W/var/www/teggl/fontify/venv/lib/python3.12/site-packages/scipy/cluster/tests/test_vq.pytest_whitenzTestWhiten.test_whitenT   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                     |j                  g dg dg dg      }|j                  g dg dg dg      }t        |t        d      5  t        |      }d d d        t	        |d	
       y # 1 sw Y   xY w)N)        rb   gJJ@)r   rb   g I 1?)r   rb   gKX@)r   rb   g/?)r   rb   g@?)r   rb   g?zstandard deviation zero)matchr   r   )r   r   RuntimeWarningr   r   )r   r   r   r   actuals        r   test_whiten_zero_stdzTestWhiten.test_whiten_zero_stdb   su    **3335 6 jj...0 1 n4MN 	!C[F	!d3	! 	!s   A**A3z4ignore:invalid value encountered:RuntimeWarning:dask	bad_valuec                    |j                  d|gddgddgddgdd	gg      }t        |      r~|j                  d
t        j                  gdt        j                  gdt        j                  gdt        j                  gdt        j                  gg      }t	        t        |      |d       y t        t        t
        |       y )Nry   rz   r{   r|   r}   r~   r   r   r   rt   ru   rv   rw   rx   r   r   )r   r   mathnanr   r   assert_raises
ValueError)r   r   r   r   r   s        r   test_whiten_not_finitez!TestWhiten.test_whiten_not_finiteo   s     jj:y1%z2%z2%z2%z2	4 5 jj:txx"8#-txx"8#-txx"8#-txx"8#-txx"8	": ;G
 F3Kt<*fc2r   )`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 )
Nry   rz   r{   r|   r}   r~   r   r   r   )npr   infr   r   r   r   )r   r   r   s      r   test_whiten_not_finite_matrixz(TestWhiten.test_whiten_not_finite_matrix   sl     "&&0 	3I:y1%z2%z2%z2%z2	4 5C
 *fc2	3r   N)__name__
__module____qualname__r   r   pytestmarkfilterwarningsparametrizer   r   r   r   skipifr   r    r   r   rr   rr   Q   s    94 [[ VW[[[488TXXy*IJ3 K X3" [[J  L3L3r   rr   c                       e Zd Zd Zej
                  j                  ed      d        Zd Z	ej
                  j                  ed      d        Z
d Zd Zd	 Zd
 Zd Zy)TestVqc                     t        j                  t        d   gt        d   gt        d   gg      }t        |j	                  t              |j	                  |            d   }t        ||j	                  t        |j                        d       y )Nr   rm   rh   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   rm   rh   )r   r   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   c                     t        j                  t        d   gt        d   gt        d   gg      }t        j                  t        |      \  }}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   sh    11178FF1e$	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   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   ri   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                     t        j                  ddg      }|j                  t         j                        }t	        t
        t        j                  ||       y )Nrb   g       @)r   r   astypefloat32r   	TypeErrorr   r   )r   r   r   s      r   test__vq_sametypezTestVq.test__vq_sametype   s8    JJSz"HHRZZ iA.r   c                 ~    t        j                  ddgt              }t        t        t
        j                  ||       y )Nrm   rh   r   )r   r   intr   r   r   r   )r   r   s     r   test__vq_invalid_typezTestVq.test__vq_invalid_type   s(    JJ1vS)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   ri   r   r   r   Fr   )r   randomrandr   r   r   r   r   r   r   r   r   float64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
   rl   i@B rh   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      s    + [[J  L+L+4 [[J  L,L,
+/
/W.
Wr   r   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d Zej"                  d        Z edd      ej                  j                  ej*                  dk(  d      d               Zd Zd Zd Zd Zej                  j6                  d        Zd Zd Zy)
TestKMeansc                 4   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d       y )	Ni,  d   i'  i N  r   rh   rm   seed)r   r   randnemptyshaper   r	   r   )	r   r   dnm1m2xyr   s	            r   test_large_featureszTestKMeans.test_large_features   s     YY__QYY__QBIIOOAq))EBJ6BIIOOAq))EBJ6xxaggaj0!4bjjA[aggajQWWQZ[ 	rzz$+r   c                 H   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   rm   rh   iterrng)	r   r   default_rngr   r   r	   r   r   CODET2)r   r   r   r   code1s        r   test_kmeans_simplezTestKMeans.test_kmeans_simple   sv    ii##E*11178rzz!}bjj&7aSI!L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   r   r   r   s       r   test_kmeans_simple_matrixz$TestKMeans.test_kmeans_simple_matrix  sf     ii##E*11178vay&-aSA!D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#TestKMeans.test_kmeans_lost_cluster  s    zz+&

Z5'4(+68 9 	tU  	1CJJ{23 D%0		1 	lGT5'J	1 	1s   %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 NNa r   rm   rh   r   )r   r   r   r   r   r   r   r   r
   r   CODET1r   )r   r   r   r   arraystpr   code2s           r   test_kmeans2_simplezTestKMeans.test_kmeans2_simple  s    ii##H-

2>>AaD6AaD6AaD6*BCD!0"**rzz66J 	7BBqE2e91#>qAEBqE2e91#>qAEE2::f#56E2::f#56	7r   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        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
  s        r   test_kmeans2_simple_matrixz%TestKMeans.test_kmeans2_simple_matrix'  s     ii##H-11178q	6%=qcB1Eq	6%=qcB1Ev&v&r   c                     |j                  t              }|d d df   }|d d }t        ||      }t        ||dd      d    t        ||d      d    y )Nr   ri   r   rm   )r   r   rh   r   )r   r   r   r
   )r   r   r   data1r   codes         r   test_kmeans2_rank1zTestKMeans.test_kmeans2_rank12  sZ    zz+&QT
bq	u$ 	t!!,Q/t!$Q'r   c                 \    |j                  t              }|d d df   }t        |dd       y )Nr   rh   rm   r  )r   r   r
   )r   r   r   r  s       r   test_kmeans2_rank1_2zTestKMeans.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   rh   )r   r   reshaper
   )r   r   r   s      r   test_kmeans2_high_dimz TestKMeans.test_kmeans2_high_dimB  s9     zz+&zz$)#2#q&1a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)
Nr  ri   pointsminitr   rm   ++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_initzTestKMeans.test_kmeans2_initI  s    ii##H-zz+&axS1QT
AX37at-QT
ATs3   	<CJJFJGD!85DAJs;	< 	< 	<s   8CCc                     t               S )Nr   )r   s    r   
krand_lockzTestKMeans.krand_lockZ  s	    vr   z
dask.arrayzWrong answerwin32zFails with MemoryError in Wine.c                    |j                  t              }|j                  |d      |j                  |d      d dd d f   g}t        d      }|5  |D ]  }t        j
                  j                  d      }t        ||||      }t        j                  |j                  |      }t        j                  |j                  |      }	t        ||	d        	 d d d        y # 1 sw Y   y xY w)	Nrf   r  r   g    .A  r  gI+?)atol)r   r   r  r   r   r   r   r   xpxcovTr   )
r   r   r#  r   datasr   r   initorig_covinit_covs
             r   test_krandinitzTestKMeans.test_krandinit^  s     zz+&D(+D(+CRCF35H 	A Aii++D1!$3377466b177466b1(@A	A 	A 	As   BCC(c                 N    t        t        t        |j                  g       d       y )Nrh   )r   r   r
   r   r   r   s     r   test_kmeans2_emptyzTestKMeans.test_kmeans2_emptyn  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
   r1  s     r   test_kmeans_0kzTestKMeans.test_kmeans_0kr  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)rm   rh   ri   rj   r   r   rm   g 7yAC)threshr   rp   g333333@r   r   r   r	   r   )r   r   r   ress       r   test_kmeans_large_thresz"TestKMeans.test_kmeans_large_thresx  sn    JJ'rzzJ:Q$'A

B4rzz
 BCA

+=RZZ
 PQS TUr   c                     t         j                  j                  d      }|j                  ddgddgg|j                        }t        |j                  t              dd|	      \  }}t        ||       y )
Nl   C.t gC:g>g#~j?g'1:	g-'@r   rh   r  r  )r   r   r   r   r   r
   r   r   )r   r   r   prev_resr8  r   s         r   test_kmeans2_kpp_low_dimz#TestKMeans.test_kmeans2_kpp_low_dim  sm    ii##$78::U3 )624;=::  GK0!4SIQX&r   c           	      V   t         j                  j                  d      }d}d}t        j                  dt        j                  |      z  dt        j                  |      z  g      }t        j                  |j                  |d   t        j                  |      |      |j                  |d   t        j                  |      |      g      }|j                  |      }t        |d	d
|      \  }}t        |j                  |      |j                  |j                  |                   y )Nl   <DM]4r   r   rl   r   )sizerm   rh   r  r  )r   r   r   vstackonesmultivariate_normaleyer   r
   r   sign)	r   r   r   n_dimr?  centersr   r8  r   s	            r   test_kmeans2_kpp_high_dimz$TestKMeans.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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   rm   rm      r   r^   gGz?r   gٿg       @rm   g?r   r7  )r   r   r   r8  s       r   test_kmeans_diff_convergencez'TestKMeans.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&  rh   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.TestKMeans.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+,	,r   N)r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r!  fixturer#  xfail_xp_backendssysplatformr/  r2  r4  r9  r<  thread_unsaferG  rL  rT  r   r   r   r   r      s+   ,$3 [[J  L'L'K 	7 [[J  L'L'	("
<" ^^  |N;[[/@  BAB <A>JV' [[D D"V,r   r   )2r   rW  copyr   	threadingr   numpyr   numpy.testingr   r   r   r   r   scipy.cluster.vqr	   r
   r   r   r   r   r   scipy.clusterr   scipy.sparse._sputilsr   
scipy._libr   r(  scipy._lib._array_apir   r   r   r   r   r   r   r   rV  skip_xp_backendsarrayr  r   r   r  r   r   rr   r   r   r   r   r   <module>re     s    
    ?  *8 8 8  ( -  
 KK11 ;;// bhh %
 %J 78K R BHHsAhAA!fq!fq!fq!f!fq!fq!fq!f. / 
FF#F#F#% 
& 
FE?F#F#% 
& 
3	4 693 93 93x 2UW UW UWt 67#H, H, $H,r   