
    -iiRG                        d dl Z 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
 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j%        j&        Z&ej%        j'        Z' ej(        g d          )                    d          Z* ej(        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j(        ddgddgddgg          Z, ej(        ddgddgddgg          Z- ej(        g d           Z. e!e           G d! d"                      Z/ e!e           G d# d$                      Z0 e!ee           G d% d&                      Z1dS )'    N)deepcopyLock)assert_array_equal)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ؿ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d Zej                            d          ej                            de	j
        e	j        e	j         g          d                         Zej                            ed          d             Zd	S )

TestWhitenc                     |                     ddgddgddgddgd	d
gg          }|                     ddgddgddgddgddgg          }t          t          |          |d           d S )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       a/var/www/html/bet.cuttalo.com/ml/venv/lib/python3.11/site-packages/scipy/cluster/tests/test_vq.pytest_whitenzTestWhiten.test_whitenU   s    **z:6'4'4'4'4	6 7 7 jj:z2%z2%z2%z2%z2	4 5 5
 	sW4888888    c                    |                     g dg dg dg          }|                     g dg dg dg          }t          t          d|          5  t          |          }d d d            n# 1 swxY w Y   t	          ||d	
           d S )N)        ra   gJJ@)r   ra   g I 1?)r   ra   gKX@)r   ra   g/?)r   ra   g@?)r   ra   g?zSome columns have standard...)matchr   r   r   )r   r   RuntimeWarningr   r   )r   r   r   r   actuals        r   test_whiten_zero_stdzTestWhiten.test_whiten_zero_stdc   s    **3333333335 6 6 jj.........0 1 1 /NSUVVV 	! 	!C[[F	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	! 	!d333333s   A00A47A4z4ignore:invalid value encountered:RuntimeWarning:dask	bad_valuec                    |                     d|gddgddgddgdd	gg          }t          |          rw|                     d
t          j        gdt          j        gdt          j        gdt          j        gdt          j        gg          }t	          t          |          |d           d S t          t          t
          |           d S )Nrx   ry   rz   r{   r|   r}   r~   r   r   rs   rt   ru   rv   rw   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_finitep   s     jj:y1%z2%z2%z2%z2	4 5 5  	3jj:tx"8#-tx"8#-tx"8#-tx"8#-tx"8	": ; ;G
 F3KKt<<<<<<*fc22222r   )`np.matrix` unsupported in array API modereasonc           	          t           j        t           j        t           j         fD ];}t          d|gddgddgddgdd	gg          }t	          t
          t          |           <d S )
Nrx   ry   rz   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   s~     "&0 	3 	3I:y1%z2%z2%z2%z2	4 5 5C
 *fc2222	3 	3r   N)__name__
