Ë
    ÷Q(hJ1  ã            
       ó$  — d dl Z d dlZd dlZd dlmZ d dlmZmZm	Z	 d dl
mZ d dlmZmZmZ d dlmZ d#d„Zd„ Zd	„ Zed
„ «       Zd„ Zd„ Zd„ Zd„ Zej4                  j7                  dd¬«      d„ «       Zd„ Zd„ Zej4                  j?                  de	eg«      ej4                  j?                  dddg«      d„ «       «       Z ej4                  j?                  de	ef«      ej4                  j?                  dd«      ej4                  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j4                  j?                  de	ef«      ej4                  j?                  dd«      d„ «       «       Z&ej4                  j?                  de	eg«      d„ «       Z'd„ Z(d „ Z)d!„ Z*ej4                  j?                  de	eg«      d"„ «       Z+y)$é    N)Úassert_array_equal)Ú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                    úi/var/www/skyplay_api_hub/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   r0   ©r/   r   é   ©r4   r0   ©r/   r4   )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                  ó,  — d} t         j                  j                  d«      }t        ddd|¬«      \  }}}t	        dd| d¬«      }|j                  |«       t	        dd	d| ¬
«      }|j                  |«       t        |j                  |j                  «       y )Nr   r   r   r0   ©r   r   ©r   Úlars©r   ÚmethodÚalphar   Úcd)r   rC   r   rD   )r   r7   r8   r,   r   Úfitr	   r:   )rD   r   r*   Ú_Ú	spca_larsÚ
spca_lassos         r+   Útest_fit_transformrJ   <   s‚   € Ø€EÜ
�)‰)×
Ñ
 Ó
"€CÜ  2 v¸CÔ@�G€A€qˆ!Ü q°¸uÐSTÔU€IØ‡M�M�!Ôô ¨°$ÀQÈeÔT€JØ‡N�N�1ÔÜ˜j×4Ñ4°i×6KÑ6KÕLr-   c                  óŽ  — d} t         j                  j                  d«      }t        ddd|¬«      \  }}}t	        dd| d¬«      }|j                  |«       |j                  |«      }t	        dd	d| d¬
«      j                  |«      }|j                  |«      }t        j                  |j                  dk(  «      rJ ‚t        ||«       y )Nr   r   r   r0   r?   r@   rA   rB   r   )r   Ún_jobsrC   rD   r   )
r   r7   r8   r,   r   rF   Ú	transformÚallr:   r	   )rD   r   r*   rG   rH   ÚU1r<   ÚU2s           r+   Útest_fit_transform_parallelrQ   I   s¶   € à€EÜ
�)‰)×
Ñ
 Ó
"€CÜ  2 v¸CÔ@�G€A€qˆ!Ü q°¸uÐSTÔU€IØ‡M�M�!ÔØ	×	Ñ	˜QÓ	€BäØ˜q¨°uÈ1ôç	�cˆ!ƒfð 	ð 
�‰˜Ó	€BÜ�v‰v�i×+Ñ+¨qÑ0Ô1Ð1Ð1Ü˜b "Õ%r-   c                  ó  — t         j                  j                  d«      } t        ddd| ¬«      \  }}}d|d d …df<   t	        d¬«      }t        j
                  t        j                  |j                  |«      «      «      rJ ‚y )Nr   r   r0   r?   r@   r   ©r   )r   r7   r8   r,   r   ÚanyÚisnanr9   )r   r*   rG   Ú	estimators       r+   Útest_transform_nanrW   Z   sn   € ô �)‰)×
Ñ
 Ó
"€CÜ  2 v¸CÔ@�G€A€qˆ!Ø€A‚aˆ€d�GÜ qÔ)€IÜ�v‰v”b—h‘h˜y×6Ñ6°qÓ9Ó:Ô;Ð;Ð;Ð;r-   c                  ó  — t         j                  j                  d«      } t        ddd| ¬«      \  }}}t	        dd| ¬«      }|j                  |«      }t	        dd| ¬«      }|j                  |«      j                  |«      }t        ||«       y )	Nr   r   éA   r?   r@   rA   )r   rC   r   rE   )	r   r7   r8   r,   r   r9   rF   rM   r	   )r   r*   rG   rH   rO   rI   rP   s          r+   Útest_fit_transform_tallrZ   d   s{   € Ü
�)‰)×
Ñ
 Ó
