Ë
    8Ò^j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Z0ejd                  jg                  e0 d¬«      Z4 ejj                  g d¢g d¢g d¢g«      Z6dZ7e6jp                  \  Z9Z: ee7e6dd¬«      \  Z;Z<d;d„Z=ejd                  j}                  de%«      d„ «       Z?ejd                  jg                  e0 d¬«      d „ «       Z@ejd                  j}                  d!d"d# ej‚                  d$e4¬%«      g«      ejd                  j}                  d&ej„                  ej†                  g«      d<d'„«       «       ZDejd                  j}                  d(dge'¢«      ejd                  j}                  d!d"d# ej‚                  d$e4¬%«      g«      ejd                  j}                  d&ej„                  ej†                  f«      	 d=d)„«       «       «       ZEd*„ ZFejd                  j}                  d(dge'¢«      d=d+„«       ZGejd                  j}                  d&ej„                  ej†                  f«      d,„ «       ZHejd                  jg                  e0 d¬«      ejd                  j}                  d&ej„                  ej†                  f«      ejd                  j}                  de%«      d=d-„«       «       «       ZIejd                  jg                  e0 d¬«      ejd                  j}                  d&ej„                  ej†                  f«      d=d.„«       «       ZJd=d/„ZKd=d0„ZLd1„ ZMd2„ ZNd3„ ZOejd                  j}                  d!d"d# ej‚                  d$e4¬%«      g«      ejd                  j}                  d&ej„                  ej†                  g«      d4„ «       «       ZPejd                  jg                  e0d5¬«      d6„ «       ZQejd                  j}                  d7g d8¢«      ejd                  j}                  d9e'«      d:„ «       «       ZRy# e1$ r dZ0Y �ŒÂw xY w)>é    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_statec                 óÜ   — |dz  }t        | j                  |j                  «      D ]D  \  }}t        j                  ||z
  dz  «      |k  rŒ%t        j                  ||z   dz  «      |k  rŒDJ ‚ y)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         úy/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/sklearn/manifold/tests/test_spectral_embedding.pyÚ _assert_equal_with_sign_flippingr7   :   sl   € ð �q‘&€KÜ˜AŸC™C §¡›ò 
‰ˆˆuä�F‰F�E˜E‘M aÑ'Ó(¨KÓ7Ü�v‰v�u˜u‘}¨Ñ*Ó+¨{Ó:ð	
ð;ñ
ó    Úcoo_containerc                 ó¢  — t         j                  j                  d«      }d}dddd|g}|j                  |«      }g }t	        j
                  |«      D ]�  \  }}||| }t        t        |«      dz
  «      D ]  }	|j                  ||	   ||	dz      f«       Œ  dt        |«      dz
  }}
d}|j                  |
||¬«      }|j                  |
||¬«      }|j                  t        ||   ||   «      «       ŒŸ t        t        j                  |«      j                  «      \  }}|j                  d	dt        |«      ¬«      } | |||ff«      }d
||j                  z   z  }t	        j
                  |«      D ]a  \  }}t!        |||   «      }||z
  }|j#                  «       |k(  sJ ‚t!        |||dz
     «      }|j#                  «       |k(  sJ ‚t%        ||«       Œc y )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ò >‰ˆˆtØ�%˜�ˆô ”s˜5“z A‘~Ó&ò 	9ˆAØ×Ñ  a¡¨%°°A±©,Ð7Õ8ð	9ð œc %›j¨1™n�ˆØ#ÐØ—‘˜W gÐ4H�ÓIˆØ—‘˜W gÐ4H�ÓIˆØ×Ñœ3˜u V™}¨e°F©mÓ<Õ=ð>ô  ¤§¡¨Ó 5× 7Ñ 7Ó8Ñ€GˆZØ�;‰;�s˜B¤S¨Ó%5ˆ;Ó6€DÙ˜d W¨jÐ$9Ð:Ó;€HØ�h §¡Ñ+Ñ,€Hä ×)Ñ)¨*Ó5ò 	5‰ˆˆtÜ0°¸1¸U¹8ÓDˆØ ™ˆØ�‰Ó  NÒ2Ð2Ð2ô 1°¸1¸TÀA¹X¹;ÓGˆØ�‰Ó  NÒ2Ð2Ð2Ü˜;¨Õ4ñ	5r8   c                  ót  — t         j                  j                  d«      } | j                  dd«      }t	        |«      }t        j                  t        d¬«      5  t        |dd¬«      }d d d «       t        j                  t        d	¬«      5  t        |dd
