
    xf5                        d dl Z d dlZd dlZd dlmZmZ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  ej4                  g d      j7                  d      Z ej4                  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j4                  d	d	gddgddgg      Z ej4                  ddgddgddgg      Z ej4                  g d      Z  G d d      Z! G d d       Z" G d! d"      Z#y)#    N)assert_array_equalassert_array_almost_equalassert_allcloseassert_equalassert_suppress_warnings)raises)kmeanskmeans2py_vqvqwhitenClusterError
_krandinit)_vq)matrix(  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?r5   gRQ?Qg)\(?gQg)\(@gRQgQ@r   gQ@p=
ףgRQؿr0   gQ@
ףp=
g\(\?r7   g=
ףp=?q=
ףp      ?333333?r   Q@r   gHzG@g333333gףp=
@gGzg)\(@r/   g333333?r5   g\(\?gRQg(\ @r)   rB   gףp=
	rC   r2   g
ףp=
?gQg?Qg\(\@q=
ףpgq=
ףp@r   g\(\g(\r6   g?g)\(gQ	@gGzg?g\(\gQ@ffffff      @r'   \(\?g=
ףp=
g
ףp=
@ףp=
r(   HzGgQ?Qg
ףp=
?r*   g(\?r   gףp=
rF   (\?g{Gzg@gRQgQ@gQr;   g
ףp=
Gz@gr   g(\gHzG@gGz gGzp=
ףrN   g
ףp=
gp=
ףg      gQ@rL   gq=
ףp?rG   gGz@rK   {Gz?gQۿgp=
ף?g\(\gHzG@g      g(\r9   r   gq=
ףpg333333?gzG r.   {GzQ? gQ{Gz=
ףp=@g)\(gp=
ף
@gQr   gq=
ףpg
ףp=
r"   gHzG?(\g
ףp=
?gQ	g333333?r?   r   g)\(gzG@gQg(\	@Qr@   r8   gQ	@rV   g{Gz?rE   r1   r/   gffffff@r   gGz@r)   rH   g(\g333333r<   gHzG?rA   gffffff?gffffffgRQ?gQgq=
ףp?      g(\@r3   g{Gz@ggGz?gHzGgQr$   r,   g333333r4   gq=
ףpgffffff?g
ףp=
rH   r#   gףp=
@g333333g\(\@gGzgףp=
?g\(\rR   g)\(g
ףp=
@grU   gffffff=
ףp=@gg?r+   g      @g      gGz@p=
ףr4   gGzr   gHzGgGz?gףp=
r=   rT   g(\@gGz
rM   gQgGz@gGzgRQ@r   g
ףp=
?(\g{Gz?rS         ?QrY   gHzGgQ@rL   gGz?r   g)\(̿r]   g333333?gzGr.   gQg{Gz@RQg333333@rO   {Gz
@gzGg@g
ףp=
r&   g)\( gGz?rZ   gQ?r-   g{Gz@rJ   r^   rW   rR   r3   g{GzĿg=
ףp=gQrD   gffffff?rQ   r_   rL   g?gGzrI   r>   g(\?r   g\(\?r[   r   r   rN   g(\gzG @      g      @      rb   	               g@      @g333333@r:   gUUUUUU@gUUUUUU@g      @g      @g      @r@   )r   rg   rb   rb   rb   rb   rg   rb   rg   rg   rg   c                       e Zd Zd Zd Zd Zy)
TestWhitenc           	          t        j                  ddgddgddgddgd	d
gg      }t         j                  t        fD ]0  } |ddgddgddgddgddgg      }t        t	        |      |d       2 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)nparrayr   r   r   )selfdesiredtpobss       =/usr/lib/python3/dist-packages/scipy/cluster/tests/test_vq.pytest_whitenzTestWhiten.test_whitenJ   s    ((Z4'4'4'4'4	6 7
 ((F" 	=Bz:.!:.!:.!:.!:.	0 1C
 F3Kt<	=    c                    t        j                  g dg dg dg      }t         j                  t        fD ]  } |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   xY w)N)        r\   gJJ@)r   r\   g I 1?)r   r\   gKX@)r   r\   g/?)r   r\   g@?)r   r\   g?T)recordalwaysrw   rx   rg   )rz   r{   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_stdX   s    ((1113 4 ((F" 	DB***, -C ((5 D%%h/sW4@SVQ'
1R5>>>BC	D D		DD Ds   A(CC	c           
          t         j                  t        fD ]c  }t         j                  t         j                  t         j                   fD ].  } |d|gddgddgddgdd	gg      }t        t        t        |       0 e y )
Nrn   ro   rp   rq   rr   rs   rt   ru   rv   )rz   r{   r   naninfassert_raises
ValueErrorr   )r|   r~   	bad_valuer   s       r   test_whiten_not_finitez!TestWhiten.test_whiten_not_finitef   s    ((F" 	7BVVRVVbffW4 7	:y1%z2%z2%z2%z2	4 5
 j&#67	7r   N)__name__
__module____qualname__r   r   r    r   r   rl   rl   I   s    =D7r   rl   c                   6    e Zd Zd Z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        fD ]1  }t         |t               ||            d   }t        |t               3 y Nr   rg   rb   )rz   concatenateXr{   r   r   r   LABEL1)r|   initcr~   label1s       r   
test_py_vqzTestVq.test_py_vqr   sd    11178((F" 	/B2a5"U),Q/Fvv.	/r   c                 J   t        j                  t        d   gt        d   gt        d   gg      }t         j                  t        fD ]Z  }t        j                   |t               ||            \  }}t        |t               t         |t               ||            \  }}\ y r   )	rz   r   r   r{   r   r   r   r   r   )r|   r   r~   r   disttlabel1tdists          r   test_vqzTestVq.test_vqx   s    11178((F" 	2B66"Q%E3LFDvv.1r%y1NGU	2r   c                     t         d d df   }|d d }t        j                  ||      \  }}t        |d d t        j
                  f   |d d t        j
                  f         \  }}t        ||       t        ||       y )Nr   rc   )r   r   r   r   rz   newaxisr   )r|   datar   abtatbs          r   
