
    ri#              	       N   d Z ddlZddlZddl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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ee      Zej@                  jC                  de      d        Z"d Z#ej@                  jC                  de      d        Z$ej@                  jC                  de      d        Z%d Z&d Z'ej@                  jC                  de      d        Z(ej@                  jC                  de      d        Z)d Z*d Z+ej@                  jC                  de      d        Z,d Z-ej@                  jC                  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      d&        Z/ej@                  jC                  d' e        e       f      d(        Z0y))z)Testing for Spectral Biclustering methods    N)issparse)BaseEstimatorBiclusterMixinclone)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                       e Zd Zd Zd Zy)MockBiclusteringc                      y N )selfs    b/var/www/auto_recruiter/arenv/lib/python3.12/site-packages/sklearn/cluster/tests/test_bicluster.py__init__zMockBiclustering.__init__   s        c                 j    t        j                  g d      d   t        j                  g d      d   fS )N)TTFFTr   )FFTT)npwhere)r   is     r   get_indiceszMockBiclustering.get_indices   s2     HH56q9HH/03
 	
r   N)__name__
__module____qualname__r   r"   r   r   r   r   r      s    
r   r   csr_containerc                    t        j                  d      j                  dd      }t               }| | |      |j	                         fD ]~  }|j                  d|      }t        |      r|j                         }t        |ddgddgd	d
gg       d|d d  t        |      r|j                         }t        j                  |dk7        r~J  y )N         r                     )
r   arangereshaper   tolistget_submatrixr   toarrayr   all)r&   datamodelX	submatrixs        r   test_get_submatrixr<   &   s    99R=  A&DEM$'7 ''1-	I!))+I91v1vBx&@A	!A;		Avva2gr   c                     t        | j                        D ]J  }| j                  |      \  }}| j                  |      \  }}t	        |      |k(  sJ t	        |      |k(  rJJ  y r   )range
n_clusters	get_shaper"   len)r9   r!   mni_indj_inds         r   _test_shape_indicesrF   6   sb    5##$ q!1((+u5zQ5zQ	r   c                    ddgd dgddgdgdgd}t        d	d
d|       \  }}}||j                         z  }t        j                  |dk  d|      }| ||      fD ]  }t	        |      D ]  }t        dd
| d|}|j                  |       |j                  j                  dk(  sJ t        |j                  j                  d      t        j                  d             t        |j                  j                  d      t        j                  d             t        |j                  ||f      dk(  sJ t        |         y )N
randomizedarpackr(   FT	k-means++
   )
svd_method
n_svd_vecs
mini_batchinitn_init   rR   r,   g?noiserandom_state   r   )r?   rU   )r,   rR   axisrR   r   )r   minr   r    r   r   fitrows_shaper   sumonescolumns_r   biclusters_rF   )	global_random_seedr&   
param_gridSrowscolsmatkwargsr9   s	            r   test_spectral_coclusteringrh   ?   sI    $X.Rjdm$J $!3-?MAtT LA
Q1A=#$ '#J/ 	'F( +=AGE IIcN;;$$///u{{A6Du~~11q192772;G"5#4#4tTlCqHHH&	''r   c                    t        ddd|       \  }}}ddgdgdgd	gd
}| ||      fD ]  }|j                         D ]  \  }}|D ]t  }	t        ddd|       }
 |
