U
    9%e!                  	   @   st  d Z ddlZddlZddlmZ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 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&d+ie,d*fd,d-d.e,d/fgd0d1 Z-ej*+d2e e fd3d4 Z.dS )5z)Testing for Spectral Biclustering methods    N)
csr_matrix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_equalc                   @   s   e Zd Zdd Zdd ZdS )MockBiclusteringc                 C   s   d S N )selfr   r   c/var/www/html/Darija-Ai-API/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_indices4   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st
t|jjddtd t|jjddtd t|j||fdkst
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rt	
t |	| W 5 Q R X qTn
|	| |	jjdkst|	jjdkst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_biclusteringZ   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st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.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   r   r2   r9   rV   rd   rj   rk   rr   rs   rt   rz   r|   r~   markZparametrizera   r   r   r   r   r   r   <module>   s\   	)

		