¬«      }d d d «       y # 1 sw Y   Œ<xY w# 1 sw Y   y xY w)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   s©   € ô —9‘9×(Ñ(¨Ó,€LØ×Ñ˜b "Ó%€DÜ�dÓ€Dô 
�‰”nÐ,<Ô	=ñ IÜ˜t°%ÀaÔHˆ÷Iô
 
�‰”n¨NÔ	;ñ IÜ˜t°%ÀaÔHˆ÷Ið I÷Ið Iú÷
Ið Iús   ÁB"Â
B.Â"B+Â.B7rk   Úarpackr   rj   )ÚmarksÚdtypec                 ó"  — t         j                  j                  |«      }d}t        j                  |dz  |dz  g¬«      }t        j                  |j                  ||«      «      dz   |d|…d|…f<   t        j                  |j                  ||«      «      dz   ||d …|d …f<   t        |d«      }|d | j                  «       sJ ‚||d  j                  «       rJ ‚t        |d«      }|d | j                  «       rJ ‚||d  j                  «       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                  j                  |«      | ¬	«      }|j                  |j                  |«      «      }	t        j                  |	j                  «       dk  t         j                   ¬
«      }
t#        ||
«      t%        j&                  d«      k(  sJ ‚y )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�   „   s  € ô —9‘9×(Ñ(¨Ó.€LØ€HÜ�x‰x˜x¨!™|¨X¸©\Ð:Ô;€Hô 	�‰ˆ|×!Ñ! (¨HÓ5Ó6¸Ñ:ð ˆQˆxˆZ˜˜8˜Ð#Ñ$ô
 	�‰ˆ|×!Ñ! (¨HÓ5Ó6¸Ñ:ð ˆX‰Z˜™Ð#Ñ$ô
 +¨8°QÓ7€IØ�Y�hÐ×#Ñ#Ô%Ð%Ð%Ø˜˜Ð#×'Ñ'Ô)Ð)Ð)Ü*¨8°RÓ8€IØ˜˜(Ð#×'Ñ'Ô)Ð)Ð)Ø�X�YÐ×#Ñ#Ô%Ð%Ð%ð !"€HˆQ�˜1‘ˆ_ÑØ !€HˆX˜‰\˜1ˆ_ÑØ)*€H‡M�MÑ%�Q˜‘\ AÑ%Ð%Ñ&Ø�h §¡Ñ+Ñ,€Hä—‘  H¡Ô-€JØ€Jˆq�Ðä"ØØÜ—Y‘Y×*Ñ*¨4Ó0Ø!ô	€Jð %×2Ñ2°8·?±?À5Ó3IÓJÐä�X‰XÐ)×/Ñ/Ó1°AÑ5¼R¿X¹XÔF€FÜ'¨
°FÓ;¼v¿}¹}ÈSÓ?QÒQÐQÑQr8   Úsparse_containerc                 óÒ  — d}| €t         n | t         «      }t        ddt        j                  j	                  |«      |¬«      }t        dd|t        j                  j	                  |«      |¬«      }|j                  t        |j                  |«      |¬«      «      }|j                  |j                  |«      «      }	t        |j                  |j                  «       t        ||	d«       y )	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‘Y×*Ñ*¨4Ó0Ø!ô	€Jô ØØØÜ—Y‘Y×*Ñ*¨4Ó0Ø!ô€Fð ×,Ñ,¬Z¸¿¹À»ÈuÔ-UÓV€MØ×$Ñ$ Q§X¡X¨e£_Ó5€IÜ˜j×9Ñ9¸6×;RÑ;RÔSÜ$ ]°I¸tÕDr8   c                  ó"  — d} g }dD ]t  }t        | |z   ¬«      j                  t        «      }|j                  t        d¬«      }t	        ddd| ¬	«      j                  |«      j
                  }|j                  |«       Œv t        |d   |d
   «       y )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×QÑQÔRSÓTˆØ×#Ñ#¤A¨JÐ#Ó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                  j                  |«      ¬«      }t        dd‰t        j                  j                  |«      ¬«      }|j                  |«      }|j                  |«      }t        |j                  |j                  «       t        ||j                  «       t        ||d«       y )NgÍÌÌÌÌÌì?r•   r+   c                 ó   •— t        | ‰¬«      S )Nr•   r   )Úxr”   s    €r6   ú<lambda>z;test_spectral_embedding_callable_affinity.<locals>.<lambda>ü   s   ø€ œJ q°Ô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ØÜ—Y‘Y×*Ñ*¨4Ó0ô	€Kô ØØØÜ—Y‘Y×*Ñ*¨4Ó0ô	€Fð ×$Ñ$ QÓ'€IØ ×.Ñ.¨qÓ1€NÜ˜k×:Ñ:¸F×<SÑ<SÔTÜ˜d F×$;Ñ$;Ô<Ü$ Y°ÀÕEr8   c           	      ób  — t        ddddt        j                  j                  |«      ¬«      }t        ddddt        j                  j                  |«      ¬«      }|j	                  t
        j                  | «      «      }|j	                  t
        j                  | «      «      }t        ||d«       y )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‘Y×*Ñ*Ð+=Ó>ô€Iô "ØØØØÜ—Y‘Y×*Ñ*Ð+=Ó>ô€Ið ×*Ñ*¬1¯8©8°E«?Ó;€LØ×*Ñ*¬1¯8©8°E«?Ó;€LÜ$ \°<ÀÕFr8   c           	      óF  — t        ddddt        j                  j                  |«      ¬«      }t        ddddt        j                  j                  |«      ¬«      }|j	                  t
        j                  | «      «      }|j	                  t
        j                  | «      «      }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|_        |j	                  |
