Ë
    êÿæiÂ#  ã            	       ó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    úy/Volumes/fast/ai/experiments/voice-extract-mac/.venv/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   € ô �H‰HÒ5Ó6°qÑ9Ü�H‰HÒ/Ó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´   € ä�9‰9�R‹=× Ñ   AÓ&€DÜÓ€Eà‘M $Ó'¨¯©«Ó7ˆØ×'Ñ'¨¨1Ó-ˆ	Ü�IÔØ!×)Ñ)Ó+ˆIÜ˜9¨¨1 v°°1¨v¸¸B°xÐ&@ÔAØˆ	‘!ˆÜ�AŒ;Ø—	‘	“ˆAÜ�v‰v�a˜2‘g�Ðˆñ 8r   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   s]   € ä�5×#Ñ#Ö$ˆØ�‰˜qÓ!‰ˆˆ1Ø×(Ñ(¨Ó+‰ˆˆuÜ�5‹z˜QŠÐˆÜ�5‹z˜Q‹Ðˆñ	 %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   ?   s?  € ð $ XÐ.Ø˜R�jØ˜d�mØ�Ø�$ñ€Jô $Ø�!˜3Ð-?ô�M€A€tˆTð ˆ�‰‹�L€AÜ
�‰��Q‘˜˜1Ó€AØ‘= Ó#Ó$ˆÜ# JÖ/ˆFÜ(ð ØÐ+=ñØAGñˆEð �I‰I�cŒNà—;‘;×$Ñ$¨Ò/Ð/Ð/Ü˜uŸ{™{Ÿ™°A˜Ó6¼¿¹À»ÔDÜ˜uŸ~™~×1Ñ1°qÐ1Ó9¼2¿7¹7À2»;ÔGÜ" 5×#4Ñ#4°t¸T°lÓCÀqÒHÐHÐHä Õ&ñ 0ñ %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Ð-?ô�M€A€tˆTð
 ˜EÐ"Ø�jØ�dØ�fñ	Ðð ‘= Ó#Ô$ˆØ(:×(@Ñ(@×(BÑ$ˆJ˜Ü+�Ü,Ø ØØ$Ø!3ô	�ð !�× Ñ ÑE¤4¨*°kÐ)BÐ(CÓ#DÒEä˜C”= U×%5Ñ%5Ó%7×%;Ñ%;¸HÓ%EÈÒ%NäŸ™¤zÕ2ØŸ	™	 #œ÷ 3àà—I‘I˜c”Nà—{‘{×(Ñ(¨GÒ3Ð3Ð3Ø—~‘~×+Ñ+¨wÒ6Ð6Ð6Ü" 5§;¡;§?¡?¸ ?Ó#:¼B¿I¹IÀaÈÓ<LÔMÜ" 5§>¡>×#5Ñ#5¸1Ð#5Ó#=¼r¿y¹yÈÈBÓ?OÔPÜ& u×'8Ñ'8¸4À¸,ÓGÈ1ÒLÐLÐLä# EÖ*ò/  ,ò )Cñ %÷ 3Ð2ú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’   € à�j‰j˜aˆjÓ €GØ�j‰j˜aˆjÓ €GÜ�ÔÜ—*‘*˜WÓ%×-Ñ-Ó/ˆÜ—*‘*˜WÓ%×-Ñ-Ó/ˆÜ˜g¤r§w¡w¨w¯|©|«~¸sÓ'CÈQÕOÜ˜g¤r§w¡w¨w¯|©|«~¸sÓ'CÈQÖ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ÔÜ˜Ÿ
™
¨˜
Ó*×/Ñ/Ó1°6·:±:À1°:Ó3E×3JÑ3JÓ3LÐVWÖ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‘   ˜   sh   € ä—	‘	×%Ñ%Ð&8Ó9€IØ�‰�s˜CÓ €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“   £   sb   € ä—	‘	×%Ñ%Ð&8Ó9€IØ�‰�s˜CÓ €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Ó9€IØ
�.‰.˜˜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   € Ü Ð.@ÔA€EÜ�h‰hÒ*Ò,>Ò@RÐSÓT€GØ×$Ñ$ W°QÀ1Ð$ÓE€DÜ�t˜W R a˜[Õ)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�   € ä Ð.@ÔA€EÜ�8‰8’Y¢	ª9²iÐ@ÓA€DÜ�h‰h˜˜A˜  A ¨¨A¨Ð/Ó0€GØ‘m DÓ)Ó*ˆØ×+Ñ+¨C°ÀQÐ+ÓGˆÜœO¨F²LÓAÀ3ÕGñ +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Ð+=ô�M€A€tˆTð 
‡I�Iˆa„LÜ˜5×,Ñ,¨t°T¨lÓ;¸qÒ@Ð@Ð@ä%Ø�!˜1Ð+=ô�M€A€tˆTð 
‡I�Iˆa„LÜ˜5×,Ñ,¨t°T¨lÓ;¸qÒ@Ð@Ð@ä%Ø�!˜1Ð+=ô�M€A€tˆTð 
‡I�Iˆa„LÜ˜5×,Ñ,¨t°T¨lÓ;¸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¬   á   sN   € ô6 �9‰9�R‹=× Ñ  Ó(€DÜ Ñ* 6Ñ*€EÜ	�‰�x wÖ	/Ø�	‰	�$Œ÷ 
0×	/Ñ	/ú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   € ä˜f a°aÔ8�G€A€qˆ!ä
�‹*€CÜ�sÐ,Ô-Ð-Ð-Ø‡G�GˆA„JØ×Ñ Ò"Ð"Ñ"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Ó!7Ñ9MÓ9OÐ PÓQñ#ó Rñ#r   