__module____qualname__r   r   pytestmarkfilterwarningsparametrizer   r   r   r   skipifr   r    r   r   rq   rq   R   s        9 9 94 4 4 [ VWW[[48TXy*IJJ3 3 KJ XW3" [J  L L3 3L L3 3 3r   rq   c                       e Zd Zd Zej                            ed          d             Zd Z	ej                            ed          d             Z
d Zd Zd	 Zd
 Zd ZdS )TestVqc                 `   t          j        t          d         gt          d         gt          d         gg          }t          |                    t                    |                    |                    d         }t          ||                    t          |j                  d           d S )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   s    111788rzz!}}bjj&7&788;

6
 B B$)	+ 	+ 	+ 	+ 	+ 	+r   r   r   c                    t          j        t          d         gt          d         gt          d         gg          }t          t	          t                    t	          |                    d         }t          |t                     d S Nr   rl   rg   )r   r   r   r
   r   r   r   )r   r   r   s      r   test_py_vq_matrixzTestVq.test_py_vq_matrix   sb     111788vayy&--00366*****r   c                 \   t          j        t          d         gt          d         gt          d         gg          }t          j        t          |          \  }}t          |t                     t	          |                    t                    |                    |                    \  }}d S r   )r   r   r   r   r   r   r   r   )r   r   r   r   _s        r   test_vqzTestVq.test_vq   s|    111788F1e$$	66***"**Q--E!2!233111r   c                 x   t          j        t          d         gt          d         gt          d         gg          }t          j        t          t                    t          |                    \  }}t          |t                     t	          t          t                    t          |                    \  }}d S r   )r   r   r   r   r   r   r   r   )r   r   r   r   s       r   test_vq_matrixzTestVq.test_vq_matrix   s     111788F6!99fUmm44	66***&))VE]]++111r   c                    t           d d df         }|d d         }t          j        ||          \  }}|                    |          }|                    |          }t	          |d d t
          j        f         |d d t
          j        f                   \  }}t          ||                    ||j                  d           t          ||                    |                     d S )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RaRvdE""1zz$

5!!tAAArzM*E!!!RZ-,@AABBJJqJ99uMMMMBJJqMM*****r   c                     t          j        ddg          }|                    t           j                  }t	          t
          t          j        ||           d S )Nra   g       @)r   r   astypefloat32r   	TypeErrorr   r   )r   r   r   s      r   test__vq_sametypezTestVq.test__vq_sametype   sD    JSz""HHRZ  iA.....r   c                     t          j        ddgt                    }t          t          t
          j        ||           d S )Nrl   rg   r   )r   r   intr   r   r   r   )r   r   s     r   test__vq_invalid_typezTestVq.test__vq_invalid_type   s6    J1vS)))iA.....r   c                    t           j                            dd          }t           j                            dd          }t          j        ||          \  }}t          |                    |          |                    |                    \  }}t          ||                    |          d           t          ||                    ||j	                  d           |
                    t           j                  }|
                    t           j                  }t          j        ||          \  }}t          |                    |          |                    |                    \  }}t          ||                    ||j                  d           t          ||                    ||j	                  d           d S )N   rh   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   s|   INN2r""INN1b))	va++JJqMM2::i00
 
 	bjj..T::::

6
 B BPUVVVVHHRZ  $$RZ00	va++JJqMM2::i00
 
 	bjjRZj@@tLLLL

6
 B BPUVVVVVVr   c                    t           j                            dd          dz  }t           j                            dd          dz  }t          j        ||          \  }}t          |                    |          |                    |                    \  }}t          ||                    |          d           t          ||                    ||j	                  d	           d S )
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    INN2q!!G+INN1a((72	va++JJqMM2::i00
 
 	bjj..T::::

6
 B BPUVVVVV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+ +L L+4 4 4 [J  L L, ,L L,
+ 
+ 
+/ / /
/ / /W W W.
W 
W 
W 
W 
Wr   r   c                      e Zd Zd Zd Zej                            ed          d             Z	d Z
d Zej                            ed          d             Zd	 Zd
 Zd Zd Zej        d             Z edd          ej                            ej        dk    d          d                         Zd Zd Zd Zd Zd Zd Zd ZdS )
TestKMeansc                 4   d}d}t           j                            |          }t           j                            |          }dt           j                            ||          z  d|z  z
  }dt           j                            ||          z  d|z  z   }t          j        |j        d         |j        d         z   |ft           j                  }||d |j        d         <   |||j        d         d <   t          |                    |          dd           d S )	Ni,  d   i'  i N  r   rg   rl   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     Y__QY__QBIOOAq)))EBJ6BIOOAq)))EBJ6xagaj0!4bjAA[agaj[QWQZ[[ 	rzz$++++++r   c                    t           j                            d          }t          j        t          d         gt          d         gt          d         gg          }t          |                    t                    |                    |          d|          d         }t          ||                    t                               d S Ni1  r   rl   rg   iterrng)	r   r   default_rngr   r   r   r   r   CODET2)r   r   r   r   code1s        r   test_kmeans_simplezTestKMeans.test_kmeans_simple   s    i##E**111788rzz!}}bjj&7&7aSIII!Lrzz&1122222r   r   r   c                 T   t           j                            d          }t          j        t          d         gt          d         gt          d         gg          }t          t          t                    t          |          d|          d         }t          |t                     d S 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  s~     i##E**111788vayy&--aSAAA!Dv&&&&&r   c                    |                     t                    }|                     ddgddgddgg          }t          ||           t          j                    5  t          j        ddt                     t          ||d	
           d d d            n# 1 swxY w Y   t          t          t          ||d
           d S )Ng5 g!{gL^ @g͛`d?g8}g?kignorezKOne of the clusters is empty. Re-run kmeans with a different initializationwarn)missingraise)
