o
    i#                  	   @   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   s/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/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 ]5}|d|}t|r%| }t|ddgddgd	d
gg d|d d < t|rA| }t 	|dksJJ 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 ]J}t|D ]C}tdd
| d|}|| |jjdksOJ t	|jj
ddtd t	|jj
ddtd t|j||fdksuJ t| q6q0d 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   )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?   s4   

rV   c                 C   s\  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di t||	fg t|rh|
 ddkrht	t
 |
| W d    n1 sbw   Y  q)|
| |
jjdksuJ |
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sJ t|
 q)q#q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   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]   sB   

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	 q*d 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s#J 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   s\   t dd}tdi | }tj||d || W d   dS 1 s'w   Y  dS )z5Check parameters validation in `SpectralBiClustering`   )r"   r"   )matchNr   )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>   sl    
	

)


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