j                  di t	        ||	fg       t        |      rV|
j                         j                  d      dk(  r4t        j                  t              5  |
j                  |       d d d        |
j                  |       |
j                  j                  dk(  sJ |
j                  j                  dk(  sJ t        |
j                  j!                  d      t#        j$                  dd             t        |
j                  j!                  d      t#        j$                  dd             t'        |
j(                  ||f      dk(  sJ t+        |
       w   y # 1 sw Y   xY w)NrQ   r,   g      ?rS   scalelogrI   r(   T)methodrL   rM   rN   rJ   )r?   rP   rO   rU   rl   )	   rR   r   rW   rR   rV   r   )r   itemsr   
set_paramsdictr   
get_paramsgetpytestraises
ValueErrorrZ   r[   r\   r_   r   r]   r   repeatr   r`   rF   )ra   r&   rc   rd   re   non_default_paramsrf   
param_nameparam_valuesparam_valuer9   s              r   test_spectral_biclusteringr{   ]   s    &!3-?MAtT
 E"jdf	 =#$ +(:(@(@(B 	+$J+ +, $!3	 !  E4*k)B(C#DEC=U%5%5%7%;%;H%E%Nz2 '		#'IIcN{{((G333~~++w666"5;;???#:BIIa<LM"5>>#5#51#5#=ryyB?OP&u'8'84,G1LLL#E*/+	++' 's   >G	Gc                    | j                  d      }| j                  d      }t        |       rFt        j                  |      j	                         }t        j                  |      j	                         }t        |t        j                  |j                         d      d       t        |t        j                  |j                         d      d       y)z<Check that rows sum to one constant, and columns to another.rV   rW   r   d   decimalN)r]   r   r   asarraysqueezer   tilemean)scaledrow_sumcol_sums      r   _do_scale_testr      s    jjaj Gjjaj G**W%--/**W%--/grwww||~s'CQOgrwww||~s'CQOr   c                     t        |        t        | j                  d      j                         | j                  d      j                         d       y)z5Check that rows and columns sum to the same constant.r   rW   rV   r~   N)r   r   r]   r   )r   s    r   _do_bistochastic_testr      s?    6


*//16::1:3E3J3J3LVWXr   c                     t         j                  j                  |       }|j                  dd      }| ||      fD ]5  }t	        |      \  }}}t        |       t        |      s)t        |      r5J  y Nr}   )r   randomRandomStaterandr   r   r   )ra   r&   	generatorr:   rf   r   _s          r   test_scale_normalizer      sm    		%%&89IsC A=#$ $',1vC=F###	$r   c                     t         j                  j                  |       }|j                  dd      }| ||      fD ]1  }t	        |      }t        |       t        |      s%t        |      r1J  y r   )r   r   r   r   r	   r   r   )ra   r&   r   r:   rf   r   s         r   test_bistochastic_normalizer      sg    		%%&89IsC A=#$ $(-f%C=F###	$r   c                     t         j                  j                  |       }|j                  dd      }t	        |      dz   }t        |       y )Nr}   rV   )r   r   r   r   r
   r   )ra   r   rf   r   s       r   test_log_normalizer      s@     		%%&89I
..c
"CC 1$F&!r   c                     t        |       }t        j                  g dg dg dg      }|j                  |dd      }t	        ||d d        y )NrU   )r   r   r   rV   rV   rV   )r+   r+   r+   r,   r,   r,   )r   rV   r+   r,   r*   r)   r+   )n_bestr?   )r   r   array_fit_best_piecewiser   )ra   r9   vectorsbests       r   test_fit_best_piecewiser      sL     .@AEhh*,>@RSTG$$WQ1$EDtWRa[)r   c                    t        |       }t        j                  g dg dg dg dg      }t        j                  ddgddgddgg      }| ||      fD ].  }|j                  ||d      }t	        t        |g d      d	       0 y )
Nr   )rV   rV   rV   )r,   r-   r,   rV   r   r+   )r?   )r   r   rV   rV   g      ?)r   r   r   _project_and_clusterr   r   )ra   r&   r9   r8   r   rf   labelss          r   test_project_and_clusterr      s     .@AE88Y	9i@ADhhAAA/0GmD)* H++CQ+GOFLA3GHr   c                    t        dd|       }t        ddd|       \  }}}|j                  |       t        |j                  ||f      dk(  sJ t        ddd|       \  }}}|j                  |       t        |j                  ||f      dk(  sJ t        d	dd|       \  }}}|j                  |       t        |j                  ||f      dk(  sJ y )
Nr,   rI   )rL   rU   rQ   r   rS   rV   )(   rR   )rR   r   )r   r   rZ   r   r`   )ra   r9   rc   rd   re   s        r   test_perfect_checkerboardr      s     	h-?E &!1+=MAtT 
IIaL5,,tTl;q@@@%!1+=MAtT 
IIaL5,,tTl;q@@@%!1+=MAtT 
IIaL5,,tTl;q@@@r   zparams, type_err, err_msgr?   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                     t        j                  d      j                  d      }t        di | }t	        j
                  ||      5  |j                  |       ddd       y# 1 sw Y   yxY w)z5Check parameters validation in `SpectralBiClustering`   )r)   r)   )matchNr   )r   r2   r3   r   rs   rt   rZ   )paramstype_errerr_msgr8   r9   s        r   .test_spectralbiclustering_parameter_validationr      sW    6 99R=  (D *6*E	xw	/ 		$  s   A""A+estc                     t        ddd      \  }}}t        |       } t        | d      rJ | j                  |       | j                  dk(  sJ y )N)r,   r,   r,   r   r   n_features_in_)r   r   hasattrrZ   r   )r   r:   r   s      r   test_n_features_in_r     sO    faa8GAq!
*Cs,---GGAJ"""r   )1__doc__numpyr   rs   scipy.sparser   sklearn.baser   r   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parametrizer<   rF   rh   r{   r   r   r   r   r   r   r   r   ru   r   r   r   r   r   <module>r      s   /   ! = = F 
 @ < 1 
 /

~} 

 .9 : .9' :': .9&+ :&+RPY .9$ :$ .9$ :$"* .9H :HA2  11	
 9%,	
 6",	
 !,0	
!232 !5!79M9O PQ# R#r   