§
    rŠtjN  ã            
       ó\  — d dl Z d dlmZ d dlZd dl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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 d dlm Z m!Z! d dl"m#Z# d dl$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+ d dl$m,Z- 	 d dl.m/Z/ dZ0n# e1$ r dZ0Y nw xY wej2         3                    e0 d¬¦  «        Z4 ej5        g d¢g d¢g d¢g¦  «        Z6dZ7e6j8        \  Z9Z: ee7e6dd¬¦  «        \  Z;Z<d=d„Z=ej2         >                    de%¦  «        d „ ¦   «         Z?ej2         3                    e0 d¬¦  «        d!„ ¦   «         Z@ej2         >                    d"d#d$ ejA        d%e4¬&¦  «        g¦  «        ej2         >                    d'ejB        ejC        g¦  «        d>d(„¦   «         ¦   «         ZDej2         >                    d)dge'¢¦  «        ej2         >                    d"d#d$ ejA        d%e4¬&¦  «        g¦  «        ej2         >                    d'ejB        ejC        f¦  «        	 d?d+„¦   «         ¦   «         ¦   «         ZEd,„ ZFej2         >                    d)dge'¢¦  «        d?d-„¦   «         ZGej2         >                    d'ejB        ejC        f¦  «        d.„ ¦   «         ZHej2         3                    e0 d¬¦  «        ej2         >                    d'ejB        ejC        f¦  «        ej2         >                    de%¦  «        d?d/„¦   «         ¦   «         ¦   «         ZIej2         3                    e0 d¬¦  «        ej2         >                    d'ejB        ejC        f¦  «        d?d0„¦   «         ¦   «         ZJd?d1„ZKd?d2„ZLd3„ ZMd4„ ZNd5„ ZOej2         >                    d"d#d$ ejA        d%e4¬&¦  «        g¦  «        ej2         >                    d'ejB        ejC        g¦  «        d6„ ¦   «         ¦   «         ZPej2         3                    e0d7¬¦  «        d8„ ¦   «         ZQej2         >                    d9g d:¢¦  «        ej2         >                    d;e'¦  «        d<„ ¦   «         ¦   «         ZRdS )@é    N)ÚMock)Úsparse)Úeigh)ÚeigshÚlobpcg)ÚKMeans)Ú
make_blobs)ÚSpectralEmbeddingÚ_spectral_embeddingÚspectral_embedding)Ú_graph_connected_componentÚ_graph_is_connected)Únormalized_mutual_info_scoreÚpairwise_distances©Ú
rbf_kernel)ÚNearestNeighbors)Úassert_array_almost_equalÚassert_array_equal)Ú_deterministic_vector_sign_flip)ÚCOO_CONTAINERSÚCSC_CONTAINERSÚCSR_CONTAINERSÚ_sparse_diags_arrayÚ_sparse_random_arrayÚparse_versionÚ
sp_version)Ú	laplacian)Úsmoothed_aggregation_solverTFz1PyAMG is required for the tests in this function.)Úreason)ç        ç      @r!   r!   r!   )r!   r!   g      @r!   r!   )ç      ð?r!   r!   r"   r#   éd   r#   é*   )Ú	n_samplesÚcentersÚcluster_stdÚrandom_stater!   c                 óÌ   — |dz  }t          | j        |j        ¦  «        D ]C\  }}t          j        ||z
  dz  ¦  «        |k    s t          j        ||z   dz  ¦  «        |k    sJ ‚ŒDdS )zLCheck array A and B are equal with possible sign flipping on
    each columné   N)ÚzipÚTÚnpÚmax)ÚAÚBÚtolÚtol_squaredÚA_colÚB_cols         úl/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/sklearn/manifold/tests/test_spectral_embedding.pyÚ _assert_equal_with_sign_flippingr7   :   s{   € ð �q‘&€KÝ˜AœC ¤™œð 
ð 
‰ˆˆuåŒF�E˜E‘M aÑ'Ñ(Ô(¨KÒ7Ð7ÝŒv�u˜u‘}¨Ñ*Ñ+Ô+¨{Ò:Ð:Ð:ð;øð
ð 
ó    Úcoo_containerc                 ó>  — t           j                             d¦  «        }d}dddd|g}|                     |¦  «        }g }t	          j        |¦  «        D ]Ì\  }}|||…         }t          t          |¦  «        dz
  ¦  «        D ](}	|                     ||	         ||	dz            f¦  «         Œ)dt          |¦  «        dz
  }}
d}| 	                    |
||¬¦  «        }| 	                    |
||¬¦  «        }| 
                    t          ||         ||         ¦  «        ¦  «         ŒÍt          t          j        |¦  «        j        ¦  «        \  }}|                     d	dt          |¦  «        ¬¦  «        } | |||ff¦  «        }d
