U
    ½mœdM"  ã                	   @   sœ  d Z ddlZddlZddlmZmZ ddlmZ ddl	m
Z
 ddl	mZ ddl	mZ ddlmZmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZmZ ddlmZmZ G dd„ deeƒZdd„ Zdd„ Zdd„ Z dd„ Z!dd„ Z"dd„ Z#dd„ Z$d d!„ Z%d"d#„ Z&d$d%„ Z'd&d'„ Z(d(d)„ Z)ej* +d*d+d,ie,d-fd+d.ie,d/fd+d0ie,d/fd1d2d3œe,d4fg¡d5d6„ ƒZ-ej* +d7eƒ eƒ f¡d8d9„ ƒZ.dS ):z)Testing for Spectral Biclustering methodsé    N)Ú
csr_matrixÚissparse)ÚParameterGrid)Úassert_almost_equal)Úassert_array_equal)Úassert_array_almost_equal)ÚBaseEstimatorÚBiclusterMixin)ÚSpectralCoclustering)ÚSpectralBiclustering)Ú_scale_normalize)Ú_bistochastic_normalize)Ú_log_normalize)Úconsensus_scoreÚv_measure_score)Úmake_biclustersÚmake_checkerboardc                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚMockBiclusteringc                 C   s   d S ©N© )Úselfr   r   ú]/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/sklearn/cluster/tests/test_bicluster.pyÚ__init__   s    zMockBiclustering.__init__c                 C   s.   t  dddddg¡d t  ddddg¡d fS )NTFr   )Ú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   c                  C   sš   t  d¡ dd¡} tƒ }| 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*t‚q*d S )Né   é   é   r   é   é   é   é   é   é   éÿÿÿÿ)r   ÚarangeÚreshaper   r   ÚtolistZget_submatrixr   Ztoarrayr   ÚallÚAssertionError)ÚdataÚmodelÚXZ	submatrixr   r   r   Útest_get_submatrix'   s    r2   c                 C   sP   t | jƒD ]@}|  |¡\}}|  |¡\}}t|ƒ|ks:t‚t|ƒ|ks
t‚q
d S r   )ÚrangeÚ
n_clustersÚ	get_shaper   Úlenr.   )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|¡}|t|ƒfD ]”}t|ƒD ]†}tf d
| dœ|—Ž}| |¡ |jj	dksžt
‚t|jjdd�t d¡ƒ t|jjdd�t d¡ƒ t|j||fƒdksêt
‚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   r
   ÚfitÚrows_Úshaper.   r   ÚsumZonesÚcolumns_r   Úbiclusters_r9   )Úglobal_random_seedZ
param_gridÚSÚrowsÚcolsÚmatÚkwargsr0   r   r   r   Útest_spectral_coclustering?   s8    û   ÿ ÿÿ
rV   c           
      C   sJ  t ddd| d�\}}}ddgdgdgd	gd
œ}|t|ƒfD �]}| ¡ D ]ú\}}|D ]ì}tddd| d�}	|	jf t||fgƒŽ t|ƒr¼|	 ¡  d¡dkr¼t	 
t¡� |	 |¡ W 5 Q R X qTn
|	 |¡ |	jjdksÖt‚|	jjdksæt‚t|	jjdd�t dd¡ƒ t|	jjdd�t dd¡ƒ t|	j||fƒdk�s8t‚t|	ƒ qTqHq: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   r   Úitemsr   Z
set_paramsÚdictr   Ú
get_paramsÚgetÚpytestÚraisesÚ
ValueErrorrJ   rK   rL   r.   rN   r   rM   r   Úrepeatr   rO   r9   )
rP   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¡}|t|ƒfD ].}t|ƒ\}}}t|ƒ t|ƒr$t|ƒs$t‚q$d S ©Nre   )	r   ÚrandomÚRandomStateÚrandr   r   rj   r   r.   )rP   Ú	generatorr1   rT   ri   Ú_r   r   r   Útest_scale_normalize—   s    rr   c                 C   sR   t j | ¡}| dd¡}|t|ƒfD ](}t|ƒ}t|ƒ t|ƒr$t|ƒs$t‚q$d S rl   )	r   rm   rn   ro   r   r   rk   r   r.   )rP   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   sd   t | d�}t ddddddgddddddgddddddgg¡}|j|ddd�}t||d d… ƒ d S )	N©rF   r   rG   r#   r$   r"   r!   )Ún_bestr4   )r   r   ÚarrayZ_fit_best_piecewiser   )rP   r0   ÚvectorsÚbestr   r   r   Útest_fit_best_piecewise´   s    
4rz   c                 C   sŽ   t | d�}t dddgdddgdddgdddgg¡}t ddgddgddgg¡}|t|ƒfD ],}|j||dd�}tt|ddddgƒdƒ q\d S )	Nru   rG   r$   r%   r   r#   )r4   g      ð?)r   r   rw   r   Z_project_and_clusterr   r   )rP   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sFt‚tddd| d�\}}}| |¡ t|j||fƒdks~t‚td	dd| d�\}}}| |¡ t|j||fƒdks¶t‚d S )
Nr$   r:   )r=   rF   rB   r   rD   rG   )é(   rC   )rC   r}   )r   r   rJ   r   rO   r.   )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   sB   t  d¡ d¡}tf | Ž}tj||d�� | |¡ W 5 Q R X 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"t‚|  |¡ | jdks:t‚d S )N)r$   r$   r$   r   ru   Ún_features_in_)r   Úhasattrr.   rJ   r…   )r„   r1   rq   r   r   r   Útest_n_features_in_þ   s    
r‡   )/Ú__doc__Únumpyr   r_   Zscipy.sparser   r   Zsklearn.model_selectionr   Zsklearn.utils._testingr   r   r   Zsklearn.baser   r	   Zsklearn.clusterr
   r   Zsklearn.cluster._biclusterr   r   r   Zsklearn.metricsr   r   Zsklearn.datasetsr   r   r   r2   r9   rV   rd   rj   rk   rr   rs   rt   rz   r|   r~   ÚmarkZparametrizera   rƒ   r‡   r   r   r   r   Ú<module>   sf   	*

		ýýýýðþ