r   TESTDATA_2Dr   warningscatch_warningsr   UserWarningr	   r   r   )r   r   r   initks       r   test_kmeans_lost_clusterz#TestKMeans.test_kmeans_lost_cluster  s   zz+&&

Z5'4(+68 9 9 	tU$&& 	1 	1#"	   D%0000	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	1 	lGT5'JJJJJJs   .BBBc                    t           j                            d          }|                    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          ||                    t                               t          ||                    t                               d S NNa r   rl   rg   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   i##H--

2>AaD6AaD6AaD6*BCCDD!0J"*rz66J 	7 	7BBBqEE22e991#>>>qAEBBqEE22e991#>>>qAEE2::f#5#5666E2::f#5#56666	7 	7r   c                    t           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                     d S 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     i##H--111788q		6%==qcBBB1Eq		6%==qcBBB1Ev&&&v&&&&&r   c                     |                     t                    }|d d df         }|d d         }t          ||          }t          ||dd          d          t          ||d          d          d S )Nr   rh   r   rl   )r   r   rg   r   )r   r   r   r	   )r   r   r   data1r   codes         r   test_kmeans2_rank1zTestKMeans.test_kmeans2_rank16  s    zz+&&QQQT
bqb	u$$$ 	t!!,,,Q//t!$$$Q''''r   c                 v    |                     t                    }|d d df         }t          |dd           d S )Nr   rg   rl   r  )r   r   r	   )r   r   r   r  s       r   test_kmeans2_rank1_2zTestKMeans.test_kmeans2_rank1_2A  s?    zz+&&QQQT
qq!!!!!!r   c                     |                     t                    }|                    |d          d dd d f         }t          |d           d S )Nr   r   r   rg   )r   r   reshaper	   )r   r   r   s      r   test_kmeans2_high_dimz TestKMeans.test_kmeans2_high_dimF  sO     zz+&&zz$))#2#qqq&1ar   c                    t           j                            d          }|                    t                    }d}t          ||d|           t          |d d df         |d|           t          ||d|           t          |d d df         |d|           t          j                    5  t          j        dd           t          ||d	|           t          |d d df         |d	|           d d d            d S # 1 swxY w Y   d S )
Nr  rh   pointsminitr   rl   ++r   z%One of the clusters is empty. Re-run.r   )	r   r   r   r   r   r	   r   r   r   )r   r   r   r   ks        r   test_kmeans2_initzTestKMeans.test_kmeans2_initM  sd   i##H--zz+&&axS1111QQQT
AX37777at----QQQT
ATs3333 $&& 	< 	<#H.UVVVD!85555DAJs;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   /ADD	Dc                     t                      S )Nr   )r   s    r   
krand_lockzTestKMeans.krand_lock^  s    vvr   z
dask.arrayzWrong answerwin32zFails with MemoryError in Wine.c                    |                     t                    }|                    |d          |                    |d          d dd d f         g}t          d          }|5  |D ]{}t          j                            d          }t          ||||          }t          j	        |j
        |          }t          j	        |j
        |          }	t          ||	d           |	 d d d            d S # 1 swxY w Y   d S )	Nre   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_krandinitb  s[    zz+&&D(++D(++CRCF35HH 	A 	A A Ai++D11!$333746b111746b111(@@@@@A	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	A 	As   $A?C11C58C5c                 d    t          t          t          |                    g           d           d S )Nrg   )r   r   r	   r   r   r   s     r   test_kmeans2_emptyzTestKMeans.test_kmeans2_emptyr  s&    j'2::b>>1=====r   c                 d   t          t          t          |                    t                    d           t          t          t
          |                    t                    d           t          t          t
          |                    t                    |                    g                      d S )Nr   )r   r   r   r   r   r	   r0  s     r   test_kmeans_0kzTestKMeans.test_kmeans_0kv  sl    j&"**Q--;;;j'2::a==!<<<j'2::a=="**R..IIIIIr   c                 4   |                     g d|j                  }t          |dd          }t          |d         |                     dg|j                             t          |d         |                     d|j                  d	                    d S )
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"TestKMeans.test_kmeans_large_thres|  s    JJ'''rzJ::Q$'''A

