§
    ¨éUgÆK  ã            
       ó 
  — 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( d dl#m)Z* 	 d dl+m,Z, dZ-n# e.$ r dZ-Y nw xY wej/         0                    e- d¬¦  «        Z1 ej2        g d¢g d¢g d¢g¦  «        Z3dZ4e3j5        \  Z6Z7 ee4e3dd¬¦  «        \  Z8Z9d@d„Z:ej/         ;                    de$¦  «        d „ ¦   «         Z<ej/         ;                    d!d"d# ej=        d$e1¬%¦  «        g¦  «        ej/         ;                    d&ej>        ej?        g¦  «        dAd'„¦   «         ¦   «         Z@ej/         ;                    d(dge&¢¦  «        ej/         ;                    d!d"d# ej=        d$e1¬%¦  «        g¦  «        ej/         ;                    d&ej>        ej?        f¦  «        	 dBd*„¦   «         ¦   «         ¦   «         ZAd+„ ZBej/         ;                    d(dge&¢¦  «        dBd,„¦   «         ZCej/         D                    d-¦  «        ej/         D                    d.¦  «        ej/         D                    d/¦  «        ej/         D                    d0¦  «        ej/         0                    e- d¬¦  «        ej/         ;                    d&ej>        ej?        f¦  «        ej/         ;                    de$¦  «        dBd1„¦   «         ¦   «         ¦   «         ¦   «         ¦   «         ¦   «         ¦   «         ZEej/         D                    d-¦  «        ej/         D                    d.¦  «        ej/         D                    d/¦  «        ej/         0                    e- d¬¦  «        ej/         D                    d0¦  «        ej/         ;                    d&ej>        ej?        f¦  «        dBd2„¦   «         ¦   «         ¦   «         ¦   «         ¦   «         ¦   «         ZFej/         D                    d3¦  «        dBd4„¦   «         ZGdBd5„ZHd6„ ZId7„ ZJd8„ ZKej/         ;                    d!d"d# ej=        d$e1¬%¦  «        g¦  «        ej/         ;                    d&ej>        ej?        g¦  «        d9„ ¦   «         ¦   «         ZLej/         0                    e-d:¬¦  «        d;„ ¦   «         ZMej/         D                    d0¦  «        ej/         ;                    d<g d=¢¦  «        ej/         ;                    d>e&¦  «        d?„ ¦   «         ¦   «         ¦   «         ZNdS )Cé    )ÚMockN)Ú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Ú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!   éè  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 )zMCheck array A and B are equal with possible sign flipping on
    each columnsé   N)ÚzipÚTÚnpÚmax)ÚAÚBÚtolÚtol_squaredÚA_colÚB_cols         úm/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/sklearn/manifold/tests/test_spectral_embedding.pyÚ _assert_equal_with_sign_flippingr5   7   sy   € ð �q‘&€KÝ˜AœC ¤™œð 
ð 
‰ˆˆuåŒF�E˜E‘M aÑ'Ñ(Ô(¨KÒ7Ð7ÝŒv�u˜u‘}¨Ñ*Ñ+Ô+¨{Ò:Ð:Ð:Ð:øð
ð 
ó    Úcoo_containerc                 ón  — t           j                             d¦  «        }d}dddd|g}|                     |¦  «        }g }t	          |d d…         |dd …         ¦  «        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	          |d d…         |dd …         ¦  «        D ]}\  }}t          |||         ¦  «        }||z
  }|                     ¦   «         |k    sJ ‚t          |||dz
           ¦  «        }|                     ¦   «         |k    sJ ‚t!          ||¦  «         Œ~d S )Nr#   i,  r   éy   éÈ   éÿÿÿÿé   r"   )Úsizeçš™™™™™¹?ç      à?)r,   ÚrandomÚRandomStateÚpermutationr*   ÚrangeÚlenÚappendÚrandintÚextendÚtupleÚarrayr+   Úuniformr   Úsumr   )r7   Ú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                         r4   Ú%test_sparse_graph_connected_componentr`   B   sZ  € å
Œ)×
Ò
 Ñ