"€CÜ  2 v¸CÔ@�G€A€qˆ!Ü q°ÀcÔJ€IØ	×	 Ñ	  Ó	#€BÜ¨°$ÀSÔI€JØ	�‰˜Ó	×	$Ñ	$ QÓ	'€BÜ˜b "Õ%r-   c                  óª  — t         j                  j                  d«      } | 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 )
Nr   é   r   é   )r   ÚU_initÚV_initÚmax_iterr   r   T)ÚaxisÚkeepdims)ÚuÚv)r   r7   r8   r   r   rF   ÚlinalgÚnormr   ÚTr   r:   )r   r^   r_   ÚmodelÚexpected_componentss        r+   Útest_initializationrj   n   s¯   € Ü
�)‰)×
Ñ
 Ó
"€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   r/   r0   r   r   )r   r`   r   r2   r3   r4   r5   r6   )r   r7   r8   r   r   r9   r:   r   )r   r;   Úpcar    s       r+   Útest_mini_batch_correct_shapesrm   |   s¶   € Ü
�)‰)×
Ñ
 Ó
"€CØ�	‰	�"�bÓ€AÜ
¨!°aÀcÔ
J€CØ×Ñ˜!Ó€AØ�?‰?× Ñ  GÒ+Ð+Ð+Ø�7‰7�gÒÐÐä
¨"°qÀsÔ
K€CØ×Ñ˜!Ó€AØ�?‰?× Ñ  HÒ,Ð,Ð,Ø�7‰7�hÒÐÑr-   Tz"skipping mini_batch_fit_transform.)Úreasonc                  ó.  — d} t         j                  j                  d«      }t        ddd|¬«      \  }}}t	        dd| ¬«      j                  |«      }|j                  |«      }t        j                  dk(  rmdd l	}|j                  j                  }d |j                  _        	 t	        dd	| d¬
«      }|j                  |«      j                  |«      }	||j                  _        n/t	        dd	| d¬
«      }|j                  |«      j                  |«      }	t        j                  |j                  dk(  «      rJ ‚t        ||	«       t	        dd| d¬«      j                  |«      }
t        |
j                  |j                  «       y # ||j                  _        w xY w)Nr   r   r   r0   r?   r@   )r   r   rD   Úwin32r   )r   rL   rD   r   rE   rB   )r   r7   r8   r,   r   rF   rM   ÚsysÚplatformÚjoblibÚparallelÚmultiprocessingrN   r:   r	   )rD   r   r*   rG   rH   rO   rs   Ú_mpr<   rP   rI   s              r+   Útest_mini_batch_fit_transformrw   ‹   sZ  € à€EÜ
�)‰)×
Ñ
 Ó
"€CÜ  2 v¸CÔ@�G€A€qˆ!Ü"°ÀÈÔO×SÑSÐTUÓV€IØ	×	Ñ	˜QÓ	€Bä
‡|�|�wÒÛà�o‰o×-Ñ-ˆØ*.ˆ�‰Ô'ð	2Ü%Ø q°ÀAôˆDð —‘˜!“×&Ñ& qÓ)ˆBà.1ˆF�O‰OÕ+ä!¨q¸À%ÐVWÔXˆØ�X‰X�a‹[×"Ñ" 1Ó%ˆÜ�v‰v�i×+Ñ+¨qÑ0Ô1Ð1Ð1Ü˜b "Ô%ä#Ø˜t¨5¸qôç	�cˆ!ƒfð ô ˜j×4Ñ4°i×6KÑ6KÕLøð /2ˆF�O‰OÕ+ús   Â"/F ÆFc                  óø   — d} t         j                  j                  d«      }t        ddd|¬«      \  }}}t	        dd| |¬«      }|j                  |«      }|j                  |d d	 «      }t        |d   |d   «       y )
Nr   r   r   éè  r?   r@   rA   rB   r0   )r   r7   r8   r,   r   r9   rM   r   )rD   r   r*   rG   rH   Úresults_trainÚresults_tests          r+   Útest_scaling_fit_transformr|   «   s{   € Ø€EÜ
�)‰)×
Ñ
 Ó
