o
    ?Hh#                  	   @   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   d/home/air/sanwanet/gpt-api/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   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   tolistget_submatrixr   toarrayr   all)r    datamodelX	submatrixr   r   r   test_get_submatrix&   s   r5   c                 C   sP   t | jD ] }| |\}}| |\}}t||ksJ t||ks%J qd S r   )range
n_clusters	get_shaper   len)r2   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}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 )N
randomizedarpackr!   FT	k-means++
   )
svd_method
n_svd_vecs
mini_batchinitn_init   rI   r%   g?noiserandom_state   r   )r7   rL   )r%   rI   axisrI   r   )r
   minr   r   r   r   fitrows_shaper   sumonescolumns_r   biclusters_r>   )	global_random_seedr    
param_gridSrowscolsmatkwargsr2   r   r   r   test_spectral_coclustering?   s4   

r_   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 )NrH   r%   g      ?rJ   scalelogr@   r!   T)methodrC   rD   rE   rA   )r7   rG   rF   rL   rb   )	   rI   r   rN   rI   rM   r   )r   itemsr   
set_paramsdictr   
get_paramsgetpytestraises
ValueErrorrQ   rR   rS   rV   r   rT   r   repeatr   rW   r>   )rX   r    rZ   r[   r\   non_default_paramsr]   
param_nameparam_valuesparam_valuer2   r   r   r   test_spectral_biclustering]   sB   

rq   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   rs   N)r|   r   rT   rx   )ry   r   r   r   _do_bistochastic_test   s   *r}   c                 C   sX   t j| }|dd}|||fD ]}t|\}}}t| t|r)t|s)J qd S Nrr   )r   randomRandomStaterandr	   r|   r   )rX   r    	generatorr3   r]   ry   _r   r   r   test_scale_normalize   s   r   c                 C   sR   t j| }|dd}|||fD ]}t|}t| t|r&t|s&J qd S r~   )r   r   r   r   r   r}   r   )rX   r    r   r3   r]   ry   r   r   r   test_bistochastic_normalize   s   r   c                 C   s0   t j| }|dd}t|d }t| d S )Nrr   rM   )r   r   r   r   r   r}   )rX   r   r]   ry   r   r   r   test_log_normalize   s   r   c                 C   sL   t | d}tg dg dg dg}|j|ddd}t||d d  d S )NrL   )r   r   r   rM   rM   rM   )r$   r$   r$   r%   r%   r%   )r   rM   r$   r%   r#   r"   r$   )n_bestr7   )r   r   array_fit_best_piecewiser   )rX   r2   vectorsbestr   r   r   test_fit_best_piecewise   s   
r   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 )
Nr   )rM   rM   rM   )r%   r&   r%   rM   r   r$   )r7   )r   r   rM   rM   g      ?)r   r   r   _project_and_clusterr   r   )rX   r    r2   r1   r   r]   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@   )rC   rL   rH   r   rJ   rM   )(   rI   )rI   r   )r   r   rQ   r   rW   )rX   r2   rZ   r[   r\   r   r   r   test_perfect_checkerboard   s$   


r   zparams, type_err, err_msgr7   r&   z#n_clusters should be <= n_samples=5)r%   r%   r%   zIncorrect parameter n_clusters)r%   r&   r%   r#   )n_componentsr   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   ri   rj   rQ   )paramstype_errerr_msgr1   r2   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   r3   r   r   r   r   test_n_features_in_  s   
r   )0__doc__numpyr   ri   scipy.sparser   sklearn.baser   r   sklearn.clusterr   r   sklearn.cluster._biclusterr   r   r	   sklearn.datasetsr
   r   sklearn.metricsr   r   sklearn.model_selectionr   sklearn.utils._testingr   r   r   sklearn.utils.fixesr   r   markparametrizer5   r>   r_   rq   r|   r}   r   r   r   r   r   r   rk   r   r   r   r   r   r   <module>   sl    
	

)


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