a
    �ù»j®$  ã                	   @   sÐ  d Z ddlZddlZddlmZ ddlmZmZ ddl	m
Z
mZ ddlmZmZmZ ddlmZmZ ddlmZmZ dd	lmZ dd
lmZmZmZ ddlmZ G dd„ deeƒZej  de¡dd„ ƒZ!dd„ Z"ej  de¡dd„ ƒZ#ej  de¡dd„ ƒZ$dd„ Z%dd„ Z&ej  de¡dd„ ƒZ'ej  de¡dd„ ƒZ(dd „ Z)d!d"„ Z*ej  de¡d#d$„ ƒZ+d%d&„ Z,ej  d'd(d)ie-d*fd(d+ie-d,fd(d-ie-d,fd.d/d0œe-d1fg¡d2d3„ ƒZ.ej  d4e
ƒ eƒ f¡d5d6„ ƒZ/dS )7z)Testing for Spectral Biclustering methodsé    N)Úissparse)ÚBaseEstimatorÚBiclusterMixin)ÚSpectralBiclusteringÚSpectralCoclustering)Ú_bistochastic_normalizeÚ_log_normalizeÚ_scale_normalize)Úmake_biclustersÚmake_checkerboard)Úconsensus_scoreÚv_measure_score)ÚParameterGrid)Úassert_almost_equalÚassert_array_almost_equalÚassert_array_equal)ÚCSR_CONTAINERSc                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚMockBiclusteringc                 C   s   d S ©N© )Úselfr   r   úJE:\soccer\ml_env\Lib\site-packages\sklearn/cluster/tests/test_bicluster.pyÚ__init__   s    zMockBiclustering.__init__c                 C   s$   t  g d¢¡d t  g d¢¡d fS )N)TTFFTr   )FFTT)ÚnpÚwhere)r   Úir   r   r   Úget_indices   s    þzMockBiclustering.get_indicesN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r      s   r   Úcsr_containerc                 C   sš   t  d¡ dd¡}tƒ }|| |ƒ| ¡ fD ]j}| d|¡}t|ƒrJ| ¡ }t|ddgddgd	d
ggƒ d|d d …< t|ƒr‚| ¡ }t  	|dk¡s*J ‚q*d S )Né   é   é   r   é   é   é   é   é   é   éÿÿÿÿ)
r   ÚarangeÚreshaper   ÚtolistZget_submatrixr   Ztoarrayr   Úall)r    ÚdataÚmodelÚXZ	submatrixr   r   r   Útest_get_submatrix&   s    r2   c                 C   sP   t | jƒD ]@}|  |¡\}}|  |¡\}}t|ƒ|ks:J ‚t|ƒ|ks
J ‚q
d S r   )ÚrangeÚ
n_clustersÚ	get_shaper   Úlen)r0   r   ÚmÚnZi_indZj_indr   r   r   Ú_test_shape_indices6   s
    r9   c           	      C   sú   ddgd dgddgdgdgdœ}t d	d