#Ô
#€CØ€IØ�R˜˜c 9Ð-€JØ�Š˜	Ñ"Ô"€AØ€Kå˜: c r cœ?¨J°q°r°r¬NÑ;Ô;ð >ð >‰ˆˆ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å˜: c r cœ?¨J°q°r°r¬NÑ;Ô;ð 	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ð 	5r6   Úeigen_solverÚarpackr   Úamg)Ú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 )Néd   r)   ©Úshaper   r;   r<   r?   Úprecomputed©Ún_componentsr\   r'   ra   ©re   r!   )r,   r@   rA   ÚzerosÚabsÚrandnr   ÚallÚanyÚflatr+   r
   Úfit_transformÚastyperI   ÚravelÚint64r   ÚpytestÚapprox)ra   re   Úseedr'   Ún_sampler\   Ú	componentÚ
true_labelÚ
se_precompÚembedded_coordinateÚlabel_s              r4   Ú&test_spectral_embedding_two_componentsr�   n   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ÐQr6   Úsparse_containeré$   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)   rj   rk   Úrbf)rl   r\   Úgammar'   ra   ©r†   çš™™™™™©?)ÚSr
   r,   r@   rA   rt   r   ru   r   Úaffinity_matrix_r5   )
r‚   ra   re   rz   r†   ÚXr~   Úse_rbfÚembed_precompÚ	embed_rbfs
             r4   Ú,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ÐDr6   c                  ó^  — d} g }dD ]‰}t          | |z   ¬¦  «                             t          ¦  «        }|                     t          d¬¦  «        }t	          ddd| ¬¦  «                             |¦  «        j        }|                     |¦  «         ŒŠt          |d         |d	         ¦  «         d S )
Nr)   )r   é
   )Ún_neighborsÚconnectivity)Úmoder   Úprecomputed_nearest_neighbors)r'   rl   r\   r’   r<   )r   Úfitr‰   Úkneighbors_graphr
   Ú
embedding_rE   r   )r’   ÚresultsÚadditional_neighborsÚnnÚgraphÚ	embeddings         r4   Ú,test_precomputed_nearest_neighbors_filteringrž   Ç   sÁ   € à€KØ€GØ 'ð "ð "ÐÝ¨+Ð8LÑ*LÐMÑMÔM×QÒQÕRSÑTÔTˆØ×#Ò#¥A¨NÐ#Ñ;Ô;ˆåØØØ8Ø'ð	ñ ô ÷ ŠS�‰ZŒZÜð 	ð 	�Š�yÑ!Ô!Ð!Ð!å�w˜q”z 7¨1¤:Ñ.Ô.Ð.Ð.Ð.r6   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    €r4   ú<lambda>z;test_spectral_embedding_callable_affinity.<locals>.<lambda>æ   s   ø€ �J q°Ð6Ñ6Ô6€ r6   )rl   r\   r†   r'   r…   rˆ   )
r   r‰   r
   r,   r@   rA   rt   r   rŠ   r5   )	r‚   rz   Úkernr‹   Úse_callablerŒ   rŽ   Úembed_callabler†   s	           @r4   Ú)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ÐEr6   z:ignore:scipy.rand is deprecated:DeprecationWarning:pyamg.*zBignore:`np.float` is a deprecated alias:DeprecationWarning:pyamg.*zBignore:scipy.linalg.pinv2 is deprecated:DeprecationWarning:pyamg.*zCignore:np.find_common_type is deprecated:DeprecationWarning:pyamg.*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)   Únearest_neighborsrc   é   )rl   r\   ra   r’   r'   rb   gñhãˆµøä>)r   r   r<   r)   é   rª   é   rm   )r<   r)   r)   rª   r«   r©   r©   )rg   rg   rg   r<   rg   rg   rg   )é   r¬   rh   rj   z1.11.3z=Only sparse matrices with 32-bit integer indices are accepted©Úmatch)r
   r,   r@   rA   rt   r‰   ru   r5   rI   Úint32rw   Úhstackr\   ÚtocsrÚindptrÚindicesr   r   rx   ÚraisesÚ
ValueError)re   r7   rz   Úse_amgÚ	se_arpackÚ	embed_amgÚembed_arpackÚrowÚcolÚvalr\   Ú*scipy_graph_traversal_supports_int64_indexÚerr_msgs                r4   Ú"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                 óˆ  — d}t          j        ||d|¬¦  «        }|                     | ¦  «        }t          j        |¦  «        t          j        |                     ¦   «         ¦  «        z
  }||j        z   }t          |ddd¬¦  «        }t          d¦  «        D ]*}t          |dd|d	z   ¬¦  «        }t          ||d