test_vq_1dzTestVq.test_vq_1d   sl    AwRavvdE"1tArzzM*E!RZZ-,@AB1b!1b!r   c                     t        j                  ddgt         j                        }|j                  t         j                        }t        t        t        j                  ||       y )Nr\   g       @dtype)	rz   r{   float64astypefloat32r   	TypeErrorr   r   )r|   r   r   s      r   test__vq_sametypezTestVq.test__vq_sametype   s>    HHc3Zrzz2HHRZZ iA.r   c                 ~    t        j                  ddgt              }t        t        t
        j                  ||       y )Nrg   rb   r   )rz   r{   intr   r   r   r   )r|   r   s     r   test__vq_invalid_typezTestVq.test__vq_invalid_type   s(    HHaV3'iA.r   c                    t         j                  j                  dd      }t         j                  j                  dd      }t        j                  ||      \  }}t        ||      \  }}t        ||d       t        ||       |j                  t         j                        }|j                  t         j                        }t        j                  ||      \  }}t        ||      \  }}t        ||d       t        ||       y )N   rc   rw   )
rz   randomrandr   r   r   r   r   r   r   r|   r   	code_bookcodes0dis0codes1dis1s          r   test_vq_large_nfeatzTestVq.test_vq_large_nfeat   s    IINN2r"IINN1b)	vva+Q	*dD)66*HHRZZ $$RZZ0	vva+Q	*dD)66*r   c                    t         j                  j                  dd      dz  }t         j                  j                  dd      dz  }t        j                  ||      \  }}t        ||      \  }}t        ||d       t        ||       y )N
   rf   i@B rb   rw   )rz   r   r   r   r   r   r   r   r   s          r   test_vq_large_featureszTestVq.test_vq_large_features   sn    IINN2q!G+IINN1a(72	vva+Q	*dD)66*r   N)