||j        z   z  }t	          j        |¦  «        D ]}\  }}t!          |||         ¦  «        }||z
  }|                     ¦   «         |k    sJ ‚t!          |||dz
           ¦  «        }|                     ¦   «         |k    sJ ‚t%          ||¦  «         Œ~d S )Nr%   i,  r   éy   éÈ   é   iè  )Úsizeçš™™™™™¹?ç      à?)r.   ÚrandomÚRandomStateÚpermutationÚ	itertoolsÚpairwiseÚrangeÚlenÚappendÚrandintÚextendr,   ÚtupleÚarrayr-   Úuniformr   Úsumr   )r9   Úrngr&   Ú
boundariesÚpÚconnectionsÚstartÚstopÚgroupÚiÚmin_idxÚmax_idxÚn_random_connectionsÚsourceÚtargetÚrow_idxÚ
column_idxÚdataÚaffinityÚcomponent_1Úcomponent_sizeÚcomponent_2s                         r6   Ú%test_sparse_graph_connected_componentrc   E   s<  € å
Œ)×
Ò
 Ñ
#Ô
#€CØ€IØ�R˜˜c 9Ð-€JØ�Š˜	Ñ"Ô"€AØ€Kå Ô)¨*Ñ5Ô5ð >ð >‰ˆˆtØ�%˜�*”ˆõ •s˜5‘z”z A‘~Ñ&Ô&ð 	9ð 	9ˆAØ×Ò  a¤¨%°°A±¬,Ð7Ñ8Ô8Ð8Ð8ð �c %™jœj¨1™n�ˆØ#ÐØ—’˜W gÐ4H�ÑIÔIˆØ—’˜W gÐ4H�ÑIÔIˆØ×Ò�3˜u Vœ}¨e°F¬mÑ<Ô<Ñ=Ô=Ð=Ð=õ  ¥¤¨Ñ 5Ô 5Ô 7Ñ8Ô8Ñ€GˆZØ�;Š;�s˜B¥S¨Ñ%5Ô%5ˆ;Ñ6Ô6€DØˆ}˜d W¨jÐ$9Ð:Ñ;Ô;€HØ�h ¤Ñ+Ñ,€Hå Ô)¨*Ñ5Ô5ð 	5ð 	5‰ˆˆtÝ0°¸1¸U¼8ÑDÔDˆØ ™ˆØ�ŠÑ Ô  NÒ2Ð2Ð2Ð2õ 1°¸1¸TÀA¹X¼;ÑGÔGˆØ�ŠÑ Ô  NÒ2Ð2Ð2Ð2Ý˜;¨Ñ4Ô4Ð4Ð4ð	5ð 	5r8   c                  ó¤  — t           j                             d¦  «        } |                      dd¦  «        }t	          |¦  «        }t          j        t          d¬¦  «        5  t          |dd¬¦  «        }d d d ¦  «         n# 1 swxY w Y   t          j        t          d	¬¦  «        5  t          |dd
¬¦  «        }d d d ¦  «         d S # 1 swxY w Y   d S )Né$   é
   é   zdense matrices©ÚmatchÚamgr=   )Úeigen_solverÚn_componentszsmall graphsé   )	r.   rA   rB   Úrandnr   ÚpytestÚwarnsÚRuntimeWarningr   )r)   r^   ÚsimsÚ_s       r6   Útest_fallback_amgrt   m   sp  € õ ”9×(Ò(¨Ñ,Ô,€LØ×Ò˜b "Ñ%Ô%€DÝ�dÑÔ€Dõ 
Œ•nÐ,<Ð	=Ñ	=Ô	=ð Ið IÝ˜t°%ÀaÐHÑHÔHˆðIð Ið Iñ Iô Ið Ið Ið Ið Ið Ið Iøøøð Ið Ið Ið Iõ
 
Œ•n¨NÐ	;Ñ	;Ô	;ð Ið IÝ˜t°%ÀaÐHÑHÔHˆðIð Ið Iñ Iô Ið Ið Ið Ið Ið Ið Ið Iøøøð Ið Ið Ið Ið Ið Is$   Á A?Á?BÂBÂ%CÃC	ÃC	rk   Úarpackr   rj   )ÚmarksÚdtypec                 ó”  — t           j                             |¦  «        }d}t          j        |dz  |dz  g¬¦  «        }t          j        |                     ||¦  «        ¦  «        dz   |d|…d|…f<   t          j        |                     ||¦  «        ¦  «        dz   ||d …|d …f<   t          |d¦  «        }|d |…                              ¦   «         sJ ‚||d …                              ¦   «         rJ ‚t          |d¦  «        }|d |…                              ¦   «         rJ ‚||d …                              ¦   «         sJ ‚d|d|dz   f<   d||dz   df<   d|j	        d d d|z  dz   …<   d||j
        z   z  }t          j        d|z  ¬¦  «        }d|d|…<   t          ddt           j                             |¦  «        | ¬	¦  «        }|                     |                     |¦  «        ¦  «        }	t          j        |	                     ¦   «         dk     t           j        ¬