¬¦  «         Œ+d S )Nrg   r>   )Údensityr'   r‘   rc   r   )rl   ra   r'   rª   r<   rˆ   )r0   )
r   Úrandru   ÚtriuÚdiagsÚdiagonalr+   r   rC   r5   )	re   rz   Ú	num_nodesr‹   ÚupperÚ
sym_matrixr�   rS   Únew_embeddings	            r4   Ú*test_spectral_embedding_amg_solver_failurerÊ   E  sÜ   € ð* €IÝŒ�I˜y°#ÀDÐIÑIÔI€AØ	�Š�‰Œ€AÝŒK˜‰NŒN�Vœ\¨!¯*ª*©,¬,Ñ7Ô7Ñ7€EØ˜œ‘€JÝ"Ø °%Àaðñ ô €Iõ
 �1‰XŒXð Mð MˆÝ*Ø R°eÈ!ÈaÉ%ð
ñ 
ô 
ˆõ 	)¨°MÀtÐLÑLÔLÐLÐLð	Mð Mr6   z6ignore:the behavior of nmi will change in version 0.22c                 óŠ  — t           j                             | ¦  «        }t          t          d|¬¦  «        }t          t          dd|¬¦  «        }||fD ]o}t          t          |d¬¦  «        }|                     |                     t          ¦  «        ¦  «         t          t          |j        t          ¦  «        dd	¦  «         Œpd S )
Nr…   )rl   r\   r'   r¨   r©   )rl   r\   r’   r'   r‘   )Ú
n_clustersr'   Ún_initr!   r)   )r,   r@   rA   r
   rÌ   r   r–   rt   r‰   r   r   Úlabels_Útrue_labels)rz   r'   rŒ   Úse_knnÚseÚkms         r4   Ú!test_pipeline_spectral_clusteringrÓ   k  sÔ   € õ ”9×(Ò(¨Ñ.Ô.€LÝÝ¨%¸lðñ ô €Fõ ÝØ$ØØ!ð	ñ ô €Fð �vÐð 
ð 
ˆÝ�z¸ÈRÐPÑPÔPˆØ
�Šˆr×Ò¥Ñ"Ô"Ñ#Ô#Ð#Ý!Ý(¨¬µ[ÑAÔAÀ3Èñ	
ô 	
ð 	
ð 	
ð
ð 
r6   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,   rI   r   r   r   )rz   rœ   Úcsr_containerÚcsc_containers       r4   Ú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ð 9r6   c                  óê   — t           j                             d¦  «        } |                      dd¦  «        }t	          |¦  «        }t          |¦  «        }t          |¦  «        }t          ||¦  «         d S )Nrƒ   r‘   é   )r,   r@   rA   rp   r   r   r   )r'   r[   ÚsimsÚembedding_1Úembedding_2s        r4   Ú%test_spectral_embedding_deterministicrÝ   ¡  si   € å”9×(Ò(¨Ñ,Ô,€LØ×Ò˜b "Ñ%Ô%€DÝ�dÑÔ€DÝ$ TÑ*Ô*€KÝ$ TÑ*Ô*€KÝ˜k¨;Ñ7Ô7Ð7Ð7Ð7r6   c                  ól  — t           j                             d¦  «        } |                      dd¦  «        }t	          |¦  «        }d}t          |d|d¬¦  «        }t          |dd¬¦  «        \  }}t          |¦  «        \  }}|j        d |…         }	t          |	¦  «        j        }	t          ||	¦  «         d S )	Nrƒ   r‘   rÙ   é   F)Únorm_laplacianrl   Ú
drop_firstT)ÚnormedÚreturn_diag)r,   r@   rA   rp   r   r   Úcsgraph_laplacianr   r+   r   r   )
r'   r[   rÚ   rl   rÛ   r   ÚddÚ_Údiffusion_maprÜ   s
             r4   Ú$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Ð7r6   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 )