d| d�\}}}|| ¡ 8 }t |dk d|¡}|||ƒfD ]”}t|ƒD ]†}tf d
| dœ|¤Ž}| |¡ |jjdksžJ ‚t	|jj
dd�t d¡ƒ t	|jj
dd�t d¡ƒ t|j||fƒdksêJ ‚t|ƒ qlq`d S )NZ
randomizedÚarpackr!   FTú	k-means++é
   )Ú
svd_methodÚ
n_svd_vecsÚ
mini_batchÚinitÚn_init©é   rC   r%   gš™™™™™¹?©ÚnoiseÚrandom_stateé   r   )r4   rF   )r%   rC   ©ZaxisrC   )r
   Úminr   r   r   r   ÚfitÚrows_Úshaper   ÚsumZonesÚcolumns_r   Úbiclusters_r9   )	Úglobal_random_seedr    Z
param_gridÚSÚrowsÚcolsÚmatÚkwargsr0   r   r   r   Útest_spectral_coclustering?   s0    ûÿÿÿ
rV   c                 C   sh  t ddd| d�\}}}ddgdgdgd	gd
œ}|||ƒfD �]&}| ¡ D �]\}}|D �]}	tddd| d�}
|
jf i t||	fgƒ¤Ž t|ƒrØ|
 ¡  d¡dkrØt 	t
¡� |
 |¡ W d   ƒ qV1 sÊ0    Y  qVn
|
 |¡ |
jjdksòJ ‚|
jjdk�sJ ‚t|
jjdd�t dd¡ƒ t|
jjdd�t dd¡ƒ t|
j||fƒdk�sVJ ‚t|
ƒ qVqHq:d S )NrB   r%   g      à?rD   ÚscaleÚlogr:   r!   T)Úmethodr=   r>   r?   r;   )r4   rA   r@   rF   rY   )é	   rC   r   rH   rC   rG   )r   Úitemsr   Z
set_paramsÚdictr   Ú
get_paramsÚgetÚpytestÚraisesÚ
ValueErrorrJ   rK   rL   rN   r   rM   r   Úrepeatr   rO   r9   )rP   r    rQ   rR   rS   Znon_default_paramsrT   Ú
param_nameZparam_valuesZparam_valuer0   r   r   r   Útest_spectral_biclustering]   s:    ÿü
ü(
rd   c                 C   st   | j dd�}| j dd�}t| ƒr<t |¡ ¡ }t |¡ ¡ }t|t | ¡ d¡dd� t|t | ¡ d¡dd� dS )z<Check that rows sum to one constant, and columns to another.rG   rH   r   éd   ©ÚdecimalN)rM   r   r   ZasarrayZsqueezer   ZtileÚmean)ÚscaledZrow_sumZcol_sumr   r   r   Ú_do_scale_test‡   s    rj   c                 C   s2   t | ƒ t| jdd� ¡ | jdd� ¡ dd� dS )z5Check that rows and columns sum to the same constant.r   rH   rG   rf   N)rj   r   rM   rh   )ri   r   r   r   Ú_do_bistochastic_test’   s    rk   c                 C   sX   t j | ¡}| dd¡}|||ƒfD ].}t|ƒ\}}}t|ƒ t|ƒr$t|ƒs$J ‚q$d S ©Nre   )r   ÚrandomÚRandomStateÚrandr	   rj   r   )rP   r    Ú	generatorr1   rT   ri   Ú_r   r   r   Útest_scale_normalize˜   s    rr   c                 C   sR   t j | ¡}| dd¡}|||ƒfD ](}t|ƒ}t|ƒ t|ƒr$t|ƒs$J ‚q$d S rl   )r   rm   rn   ro   r   rk   r   )rP   r    rp   r1   rT   ri   r   r   r   Útest_bistochastic_normalize£   s    rs   c                 C   s0   t j | ¡}| dd¡}t|ƒd }t|ƒ d S )Nre   rG   )r   rm   rn   ro   r   rk   )rP   rp   rT   ri   r   r   r   Útest_log_normalize®   s    rt   c                 C   sL   t | d�}t g d¢g d¢g d¢g¡}|j|ddd�}t||d d… ƒ d S )N©rF   )r   r   r   rG   rG   rG   )r$   r$   r$   r%   r%   r%   )r   rG   r$   r%   r#   r"   r$   )Ún_bestr4   )r   r   ÚarrayZ_fit_best_piecewiser   )rP   r0   ÚvectorsÚbestr   r   r   Útest_fit_best_piecewise·   s    
rz   c                 C   s‚   t | d�}t g d¢g d¢g d¢g d¢g¡}t ddgddgddgg¡}|||ƒfD ](}|j||dd�}tt|g d¢ƒd	ƒ qTd S )
Nru   )rG   rG   rG   )r%   r&   r%   rG   r   r$   )r4   )r   r   rG   rG   g      ð?)r   r   rw   Z_project_and_clusterr   r   )rP   r    r0   r/   rx   rT   Úlabelsr   r   r   Útest_project_and_cluster¾   s    
"r|   c                 C   sº   t dd| d�}tddd| d�\}}}| |¡ t|j||fƒdksFJ ‚tddd| d�\}}}| |¡ t|j||fƒdks~J ‚td	dd| d�\}}}| |¡ t|j||fƒdks¶J ‚d S )
Nr%   r:   )r=   rF   rB   r   rD   rG   )é(   rC   )rC   r}   )r   r   rJ   r   rO   )rP   r0   rQ   rR   rS   r   r   r   Útest_perfect_checkerboardÈ   s$    ÿÿ
ÿ
ÿ
r~   zparams, type_err, err_msgr4   r&   z#n_clusters should be <= n_samples=5)r%   r%   r%   zIncorrect parameter n_clusters)r%   r&   r%   r#   )Zn_componentsrv   z"n_best=4 must be <= n_components=3c                 C   sZ   t  d¡ d¡}tf i | ¤Ž}tj||d�� | |¡ W d  ƒ n1 sL0    Y  dS )z5Check parameters validation in `SpectralBiClustering`é   )r"   r"   )ÚmatchN)r   r+   r,   r   r_   r`   rJ   )ÚparamsZtype_errÚerr_msgr/   r0   r   r   r   Ú.test_spectralbiclustering_parameter_validationá   s    rƒ   Úestc                 C   s>   t dddd�\}}}t| dƒr"J ‚|  |¡ | jdks:J ‚d S )N)r%   r%   r%   r   ru   Ún_features_in_)r
   ÚhasattrrJ   r…   )r„   r1   rq   r   r   r   Útest_n_features_in_  s    
r‡   )0Ú__doc__Únumpyr   r_   Zscipy.sparser   Zsklearn.baser   r   Zsklearn.clusterr   r   Zsklearn.cluster._biclusterr   r   r	   Zsklearn.datasetsr
   r   Zsklearn.metricsr   r   Zsklearn.model_selectionr   Zsklearn.utils._testingr   r   r   Zsklearn.utils.fixesr   r   ÚmarkZparametrizer2   r9   rV   rd   rj   rk   rr   rs   rt   rz   r|   r~   ra   rƒ   r‡   r   r   r   r   Ú<module>   sj   
	

)



	
	ýýýýðþ
