Ë
    8Ò^j¸/  ã            
       ó  — 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	m
Z
 d dlmZ d dlmZmZmZ d dlmZ d d„Zd	„ Zd
„ Zej,                  j.                  ed„ «       «       Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zej,                  j?                  de
e	g«      ej,                  j?                  dddg«      d„ «       «       Z ej,                  j?                  de
e	f«      ej,                  j?                  dd«      ej,                  j?                  dejB                  ejB                  fejD                  ejD                  fejF                  ejD                  fejH                  ejD                  ff«      d„ «       «       «       Z%ej,                  j?                  de
e	f«      ej,                  j?                  dd«      d„ «       «       Z&ej,                  j?                  de
e	g«      d„ «       Z'd„ Z(d„ Z)d„ Z*ej,                  j?                  de
e	g«      d„ «       Z+y)!é    N)Úassert_array_equal)Úmake_low_rank_matrix)ÚPCAÚMiniBatchSparsePCAÚ	SparsePCA)Úcheck_random_state)Úassert_allcloseÚassert_array_almost_equalÚ!if_safe_multiprocessing_with_blas)Úsvd_flipc                 ó$  — |d   |d   z  }t        |«      }|j                  || «      }|j                  | |«      }g d¢}g d¢}	t        | «      D ]t  }
t        j                  |«      }||
   d   |	|
   z
  ||
   d   |	|
   z   }}||
   d   |	|
   z
  ||
   d   |	|
   z   }}d||| d d …||…f<   |j                  «       ||
d d …f<   Œv t        j                  ||«      }|d|j                  |j                  d   |j                  d   «      z  z  }|||fS )Nr   é   ))é   r   )é   é   )é   r   )r   é   r   g      ð?gš™™™™™¹?)r   ÚrandnÚrangeÚnpÚzerosÚravelÚdotÚshape)Ún_componentsÚ	n_samplesÚ
image_sizeÚrandom_stateÚ
n_featuresÚrngÚUÚVÚcentersÚszÚkÚimgÚxminÚxmaxÚyminÚymaxÚYs                    úv/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/sklearn/decomposition/tests/test_sparse_pca.pyÚgenerate_toy_datar-      s1  € Ø˜A‘ ¨A¡Ñ.€Jä
˜\Ó
*€CØ�	‰	�)˜\Ó*€AØ�	‰	�, 
Ó+€Aâ&€GÚ	€BÜ�<Ó ò ˆÜ�h‰h�zÓ"ˆØ˜Q‘Z ‘] R¨¡UÑ*¨G°A©J°q©M¸B¸q¹EÑ,AˆdˆØ˜Q‘Z ‘] R¨¡UÑ*¨G°A©J°q©M¸B¸q¹EÑ,AˆdˆØ'*ˆˆD�ˆ’q˜$˜t˜)�|Ñ$Ø—)‘)“+ˆˆ!ŠQˆ$Šðô 	�‰ˆq�!‹€AØˆˆs�y‰y˜Ÿ™ ™ Q§W¡W¨Q¡ZÓ0Ñ	0Ñ0€AØˆa�ˆ7€Nó    c                  óŽ  — t         j                  j                  d«      } | j                  dd«      }t	        d| ¬«      }|j                  |«      }|j                  j                  dk(  sJ ‚|j                  dk(  sJ ‚t	        d| ¬«      }|j                  |«      }|j                  j                  d	k(  sJ ‚|j                  d
k(  sJ ‚y )Nr   é   é
   r   ©r   r   ©r   r1   ©r0   r   é   ©r5   r1   ©r0   r5   )r   ÚrandomÚRandomStater   r   Úfit_transformÚcomponents_r   )r    ÚXÚspcar!   s       r,   Útest_correct_shapesr>   .   s¶   € Ü
�)‰)×
Ñ
 Ó
