
    Yh$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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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                            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       m/var/www/tools.fuzzalab.pt/emblema-extractor/venv/lib/python3.11/site-packages/scipy/cluster/tests/test_vq.pytest_whitenzTestWhiten.test_whitenT   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)        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   s    **3333333335 6 6 jj.........0 1 1 n4MNNN 	! 	!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 )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 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 )
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   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   rr   rr   Q   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   rr   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   rm   rh   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   rm   rh   )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   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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 )Nrb   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 )Nrm   rh   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   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   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
   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    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ej        j        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   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     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   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   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                 x   |                     t                    }|                     ddgddgddgg          }t          ||           t                      5 }|                    t
          d           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?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 9 	tU   	1CJJ{23 3 3 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   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   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   ri   r   rm   )r   r   rh   r   )r   r   r   r
   )r   r   r   data1r   codes         r   test_kmeans2_rank1zTestKMeans.test_kmeans2_rank12  s    zz+&&QQQT
bqb	u$$$ 	t!!,,,Q//t!$$$Q''''r   c                 v    |                     t                    }|d d df         }t          |dd           d S )Nr   rh   rm   r  )r   r   r
   )r   r   r   r  s       r   test_kmeans2_rank1_2zTestKMeans.test_kmeans2_rank1_2=  s?    zz+&&QQQT
qq!!!!!!r   c                     |                     t                    }|                    |d          d dd d f         }t          |d           d S )Nr   r   r   rh   )r   r   reshaper
   )r   r   r   s      r   test_kmeans2_high_dimz TestKMeans.test_kmeans2_high_dimB  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                      5 }|                    d           t          ||d	|           t          |d d df         |d	|           d d d            d S # 1 swxY w Y   d S )
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_   i##H--zz+&&axS1111QQQT
AX37777at----QQQT
ATs3333    	<CJJFJGGGD!85555DAJs;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   *AC>>DDc                     t                      S )Nr   )r   s    r   
krand_lockzTestKMeans.krand_lockZ  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 )	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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 )Nrh   )r   r   r
   r   r   r   s     r   test_kmeans2_emptyzTestKMeans.test_kmeans2_emptyn  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
   r1  s     r   test_kmeans_0kzTestKMeans.test_kmeans_0kr  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)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  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   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  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   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    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   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---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&  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    ")''--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/  r2  r4  r9  r<  thread_unsaferG  rL  rT  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   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     st    



                 ? ? ? ? ? ? ? ?  * * * * * *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##H, H, H, H, H, H, H, $#H, H, H,r   