a
    h#                  	   @   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   `/var/www/html/assistant/venv/lib/python3.9/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sJ t	|jj
ddtd t	|jj
ddtd t|j||fdksJ 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rt	t
 |
| W d    qV1 s0    Y  qVn
|
| |
jjdksJ |
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sJ 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   
	

)



	
	