r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   q   s%    /2"/
/+"+r   r   c                       e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
ej                  j                  ej                  d	k(  d
      d        Zd Zd Zd Zd Zd Zd Zd Zy)	TestKMeanc                    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        |d       y )Ni,  d   i'  i N  r   rb   )rz   r   randnemptyshapedoubler
   )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!4bii@[aggajQWWQZ[tQr   c                 :   t         j                  j                  d       t        j                  t        d   gt        d   gt        d   gg      }t         j
                  t        fD ]3  }t         |t               ||      d      d   }t        |t               5 y )Ni1  r   rg   rb   iter)
rz   r   seedr   r   r{   r   r
   r   CODET2)r|   r   r~   code1s       r   test_kmeans_simplezTestKMean.test_kmeans_simple   sv    
		u11178((F" 	5B2a5"U)!4Q7E%eV4	5r   c                    t         }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)
TESTDATA_2Drz   r{   r
   r   filterUserWarningr   r   r   )r|   r   initksups       r   test_kmeans_lost_clusterz"TestKMean.test_kmeans_lost_cluster   s    :{3$j1%{35 6 	tU  	1CJJ{23 D%0		1 	lGT5'J	1 	1s   %BB
c                    t         j                  j                  d       t        j                  t        d   gt        d   gt        d   gg      }t         j
                  t        fD ]d  }t         |t               ||      d      d   }t         |t               ||      d      d   }t        |t               t        |t               f y )NiNa r   rg   rb   r   )rz   r   r   r   r   r{   r   r   r   CODET1r   )r|   r   r~   r   code2s        r   test_kmeans2_simplezTestKMean.test_kmeans2_simple   s    
		x 11178((F" 	5BBqE2e915a8EBqE2e915a8E%eV4%eV4	5r   c                     t         }|d d df   }|d d }|j                         }t        ||d      d    t        ||d      d    y )Nr   rc   rg   r   rb   )r   copyr   )r|   r   data1r   codes        r   test_kmeans2_rank1zTestKMean.test_kmeans2_rank1   sL    QT
bq	zz|t!$Q't!$Q'r   c                 >    t         }|d d df   }t        |dd       y )Nr   rb   rg   r   )r   r   )r|   r   r   s      r   test_kmeans2_rank1_2zTestKMean.test_kmeans2_rank1_2   s     QT
qq!r   c                 P    t         }|j                  d      d d }t        |d       y )Nr   r   r   rb   )r   reshaper   )r|   r   s     r   test_kmeans2_high_dimzTestKMean.test_kmeans2_high_dim   s(     ||H%cr*ar   c                    t         j                  j                  d       t        }t	        |dd       t	        |d d d df   dd       t	        |dd       t	        |d d d df   dd       t               5 }|j                  d       t	        |dd	       t	        |d d d df   dd	       d d d        y # 1 sw Y   y xY w)
Ni90  rc   pointsminitrg   ++z%One of the clusters is empty. Re-run.)messager   )rz   r   r   r   r   r   r   )r|   r   r   s      r   test_kmeans2_initzTestKMean.test_kmeans2_init   s    
		uax(QUQh/at$QUQd+   	4CJJFJGD!8,DBQBK(3	4 	4 	4s   :8B;;Cwin32zFails with MemoryError in Wine.)reasonc                    t         }|j                  d      |j                  d      d d g}t        d      }|D ]  }t        t        j
                  d      r t        j
                  j                  d      }nt        j
                  j                  d      }t        |||      }t	        j                  |d      }t	        j                  |d      }t        ||d	
        y )Nr`   r   r   g    .Adefault_rng  r   )rowvarrP   )atol)r   r   r   hasattrrz   r   r  RandomStater   covr   )r|   r   dataskrnginitorig_covinit_covs           r   test_krandinitzTestKMean.test_krandinit  s     h'h)?)DEH 
	;Dryy-0ii++D1ii++D1dAs+Dvvd1-Hvvd1-HHhT:
	;r   c                 0    t        t        t        g d       y )Nrb   )r   r   r   r|   s    r   test_kmeans2_emptyzTestKMean.test_kmeans2_empty  s    j'2q1r   c                     t        t        t        t        d       t        t        t        t        d       t        t        t        t        t        j                  g              y )Nr   )r   r   r
   r   r   rz   r{   r  s    r   test_kmeans_0kzTestKMean.test_kmeans_0k  s4    j&!Q/j'1a0j'1bhhrl;r   c                     t        j                  g dt              }t        |dd      }t	        |d   t        j                  dg             t	        |d   d       y )	N)rg   rb   rc   rd   r   r   rg   g 7yAC)threshr   rj   g333333@rz   r{   floatr
   r   )r|   r   ress      r   test_kmeans_large_thresz!TestKMean.test_kmeans_large_thres   sH    HH%U3Q$'A"/A 23r   c                     t        j                  ddgddgg      }t         j                  j                  d       t	        t
        dd      \  }}t        ||       y )	NgC:g>g#~j?g'1:	g-'@*   rb   r   r   )rz   r{   r   r   r   r   r   )r|   prev_resr  _s       r   test_kmeans2_kpp_low_dimz"TestKMean.test_kmeans2_kpp_low_dim'  sP    88k51'02 3
		rat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      }t        |d	d
      \  }}t        ||d       y )Nr   r   rf   r  r   )sizerg   rb   r   r   )decimal)	rz   vstackonesr   r   multivariate_normaleyer   r   )r|   n_dimr%  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
  q-Q!#w:r   c                     t        j                  g dt              }t        |t        j                  ddg            }t	        |d   t        j                  ddg             t	        |d   d       y )	N)r   r   rg   rg      rX   gGz?r   gٿg       @rg   g?r  )r|   r   r  s      r   test_kmeans_diff_convergencez&TestKMean.test_kmeans_diff_convergence=  sV    hh+U3S"((C;/0A$ 56A 23r   c                    dt         j                  j                  d      g}t        t         j                  d      r.|j	                  t         j                  j                  d             |D ]w  }t        t        d|      \  }}t        t        d|      \  }}t        ||       dD ]:  }t        t        d||      \  }}t        t        d||      \  }}t        ||       < y y )Nr  r  rb   )r   )r   r   r   )r   r   )
rz   r   r
  r	  appendr  r
   r   r   r   )r|   	seed_listr   res1r!  res2r   s          r   #test_kmeans_and_kmeans2_random_seedz-TestKMean.test_kmeans_and_kmeans2_random_seedD  s    2990067	 299m,RYY22489 
	,D[!$7GD![!$7GD!D$' 4 ,!+qDIa!+qDIad+,
	,r   N)r   r   r   r   r   r   r   r   r   r   r  pytestmarkskipifsysplatformr  r  r  r  r"  r-  r1  r7  r   r   r   r   r      s    "5K 5("
4  [[/@  B;B; 2<4';4,r   r   )$r   r;  numpyrz   numpy.testingr   r   r   r   r   r   r8  r	   r   scipy.cluster.vqr
   r   r   r   r   r   r   scipy.clusterr   scipy.sparse._sputilsr   r{   r   r   r   r   r   r   rl   r   r   r   r   r   <module>rB     sI    
 . .  *8 8 8  ( bhh %
 %J 78K R BHHsAhAA!fq!fq!fq!f!fq!fq!fq!f. / 
FF#F#F#% 
& 
FE?F#F#% 
& 
3	4%7 %7P8+ 8+vj, j,r   