¦  «        }
t#          ||
¦  «        t%          j        d¦  «        k    sJ ‚d S )Nr$   r+   ©Úshaper   éÿÿÿÿr=   r@   Úprecomputed©rl   r_   r)   rk   ©rw   r#   )r.   rA   rB   ÚzerosÚabsrn   r   ÚallÚanyÚflatr-   r
   Úfit_transformÚastyperL   ÚravelÚint64r   ro   Úapprox)rk   rw   Úseedr)   Ún_sampler_   Ú	componentÚ
true_labelÚ
se_precompÚembedded_coordinateÚlabel_s              r6   Ú&test_spectral_embedding_two_componentsr�   „   su  € õ ”9×(Ò(¨Ñ.Ô.€LØ€HÝŒx˜x¨!™|¨X¸©\Ð:Ð;Ñ;Ô;€Hõ 	Œˆ|×!Ò! (¨HÑ5Ô5Ñ6Ô6¸Ñ:ð ˆQˆxˆZ˜˜8˜Ð#Ñ$õ
 	Œˆ|×!Ò! (¨HÑ5Ô5Ñ6Ô6¸Ñ:ð ˆXˆZˆZ˜˜˜Ð#Ñ$õ
 +¨8°QÑ7Ô7€IØ�Y�h�YÔ×#Ò#Ñ%Ô%Ð%Ð%Ð%Ø˜˜˜Ô#×'Ò'Ñ)Ô)Ð)Ð)Ð)Ý*¨8°RÑ8Ô8€IØ˜˜(˜Ô#×'Ò'Ñ)Ô)Ð)Ð)Ð)Ø�X�Y�YÔ×#Ò#Ñ%Ô%Ð%Ð%Ð%ð !"€HˆQ�˜1‘ˆ_ÑØ !€HˆX˜‰\˜1ˆ_ÑØ)*€H„MÐ%Ð%�Q˜‘\ AÑ%Ð%Ñ&Ø�h ¤Ñ+Ñ,€Hå”  H¡Ð-Ñ-Ô-€JØ€Jˆq�ˆzÑå"ØØÝ”Y×*Ò*¨4Ñ0Ô0Ø!ð	ñ ô €Jð %×2Ò2°8·?²?À5Ñ3IÔ3IÑJÔJÐåŒXÐ)×/Ò/Ñ1Ô1°AÒ5½R¼XÐFÑFÔF€FÝ'¨
°FÑ;Ô;½v¼}ÈSÑ?QÔ?QÒQÐQÐQÐQÐQÐQr8   Úsparse_containerre   c                 ó  — d}| €t           n | t           ¦  «        }t          ddt          j                             |¦  «        |¬¦  «        }t          dd|t          j                             |¦  «        |¬¦  «        }|                     t          |                     |¦  «        |¬¦  «        ¦  «        }|                     |                     |¦  «        ¦  «        }	t          |j	        |j	        ¦  «         t          ||	d¦  «         d S )	Nr#   r+   r|   r}   Úrbf)rl   r_   Úgammar)   rk   ©r”   çš™™™™™©?)ÚSr
   r.   rA   rB   r„   r   r…   r   Úaffinity_matrix_r7   )
r‘   rk   rw   r‰   r”   ÚXr�   Úse_rbfÚembed_precompÚ	embed_rbfs
             r6   Ú,test_spectral_embedding_precomputed_affinityr�   ¹   sÿ   € ð €EØÐ%�ˆÐ+;Ð+;½AÑ+>Ô+>€Aå"ØØÝ”Y×*Ò*¨4Ñ0Ô0Ø!ð	ñ ô €Jõ ØØØÝ”Y×*Ò*¨4Ñ0Ô0Ø!ðñ ô €Fð ×,Ò,­Z¸¿ºÀ¹¼ÈuÐ-UÑ-UÔ-UÑVÔV€MØ×$Ò$ Q§X¢X¨e¡_¤_Ñ5Ô5€IÝ˜jÔ9¸6Ô;RÑSÔSÐSÝ$ ]°I¸tÑDÔDÐDÐDÐDr8   c                  ó^  — d} g }dD ]‰}t          | |z   ¬¦  «                             t          ¦  «        }|                     t          d¬¦  «        }t	          ddd| ¬	¦  «                             |¦  «        j        }|                     |¦  «         ŒŠt          |d         |d
         ¦  «         d S )Nrf   )r   rf   )Ún_neighborsÚdistance)Úmoder   r+   Úprecomputed_nearest_neighbors)r)   rl   r_   rŸ   r=   )r   Úfitr—   Úkneighbors_graphr
   Ú