j                  | «      «      }|j	                  |
j                  | «      «      }t        ||d«       |
j                  «       }
|
j                  j                  t        j                  «      |
_        |
j                  j                  t        j                  «      |
_        t         t#        d«      k\  }|r|j	                  |
«       y d}t%        j&                  t(        |¬«      5  |j	                  |
«       d d d «       y # 1 sw Y   y xY w)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‘Y×*Ñ*¨4Ó0ô€Fô "ØØØØÜ—Y‘Y×*Ñ*¨4Ó0ô€Ið ×$Ñ$¤Q§X¡X¨e£_Ó5€IØ×*Ñ*¬1¯8©8°E«?Ó;€LÜ$ Y°¸dÔCô
 �(‰(Ò(´·±Ô
9€CÜ
�(‰(Ò(´·±Ô
9€CÜ
�(‰(Ò4¼B¿H¹HÔ
E€CáÜ	�‰�C˜�:Ó	¤§¡¨C°¨:Ó!6¼¿	¹	À3ÈÀ*Ó8MÐ NÐOØô€Hð $€F„OØ&€IÔØ×$Ñ$ X§_¡_°UÓ%;Ó<€IØ×*Ñ*¨8¯?©?¸5Ó+AÓB€LÜ$ Y°¸dÔCð
 �~‰~Ó€HØ—o‘o×,Ñ,¬R¯X©XÓ6€H„OØ×'Ñ'×.Ñ.¬r¯x©xÓ8€HÔô 2<¼}ÈXÓ?VÑ1VÐ.Ù1Ø×Ñ˜XÕ&àQˆÜ�]‰]œ:¨WÔ5ñ 	+Ø× Ñ  Ô*÷	+÷ 	+ñ 	+ús   É<JÊJ c                 óD  — d}t        ||fd|¬«      }|j                  | «      }t        j                  |«      t	        |j                  «       «      z
  }||j                  z   }t        |ddd¬«      }t        d«      D ]"  }t        |dd|d	z   ¬«      }t        ||d