"€CØ�	‰	�"�bÓ€AÜ !°#Ô6€DØ×Ñ˜1Ó€AØ×Ñ×!Ñ! WÒ,Ð,Ð,Ø�7‰7�gÒÐÐä "°3Ô7€DØ×Ñ˜1Ó€AØ×Ñ×!Ñ! XÒ-Ð-Ð-Ø�7‰7�hÒÐÑr.   c                 ó2  — d}t         j                  j                  | «      }t        ddd|¬«      \  }}}t	        dd|| ¬«      }|j                  |«       t	        dd| |¬	«      }|j                  |«       t        |j                  |j                  d
d¬«       y )Nr   r   r1   ©r   r   ©r   Úlars©r   ÚmethodÚalphar   Úcd)r   rD   r   rE   gü©ñÒMb@?g-Cëâ6*?©ÚrtolÚatol)r   r8   r9   r-   r   Úfitr	   r;   )Úglobal_random_seedrE   r    r+   Ú_Ú	spca_larsÚ
spca_lassos          r,   Útest_fit_transformrO   <   s“   € Ø€EÜ
�)‰)×
Ñ
Ð 2Ó
3€CÜ  2 v¸CÔ@�G€A€qˆ!ÜØ˜v¨UÐASô€Ið ‡M�M�!Ôô Ø˜tÐ2DÈEô€Jð ‡N�N�1ÔÜ�J×*Ñ*¨I×,AÑ,AÈÐSWÖXr.   c                 óŽ  — d}t         j                  j                  | «      }t        ddd|¬«      \  }}}t	        dd|| ¬«      }|j                  |«       |j                  |«      }t	        ddd|| ¬	«      j                  |«      }|j                  |«      }t        j                  |j                  d
k(  «      rJ ‚t        ||«       y )Nr   r   r1   r@   rA   rB   rC   r   )r   Ún_jobsrD   rE   r   r   )
r   r8   r9   r-   r   rJ   Ú	transformÚallr;   r
   )	rK   rE   r    r+   rL   rM   ÚU1r=   ÚU2s	            r,   Útest_fit_transform_parallelrV   O   sÄ   € ð €EÜ
�)‰)×
Ñ
Ð 2Ó
3€CÜ  2 v¸CÔ@�G€A€qˆ!ÜØ˜v¨UÐASô€Ið ‡M�M�!ÔØ	×	Ñ	˜QÓ	€BäØØØØØ'ô÷ 
�cˆ!ƒfð 	ð 
�‰˜Ó	€BÜ�v‰v�i×+Ñ+¨qÑ0Ô1Ð1Ð1Ü˜b "Õ%r.   c                 ó  — t         j                  j                  | «      }t        ddd|¬«      \  }}}d|d d …df<   t	        d| ¬«      }t        j
                  t        j                  |j                  |«      «      «      rJ ‚y )Nr   r1   r@   rA   r   r   r2   )r   r8   r9   r-   r   ÚanyÚisnanr:   )rK   r    r+   rL   Ú	estimators        r,   Útest_transform_nanr[   g   sr   € ô �)‰)×