embedding_rH   r   )rŸ   ÚresultsÚadditional_neighborsÚnnÚgraphÚ	embeddings         r6   Ú,test_precomputed_nearest_neighbors_filteringr«   Ý   sÁ   € à€KØ€GØ 'ð "ð "ÐÝ¨+Ð8LÑ*LÐMÑMÔM×QÒQÕRSÑTÔTˆØ×#Ò#¥A¨JÐ#Ñ7Ô7ˆåØØØ8Ø'ð	ñ ô ÷ ŠS�‰ZŒZÜð 	ð 	�Š�yÑ!Ô!Ð!Ð!å�w˜q”z 7¨1¤:Ñ.Ô.Ð.Ð.Ð.r8   c                 ó  ‡— dŠt          t          ‰¬¦  «        }| €t          n | t          ¦  «        }t          dˆfd„‰t          j                             |¦  «        ¬¦  «        }t          dd‰t          j                             |¦  «        ¬¦  «        }|                     |¦  «        }|                     |¦  «        }t          |j        |j        ¦  «         t          ||j        ¦  «         t          ||d¦  «         d S )NgÍÌÌÌÌÌì?r•   r+   c                 ó&   •— t          | ‰¬¦  «        S )Nr•   r   )Úxr”   s    €r6   ú<lambda>z;test_spectral_embedding_callable_affinity.<locals>.<lambda>ü   s   ø€ �J q°Ð6Ñ6Ô6€ r8   )rl   r_   r”   r)   r“   r–   )
r   r—   r
   r.   rA   rB   r„   r   r˜   r7   )	r‘   r‰   Úkernr™   Úse_callablerš   rœ   Úembed_callabler”   s	           @r6   Ú)test_spectral_embedding_callable_affinityr³   ó   s
  ø€ ð €EÝ•a˜uÐ%Ñ%Ô%€DØÐ%�ˆÐ+;Ð+;½AÑ+>Ô+>€Aå#ØØ6Ð6Ð6Ð6ØÝ”Y×*Ò*¨4Ñ0Ô0ð	ñ ô €Kõ ØØØÝ”Y×*Ò*¨4Ñ0Ô0ð	ñ ô €Fð ×$Ò$ QÑ'Ô'€IØ ×.Ò.¨qÑ1Ô1€NÝ˜kÔ:¸FÔ<SÑTÔTÐTÝ˜d FÔ$;Ñ<Ô<Ð<Ý$ Y°ÀÑEÔEÐEÐEÐEr8   c           	      ó   — t          ddddt          j                             |¦  «        ¬¦  «        }t          ddddt          j                             |¦  «        ¬¦  «        }|                     t
                               | ¦  «        ¦  «        }|                     t
                               | ¦  «        ¦  «        }t          ||d¦  «         d S )Nr+   r“   r   çñhãˆµøä>©rl   r_   rk   Ú	eigen_tolr)   ru   r   )r
   r.   rA   rB   r„   r—   r…   r7   )rw   Úglobal_random_seedÚ	se_lobpcgÚ	se_arpackÚembed_lobpcgÚembed_arpacks         r6   Ú%test_spectral_embedding_lobpcg_solverr½     sÂ   € õ "ØØØØÝ”Y×*Ò*Ð+=Ñ>Ô>ðñ ô €Iõ "ØØØØÝ”Y×*Ò*Ð+=Ñ>Ô>ðñ ô €Ið ×*Ò*­1¯8ª8°E©?¬?Ñ;Ô;€LØ×*Ò*­1¯8ª8°E©?¬?Ñ;Ô;€LÝ$ \°<ÀÑFÔFÐFÐFÐFr8   c           	      ó¨  — t          ddddt          j                             |¦  «        ¬¦  «        }t          ddddt          j                             |¦  «        ¬¦  «        }|                     t
                               | ¦  «        ¦  «        }|                     t
                               | ¦  «        ¦  «        }t          ||d¦  «         t          j        g d¢t          j	        ¬	¦  «        }t          j        g d
¢t          j	        ¬	¦  «        }t          j        g d¢t          j
        ¬	¦  «        }	 |t          j        |	|	g¦  «        t          j        ||g¦  «        t          j        ||g¦  «        ffd¬¦  «        }
d|_        d|_        |                     |
                     | ¦  «        ¦  «        }|                     |
                     | ¦  «        ¦  «        }t          ||d¦  «         |
                     ¦   «         }