B4rz
 B BCCCA

+=RZ
 P PQS TUUUUUr   c                    t           j                            d          }|                    ddgddgg|j                  }t          |                    t                    dd|	          \  }}t          ||           d S )
Nl   C.t gC:g>g#~j?g'1:	g-'@r   rg   r  r  )r   r   r   r   r   r	   r   r   )r   r   r   prev_resr7  r   s         r   test_kmeans2_kpp_low_dimz#TestKMeans.test_kmeans2_kpp_low_dim  s    i##$788::U3 )624;=:  G GK00!4SIIIQX&&&&&r   c           	         t           j                            d          }d}d}t          j        dt          j        |          z  dt          j        |          z  g          }t          j        |                    |d         t          j        |          |          |                    |d         t          j        |          |          g          }|                    |          }t          |d	d
|          \  }}t          |
                    |          |
                    |                    |                               d S )Nl   <DM]4r   r   rk   r   )sizerl   rg   r  r  )r   r   r   vstackonesmultivariate_normaleyer   r	   r   sign)	r   r   r   n_dimr>  centersr   r7  r   s	            r   test_kmeans2_kpp_high_dimz$TestKMeans.test_kmeans2_kpp_high_dim  s   i##$566)Q/"'%..02 3 3 y##GAJuD#II##GAJuD#II
  
 zz$q#666Qbggbjj.A.A&B&BCCCCCr   c                 \   |                     g d|j                  }t          ||                     ddg                    }t          |d         |                     ddg|j                             t          |d         |                     d	|j                  d
                    d S )N)r   rl   rl      r   r]   gGz?r   gٿg       @rl   g?r   r6  )r   r   r   r7  s       r   test_kmeans_diff_convergencez'TestKMeans.test_kmeans_diff_convergence  s    jj---RZj@@S"**c4[1122A

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

+=RZ
 P PQS TUUUUUr   c                    dt           j                            d          t           j                            d          g}|D ]}t	          |          }t	          |          }|                    t                    }t          |d|          \  }}t          |d|          \  }	}t          ||	           dD ]>}
t          |d|
|          \  }}t          |d|
|          \  }	}t          ||	           ?d S )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.TestKMeans.test_kmeans_and_kmeans2_random_seed  s    ")''--ry/D/DT/J/J
	  	, 	,DTNNETNNE::k**DT15111GD!T15111GD!D$'''3 , ,!$UCCCa!$UCC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.  r1  r3  r8  r;  rF  rK  rS  r   r   r   r   r      s        , , ,$3 3 3 [J  L L' 'L L'K K K&	7 	7 	7 [J  L L' 'L L'	( 	( 	(" " "
  < < <" ^  ^ |N;;;[/@  B BA AB B <;A> > >J J JV V V' ' 'D D D"V V V, , , , ,r   r   )2r   rV  r   copyr   	threadingr   numpyr   numpy.testingr   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   rU  skip_xp_backendsarrayr  r   r   r  r   r   rq   r   r   r   r   r   <module>rc     sw    



                  , , , , , ,  * * * * * *8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8       ( ( ( ( ( ( - - - - - -                 
 K1 ;/ bh %
 %
 %
 % %J 78K R BHsAhAA!fq!fq!fq!f!fq!fq!fq!f. / / 
FF#F#F#% 
& 
& 
FE?F#F#% 
& 
& 
333	4	4 693 93 93 93 93 93 93 93x 2UW UW UW UW UW UW UW UWt 67##J, J, J, J, J, J, J, $#J, J, J,r   