Ñ
Ð 2Ó
3€CÜ  2 v¸CÔ@�G€A€qˆ!Ø€A‚aˆ€d�GÜ qÐ7IÔJ€IÜ�v‰v”b—h‘h˜y×6Ñ6°qÓ9Ó:Ô;Ð;Ð;Ð;r.   c                 ó   — t         j                  j                  | «      }t        ddd|¬«      \  }}}t	        dd|¬«      }|j                  |«      }t	        dd|¬«      }|j                  |«      j                  |«      }t        ||dd	¬
«       y )Nr   éA   r@   rA   rB   ©r   rD   r   rF   ç-Cëâ6?gñhãˆµøô>rG   )	r   r8   r9   r-   r   r:   rJ   rR   r	   )rK   r    r+   rL   rM   rT   rN   rU   s           r,   Útest_fit_transform_tallr`   q   s€   € Ü
�)‰)×
Ñ
Ð 2Ó
3€CÜ  2 v¸CÔ@�G€A€qˆ!Ü q°ÀcÔJ€IØ	×	 Ñ	  Ó	#€BÜ¨°$ÀSÔI€JØ	�‰˜Ó	×	$Ñ	$ QÓ	'€BÜ�B˜ ¨DÖ1r.   c                 óª  — t         j                  j                  | «      }|j                  dd«      }|j                  dd«      }t	        d||d|¬«      }|j                  |j                  dd«      «       |t         j                  j                  |dd¬«      z  }t        |j                  d ¬	«      d   j                  }t        |j                  |«       y )
Né   r   é   r   )r   ÚU_initÚV_initÚmax_iterr   r   T)ÚaxisÚkeepdims)ÚuÚv)r   r8   r9   r   r   rJ   ÚlinalgÚnormr   ÚTr	   r;   )rK   r    rd   re   ÚmodelÚexpected_componentss         r,   Útest_initializationrp   {   s°   € Ü
�)‰)×
Ñ
Ð 2Ó
3€CØ�Y‰Y�q˜!‹_€FØ�Y‰Y�q˜!‹_€FÜØ˜v¨f¸qÈsô€Eð 
‡I�Iˆc�i‰i˜˜1‹oÔà ¤2§9¡9§>¡>°&¸qÈ4 >Ó#PÑPÐÜ"Ð%8×%:Ñ%:¸dÔCÀAÑF×HÑHÐÜ�E×%Ñ%Ð':Õ;r.   c                  ó’  — t         j                  j                  d«      } | j                  dd«      }t	        dd| ¬«      }|j                  |«      }|j                  j                  dk(  sJ ‚|j                  dk(  sJ ‚t	        d	d| ¬«      }|j                  |«      }|j                  j                  d
k(  sJ ‚|j                  dk(  sJ ‚y )Nr   r0   r1   r   r   )r   rf   r   r3   r4   r5   r6   r7   )r   r8   r9   r   r   r:   r;   r   )r    r<   Úpcar!   s       r,   Útest_mini_batch_correct_shapesrs   ‰   s¶   € Ü
�)‰)×
Ñ
 Ó
"€CØ�	‰	�"�bÓ€AÜ
¨!°aÀcÔ
J€CØ×Ñ˜!Ó€AØ�?‰?× Ñ  GÒ+Ð+Ð+Ø�7‰7�gÒÐÐä
¨"°qÀsÔ
K€CØ×Ñ˜!Ó€AØ�?‰?× Ñ  HÒ,Ð,Ð,Ø�7‰7�hÒÐÑr.   c                 óø   — d}t         j                  j                  | «      }t        ddd|¬«      \  }}}t	        dd||¬«      }|j                  |«      }|j                  |d d «      }t        |d	   |d	   «       y )
Nr   r   éè  r@   rA   rB   rC   r1   r   )r   r8   r9   r-   r   r:   rR   r	   )rK   rE   r    r+   rL   rM   Úresults_trainÚresults_tests           r,   Útest_scaling_fit_transformrx   —   s|   € Ø€EÜ
�)‰)×
Ñ
Ð 2Ó
3€CÜ  4¨¸cÔB�G€A€qˆ!Ü q°¸uÐSVÔW€IØ×+Ñ+¨AÓ.€MØ×&Ñ& q¨¨" vÓ.€LÜ�M !Ñ$ l°1¡oÕ6r.   c                 ó¨  — t         j                  j                  | «      }t        ddd|¬«      \  }}}t        ddd|¬«      \  }}}t	        ddd|¬«      }t        d|¬	«      }|j                  |«       |j                  |«       |j                  |«      }|j                  |«      }t        t        j                  |j                  j                  |j                  j                  «      «      t        j                  d«      d
¬«       |t        j                  |dd d …f   «      z  }|t        j                  |dd d …f   «      z  }t        ||d
¬«       y )Nr   ru   r@   rA   r1   r   r   )rE   Úridge_alphar   r   r2   r_   )rI   )r   r8   r9   r-   r   r   rJ   rR   r	   Úabsr;   r   rm   ÚeyeÚsign)	rK   r    r+   rL   ÚZr=   rr   Úresults_test_pcaÚresults_test_spcas	            r,   Útest_pca_vs_spcar�   ¡   s  € Ü
�)‰)×
Ñ
Ð 2Ó
3€CÜ  4¨¸cÔB�G€A€qˆ!Ü  2 v¸CÔ@�G€A€qˆ!Ü˜1¨!¸!È#ÔN€DÜ
˜1¨3Ô
/€CØ‡G�GˆA„JØ‡H�HˆQ„KØ—}‘} QÓ'ÐØŸ™ qÓ)ÐÜÜ
�‰ˆt×Ñ×#Ñ# C§O¡O×$5Ñ$5Ó6Ó7¼¿¹À»Èõð œŸ™Ð 0°²A°Ñ 6Ó7Ñ7ÐØœŸ™Ð!2°1²a°4Ñ!8Ó9Ñ9ÐÜÐ$Ð&7¸dÖCr.   ÚSPCAr   r   c                 óê   — t         j                  j                  d«      }d\  }}|j                  ||«      } | |¬«      j	                  |«      }|�|j
                  |k(  sJ ‚y |j
                  |k(  sJ ‚y )Nr   ©r0   r1   ©r   )r   r8   r9   r   rJ   Ún_components_)r‚   r   r    r   r   r<   rn   s          r,   Útest_spca_n_components_r‡   ³   su   € ô �)‰)×
Ñ
 Ó
"€CØ"Ñ€IˆzØ�	‰	�)˜ZÓ(€Aá˜lÔ+×/Ñ/°Ó2€EàÐØ×"Ñ" lÒ2Ð2Ñ2à×"Ñ" jÒ0Ð0Ñ0r.   rD   )rB   rF   zdata_type, expected_typec                 ó  — d\  }}}t         j                  j                  d«      }|j                  ||«      j	                  |«      } | ||¬«      }	|	j                  |«      }
|
j                  |k(  sJ ‚|	j                  j                  |k(  sJ ‚y )N)r0   r1   r   r   )r   rD   )r   r8   r9   r   Úastyper:   Údtyper;   )r‚   rD   Ú	data_typeÚexpected_typer   r   r   r    Úinput_arrayrn   Útransformeds              r,   Útest_sparse_pca_dtype_matchr�   Â   s‰   € ð +4Ñ'€Iˆz˜<Ü
�)‰)×
Ñ
 Ó
"€CØ—)‘)˜I zÓ2×9Ñ9¸)ÓD€KÙ˜l°6Ô:€EØ×%Ñ% kÓ2€Kà×Ñ Ò-Ð-Ð-Ø×Ñ×"Ñ" mÒ3Ð3Ñ3r.   c                 ój  — d\  }}}t        ||||¬«      } | |||¬«      }|j                  |j                  t        j                  «      «      } | |||¬«      }	|	j                  |j                  t        j
                  «      «      }
t        |
|«       t        |	j                  |j                  «       y )N)é   r‘   rb   )r   r   Úeffective_rankr   r^   )r   r:   r‰   r   Úfloat32Úfloat64r	   r;   )r‚   rD   rK   r   r   r   r�   Úmodel_32Útransformed_32Úmodel_64Útransformed_64s              r,   Ú%test_sparse_pca_numerical_consistencyr™   Ù   s°   € ð +4Ñ'€Iˆz˜<Ü&ØØØ#Ø'ô	€Kñ Ø!ØØ'ô€Hð
 ×+Ñ+¨K×,>Ñ,>¼r¿z¹zÓ,JÓK€NáØ!ØØ'ô€Hð
 ×+Ñ+¨K×,>Ñ,>¼r¿z¹zÓ,JÓK€NÜ�N NÔ3Ü�H×(Ñ(¨(×*>Ñ*>Õ?r.   c                 óL  — t         j                  j                  d«      }d\  }}|j                  ||«      } | d¬«      j	                  |«      }|j                  «       }| j                  j                  «       }t        t        d«      D �cg c]  }|› |› �‘Œ
 c}|«       yc c}w )z'Check feature names out for *SparsePCA.r   r„   rc   r…   N)
r   r8   r9   r   rJ   Úget_feature_names_outÚ__name__Úlowerr   r   )	r‚   r    r   r   r<   rn   ÚnamesÚestimator_nameÚis	            r,   Útest_spca_feature_names_outr¡   ö   s�   € ô �)‰)×
Ñ
 Ó
"€CØ"Ñ€IˆzØ�	‰	�)˜ZÓ(€Aá˜aÔ ×$Ñ$ QÓ'€EØ×'Ñ'Ó)€Eà—]‘]×(Ñ(Ó*€NÜ¼¸a»ÖA°1˜>Ð*¨1¨#Ò.ÒAÀ5ÕIùÒAs   ÂB!c                 óÈ  — t         j                  j                  | «      }d\  }}|j                  ||«      }t	        dd| ¬«      j                  |«      }t	        dd| ¬«      j                  |«      }|j                  |j                  k  sJ ‚t	        ddd| ¬«      j                  |«      }t	        ddd| ¬«      j                  |«      }|j                  |j                  k  sJ ‚y	)
z@Check that `tol` and `max_no_improvement` act as early stopping.)é2   r1   éd   g      à?)rf   Útolr   gü©ñÒMbP?g�íµ ÷Æ°>r   )rf   r¥   Úmax_no_improvementr   N)r   r8   r9   r   r   rJ   Ún_iter_)rK   r    r   r   r<   Úmodel_early_stoppedÚmodel_not_early_stoppeds          r,   Útest_spca_early_stoppingrª     sï   € ä
�)‰)×
Ñ
Ð 2Ó
3€CØ"Ñ€IˆzØ�	‰	�)˜ZÓ(€Aô -Ø˜#Ð,>ôç	�cˆ!ƒfð ô 1Ø˜$Ð-?ôç	�cˆ!ƒfð ð ×&Ñ&Ð)@×)HÑ)HÒHÐHÐHô -Ø˜$°1ÐCUôç	�cˆ!ƒfð ô 1Ø˜$°3ÐEWôç	�cˆ!ƒfð ð ×&Ñ&Ð)@×)HÑ)HÒHÐHÑHr.   c                 ó"  — t         j                  j                  | «      }|j                  dd«      }d}t	        |dd¬«      j                  |«      }t        |dddd¬«      j                  |«      }t        |j                  |j                  «       y	)
z¤Check the equivalence of the components found by PCA and SparsePCA.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/23932
    r£   rc   r   Ú
randomizedr   )r   Ú
svd_solverr   rB   )r   rD   rz   rE   r   N)	r   r8   r9   r   r   rJ   r   r	   r;   )rK   r    r<   r   rr   r=   s         r,   Ú$test_equivalence_components_pca_spcar®     sŽ   € ô �)‰)×
Ñ
Ð 2Ó
3€CØ�	‰	�"�aÓ€Aà€LÜ
Ø!ØØô÷ 
�cˆ!ƒfð	 ô
 Ø!ØØØØô÷ 
�cˆ!ƒfð 	ô �C—O‘O T×%5Ñ%5Õ6r.   c                 óD  — t         j                  j                  | «      }d\  }}|j                  ||«      }d}t	        |dd| ¬«      }t        || ¬«      }|j                  |«      }|j                  |«      }	t        |j                  |«      |j                  |	«      «       y)zDCheck that `inverse_transform` in `SparsePCA` and `PCA` are similar.©r1   rb   r   çê-�™—q=©r   rE   rz   r   r2   N)	r   r8   r9   r   r   r   r:   r	   Úinverse_transform)
rK   r    r   r   r<   r   r=   rr   ÚX_trans_spcaÚX_trans_pcas
             r,   Ú!test_sparse_pca_inverse_transformr¶   8  sž   € ä
�)‰)×
Ñ
Ð 2Ó
3€CØ!Ñ€IˆzØ�	‰	�)˜ZÓ(€Aà€LÜØ!ØØØ'ô	€Dô ˜<Ð6HÔ
I€CØ×%Ñ% aÓ(€LØ×#Ñ# AÓ&€KÜØ×Ñ˜|Ó,¨c×.CÑ.CÀKÓ.Põr.   c                 óä   — t         j                  j                  |«      }d\  }}|j                  ||«      }|} | |dd|¬«      }|j	                  |«      }t        |j                  |«      |«       y)z^Check the `transform` and `inverse_transform` round trip with no loss of
    information.
    r°   r±   r²   N)r   r8   r9   r   r:   r	   r³   )	r‚   rK   r    r   r   r<   r   r=   r´   s	            r,   Ú+test_transform_inverse_transform_round_tripr¸   M  su   € ô
 �)‰)×
Ñ
Ð 2Ó
3€CØ!Ñ€IˆzØ�	‰	�)˜ZÓ(€Aà€LÙØ!ØØØ'ô	€Dð ×%Ñ% aÓ(€LÜ�D×*Ñ*¨<Ó8¸!Õ<r.   )N),Únumpyr   ÚpytestÚnumpy.testingr   Úsklearn.datasetsr   Úsklearn.decompositionr   r   r   Úsklearn.utilsr   Úsklearn.utils._testingr	   r
   r   Úsklearn.utils.extmathr   r-   r>   rO   ÚmarkÚthread_unsaferV   r[   r`   rp   rs   rx   r�   Úparametrizer‡   r“   r”   Úint32Úint64r�   r™   r¡   rª   r®   r¶   r¸   © r.   r,   ú<module>rÇ      s  ðó
 Û Ý ,å 1ß DÑ DÝ ,÷ñ õ
 +óò4òYð& ‡�×ÑØ"ñ&ó #ó ð&ò,<ò2ò<òò7òDð$ ‡�×Ñ˜ )Ð-?Ð!@ÓAØ‡�×Ñ˜¨$°¨Ó3ñ
1ó 4ó Bð
1ð ‡�×Ñ˜ )Ð-?Ð!@ÓAØ‡�×Ñ˜ >Ó2Ø‡�×ÑØà	�‰�R—Z‘ZÐ Ø	�‰�R—Z‘ZÐ Ø	�‰�2—:‘:ÐØ	�‰�2—:‘:Ðð	óñ	4óó 3ó Bð	4ð ‡�×Ñ˜ )Ð-?Ð!@ÓAØ‡�×Ñ˜ >Ó2ñ@ó 3ó Bð@ð6 ‡�×Ñ˜ )Ð-?Ð!@ÓAñ
Jó Bð
JòIò47ò4ð* ‡�×Ñ˜ )Ð-?Ð!@ÓAñ=ó Bñ=r.   