|
j                             t          j
        ¦  «        |
_        |
j                             t          j
        ¦  «        |
_        t           t#          d¦  «        k    }|r|                     |
¦  «         d S d}t%          j        t(          |¬¦  «        5  |                     |
¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nr+   r“   rj   rµ   r¶   ru   r   )r   r   r=   r+   é   r¿   é   r~   )r=   r+   r+   r¿   rÀ   rm   rm   )r$   r$   r$   r=   r$   r$   r$   )é   rÁ   ry   r|   z1.11.3z=Only sparse matrices with 32-bit integer indices are acceptedrh   )r
   r.   rA   rB   r„   r—   r…   r7   rL   Úint32r‡   Úhstackr_   ÚtocsrÚindptrÚindicesr   r   ro   ÚraisesÚ
ValueError)rw   r9   r‰   Úse_amgrº   Ú	embed_amgr¼   ÚrowÚcolÚvalr_   Ú*scipy_graph_traversal_supports_int64_indexÚerr_msgs                r6   Ú"test_spectral_embedding_amg_solverrÐ   &  sÒ  € õ ØØØØÝ”Y×*Ò*¨4Ñ0Ô0ðñ ô €Fõ "ØØØØÝ”Y×*Ò*¨4Ñ0Ô0ðñ ô €Ið ×$Ò$¥Q§X¢X¨e¡_¤_Ñ5Ô5€IØ×*Ò*­1¯8ª8°E©?¬?Ñ;Ô;€LÝ$ Y°¸dÑCÔCÐCõ
 Œ(Ð(Ð(Ð(µ´Ð
9Ñ
9Ô
9€CÝ
Œ(Ð(Ð(Ð(µ´Ð
9Ñ
9Ô
9€CÝ
Œ(Ð4Ð4Ð4½B¼HÐ
EÑ
EÔ
E€Càˆ}Ý	Œ�C˜�:Ñ	Ô	¥¤¨C°¨:Ñ!6Ô!6½¼	À3ÈÀ*Ñ8MÔ8MÐ NÐOØðñ ô €Hð $€F„OØ&€IÔØ×$Ò$ X§_¢_°UÑ%;Ô%;Ñ<Ô<€IØ×*Ò*¨8¯?ª?¸5Ñ+AÔ+AÑBÔB€LÝ$ Y°¸dÑCÔCÐCð
 �~Š~ÑÔ€HØ”o×,Ò,­R¬XÑ6Ô6€H„OØÔ'×.Ò.­r¬xÑ8Ô8€HÔõ 2<½}ÈXÑ?VÔ?VÒ1VÐ.Ø1ð +Ø×Ò˜XÑ&Ô&Ð&Ð&Ð&àQˆÝŒ]�:¨WÐ5Ñ5Ô5ð 	+ð 	+Ø× Ò  Ñ*Ô*Ð*ð	+ð 	+ð 	+ñ 	+ô 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+ð 	+øøøð 	+ð 	+ð 	+ð 	+ð 	+ð 	+s   Ê$KËKËKc                 óv  — d}t          ||fd|¬¦  «        }|                     | ¦  «        }t          j        |¦  «        t	          |                     ¦   «         ¦  «        z
  }||j        z   }t          |ddd¬¦  «        }t          d¦  «        D ]*}t          |dd|d	z   ¬¦  «        }t          ||d
¬¦  «         Œ+d S )Nr$   r?   )Údensityr)   rf   rj   r   )rl   rk   r)   r¿   r=   r–   )r2   )
r   r…   r   Útriur   Údiagonalr-   r   rF   r7   )	rw   r‰   Ú	num_nodesr™   ÚupperÚ
sym_matrixrª   rV   Únew_embeddings	            r6   Ú*test_spectral_embedding_amg_solver_failurerÙ   e  sÜ   € ð €IÝ˜i¨Ð3¸SÈtÐTÑTÔT€AØ	�Š�‰Œ€AÝŒK˜‰NŒNÕ0°·²±´Ñ>Ô>Ñ>€EØ˜œ‘€JÝ"Ø °%Àaðñ ô €Iõ
 �1‰XŒXð Mð MˆÝ*Ø R°eÈ!ÈaÉ%ð
ñ 
ô 
ˆõ 	)¨°MÀtÐLÑLÔLÐLÐLð	Mð Mr8   c                 ó–  — t           j                             | ¦  «        }t          t          dz
  d|¬¦  «        }t          t          dz
  dd|¬¦  «        }||fD ]o}t          t          |d¬¦  «        }|                     |                     t          ¦  «        ¦  «         t          t          |j        t          ¦  «        d	d