"€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                  d«      } 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        ||«       y )Nr   r   ry   r?   r@   r0   r   )rD   Úridge_alphar   rS   gñhãˆµøä>)Úatol)r   r7   r8   r,   r   r   rF   rM   r   Úabsr:   r   rg   ÚeyeÚsign)r   r*   rG   ÚZr<   rl   Úresults_test_pcaÚresults_test_spcas           r+   Útest_pca_vs_spcar†   µ   s  € Ü
�)‰)×
Ñ
 Ó
"€CÜ  4¨¸cÔB�G€A€qˆ!Ü  2 v¸CÔ@�G€A€qˆ!Ü˜1¨!¸!Ô<€DÜ
˜1Ô
€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Õ8r-   ÚSPCAr   r   c                 óê   — t         j                  j                  d«      }d\  }}|j                  ||«      } | |¬«      j	                  |«      }|�|j
                  |k(  sJ ‚y |j
                  |k(  sJ ‚y )Nr   ©r/   r0   rS   )r   r7   r8   r   rF   Ún_components_)r‡   r   r   r   r   r;   rh   s          r+   Útest_spca_n_components_r‹   Ç   su   € ô �)‰)×
Ñ
 Ó
"€CØ"Ñ€IˆzØ�	‰	�)˜ZÓ(€Aá˜lÔ+×/Ñ/°Ó2€EàÐØ×"Ñ" lÒ2Ð2Ñ2à×"Ñ" jÒ0Ð0Ñ0r-   rC   )rA   rE   zdata_type, expected_typec                 ó  — d\  }}}t         j                  j                  d«      }|j                  ||«      j	                  |«      } | ||¬«      }	|	j                  |«      }
|
j                  |k(  sJ ‚|	j                  j                  |k(  sJ ‚y )N©r/   r0   r   r   )r   rC   )r   r7   r8   r   Úastyper9   Údtyper:   )r‡   rC   Ú	data_typeÚexpected_typer   r   r   r   Úinput_arrayrh   Ú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                 óÂ  — d}d}d\  }}}t         j                  j                  d«      }|j                  ||«      } | |||d¬«      }	|	j	                  |j                  t         j                  «      «      }
 | |||d¬«      }|j	                  |j                  t         j                  «      «      }t        ||
|¬«       t        |j                  |	j                  |¬«       y )Nçü©ñÒMbP?r   r�   r   )r   rD   rC   r   )Úrtol)
r   r7   r8   r   r9   rŽ   Úfloat32Úfloat64r   r:   )r‡   rC   r—   rD   r   r   r   r   r’   Úmodel_32Útransformed_32Úmodel_64Útransformed_64s                r+   Ú%test_sparse_pca_numerical_consistencyrž   í   sÊ   € ð €DØ€EØ*3Ñ'€Iˆz˜<Ü
�)‰)×
Ñ
 Ó