Nrƒ   r‘   rÙ   r)   F)rà   rl   rá   r'   r   r<   gü©ñÒMbP?)
r,   r@   rA   rp   r   rC   r   Ústdrx   ry   )r'   r[   rÚ   rl   rz   r�   s         r4   Ú*test_spectral_embedding_first_eigen_vectorrë   ¿  sß   € õ ”9×(Ò(¨Ñ,Ô,€LØ×Ò˜b "Ñ%Ô%€DÝ�dÑÔ€DØ€Lå�b‘	”	ð 
.ð 
.ˆÝ&ØØ Ø%ØØð
ñ 
ô 
ˆ	õ Œv�i    1 ”oÑ&Ô&­&¬-¸Ñ*:Ô*:Ò:Ð:Ð:Ð:ÝŒv�i    1 ”oÑ&Ô&¨Ò-Ð-Ð-Ð-Ð-ð
.ð 
.r6   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\   ra   r'   N)r‰   ru   r
   rt   re   r˜   rŠ   )ra   re   r‹   rÑ   ÚX_transs        r4   Ú'test_spectral_embedding_preserves_dtyperî   Ô  sŒ   € õ$ 	
�Š�‰Œ€AÝ	Ø °\ÐPQð
ñ 
ô 
€Bð ×Ò˜qÑ!Ô!€GàŒ=˜EÒ!Ð!Ð!Ð!ØŒ=Ô %Ò'Ð'Ð'Ð'ØÔÔ$¨Ò-Ð-Ð-Ð-Ð-Ð-r6   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…   rc   )rl   r\   ra   z>The eigen_solver was set to 'amg', but pyamg is not available.r­   )r
   rx   r´   rµ   rt   r‰   )r~   r¾   s     r4   Útest_error_pyamg_not_availablerð   ñ  s¶   € õ
 #ØØØðñ ô €Jð
 O€GÝ	Œ•z¨Ð	1Ñ	1Ô	1ð $ð $Ø× Ò ¥Ñ#Ô#Ð#ð$ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $ð $ð $s   °AÁAÁAÚsolver)rb   rc   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 correctlyrc   zPyAMG is not available.r:   r   r<   r;   g{®Gáz„?)r$   r'   r%   r&   rb   N)Úside_effectr#   Úauto)r'   ra   Ú	eigen_tolr0   )Úpyamg_availablerx   Úskipr	   r   r,   r-   r   r   r   Úsetattrr   Ú__qualname__r   Úassert_calledÚ	call_args)Úmonkeypatchrñ   rÕ   r‹   ræ   ÚDr‰   Úsolver_funcÚdefault_valueÚmocked_solverÚkwargss              r4   Ú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Ò)Ð)Ð)Ð)Ð)Ð)r6   )r   )r   )rƒ   )OÚunittest.mockr   Únumpyr,   rx   Ú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ä   Úpyamgr   rö   ÚImportErrorÚmarkÚskipifÚskip_if_no_pyamgrI   r%   r$   ri   rÌ   Ú
n_featuresr‰   rÏ   r5   Úparametrizer`   ÚparamÚfloat32Úfloat64r�   r�   rž   r¦   Úfilterwarningsr¿   rÊ   rÓ   r×   rÝ   rè   rë   rî   rð   r  © r6   r4   ú<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ðV „×ÒØàØØˆŒ�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ð6 „×ÒØ@ñô ð „×ÒØHñô ð „×ÒØHñô ð „×ÒØIñô ð „×ÒØÐÐ Sð ñ ô ð „×Ò˜ 2¤:¨r¬zÐ":Ñ;Ô;Ø„×Ò˜¨.Ñ9Ô9ð3+ð 3+ð 3+ñ :Ô9ñ <Ô;ñô ñô ñô ñ	ô ñ	ô ð&3+ðr „×ÒØ@ñô ð „×ÒØHñô ð „×ÒØHñô ð „×ÒØÐÐ Sð ñ ô ð „×ÒØIñô ð „×Ò˜ 2¤:¨r¬zÐ":Ñ;Ô;ðMð Mð Mñ <Ô;ñô ñ	ô ñô ñ	ô ñ	ô ð&Mð& „×ÒÐTÑUÔUð
ð 
ð 
ñ VÔUð
ð(9ð 9ð 9ð 9ðB8ð 8ð 8ð8ð 8ð 8ð(.ð .ð .ð* „×ÒØàØØˆŒ�UÐ"2Ð3Ñ3Ô3ðñô ð „×Ò˜ 2¤:¨r¬zÐ":Ñ;Ô;ð.ð .ñ <Ô;ñô ð.ð( „×ÒØØDð ñ ô ð$ð $ñ	ô ð$ð „×ÒØIñô ð „×Ò˜Ð#>Ð#>Ð#>Ñ?Ô?Ø„×Ò˜¨.Ñ9Ô9ð*ð *ñ :Ô9ñ @Ô?ñô ð
*ð *ð *s   Á8B ÂBÂ
B