¦  «         Œpd S )Nr=   r“   )rl   r_   r)   Únearest_neighborsrm   )rl   r_   rŸ   r)   rf   )Ú
n_clustersr)   Ún_initr#   r+   )r.   rA   rB   r
   rÜ   r   r£   r„   r—   r   r   Úlabels_Útrue_labels)r‰   r)   rš   Úse_knnÚseÚkms         r6   Ú!test_pipeline_spectral_clusteringrã   |  sÜ   € õ ”9×(Ò(¨Ñ.Ô.€LÝÝ !‘^¨eÀ,ðñ ô €Fõ Ý !‘^Ø$ØØ!ð	ñ ô €Fð �vÐð 
ð 
ˆÝ�z¸ÈRÐPÑPÔPˆØ
�Šˆr×Ò¥Ñ"Ô"Ñ#Ô#Ð#Ý!Ý(¨¬µ[ÑAÔAÀ3Èñ	
ô 	
ð 	
ð 	
ð
ð 
r8   c                 óö  — t          j        g d¢g d¢g d¢g d¢g d¢g¦  «        }t          |¦  «        rJ ‚t          D ]}t           ||¦  «        ¦  «        rJ ‚Œt          D ]}t           ||¦  «        ¦  «        rJ ‚Œt          j        g d¢g d¢g d¢g d¢g d¢g¦  «        }t          |¦  «        sJ ‚t          D ]}t           ||¦  «        ¦  «        sJ ‚Œt          D ]}t           ||¦  «        ¦  «        sJ ‚Œd S )N)r=   r   r   r   r   )r   r=   r=   r   r   )r   r=   r=   r=   r   )r   r   r=   r=   r=   )r   r   r   r=   r=   )r=   r=   r   r   r   )r=   r=   r=   r   r   )r.   rL   r   r   r   )r‰   r©   Úcsr_containerÚcsc_containers       r6   Útest_connectivityrç   ”  sj  € åŒHàˆOˆOØˆOˆOØˆOˆOØˆOˆOØˆOˆOð	
ñô €Eõ # 5Ñ)Ô)Ð)Ð)Ð)Ý'ð =ð =ˆÝ& } }°UÑ';Ô';Ñ<Ô<Ð<Ð<Ð<Ð<Ý'ð =ð =ˆÝ& } }°UÑ';Ô';Ñ<Ô<Ð<Ð<Ð<Ð<åŒHàˆOˆOØˆOˆOØˆOˆOØˆOˆOØˆOˆOð	
ñô €Eõ ˜uÑ%Ô%Ð%Ð%Ð%Ý'ð 9ð 9ˆÝ" = =°Ñ#7Ô#7Ñ8Ô8Ð8Ð8Ð8Ð8Ý'ð 9ð 9ˆÝ" = =°Ñ#7Ô#7Ñ8Ô8Ð8Ð8Ð8Ð8ð9ð 9r8   c                  óê   — t           j                             d¦  «        } |                      dd¦  «        }t	          |¦  «        }t          |¦  «        }t          |¦  «        }t          ||¦  «         d S )Nre   rf   rg   )r.   rA   rB   rn   r   r   r   )r)   r^   rr   Úembedding_1Úembedding_2s        r6   Ú%test_spectral_embedding_deterministicrë   µ  si   € å”9×(Ò(¨Ñ,Ô,€LØ×Ò˜b "Ñ%Ô%€DÝ�dÑÔ€DÝ$ TÑ*Ô*€KÝ$ TÑ*Ô*€KÝ˜k¨;Ñ7Ô7Ð7Ð7Ð7r8   c                  ól  — t           j                             d¦  «        } |                      dd¦  «        }t	          |¦  «        }d}t          |d|d¬¦  «        }t          |dd¬¦  «        \  }}t          |¦  «        \  }}|j        d |…         }	t          |	¦  «        j        }	t          ||	¦  «         d S )	Nre   rf   rg   é   F)Únorm_laplacianrl   Ú
drop_firstT)ÚnormedÚreturn_diag)r.   rA   rB   rn   r   r   Úcsgraph_laplacianr   r-   r   r   )
r)   r^   rr   rl   ré   r   Úddrs   Údiffusion_maprê   s
             r6   Ú$test_spectral_embedding_unnormalizedrõ   ¿  s½   € õ ”9×(Ò(¨Ñ,Ô,€LØ×Ò˜b "Ñ%Ô%€DÝ�dÑÔ€DØ€LÝ$Ø˜U°È%ðñ ô €Kõ
 & d°5ÀdÐKÑKÔK�M€IˆrÝ˜I‘”Ñ€A€}Ø”/ - < -Ô0€KÝ1°+Ñ>Ô>Ô@€Kå˜k¨;Ñ7Ô7Ð7Ð7Ð7r8   c                  ó’  — t           j                             d¦  «        } |                      dd¦  «        }t	          |¦  «        }d}t          d¦  «        D ]p}t          |d|d|¬¦  «        }t          j        |d d …df         ¦  «        t          j	        d¦  «        k    sJ ‚t          j        |d d …df         ¦  «        d	k    sJ ‚Œqd S )
