o
    tBh&                     @   sN  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-d1fd2d3ie,d4fgd5d6 Z.ej*+d*d+die,d,fd+d-ie-d.fd/d7ie,d8fd/d0ie,d9fd/d:ie,d;fd/d<ie,d=fd>d3ie,d?fd@die,dAfd@d-ie-dBfdCdDdEe,dFfdGdie,dHfdGd-ie-dIfd2d3ie,d4fgdJdK Z/ej*+dLe e fdMdN Z0dS )Oz)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   {/var/www/html/riverr-enterprise-integrations-main/venv/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   c                  C   s   t ddd} t }| 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   r   tolistget_submatrixr   toarrayr   all)datamodelX	submatrixr   r   r   test_get_submatrix'   s   r4   c                 C   sP   t | jD ] }| |\}}| |\}}t||ksJ t||ks%J qd S r   )range
n_clusters	get_shaper   len)r1   r   mni_indj_indr   r   r   _test_shape_indices6   s   r=   c                  C   s   ddgd dgddgdgdgd} d	}t d
dd|d\}}}|| 8 }t|dk d	|}|t|fD ]J}t| D ]C}tdd|d|}|| |jj	dksQJ t
|jjd	dtd t
|jjd	dtd t|j||fdkswJ t| q8q2d S )N
randomizedarpackr    FT	k-means++
   )
svd_method
n_svd_vecs
mini_batchinitn_initr      rH   r$         ?noiserandom_state   )r6   rL   )r$   rH   axisrH   r   )r   minr   r   r   r   r
   fitrows_shaper   sumonescolumns_r   biclusters_r=   )
param_gridrL   Srowscolsmatkwargsr1   r   r   r   test_spectral_coclustering?   s2   

r^   c            	      C   s\  t ddddd\} }}ddgdgd	gd
gd}| t| fD ]}| D ]\}}|D ]}td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 )NrG   r$   rI   r   rJ   scalelogr?   r    T)methodrB   rC   rD   r@   )r6   rF   rE   rL   ra   )	   rH   rN   rH   rM   r   )r   r   itemsr   
set_paramsdictr   
get_paramsgetpytestraises
ValueErrorrQ   rR   rS   rV   r   rT   r   repeatr   rW   r=   )	rY   rZ   r[   non_default_paramsr\   
param_nameparam_valuesparam_valuer1   r   r   r   test_spectral_biclustering[   s>   

rp   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.rM   rN   r   d   decimalN)rT   r   r   asarraysqueezer   tilemean)scaledrow_sumcol_sumr   r   r   _do_scale_test   s   r{   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   rN   rM   rr   N)r{   r   rT   rw   )rx   r   r   r   _do_bistochastic_test   s   *r|   c                  C   sX   t jd} | dd}|t|fD ]}t|\}}}t| t|r)t|s)J qd S Nr   rq   )r   randomRandomStaterandr   r   r{   r   )	generatorr2   r\   rx   _r   r   r   test_scale_normalize   s   r   c                  C   sR   t jd} | dd}|t|fD ]}t|}t| t|r&t|s&J qd S r}   )r   r~   r   r   r   r   r|   r   )r   r2   r\   rx   r   r   r   test_bistochastic_normalize   s   r   c                  C   s0   t jd} | dd}t|d }t| d S )Nr   rq   rM   )r   r~   r   r   r   r|   )r   r\   rx   r   r   r   test_log_normalize   s   r   c                  C   sL   t dd} tg dg dg dg}| j|ddd}t||d d  d S )Nr   rL   )r   r   r   rM   rM   rM   )r#   r#   r#   r$   r$   r$   )r   rM   r#   r$   r"   r!   r#   )n_bestr6   )r   r   array_fit_best_piecewiser   )r1   vectorsbestr   r   r   test_fit_best_piecewise   s   
r   c                  C   s   t dd} tg dg dg dg dg}tddgddgddgg}|t|fD ]}| j||dd}tt|g dd	 q*d S )
Nr   r   )rM   rM   rM   )r$   r%   r$   rM   r#   )r6   )r   r   rM   rM   g      ?)r   r   r   r   _project_and_clusterr   r   )r1   r0   r   r\   labelsr   r   r   test_project_and_cluster   s   
"r   c                  C   s   t dddd} tddddd\}}}| | t| j||fdks#J tddddd\}}}| | t| j||fdks?J td	dddd\}}}| | t| j||fdks[J d S )
Nr$   r?   r   )rB   rL   rG   rJ   rM   )(   rH   )rH   r   )r   r   rQ   r   rW   )r1   rY   rZ   r[   r   r   r   test_perfect_checkerboard   s   


r   zparams, type_err, err_msgrF   zn_init == 0, must be >= 1.g      ?zn_init must be an instance ofr6   abcz!n_clusters must be an instance ofrB   unknownzUnknown SVD method: 'unknown'c                 C   \   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
   rh   ri   rQ   paramstype_errerr_msgr0   r1   r   r   r   .test_spectralcoclustering_parameter_validation   s
   "r   )r$   r$   r$   z5Incorrect parameter n_clusters has value: \(3, 3, 3\)z-Incorrect parameter n_clusters has value: abc)r$   r   z6Incorrect parameter n_clusters has value: \(3, 'abc'\))r   r$   z6Incorrect parameter n_clusters has value: \('abc', 3\)ra   zUnknown method: 'unknown'n_componentsz n_components == 0, must be >= 1.z#n_components must be an instance ofr$   r"   )r   r   zn_best == 4, must be <= 3.r   zn_best == 0, must be >= 1.zn_best must be an instance ofc                 C   r   r   )r   r*   r+   r   rh   ri   rQ   r   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   r   n_features_in_)r   hasattrrQ   r   )r   r2   r   r   r   r   test_n_features_in_  s   
r   )1__doc__numpyr   rh   scipy.sparser   r   sklearn.model_selectionr   sklearn.utils._testingr   r   r   sklearn.baser   r	   sklearn.clusterr
   r   sklearn.cluster._biclusterr   r   r   sklearn.metricsr   r   sklearn.datasetsr   r   r   r4   r=   r^   rp   r{   r|   r   r   r   r   r   r   markparametrizerj   	TypeErrorr   r   r   r   r   r   r   <module>   s    	(

		

"