¬«       Œ$ y )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€AØ	�‰�‹€AÜ�K‰K˜‹NÔ0°·±³Ó>Ñ>€EØ˜Ÿ™‘€JÜ"Ø °%Àaô€Iô
 �1‹Xò MˆÜ*Ø R°eÈ!ÈaÉ%ô
ˆô 	)¨°MÀtÖLñ	Mr8   c                 ó`  — t         j                  j                  | «      }t        t        dz
  d|¬«      }t        t        dz
  dd|¬«      }||fD ]]  }t        t        |d¬«      }|j                  |j                  t        «      «       t        t        |j                  t        «      d	d
«       Œ_ y )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‘9×(Ñ(¨Ó.€LÜÜ !‘^¨eÀ,ô€Fô Ü !‘^Ø$ØØ!ô	€Fð �vÐò 
ˆÜœz¸ÈRÔPˆØ
�‰ˆr×Ñ¤Ó"Ô#Ü!Ü(¨¯©´[ÓAÀ3Èõ	
ñ
r8   c                 ó¸  — t        j                  g d¢g d¢g d¢g d¢g d¢g«      }t        |«      rJ ‚t        D ]  }t         ||«      «      sŒJ ‚ t        D ]  }t         ||«      «      sŒJ ‚ t        j                  g d¢g d¢g d¢g d¢g d¢g«      }t        |«      sJ ‚t        D ]  }t         ||«      «      rŒJ ‚ t        D ]  }t         ||«      «      rŒJ ‚ y )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ç   ”  sð   € ä�H‰HâÚÚÚÚð	
ó€Eô # 5Ô)Ð)Ð)Ü'ò =ˆÜ&¡}°UÓ';Õ<Ð<Ð<ð=ä'ò =ˆÜ&¡}°UÓ';Õ<Ð<Ð<ð=ô �H‰HâÚÚÚÚð	
ó€Eô ˜uÔ%Ð%Ð%Ü'ò 9ˆÜ"¡=°Ó#7Õ8Ð8Ð8ð9ä'ò 9ˆÜ"¡=°Ó#7Õ8Ð8Ð8ñ9r8   c                  óÀ   — t         j                  j                  d«      } | j                  dd«      }t	        |«      }t        |«      }t        |«      }t        ||«       y )Nre   rf   rg   )r.   rA   rB   rn   r   r   r   )r)   r^   rr   Úembedding_1Úembedding_2s        r6   Ú%test_spectral_embedding_deterministicrë   µ  sP   € ä—9‘9×(Ñ(¨Ó,€LØ×Ñ˜b "Ó%€DÜ�dÓ€DÜ$ TÓ*€KÜ$ TÓ*€KÜ˜k¨;Õ7r8   c                  ó<  — t         j                  j                  d«      } | j                  dd«      }t	        |«      }d}t        |d|d¬«      }t        |dd¬«      \  }}t        |«      \  }}|j                  d | }	t        |	«      j                  }	t        ||	«       y )	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‘9×(Ñ(¨Ó,€LØ×Ñ˜b "Ó%€DÜ�dÓ€DØ€LÜ$Ø˜U°È%ô€Kô
 & d°5ÀdÔK�M€IˆrÜ˜I“Ñ€A€}Ø—/‘/ - <Ð0€KÜ1°+Ó>×@Ñ@€Kä˜k¨;Õ7r8   c                  ój  — t         j                  j                  d«      } | j                  dd«      }t	        |«      }d}t        d«      D ]g  }t        |d|d|¬«      }t        j                  |d d …df   «      t        j                  d«      k(  sJ ‚t        j                  |d d …df   «      d	kD  rŒgJ ‚ y )
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‘9×(Ñ(¨Ó,€LØ×Ñ˜b "Ó%€DÜ�dÓ€DØ€Lä�b“	ò 
.ˆÜ&ØØ Ø%ØØô
ˆ	ô �v‰v�i¢ 1 ‘oÓ&¬&¯-©-¸Ó*:Ò:Ð:Ð:Ü�v‰v�i¢ 1 ‘oÓ&¨Ó-Ð-Ð-ñ
.r8   c                 óü   — t         j                  |«      }t        dd| d¬«      }|j                  |«      }|j                  |k(  sJ ‚|j
                  j                  |k(  sJ ‚|j                  j                  |k(  sJ ‚y)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  | j	                  t
        «       d d d «       y # 1 sw Y   y xY w)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ý     sP   € ô
 #ØØØô€Jð
 O€GÜ	�‰”z¨Ô	1ñ $Ø× Ñ ¤Ô#÷$÷ $ñ $ús   ¬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        |¬«      }	| j                  t        |j                  |	«       t        |d|d¬«       |	j                  «        |	j                  \  }}
|
d   |k(  sJ ‚y
)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°€MØ�‚Ù˜!Óˆä [Ô1€Mà×ÑÔ+¨[×-EÑ-EÀ}ÔUä�q r¸È&Õ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)     sm  ðÛ Ý ã Û Ý Ý ß -å "Ý 'ß WÑ W÷÷ MÝ /Ý .ß PÝ A÷÷ ñ õ ?ðÝ1à€Oð —;‘;×%Ñ%ØÐÐ Sð &ó Ð ð
 ˆ"�(‰(â!Ú!Ú!ðó€ð €	Ø Ÿ™Ñ €
ˆJÙØ °cÈô�€€;ó

ð ‡�×Ñ˜¨.Ó9ñ$5ó :ð$5ðN ‡�×ÑØÐÐ Sð ó ñIóðIð( ‡�×ÑØàØØˆ�‰�UÐ"2Ô3ðóð ‡�×Ñ˜ 2§:¡:¨r¯z©zÐ":Ó;ò)Ró <óð)RðX ‡�×ÑÐ+¨dÐ-D°^Ð-DÓEØ‡�×ÑØàØØˆ�‰�UÐ"2Ô3ðóð ‡�×Ñ˜ 2§:¡:¨r¯z©zÐ":Ó;à02òEó <óó FðEò4/ð, ‡�×ÑÐ+¨dÐ-D°^Ð-DÓEòFó FðFð2 ‡�×Ñ˜ 2§:¡:¨r¯z©zÐ":Ó;ñGó <ðGð0 ‡�×ÑØÐÐ Sð ó ð ‡�×Ñ˜ 2§:¡:¨r¯z©zÐ":Ó;Ø‡�×Ñ˜¨.Ó9ò7+ó :ó <óð
7+ðt ‡�×ÑØÐÐ Sð ó ð ‡�×Ñ˜ 2§:¡:¨r¯z©zÐ":Ó;òMó <óðMó&
ó09òB8ò8ò(.ð* ‡�×ÑØàØØˆ�‰�UÐ"2Ô3ðóð ‡�×Ñ˜ 2§:¡:¨r¯z©zÐ":Ó;ñ.ó <óð.ð( ‡�×ÑØØDð ó ñ$ó	ð$ð ‡�×Ñ˜Ò#>Ó?Ø‡�×Ñ˜¨.Ó9ñ*ó :ó @ñ*øðc ò ØƒOðús   Â Q  Ñ QÑ
Q