Nre   rf   rg   r+   F)rî   rl   rï   r)   r   r=   gü©ñÒMbP?)
r.   rA   rB   rn   r   rF   r   Ústdro   rˆ   )r)   r^   rr   rl   r‰   rª   s         r6   Ú*test_spectral_embedding_first_eigen_vectorrø   Ó  sß   € õ ”9×(Ò(¨Ñ,Ô,€LØ×Ò˜b "Ñ%Ô%€DÝ�dÑÔ€DØ€Lå�b‘	”	ð 
.ð 
.ˆÝ&ØØ Ø%ØØð
ñ 
ô 
ˆ	õ Œv�i    1 ”oÑ&Ô&­&¬-¸Ñ*:Ô*:Ò:Ð:Ð:Ð:ÝŒv�i    1 ”oÑ&Ô&¨Ò-Ð-Ð-Ð-Ð-ð
.ð 
.r8   c                 óì   — t                                |¦  «        }t          dd| d¬¦  «        }|                     |¦  «        }|j        |k    sJ ‚|j        j        |k    sJ ‚|j        j        |k    sJ ‚dS )a\  Check that `SpectralEmbedding is preserving the dtype of the fitted
    attribute and transformed data.

    Ideally, this test should be covered by the common test
    `check_transformer_preserve_dtypes`. However, this test only run
    with transformers implementing `transform` while `SpectralEmbedding`
    implements only `fit_transform`.
    r+   r“   r   )rl   r_   rk   r)   N)r—   r…   r
   r„   rw   r¥   r˜   )rk   rw   r™   rá   ÚX_transs        r6   Ú'test_spectral_embedding_preserves_dtyperû   è  sŒ   € õ$ 	
�Š�‰Œ€AÝ	Ø °\ÐPQð
ñ 
ô 
€Bð ×Ò˜qÑ!Ô!€GàŒ=˜EÒ!Ð!Ð!Ð!ØŒ=Ô %Ò'Ð'Ð'Ð'ØÔÔ$¨Ò-Ð-Ð-Ð-Ð-Ð-r8   z7PyAMG is installed and we should not test for an error.c                  óÊ   — t          ddd¬¦  «        } d}t          j        t          |¬¦  «        5  |                      t
          ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nr+   r“   rj   )rl   r_   rk   z>The eigen_solver was set to 'amg', but pyamg is not available.rh   )r
   ro   rÇ   rÈ   r„   r—   )r�   rÏ   s     r6   Útest_error_pyamg_not_availablerý     s¶   € õ
 #ØØØðñ ô €Jð
 O€GÝ	Œ•z¨Ð	1Ñ	1Ô	1ð $ð $Ø× Ò ¥Ñ#Ô#Ð#ð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $ð $ð $s   °AÁAÁAÚsolver)ru   rj   r   rå   c                 ó
  — |dk    rt           st          j        d¦  «         t          ddddgddggd¬¦  «        \  }}t	          |¦  «        }t          j        |¦  «        |z
  }|d	k    rt          nt          }|d	k    rdnd
}|dk    r ||¦  «        }t          |¬¦  «        }	|  
                    t          |j        |	¦  «         t          |d|d¬¦  «         |	                     ¦   «          |	j        \  }}
|
d         |k    sJ ‚d
S )z2Test that `eigen_tol="auto"` is resolved correctlyrj   zPyAMG is not available.r<   r   r=   r{   g{®Gáz„?)r&   r)   r'   r(   ru   N)Úside_effectr%   Úauto)r)   rk   r·   r2   )Úpyamg_availablero   Úskipr	   r   r.   r/   r   r   r   Úsetattrr   Ú__qualname__r   Úassert_calledÚ	call_args)Úmonkeypatchrþ   rå   r™   rs   ÚDr—   Úsolver_funcÚdefault_valueÚmocked_solverÚkwargss              r6   Útest_spectral_eigen_tol_autor    s*  € ð �‚€�€ÝŒÐ-Ñ.Ô.Ð.ÝØ A°°A°¸¸R¸Ð/AÈtðñ ô �D€A€qõ 	˜1ÑÔ€AÝ
Œˆq‰	Œ	�A‰€Aà! XÒ-Ð-•%�%µ6€KØ 8Ò+Ð+�A�A°€MØ�‚€ØˆM˜!ÑÔˆå [Ð1Ñ1Ô1€Mà×ÒÕ+¨[Ô-EÀ}ÑUÔUÐUå�q r¸È&ÐQÑQÔQÐQØ×ÒÑ!Ô!Ð!àÔ'�I€A€vØ�%Œ=˜MÒ)Ð)Ð)Ð)Ð)Ð)r8   )r!   )r   )re   )SrD   Úunittest.mockr   Únumpyr.   ro   Úscipyr   Úscipy.linalgr   Úscipy.sparse.linalgr   r   Úsklearn.clusterr   Úsklearn.datasetsr	   Úsklearn.manifoldr
   r   r   Ú$sklearn.manifold._spectral_embeddingr   r   Úsklearn.metricsr   r   Úsklearn.metrics.pairwiser   Úsklearn.neighborsr   Úsklearn.utils._testingr   r   Úsklearn.utils.extmathr   Úsklearn.utils.fixesr   r   r   r   r   r   r   r   rò   Úpyamgr   r  ÚImportErrorÚmarkÚskipifÚskip_if_no_pyamgrL   r'   r&   rz   rÜ   Ú
n_featuresr—   rß   r7   Úparametrizerc   rt   ÚparamÚfloat32Úfloat64r�   r�   r«   r³   r½   rÐ   rÙ   rã   rç   rë   rõ   rø   rû   rý   r  © r8   r6   ú<module>r)     s*  ðØ Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -à "Ð "Ð "Ð "Ð "Ð "Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ WÐ Wðð ð ð ð ð ð ð ð MÐ LÐ LÐ LÐ LÐ LÐ LÐ LØ /Ð /Ð /Ð /Ð /Ð /Ø .Ð .Ð .Ð .Ð .Ð .Ø PÐ PÐ PÐ PÐ PÐ PÐ PÐ PØ AÐ AÐ AÐ AÐ AÐ Aðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ?Ð >Ð >Ð >Ð >Ð >ðØ1Ð1Ð1Ð1Ð1Ð1à€O€OøØð ð ð Ø€O€O€Oðøøøà”;×%Ò%ØÐÐ Sð &ñ ô Ð ð
 ˆ"Œ(à!Ð!Ð!Ø!Ð!Ð!Ø!Ð!Ð!ðñô €ð €	Ø œÑ €
ˆJØ�Ø °cÈðñ ô �€€;ð

ð 
ð 
ð 
ð „×Ò˜¨.Ñ9Ô9ð$5ð $5ñ :Ô9ð$5ðN „×ÒØÐÐ Sð ñ ô ðIð Iñô ðIð( „×ÒØàØØˆŒ�UÐ"2Ð3Ñ3Ô3ðñô ð „×Ò˜ 2¤:¨r¬zÐ":Ñ;Ô;ð)Rð )Rð )Rñ <Ô;ñô ð)RðX „×ÒÐ+¨dÐ-D°^Ð-DÑEÔEØ„×ÒØàØØˆŒ�UÐ"2Ð3Ñ3Ô3ðñô ð „×Ò˜ 2¤:¨r¬zÐ":Ñ;Ô;à02ðEð Eð Eñ <Ô;ñô ñ FÔEðEð4/ð /ð /ð, „×ÒÐ+¨dÐ-D°^Ð-DÑEÔEðFð Fð Fñ FÔEðFð2 „×Ò˜ 2¤:¨r¬zÐ":Ñ;Ô;ðGð Gñ <Ô;ðGð0 „×ÒØÐÐ Sð ñ ô ð „×Ò˜ 2¤:¨r¬zÐ":Ñ;Ô;Ø„×Ò˜¨.Ñ9Ô9ð7+ð 7+ð 7+ñ :Ô9ñ <Ô;ñô ð
7+ðt „×ÒØÐÐ Sð ñ ô ð „×Ò˜ 2¤:¨r¬zÐ":Ñ;Ô;ðMð Mð Mñ <Ô;ñô ðMð&
ð 
ð 
ð 
ð09ð 9ð 9ð 9ðB8ð 8ð 8ð8ð 8ð 8ð(.ð .ð .ð* „×ÒØàØØˆŒ�UÐ"2Ð3Ñ3Ô3ðñô ð „×Ò˜ 2¤:¨r¬zÐ":Ñ;Ô;ð.ð .ñ <Ô;ñô ð.ð( „×ÒØØDð ñ ô ð$ð $ñ	ô ð$ð „×Ò˜Ð#>Ð#>Ð#>Ñ?Ô?Ø„×Ò˜¨.Ñ9Ô9ð*ð *ñ :Ô9ñ @Ô?ð*ð *ð *s   Â B	 Â	BÂB