"€CØ—)‘)˜I zÓ2€KáØ!¨°vÈAô€Hð ×+Ñ+¨K×,>Ñ,>¼r¿z¹zÓ,JÓK€NáØ!¨°vÈAô€Hð ×+Ñ+¨K×,>Ñ,>¼r¿z¹zÓ,JÓK€Nä�N N¸Õ>Ü�H×(Ñ(¨(×*>Ñ*>ÀTÖJr-   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‰   r]   rS   N)
r   r7   r8   r   rF   Úget_feature_names_outÚ__name__Úlowerr   r   )	r‡   r   r   r   r;   rh   Ú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   r0   éd   g      à?)r`   Útolr   r–   g�íµ ÷Æ°>r   )r`   rª   Úmax_no_improvementr   N)r   r7   r8   r   r   rF   Ún_iter_)Úglobal_random_seedr   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¨   r]   r   Ú
randomizedr   )r   Ú
svd_solverr   rA   )r   rC   r~   rD   r   N)	r   r7   r8   r   r   rF   r   r   r:   )r­   r   r;   r   rl   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«      } d\  }}| j                  ||«      }d}t	        |ddd¬«      }t        |d¬«      }|j                  |«      }|j                  |«      }t        |j                  |«      |j                  |«      «       y)zDCheck that `inverse_transform` in `SparsePCA` and `PCA` are similar.r   ©r0   r\   r   çê-�™—q=©r   rD   r~   r   r1   N)	r   r7   r8   r   r   r   r9   r   Úinverse_transform)	r   r   r   r;   r   r<   rl   ÚX_trans_spcaÚX_trans_pcas	            r+   Ú!test_sparse_pca_inverse_transformr¼   G  sš   € ä
�)‰)×
Ñ
 Ó
"€CØ!Ñ€IˆzØ�	‰	�)˜ZÓ(€Aà€LÜØ!¨¸EÐPQô€Dô ˜<°aÔ
8€CØ×%Ñ% aÓ(€LØ×#Ñ# AÓ&€KÜØ×Ñ˜|Ó,¨c×.CÑ.CÀKÓ.Põr-   c                 óä   — t         j                  j                  d«      }d\  }}|j                  ||«      }|} | |ddd¬«      }|j	                  |«      }t        |j                  |«      |«       y)z^Check the `transform` and `inverse_transform` round trip with no loss of
    information.
    r   r¶   r·   r¸   N)r   r7   r8   r   r9   r   r¹   )r‡   r   r   r   r;   r   r<   rº   s           r+   Ú+test_transform_inverse_transform_round_tripr¾   Y  sr   € ô
 �)‰)×
Ñ
 Ó
"€CØ!Ñ€IˆzØ�	‰	�)˜ZÓ(€Aà€LÙØ!¨¸EÐPQô€Dð ×%Ñ% aÓ(€LÜ�D×*Ñ*¨<Ó8¸!Õ<r-   )N),rq   Únumpyr   ÚpytestÚnumpy.testingr   Úsklearn.decompositionr   r   r   Úsklearn.utilsr   Úsklearn.utils._testingr   r	   r
   Úsklearn.utils.extmathr   r,   r=   rJ   rQ   rW   rZ   rj   rm   ÚmarkÚskipifrw   r|   r†   Úparametrizer‹   r˜   r™   Úint32Úint64r”   rž   r¦   r°   r´   r¼   r¾   © r-   r+   ú<module>rÌ      s7  ðó ã Û Ý ,ç DÑ DÝ ,÷ñ õ
 +óò4ò
Mð #ñ&ó #ð&ò <ò&ò<òð ‡�×Ñ�DÐ!EÐÓFñMó GðMò>7ò9ð$ ‡�×Ñ˜ )Ð-?Ð!@ÓAØ‡�×Ñ˜¨$°¨Ó3ñ
1ó 4ó Bð
1ð ‡�×Ñ˜ )Ð-?Ð!@ÓAØ‡�×Ñ˜ >Ó2Ø‡�×ÑØà	�‰�R—Z‘ZÐ Ø	�‰�R—Z‘ZÐ Ø	�‰�2—:‘:ÐØ	�‰�2—:‘:Ðð	óñ	4óó 3ó Bð	4ð ‡�×Ñ˜ )Ð-?Ð!@ÓAØ‡�×Ñ˜ >Ó2ñKó 3ó BðKð, ‡�×Ñ˜ )Ð-?Ð!@ÓAñ
Jó Bð
JòIò47ò4ð$ ‡�×Ñ˜ )Ð-?Ð!@ÓAñ=ó Bñ=r-   