Ë
    ÜÍ:j9¢  ã                   ó:  — d dl Z d dlZd dlZd dlZd dl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 d dlmZ d dlmZmZ d dlmZ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&  e
j                  «       Z'g d¢Z(d\  Z)Z* e+e)e*«      Z,d}d„Z-ej\                  j_                  de(«      ej\                  j_                  d e0de'jb                  jd                  d   «      «      d„ «       «       Z3ej\                  j_                  dg d¢«      ej\                  j_                  dg d¢«      ej\                  j_                  de%e$z   «      ej\                  j_                  dddg«      ej\                  j_                  dg d¢«      d„ «       «       «       «       «       Z4ej\                  j_                  de%e$z   «      d„ «       Z5ej\                  j_                  ddd g«      ej\                  j_                  de%e$z   «      d!„ «       «       Z6ej\                  j_                  de%e$z   «      d"„ «       Z7d#„ Z8ej\                  j_                  d$d%d&g«      ej\                  j_                  d'e(«      d(„ «       «       Z9ej\                  j_                  d) e: e; e<e(«      d d*hz
  «      «      «      ej\                  j_                  d+d,d-g«      ej\                  j_                  d.d&d%g«      ej\                  j_                  d/d&d%g«      d0„ «       «       «       «       Z=ej\                  j_                  d1ej|                  j                  d «      j�                  d2d3«       e
j                  d2d3d4d ¬5«      d    ej|                  j                  d «      j�                  d6d2«      gg d7¢¬8«      ej\                  j_                  de(«      d9„ «       «       ZAej\                  j_                  dddg«      d:„ «       ZBej\                  j_                  de(«      d;„ «       ZCej\                  j_                  de(«      d<„ «       ZDej\                  j_                  de(«      d=„ «       ZEej\                  j_                  dg d>¢«      ej\                  j_                  d/d&d%g«      d?„ «       «       ZFej\                  j_                  d@ ejŽ                  g dA¢g dB¢g«       ejŽ                  g dA¢g dB¢g«      j�                  g«      ej\                  j_                  dCg dD¢«      dE„ «       «       ZIej\                  j_                  dFd  e+e'jb                  jd                  «      fd e+e'jb                  jd                  «      dz
  fd e+e'jb                  jd                  «      fg«      ej\                  j_                  d@e'jb                  e'jb                  j�                  g«      dG„ «       «       ZJej\                  j_                  dd*d g«      dH„ «       ZKej\                  j_                  dddg«      dI„ «       ZLdJ„ ZMdK„ ZNdL„ ZOdM„ ZPej\                  j_                  dNe'jb                  dOdPfe'jb                  dQdfej|                  j                  d «      j£                  dRdS«      dTdPfg«      dU„ «       ZRej\                  j_                  de(«      dV„ «       ZSdW„ ZTej\                  j_                  de(«      dX„ «       ZUej\                  j_                  dddg«      dY„ «       ZVej\                  j_                  dd dg«      dZ„ «       ZWej\                  j_                  d[g d\¢«      d]„ «       ZXej\                  j_                  de(«      d^„ «       ZYej\                  j_                  de(«      d_„ «       ZZd`„ Z[da„ Z\db„ Z]dc„ Z^dd„ Z_de„ Z`df„ Zadg„ Zbdh„ Zcdi„ Zddj„ Zeej\                  j_                  d$d%d&g«      dk„ «       Zfdl„ Zgej\                  j_                  dm e«       «      ej\                  j_                  dne"egge¬8«      ej\                  j_                  do edPd ¬p«       edPd d%¬q«       edrd d%¬q«       edPd¬p«       edPdd%¬q«       edPddsd ¬t«      ge¬8«      du„ «       «       «       Zhej\                  j_                  dm e«       «      ej\                  j_                  dnegge¬8«      ej\                  j_                  do edvd ¬p«      ge¬8«      dw„ «       «       «       Ziej\                  jÕ                  e jÖ                  jÙ                  dx«      dyk7  dz¬{«      d|„ «       Zmy)~é    N)Úassert_array_equal)Úconfig_contextÚdatasets)Úclone)Ú	load_irisÚmake_classificationÚmake_low_rank_matrix)ÚPCA)Ú_assess_dimensionÚ_infer_dimension)Ú_atol_for_typeÚmove_toÚ)yield_namespace_device_dtype_combinations©Údevice)Ú_get_check_estimator_ids)Ú_array_api_for_testsÚassert_allclose)Ú check_array_api_input_and_values)ÚCSC_CONTAINERSÚCSR_CONTAINERSÚ_sparse_random_array)ÚfullÚcovariance_eighÚarpackÚ
randomizedÚauto)éè  i,  c                 ó  — t        | j                  |j                  ||¬«       t        | j                  |j                  ||¬«       t        | j                  |j                  ||¬«       t        | j                  |j                  ||¬«       t        | j
                  |j
                  ||¬«       | j                  |j                  k(  sJ ‚| j                  |j                  k(  sJ ‚| j                  |j                  k(  sJ ‚y )N©ÚrtolÚatol)	r   Úcomponents_Úexplained_variance_Úsingular_values_Úmean_Únoise_variance_Ún_components_Ú
n_samples_Ún_features_in_)Úpca1Úpca2r!   r"   s       úy/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/sklearn/decomposition/tests/test_pca.pyÚ_check_fitted_pca_closer.   %   sÑ   € Ü�D×$Ñ$ d×&6Ñ&6¸TÈÕMÜØ× Ñ  $×":Ñ":ÀÈDõô �D×)Ñ)¨4×+@Ñ+@ÀtÐRVÕWÜ�D—J‘J §
¡
°¸DÕAÜ�D×(Ñ(¨$×*>Ñ*>ÀTÐPTÕUà×Ñ ×!3Ñ!3Ò3Ð3Ð3Ø�?‰?˜dŸo™oÒ-Ð-Ð-Ø×Ñ $×"5Ñ"5Ò5Ð5Ñ5ó    Ú
svd_solverÚn_componentsé   c                 óÞ  — t         j                  }t        || ¬«      }|j                  |«      j	                  |«      }|j
                  d   |k(  sJ ‚|j                  |«      }t        ||«       |j	                  |«      }t        ||«       |j                  «       }|j                  «       }t        t        j                  ||«      t        j                  |j
                  d   «      d¬«       y )N©r1   r0   r2   çê-�™—q=©r"   )ÚirisÚdatar
   ÚfitÚ	transformÚshapeÚfit_transformr   Úget_covarianceÚget_precisionÚnpÚdotÚeye)r0   r1   ÚXÚpcaÚX_rÚX_r2ÚcovÚ	precisions           r-   Útest_pcarH   3   sÃ   € ô 	�	‰	€AÜ
˜<°JÔ
?€Cð �'‰'�!‹*×
Ñ
˜qÓ
!€CØ�9‰9�Q‰<˜<Ò'Ð'Ð'ð ×Ñ˜QÓ€DÜ�C˜ÔØ
�-‰-˜Ó
€CÜ�C˜Ôð ×
Ñ
Ó
€CØ×!Ñ!Ó#€IÜ”B—F‘F˜3 	Ó*¬B¯F©F°1·7±7¸1±:Ó,>ÀUÖKr/   Údensity)ç{®Gáz„?çš™™™™™¹?g333333Ó?)r2   é   é
   Úsparse_containerr   r   Úscale)r2   rM   éd   c                 ó®  — d}d}t         j                  j                  | «      } |t        t        t
        f||¬«      «      }	|j                  |	j                  d   «      |z  }
|	j                  |
«      }	t        ||| ¬«      }|j                  |	«       |	j                  «       }t        ||| ¬«      }|j                  |«       t        |||¬«        |t        t        t
        f||¬«      «      }|j                  «       }t        |j                  |«      |j                  |«      |¬«       t        |j                  |«      |j                  |«      |¬«       y)z?Check that the results are the same for sparse and dense input.r5   ç»½×Ùß|Û=©ÚrngrI   r2   ©r1   r0   Úrandom_stater6   N)r?   ÚrandomÚdefault_rngr   ÚSPARSE_MÚSPARSE_Nr;   Úmultiplyr
   r9   Útoarrayr.   r   r:   )Úglobal_random_seedr0   rN   r1   rI   rO   r"   Útransform_atolrT   rB   Úscale_vectorrC   ÚXdÚpcadÚX2ÚX2ds                   r-   Útest_pca_sparserd   I   s(  € ð €DØ€Nä
�)‰)×
Ñ
Ð 2Ó
3€CÙÜœh¬Ð1°sÀGÔLó	€Að —:‘:˜aŸg™g a™jÓ)¨EÑ1€LØ	�
‰
�<Ó €Aä
Ø!ØØ'ô€Cð
 ‡G�GˆA„Jà	
�‰‹€BÜØ!ØØ'ô€Dð
 	‡H�HˆR„Lô ˜C ¨DÕ1ñ 
Üœh¬Ð1°sÀGÔLó
€Bð �*‰*‹,€Cä�C—M‘M "Ó% s§}¡}°SÓ'9ÀÕOÜ�C—M‘M "Ó% t§~¡~°cÓ':ÀÖPr/   c                 óþ  — t         j                  j                  | «      }t        t        f} |t        ||d¬«      «      } |t        ||d¬«      «      }t        dd| ¬«      }t        dd| ¬«      }|j                  |«       |j                  |«      }t        ||«       t        ||j                  |«      «       t        ||j                  |«      «       t        |j                  |«      |j                  |«      «       y )NrJ   rS   rM   r   rU   )r?   rW   rX   rY   rZ   r   r
   r9   r<   r.   r   r:   )	r]   rN   rT   ÚshprB   rb   Úpca_fitÚpca_fit_transformÚtransformed_Xs	            r-   Útest_pca_sparse_fit_transformrj   |   sß   € ä
�)‰)×
Ñ
Ð 2Ó
3€CÜ”XÐ
€CÙÔ-¨c°sÀDÔIÓJ€AÙ	Ô.¨s¸ÀTÔJÓ	K€Bä˜r¨hÐEWÔX€GÜØ HÐ;MôÐð ‡K�K�„NØ%×3Ñ3°AÓ6€Mä˜GÐ%6Ô7Ü�MÐ#4×#>Ñ#>¸qÓ#AÔBÜ�M 7×#4Ñ#4°QÓ#7Ô8Ü�G×%Ñ% bÓ)Ð+<×+FÑ+FÀrÓ+JÕKr/   r   r   c                 ó$  — t         j                  j                  | «      } |t        t        t
        f|¬«      «      }t        d|¬«      }d|› d�}t        j                  t        |¬«      5  |j                  |«       d d d «       y # 1 sw Y   y xY w)N©rT   é   r4   zWPCA only support sparse inputs with the "arpack" and "covariance_eigh" solvers, while "z" was passed©Úmatch)r?   rW   ÚRandomStater   rY   rZ   r
   ÚpytestÚraisesÚ	TypeErrorr9   )r]   r0   rN   rT   rB   rC   Úerror_msg_patterns          r-   Útest_sparse_pca_solver_errorru   ‘   sƒ   € ô �)‰)×
Ñ
Ð 2Ó
3€CÙÔ-¬x¼Ð.BÈÔLÓM€AÜ
˜2¨*Ô
5€Cð	Ø&˜< |ð	5ð ô 
�‰”yÐ(9Ô	:ñ Ø�‰�Œ
÷÷ ñ ús   Á+BÂBc                 ó0  — t         j                  j                  | «      } |t        t        t
        f|¬«      «      }t        dd¬«      j                  |«      }t        dd¬«      j                  |«      }t        |j                  |j                  d¬«       y)	zHCheck that "auto" and "arpack" solvers are equivalent for sparse inputs.rl   rM   r   r4   r   ç{®Gázt?©r!   N)
r?   rW   rp   r   rY   rZ   r
   r9   r   r%   )r]   rN   rT   rB   Ú
pca_arpackÚpca_autos         r-   Ú7test_sparse_pca_auto_arpack_singular_values_consistencyr{   Ÿ   sw   € ô
 �)‰)×
Ñ
Ð 2Ó
3€CÙÔ-¬x¼Ð.BÈÔLÓM€AÜ "°Ô:×>Ñ>¸qÓA€JÜ ¨vÔ6×:Ñ:¸1Ó=€HÜ�J×/Ñ/°×1JÑ1JÐQUÖVr/   c                  ó  — d} | dz   }t         j                  j                  dd| |f¬«      }t        | ¬«      }t	        j
                  «       5  t	        j                  dt        «       |j                  |«       d d d «       y # 1 sw Y   y xY w)NrM   rL   éÿÿÿÿr2   ©Úsize©r1   Úerror)	r?   rW   Úuniformr
   ÚwarningsÚcatch_warningsÚsimplefilterÚRuntimeWarningr9   )r1   Ú
n_featuresrB   rC   s       r-   Útest_no_empty_slice_warningrˆ   «   sw   € à€LØ Ñ!€JÜ
�	‰	×Ñ˜"˜a |°ZÐ&@ÐÓA€AÜ
˜<Ô
(€CÜ	×	 Ñ	 Ó	"ñ Ü×Ñ˜g¤~Ô6Ø�‰�Œ
÷÷ ñ ús   Á,BÂB
ÚcopyTFÚsolverc                 ó¦  — t         j                  j                  d«      }d}d}d}d}t        j                  |j	                  ||«      t        j                  t        j
                  t        j                  dd|«      «      |j	                  ||«      «      «      }|d d …d d…fxx   dz  cc<   |j                  ||fk(  sJ ‚|j                  d¬	«      j                  «       d
kD  sJ ‚|j                  «       }t        |d|| dd¬«      }	|	j                  |j                  «       «      }
|
j                  ||fk(  sJ ‚|	j                  |«      }t        |
|d¬«       t        |
j                  dd¬«      t        j                  |«      «       t        |
j                  d¬	«      t        j                   |«      d¬«       |j                  «       }t        |d|| ¬«      j#                  |j                  «       «      }	|	j                  |«      }|j                  ||fk(  sJ ‚|j                  d¬	«      j                  «       t%        j&                  dd¬«      k(  sJ ‚y )Nr   rP   éP   rm   é2   g      $@ç      ð?é   ©ÚaxisgfffffæE@Té   )r1   Úwhitenr‰   r0   rV   Úiterated_powergü©ñÒMb@?rx   r2   ©Úddofr‘   r5   r6   F)r1   r“   r‰   r0   gfffff†R@rK   )Úrel)r?   rW   rp   r@   ÚrandnÚdiagÚlinspacer;   Ústdr‰   r
   r<   r:   r   ÚonesÚmeanÚzerosr9   rq   Úapprox)rŠ   r‰   rT   Ú	n_samplesr‡   r1   ÚrankrB   ÚX_rC   Ú
X_whitenedÚX_whitened2ÚX_unwhiteneds                r-   Útest_whiteningr¦   ¶   s	  € ô �)‰)×
Ñ
 Ó
"€CØ€IØ€JØ€LØ€Dô 	�‰Ø�	‰	�)˜TÓ"Ü
�‰Œr�w‰w”r—{‘{ 4¨¨dÓ3Ó4°c·i±iÀÀjÓ6QÓRó	€Að ‚aˆˆ"ˆ€fƒI��NƒIà�7‰7�y *Ð-Ò-Ð-Ð-ð �5‰5�aˆ5‹=×ÑÓ Ò%Ð%Ð%ð 
�‰‹€BÜ
Ø!ØØØØØô€Cð ×"Ñ" 2§7¡7£9Ó-€JØ×Ñ 	¨<Ð8Ò8Ð8Ð8Ø—-‘- Ó#€KÜ�J °$Õ7ä�J—N‘N¨°�NÓ2´B·G±G¸LÓ4IÔJÜ�J—O‘O¨�OÓ+¬R¯X©X°lÓ-CÈ%ÕPà	
�‰‹€BÜ
Ø!¨%°dÀvôç	�cˆ"�'‰'‹)ƒnð ð —=‘= Ó$€LØ×Ñ )¨\Ð!:Ò:Ð:Ð:ð ×Ñ ÐÓ#×'Ñ'Ó)¬V¯]©]¸4ÀTÔ-JÒJÐJÑJr/   Úother_svd_solverr   Ú
data_shapeÚtallÚwideÚrank_deficientr“   c                 óª	  — |dk(  rd\  }}nd\  }}d}|r[t         j                  j                  |«      }	t        ||«      dz  }
|	j	                  ||z   |
f¬«      |	j	                  |
|f¬«      z  }nt        ||z   |d|¬«      }t        ||«      }
|j                  |d	¬
«      }|d | ||d  }}|t         j                  k(  rt        dd¬«      }d}nt        dd¬«      }d}i }| dk(  rd}ddi}n!| dk(  rt        j                  ||«      dz
  }nd }t        |d|¬«      }t        d|| ||dœ|¤Ž}|j                  |«      }t        j                  |«      j                  «       sJ ‚|j                  |k(  sJ ‚|j                  |«      }t        j                  |«      j                  «       sJ ‚|j                  |k(  sJ ‚|j                  dk\  j                  «       sJ ‚t!        |j                  |j                  fi |¤Ž t!        |j"                  |j"                  fi |¤Ž |j$                  }t        j                  |«      j                  «       sJ ‚|j$                  }t        j                  |«      j                  «       sJ ‚|j                  |kD  }|j'                  «       dkD  sJ ‚t!        ||   ||   fi |¤Ž t!        |d d …|f   |d d …|f   fi |¤Ž |j)                  |«      }t        j                  |«      j                  «       sJ ‚|j                  |k(  sJ ‚|j)                  |«      }t        j                  |«      j                  «       sJ ‚|j                  |k(  sJ ‚t!        |d d …|f   |d d …|f   fi |¤Ž |j+                  |«      }t        j                  |«      j                  «       sJ ‚|j                  |k(  sJ ‚|j+                  |«      }t        j                  |«      j                  «       sJ ‚|j                  |k(  sJ ‚|j$                  j,                  d   |j$                  j,                  d   k(  rt!        ||fi |¤Ž t!        ||fi |¤Ž y |j$                  j,                  d   |
k  r-|j                  j                  «       |kD  sJ ‚t!        ||fi |¤Ž y t!        |j)                  |«      d d …|f   |j)                  |«      d d …|f   fi |¤Ž y )Nr©   )rP   rm   )rm   rP   rM   rL   r~   ç      à?)r    r‡   Útail_strengthrV   F©r‰   g¸…ëQ¸ž?çñhãˆµøä>)r"   r!   rR   r5   r   r”   r�   r   r2   r   ©r1   r0   r“   )r1   r0   r“   rV   r   © )r?   rW   rX   ÚminÚstandard_normalr	   ÚastypeÚfloat32ÚdictÚminimumr
   r<   ÚisfiniteÚallÚdtyper$   r   Úexplained_variance_ratio_r#   Úsumr:   Úinverse_transformr;   )r§   r¨   r«   r“   r]   Úglobal_dtyper    r‡   Ún_samples_testrT   r¡   rB   ÚX_trainÚX_testÚtolsÚvariance_thresholdÚextra_other_kwargsr1   Úpca_fullÚ	pca_otherÚX_trans_full_trainÚX_trans_other_trainÚreference_componentsÚother_componentsÚstableÚX_trans_full_testÚX_trans_other_testÚX_recons_full_testÚX_recons_other_tests                                r-   Útest_pca_solver_equivalencerÑ   í   s-  € ð �VÒØ 'Ñˆ	‘:à 'Ñˆ	�:Ø€NáÜ�i‰i×#Ñ#Ð$6Ó7ˆÜ�9˜jÓ)¨QÑ.ˆØ×ÑØ˜nÑ,¨dÐ3ð  ó 
à×Ñ d¨JÐ%7ÐÓ8ñ9‰ô !Ø .Ñ0Ø!ØØ+ô	
ˆô �9˜jÓ)ˆà	�‰� EˆÓ*€AØ˜
˜�m Q y z ]ˆV€Gà”r—z‘zÒ!Ü˜ DÔ)ˆØ!Ñä˜ UÔ+ˆØ"ÐàÐØ˜<Ò'ð ˆØ.°Ð3ÑØ	˜XÒ	%ô —z‘z )¨ZÓ8¸1Ñ<‰ð ˆä ¸ÈÔO€HÜð Ø!Ø#ØØ'ñ	ð
 ñ€Ið "×/Ñ/°Ó8ÐÜ�;‰;Ð)Ó*×.Ñ.Ô0Ð0Ð0Ø×#Ñ# |Ò3Ð3Ð3Ø#×1Ñ1°'Ó:ÐÜ�;‰;Ð*Ó+×/Ñ/Ô1Ð1Ð1Ø×$Ñ$¨Ò4Ð4Ð4à×(Ñ(¨AÑ-×2Ñ2Ô4Ð4Ð4Ü�H×0Ñ0°)×2OÑ2OÑXÐSWÒXÜØ×*Ñ*Ø×+Ñ+ñð òð
 $×/Ñ/ÐÜ�;‰;Ð+Ó,×0Ñ0Ô2Ð2Ð2Ø ×,Ñ,ÐÜ�;‰;Ð'Ó(×,Ñ,Ô.Ð.Ð.ð ×)Ñ)Ð,>Ñ>€FØ�:‰:‹<˜!ÒÐÐÜÐ(¨Ñ0Ð2BÀ6Ñ2JÑSÈdÒSô ØšA˜v˜IÑ&Ð(:º1¸f¸9Ñ(EñØIMòð !×*Ñ*¨6Ó2ÐÜ�;‰;Ð(Ó)×-Ñ-Ô/Ð/Ð/Ø×"Ñ" lÒ2Ð2Ð2Ø"×,Ñ,¨VÓ4ÐÜ�;‰;Ð)Ó*×.Ñ.Ô0Ð0Ð0Ø×#Ñ# |Ò3Ð3Ð3ÜÐ&¢q¨& yÑ1Ð3DÂQÈÀYÑ3OÑXÐSWÒXð "×3Ñ3Ð4EÓFÐÜ�;‰;Ð)Ó*×.Ñ.Ô0Ð0Ð0Ø×#Ñ# |Ò3Ð3Ð3Ø#×5Ñ5Ð6HÓIÐÜ�;‰;Ð*Ó+×/Ñ/Ô1Ð1Ð1Ø×$Ñ$¨Ò4Ð4Ð4à×Ñ×!Ñ! !Ñ$¨×(<Ñ(<×(BÑ(BÀ1Ñ(EÒEô 	Ð*¨FÑ;°dÒ;ÜÐ+¨VÑ<°tÓ<Ø	×	Ñ	×	#Ñ	# AÑ	&¨Ò	-ð ×+Ñ+×/Ñ/Ó1Ð4FÒFÐFÐFÜÐ*Ð,?ÑHÀ4ÓHô 	Ø×ÑÐ1Ó2²1°f°9Ñ=Ø×ÑÐ 3Ó4²Q¸°YÑ?ñ	
ð ó	
r/   rB   rP   rŒ   éN   )Ún_informativerV   rM   )zrandom-tallzcorrelated-tallzrandom-wide)Úidsc                 óX  — t        d|d¬«      }|j                  | «      }t        |j                  t	        j
                  |dd¬«      «       t        j                  j                  t	        j                  | d¬«      «      d   }t        |d¬	«      d d }t        |j                  |d
¬«       y )NrL   r   rU   r2   r•   F)ÚrowvarT)Úreverserw   rx   )
r
   r<   r   r$   r?   ÚvarÚlinalgÚeigrF   Úsorted)rB   r0   rC   ÚX_pcaÚexpected_results        r-   Ú%test_pca_explained_variance_empiricalrÞ   y  s†   € ô ˜1¨À!Ô
D€CØ×Ñ˜aÓ €EÜ�C×+Ñ+¬R¯V©V°EÀÈÔ-JÔKä—i‘i—m‘m¤B§F¡F¨1°UÔ$;Ó<¸QÑ?€OÜ˜_°dÔ;¸B¸QÐ?€OÜ�C×+Ñ+¨_À4ÖHr/   c                 ó0  — t         j                  j                  d«      }d\  }}|j                  ||«      }t	        dd|¬«      }t	        d| |¬«      }|j                  |«       |j                  |«       t        |j                  |j                  d¬«       y )Nr   ©rP   rŒ   rL   r   rU   rw   rx   )r?   rW   rp   r˜   r
   r9   r   r%   )r0   rT   r    r‡   rB   rÆ   rÇ   s          r-   Ú$test_pca_singular_values_consistencyrá   �  s|   € ä
�)‰)×
Ñ
 Ó
"€CØ#Ñ€IˆzØ�	‰	�)˜ZÓ(€Aä ¨fÀ3ÔG€HÜ ¨zÈÔL€Ià‡L�L�„OØ‡M�M�!Ôä�H×-Ñ-¨y×/IÑ/IÐPTÖUr/   c           	      ól  — t         j                  j                  d«      }d\  }}|j                  ||«      }t	        d| |¬«      }|j                  |«      }t        t        j                  |j                  dz  «      t         j                  j                  |d«      dz  «       t        |j                  t        j                  t        j                  |dz  d¬«      «      «       d\  }}|j                  ||«      }t	        d| |¬«      }|j                  |«      }|t        j                  t        j                  |dz  d¬«      «      z  }|d d …dfxx   d	z  cc<   |d d …d
fxx   dz  cc<   t        j                  ||j                  «      }|j                  |«       t        |j                  g d¢«       y )Nr   rà   rL   rU   Úfror�   )rP   én   r�   ç‰A`åÐ"	@r2   çX9´Èv¾@)rå   ræ   rŽ   )r?   rW   rp   r˜   r
   r<   r   r½   r%   rÙ   ÚnormÚsqrtr@   r#   r9   )r0   rT   r    r‡   rB   rC   ÚX_transÚX_hats           r-   Útest_pca_singular_valuesrë   œ  s_  € ä
�)‰)×
Ñ
 Ó
"€CØ#Ñ€IˆzØ�	‰	�)˜ZÓ(€Aä
˜1¨À#Ô
F€CØ×Ñ Ó"€Gô Ü
�‰ˆs×#Ñ# QÑ&Ó'¬¯©¯©¸ÀÓ)GÈ1Ñ)Lôô �C×(Ñ(¬"¯'©'´"·&±&¸À!¹È!Ô2LÓ*MÔNð %Ñ€IˆzØ�	‰	�)˜ZÓ(€Aä
˜1¨À#Ô
F€CØ×Ñ Ó"€GØŒr�w‰w”r—v‘v˜g q™j¨qÔ1Ó2Ñ2€GØŠAˆqˆDƒM�UÑƒMØŠAˆqˆDƒM�UÑƒMÜ�F‰F�7˜CŸO™OÓ,€EØ‡G�GˆE„NÜ�C×(Ñ(Ò*=Õ>r/   c                 ó  — t         j                  j                  d«      }d\  }}|j                  ||«      dz  }|d dxxx t        j                  g d¢«      z  ccc d|j                  d|«      z  t        j                  g d¢«      z   }t        d| ¬«      j                  |«      j                  |«      }|t        j                  |dz  j                  «       «      z  }t        t        j                  |d   d   «      d	d
¬«       y )Nr   ©rP   r�   rK   rM   ©r�   é   é   r2   rL   r4   rŽ   rw   rx   )r?   rW   rp   r˜   Úarrayr
   r9   r:   rè   r½   r   Úabs)r0   rT   ÚnÚprB   ÚXtÚYts          r-   Útest_pca_check_projectionr÷   º  sÌ   € ô �)‰)×
Ñ
 Ó
"€CØ�D€A€qØ�	‰	�!�Q‹˜#Ñ€AØ€c€rƒFŒb�h‰h’yÓ!Ñ!ƒFØ	ˆs�y‰y˜˜A‹Ñ	¤§¡ª)Ó!4Ñ	4€Bä	˜!¨
Ô	3×	7Ñ	7¸Ó	:×	DÑ	DÀRÓ	H€BØŒ"�'‰'�2�q‘5—+‘+“-Ó
 Ñ €Bä”B—F‘F˜2˜a™5 ™8Ó$ c°Ö5r/   c                 óè   — ddgddgg}t        d| d¬«      }|j                  |«      }|j                  sJ d«       ‚t        |j	                  «       dd¬«       t        |j                  «       d	d
¬«       y )NrŽ   g        r2   r   rU   )rL   r2   r5   r6   g¸…ëQ¸æ?rw   rx   )r
   r<   r;   r   r�   r›   )r0   rB   rC   ré   s       r-   Útest_pca_check_projection_listrù   É  si   € ð ˆsˆ�c˜3�ZÐ €AÜ
˜1¨À!Ô
D€CØ×Ñ Ó"€GØ�=Š=Ð ˜&Ó ˆ=Ü�G—L‘L“N D¨uÕ5Ü�G—K‘K“M 4¨dÖ3r/   )r   r   r   c                 ó:  — t         j                  j                  d«      }d\  }}|j                  ||«      }|d d …dfxx   dz  cc<   |g d¢z  }t	        d| |¬«      j                  |«      }|j                  |«      }|j                  |«      }t        ||d¬	«       y )
Nr   )r�   r�   r2   r°   )rð   rï   r�   rL   r±   çñhãˆµøÔ>rx   )	r?   rW   rp   r˜   r
   r9   r:   r¾   r   )	r0   r“   rT   ró   rô   rB   rC   ÚYÚ	Y_inverses	            r-   Útest_pca_inverserþ   Ô  s�   € ô �)‰)×
Ñ
 Ó
"€CØ�D€A€qØ�	‰	�!�Q‹€AØ‚aˆ€dƒGˆwÑƒGØŠ�N€Aô ˜1¨¸FÔ
C×
GÑ
GÈÓ
J€CØ�‰�aÓ€AØ×%Ñ% aÓ(€IÜ�A�y tÖ,r/   r8   )r   r2   r   )r2   r   r   z!svd_solver, n_components, err_msg))r   r   ú2must be between 1 and min\(n_samples, n_features\))r   r   rÿ   )r   rL   zmust be strictly less than min)r   r�   zZn_components=3 must be between 0 and min\(n_samples, n_features\)=2 with svd_solver='full'c                 óp  — d}t        || ¬«      }t        j                  t        |¬«      5  |j	                  |«       d d d «       | dk(  rU|}dj                  ||«      }t        j                  t        |¬«      5  t        || ¬«      j	                  |«       d d d «       y y # 1 sw Y   ŒdxY w# 1 sw Y   y xY w)NrL   ©r0   rn   r   zgn_components={}L? must be strictly less than min\(n_samples, n_features\)={}L? with svd_solver='arpack')r
   rq   rr   Ú
ValueErrorr9   Úformat)r0   r8   r1   Úerr_msgÚ
smallest_dÚ
pca_fitteds         r-   Útest_pca_validationr  æ  s­   € ð, €JÜ�\¨jÔ9€Jä	�‰”z¨Ô	1ñ Ø�‰�tÔ÷ð �XÒØ!ˆð"ç"(¡&¨°zÓ"Bð 	ô
 �]‰]œ:¨WÔ5ñ 	?Ü�¨Ô4×8Ñ8¸Ô>÷	?ð 	?ð ÷	ð ú÷	?ð 	?ús   «B Á9B,Â B)Â,B5zsolver, n_components_c                 ó`   — t        |¬«      }|j                  | «       |j                  |k(  sJ ‚y )Nr  )r
   r9   r(   )r8   rŠ   r(   rC   s       r-   Útest_n_components_noner	    s-   € ô ˜Ô
 €CØ‡G�GˆD„MØ×Ñ Ò-Ð-Ñ-r/   c                 óÎ   — t         j                  j                  d«      }d\  }}|j                  ||«      }t	        d| ¬«      }|j                  |«       |j                  dk(  sJ ‚y )Nr   ©iX  rM   Úmler4   r2   )r?   rW   rp   r˜   r
   r9   r(   )r0   rT   r    r‡   rB   rC   s         r-   Útest_n_components_mler    s]   € ô �)‰)×
Ñ
 Ó
"€CØ#Ñ€IˆzØ�	‰	�)˜ZÓ(€AÜ
˜5¨ZÔ
8€CØ‡G�GˆA„JØ×Ñ Ò!Ð!Ñ!r/   c                 ó.  — t         j                  j                  d«      }d\  }}|j                  ||«      }t	        d| ¬«      }dj                  | «      }t        j                  t        |¬«      5  |j                  |«       d d d «       y # 1 sw Y   y xY w)Nr   r  r  r4   z:n_components='mle' cannot be a string with svd_solver='{}'rn   )
r?   rW   rp   r˜   r
   r  rq   rr   r  r9   )r0   rT   r    r‡   rB   rC   r  s          r-   Útest_n_components_mle_errorr  )  s�   € ô �)‰)×
Ñ
 Ó
"€CØ#Ñ€IˆzØ�	‰	�)˜ZÓ(€AÜ
˜5¨ZÔ
8€CØJ×QÑQØó€Gô 
�‰”z¨Ô	1ñ Ø�‰�Œ
÷÷ ñ ús   Á0BÂBc                  ó8  — t         j                  j                  d«      } d\  }}| j                  ||«      dz  }|d dxxx t        j                  g d¢«      z  ccc t        dd¬«      j                  |«      }|j                  dk(  sJ ‚|j                  d	k(  sJ ‚y )
Nr   ©rP   rð   rK   rM   ©r�   rï   rð   r2   rL   r  r   r4   r2   )	r?   rW   rp   r˜   rñ   r
   r9   r1   r(   )rT   ró   rô   rB   rC   s        r-   Útest_pca_dimr  8  s‹   € ä
�)‰)×
Ñ
 Ó
"€CØ�D€A€qØ�	‰	�!�Q‹˜#Ñ€AØ€c€rƒFŒb�h‰h’Ó'Ñ'ƒFÜ
˜5¨VÔ
4×
8Ñ
8¸Ó
;€CØ×Ñ˜uÒ$Ð$Ð$Ø×Ñ Ò!Ð!Ñ!r/   c            
      ó  — d\  } }t         j                  j                  d«      }|j                  | |«      dz  |j                  | d«      t        j                  g d¢«      z  z   t        j                  g d¢«      z   }t        |d¬«      }|j                  |«       |j                  }t        j                  t        d|«      D �cg c]  }t        ||| «      ‘Œ c}«      }|d   |j                  «       d	| z  z
  kD  sJ ‚y c c}w )
N©r   rð   r   rK   r2   r  )r2   r   r’   rï   é   r   r4   rJ   )r?   rW   rp   r˜   rñ   r
   r9   r$   Úranger   Úmax)ró   rô   rT   rB   rC   ÚspectÚkÚlls           r-   Útest_infer_dim_1r  C  sÝ   € ð �D€A€qÜ
�)‰)×
Ñ
 Ó
"€Cà�	‰	�!�Q‹˜#ÑØ
�)‰)�A�q‹/œBŸH™H¢_Ó5Ñ
5ñ	6ä
�(‰(’?Ó
#ñ	$ð ô
 ˜1¨Ô
0€CØ‡G�GˆA„JØ×#Ñ#€EÜ	�‰¼5ÀÀA»;ÖG°aÔ$ U¨A¨qÕ1ÒGÓ	H€BØˆa‰5�2—6‘6“8˜d Q™hÑ&Ò&Ð&Ñ&ùò Hs   ÃC>c                  óx  — d\  } }t         j                  j                  d«      }|j                  | |«      dz  }|d dxxx t        j                  g d¢«      z  ccc |ddxxx t        j                  g d¢«      z  ccc t        |d¬	«      }|j                  |«       |j                  }t        || «      d
kD  sJ ‚y )Nr  r   rK   rM   r  é   ©r  r   r’   rL   r}   r   r4   r2   ©	r?   rW   rp   r˜   rñ   r
   r9   r$   r   ©ró   rô   rT   rB   rC   r  s         r-   Útest_infer_dim_2r"  T  sŸ   € ð �D€A€qÜ
�)‰)×
Ñ
 Ó
"€CØ�	‰	�!�Q‹˜#Ñ€AØ€c€rƒFŒb�h‰h’Ó'Ñ'ƒFØ€bˆƒH”—‘Ò)Ó*Ñ*ƒHÜ
˜1¨Ô
0€CØ‡G�GˆA„JØ×#Ñ#€EÜ˜E 1Ó%¨Ò)Ð)Ñ)r/   c            	      óÄ  — d\  } }t         j                  j                  d«      }|j                  | |«      dz  }|d dxxx t        j                  g d¢«      z  ccc |ddxxx t        j                  g d¢«      z  ccc |dd	xxx d
t        j                  g d¢«      z  z  ccc t        |d¬«      }|j                  |«       |j                  }t        || «      d
kD  sJ ‚y )Nr  r   rK   rM   r  r  r  rm   é(   rL   )r}   r2   r}   r2   r}   r   r4   r   r!  s         r-   Útest_infer_dim_3r%  b  s¼   € Ø�D€A€qÜ
�)‰)×
Ñ
 Ó
"€CØ�	‰	�!�Q‹˜#Ñ€AØ€c€rƒFŒb�h‰h’Ó'Ñ'ƒFØ€bˆƒH”—‘Ò)Ó*Ñ*ƒHØ€bˆƒH�”B—H‘HÒ/Ó0Ñ0Ñ0ƒHÜ
˜1¨Ô
0€CØ‡G�GˆA„JØ×#Ñ#€EÜ˜E 1Ó%¨Ò)Ð)Ñ)r/   z'X, n_components, n_components_validatedgffffffî?rL   rJ   rð   r  r­   c                 óª   — t        |d¬«      }|j                  | «       |j                  t        j                  |«      k(  sJ ‚|j
                  |k(  sJ ‚y )Nr   r4   )r
   r9   r1   rq   rŸ   r(   )rB   r1   Ún_components_validatedrC   s       r-   Ú$test_infer_dim_by_explained_variancer(  o  sM   € ô ˜<°FÔ
;€CØ‡G�GˆA„JØ×ÑœvŸ}™}¨\Ó:Ò:Ð:Ð:Ø×ÑÐ 6Ò6Ð6Ñ6r/   c                 ó¤  — d\  }}t         j                  j                  d«      }|j                  ||«      dz  t        j                  g d¢«      z   }t        d| ¬«      }|j                  |«       |j                  |«      }dt        j                  dt         j                  z  t        j                  d«      z  d	z  «      z  |z  }t        ||z  dd
¬«       |j                  |j                  ||«      dz  t        j                  g d¢«      z   «      }||kD  sJ ‚t        dd| ¬«      }|j                  |«       |j                  |«      }||kD  sJ ‚y )N)r   r�   r   rK   rî   rL   r4   g      à¿r2   g|®Gáz„?gš™™™™™©?rx   gš™™™™™É?T)r1   r“   r0   )r?   rW   rp   r˜   rñ   r
   r9   ÚscoreÚlogÚpiÚexpr   )	r0   ró   rô   rT   rB   rC   Úll1ÚhÚll2s	            r-   Útest_pca_scorer1  ~  s  € ð �D€A€qÜ
�)‰)×
Ñ
 Ó
"€CØ�	‰	�!�Q‹˜#Ñ¤§¡ªÓ 3Ñ3€AÜ
˜1¨Ô
4€CØ‡G�GˆA„Jà
�)‰)�A‹,€CØŒr�v‰v�aœ"Ÿ%™%‘i¤"§&¡&¨£)Ñ+¨fÑ4Ó5Ñ5¸Ñ9€AÜ�C˜!‘G˜Q TÕ*à
�)‰)�C—I‘I˜a “O cÑ)¬B¯H©H²YÓ,?Ñ?Ó
@€CØ�Š9Ðˆ9ä
˜1 T°jÔ
A€CØ‡G�GˆA„JØ
�)‰)�A‹,€CØ�Š9Ð‰9r/   c                  óx  — d\  } }t         j                  j                  d«      }|j                  | |«      |j                  | d«      t        j                  g d¢«      z  z   t        j                  g d¢«      z   }|j                  | |«      |j                  | d«      t        j                  g d¢«      z  z   t        j                  g d¢«      z   }t        j
                  |«      }t        |«      D ]4  }t        |d¬«      }|j                  |«       |j                  |«      ||<   Œ6 |j                  «       dk(  sJ ‚y )N)éÈ   r�   r   r2   rî   )r2   r   r’   r   r4   )r?   rW   rp   r˜   rñ   rž   r  r
   r9   r*  Úargmax)ró   rô   rT   ÚXlrõ   r  r  rC   s           r-   Útest_pca_score3r6  ”  sñ   € à�D€A€qÜ
�)‰)×
Ñ
 Ó
"€CØ	�‰�1�a‹˜3Ÿ9™9 Q¨›?¬R¯X©X²iÓ-@Ñ@Ñ	@Ä2Ç8Á8ÊIÓCVÑ	V€BØ	�‰�1�a‹˜3Ÿ9™9 Q¨›?¬R¯X©X²iÓ-@Ñ@Ñ	@Ä2Ç8Á8ÊIÓCVÑ	V€BÜ	�‰�!‹€BÜ�1‹Xò ˆÜ˜q¨VÔ4ˆØ�‰�ŒØ—	‘	˜"“ˆˆ1Šðð
 �9‰9‹;˜!ÒÐÑr/   c                 óÖ   — t        j                  d¬«      \  }}t        d| d¬«      }|j                  |«       t	        j
                  |j                  |j                  z
  dk\  «      sJ ‚y )NT©Ú
return_X_yrm   r   rU   )r   Úload_digitsr
   r9   r?   rº   r$   r'   )r0   rB   Ú_rC   s       r-   Útest_pca_sanity_noise_variancer<  £  sY   € ô ×Ñ¨4Ô0�D€A€qÜ
˜2¨*À1Ô
E€CØ‡G�GˆA„JÜ�6‰6�3×*Ñ*¨S×-@Ñ-@Ñ@ÀQÑFÔGÐGÑGr/   c                 ó
  — t        j                  d¬«      \  }}t        ddd¬«      }t        d| d¬«      }|j                  |«       |j                  |«       t	        |j                  |«      |j                  |«      d¬«       y )	NTr8  rm   r   r   rU   rû   rx   )r   r:  r
   r9   r   r*  )r0   rB   r;  rÆ   rÇ   s        r-   Ú"test_pca_score_consistency_solversr>  ¯  si   € ô ×Ñ¨4Ô0�D€A€qÜ ¨vÀAÔF€HÜ °
ÈÔK€IØ‡L�L�„OØ‡M�M�!ÔÜ�H—N‘N 1Ó% y§¡°qÓ'9ÀÖEr/   c                 ó´  — d\  }}t         j                  j                  d«      }|j                  ||«      dz  t        j                  g d¢«      z   }t        || ¬«      }|j                  |«       |j                  dk(  sJ ‚|j                  |«       |j                  |j                  «       |j                  dk(  sJ ‚|j                  |j                  «       y )Nrí   r   rK   rî   r4   )
r?   rW   rp   r˜   rñ   r
   r9   r'   r*  ÚT)r0   ró   rô   rT   rB   rC   s         r-   Ú'test_pca_zero_noise_variance_edge_casesrA  »  s¯   € ð �D€A€qÜ
�)‰)×
Ñ
 Ó
"€CØ�	‰	�!�Q‹˜#Ñ¤§¡ªÓ 3Ñ3€Aä
˜1¨Ô
4€CØ‡G�GˆA„JØ×Ñ !Ò#Ð#Ð#ð ‡I�Iˆa„Là‡G�GˆA�C‰C„LØ×Ñ !Ò#Ð#Ð#ð ‡I�Iˆa�c‰c…Nr/   z4n_samples, n_features, n_components, expected_solver))rM   r�   rð   r   )r   r�   r�   r   )r   éô  i�  r   )r   rB  rM   r   )r   rB  r­   r   c                 óB  — t         j                  j                  d«      j                  | |f¬«      }t	        |d¬«      }t	        ||d¬«      }|j                  |«       |j                  |k(  sJ ‚|j                  |«       t        |j                  |j                  «       y )Nr   r~   )r1   rV   rU   )	r?   rW   rp   r‚   r
   r9   Ú_fit_svd_solverr   r#   )r    r‡   r1   Úexpected_solverr8   rz   Úpca_tests          r-   Útest_pca_svd_solver_autorG  Ñ  sŒ   € ô  �9‰9× Ñ  Ó#×+Ñ+°)¸ZÐ1HÐ+ÓI€DÜ ¸1Ô=€HÜØ!¨oÈAô€Hð ‡L�L�ÔØ×#Ñ# Ò6Ð6Ð6Ø‡L�L�ÔÜ�H×(Ñ(¨(×*>Ñ*>Õ?r/   c           	      óp  — t         j                  j                  d«      }|j                  dd«      }t        j                  d«      }t        d«      D ]+  }t        d| |¬«      }|j                  |«      d   ||d d …f<   Œ- t        |t        j                  |dd d …f   d«      j                  dd«      «       y )Nr   rM   )r  rL   r  rL   rU   )r?   rW   rp   Úrandrž   r  r
   r<   r   ÚtileÚreshape)r0   rT   rB   ri   ÚirC   s         r-   Útest_pca_deterministic_outputrM  ì  s¡   € ä
�)‰)×
Ñ
 Ó
"€CØ�‰��RÓ€Aä—H‘H˜WÓ%€MÜ�2‹Yò 6ˆÜ˜q¨ZÀcÔJˆØ!×/Ñ/°Ó2°1Ñ5ˆ�aš�dÒð6ô �M¤2§7¡7¨=¸ºA¸Ñ+>ÀÓ#C×#KÑ#KÈBÐPQÓ#RÕSr/   c                 ó2   — t        | |«       t        | «       y )N)Ú"check_pca_float_dtype_preservationÚ$check_pca_int_dtype_upcast_to_double)r0   r]   s     r-   Útest_pca_dtype_preservationrQ  ø  s   € ä& zÐ3EÔFÜ(¨Õ4r/   c                 óø  — t         j                  j                  |«      j                  dd«      }|j	                  t         j
                  d¬«      }|j	                  t         j                  «      }t        d| |¬«      j                  |«      }t        d| |¬«      j                  |«      }|j                  j                  t         j
                  k(  sJ ‚|j                  j                  t         j                  k(  sJ ‚|j                  |«      j                  t         j
                  k(  sJ ‚|j                  |«      j                  t         j                  k(  sJ ‚t        |j                  |j                  dd¬«       y )	Nr   rï   Fr¯   r�   rU   gü©ñÒMbP?r    )r?   rW   rp   rI  rµ   Úfloat64r¶   r
   r9   r#   r»   r:   r   )r0   ÚseedrB   Ú	X_float64Ú	X_float32Úpca_64Úpca_32s          r-   rO  rO  þ  s%  € ä
�	‰	×Ñ˜dÓ#×(Ñ(¨¨qÓ1€AØ—‘œŸ™¨%�Ó0€IØ—‘œŸ™Ó$€Iä˜a¨JÀTÔJ×NÑNØó€Fô ˜a¨JÀTÔJ×NÑNØó€Fð ×Ñ×#Ñ#¤r§z¡zÒ1Ð1Ð1Ø×Ñ×#Ñ#¤r§z¡zÒ1Ð1Ð1Ø×Ñ˜IÓ&×,Ñ,´·
±
Ò:Ð:Ð:Ø×Ñ˜IÓ&×,Ñ,´·
±
Ò:Ð:Ð:ô
 �F×&Ñ&¨×(:Ñ(:ÀÈDÖQr/   c                 óü  — t         j                  j                  d«      j                  ddd«      }|j	                  t         j
                  d¬«      }|j	                  t         j                  d¬«      }t        d| d¬«      j                  |«      }t        d| d¬«      j                  |«      }|j                  j                  t         j                  k(  sJ ‚|j                  j                  t         j                  k(  sJ ‚|j                  |«      j                  t         j                  k(  sJ ‚|j                  |«      j                  t         j                  k(  sJ ‚t        |j                  |j                  d¬	«       y )
Nr   r   )r   rï   Fr¯   r�   rU   g-Cëâ6?rx   )r?   rW   rp   Úrandintrµ   Úint64Úint32r
   r9   r#   r»   rS  r:   r   )r0   ÚX_i64ÚX_i32rW  rX  s        r-   rP  rP    s  € ä�I‰I×!Ñ! !Ó$×,Ñ,¨Q°°iÓ@€EØ�L‰LœŸ™¨ˆLÓ.€EØ�L‰LœŸ™¨ˆLÓ.€Eä˜a¨JÀQÔG×KÑKÈEÓR€FÜ˜a¨JÀQÔG×KÑKÈEÓR€Fà×Ñ×#Ñ#¤r§z¡zÒ1Ð1Ð1Ø×Ñ×#Ñ#¤r§z¡zÒ1Ð1Ð1Ø×Ñ˜EÓ"×(Ñ(¬B¯J©JÒ6Ð6Ð6Ø×Ñ˜EÓ"×(Ñ(¬B¯J©JÒ6Ð6Ð6ä�F×&Ñ&¨×(:Ñ(:ÀÖFr/   c                  ó  — t        d¬«      \  } }t        «       j                  | |«      }|j                  j	                  «       d   }t        |¬«      j                  | |«      }|j
                  | j                  d   k(  sJ ‚y )NTr8  éþÿÿÿr€   r2   )r   r
   r9   r¼   Úcumsumr(   r;   )rB   Úyr+   r1   r,   s        r-   Ú5test_pca_n_components_mostly_explained_variance_ratiorc  '  so   € ô  Ô%�D€A€qÜ‹5�9‰9�Q˜‹?€Dà×1Ñ1×8Ñ8Ó:¸2Ñ>€LÜ˜LÔ)×-Ñ-¨a°Ó3€DØ×Ñ §¡¨¡Ò+Ð+Ñ+r/   c                  ó¾   — t        j                  g d¢«      } d}dD ]3  }t        j                  t        d¬«      5  t        | ||«       d d d «       Œ5 y # 1 sw Y   Œ@xY w)N©r2   ç ÂëþKH´9rf  rf  rM   )r   rð   z"should be in \[1, n_features - 1\]rn   )r?   rñ   rq   rr   r  r   )Úspectrumr    r¡   s      r-   Útest_assess_dimension_bad_rankrh  3  sZ   € ä�x‰xÒ0Ó1€HØ€IØò 9ˆÜ�]‰]œ:Ð-RÔSñ 	9Ü˜h¨¨iÔ8÷	9ð 	9ñ9÷	9ð 	9ús   ºAÁA	c                  óè   — t        j                  g d¢«      } t        | dd¬«      t         j                   kD  sJ ‚dD ]#  }t        | |d«      t         j                   k(  rŒ#J ‚ t	        | d«      dk(  sJ ‚y )Nre  r2   rM   ©r¡   r    )rL   r�   )r?   rñ   r   Úinfr   )rg  r¡   s     r-   Útest_small_eigenvalues_mlerl  <  su   € ô �x‰xÒ0Ó1€Hä˜X¨A¸Ô<ÄÇÁ¸wÒFÐFÐFàò @ˆÜ  ¨4°Ó4¼¿¹¸Ó?Ð?Ð?ð@ô ˜H bÓ)¨QÒ.Ð.Ñ.r/   c                  ó˜   — t        j                  dddddd¬«      \  } }t        d¬«      j                  | «      }|j                  dk(  sJ ‚y )Nr  r2   é   é*   )r‡   rÓ   Ú
n_repeatedÚn_redundantÚn_clusters_per_classrV   r  r€   )r   r   r
   r9   r(   ©rB   r;  rC   s      r-   Útest_mle_redundant_datart  I  sU   € ô ×'Ñ'ØØØØØØô�D€A€qô ˜5Ô
!×
%Ñ
% aÓ
(€CØ×Ñ Ò!Ð!Ñ!r/   c                  óÖ   — t        j                  ddd¬«      \  } }t        dd¬«      }t        j                  t
        d¬	«      5  |j                  | «       d d d «       y # 1 sw Y   y xY w)
Nr  é   ro  )r    r‡   rV   r  r   r4   z?n_components='mle' is only supported if n_samples >= n_featuresrn   )r   r   r
   rq   rr   r  r9   rs  s      r-   Útest_fit_mle_too_few_samplesrw  X  s]   € ô ×'Ñ'°"ÀÐRTÔU�D€A€qä
˜5¨VÔ
4€CÜ	�‰ÜØOô
ñ ð 	�‰�Œ
÷	÷ ñ ús   ÁAÁA(c                  ó  — d\  } }t         j                  j                  d«      j                  | |«      }t        j                  |d d …d d…f   d¬«      |d d …df<   t        dd¬«      }|j                  |«       |j                  |dz
  k(  sJ ‚y )	N)r   rM   r   r}   r�   r  r   r  r2   )r?   rW   rp   r˜   r�   r
   r9   r(   )r    Ún_dimrB   Úpca_skls       r-   Útest_mle_simple_caser{  e  s‚   € ð  Ñ€IˆuÜ
�	‰	×Ñ˜aÓ ×&Ñ& y°%Ó8€AÜ�w‰w�qš˜C˜R˜C˜‘y rÔ*€A‚aˆ€e�HÜ�% FÔ+€GØ‡K�K�„NØ× Ñ  E¨A¡IÒ-Ð-Ñ-r/   c                  ó~  — d\  } }t        j                  | |f«      }t         j                  j                  |d¬«      \  }}}t	        |dd  t        j
                  |dz
  «      d¬«       t        j                  t        |d| ¬«      «      sJ ‚t        d|«      D ]#  }t        ||| «      t         j                   k(  rŒ#J ‚ y )	N)é	   r  T)Úfull_matricesr2   r5   r6   rj  rL   )
r?   rœ   rÙ   Úsvdr   rž   r¹   r   r  rk  )r    r‡   rB   r;  Úsr¡   s         r-   Útest_assess_dimension_rank_oner�  p  s«   € à Ñ€IˆzÜ
�‰�˜JÐ'Ó(€AÜ�i‰i�m‰m˜A¨TˆmÓ2�G€A€qˆ!ä�A�a�b�Eœ2Ÿ8™8 J°¡NÓ3¸%Õ@ä�;‰;Ô(¨°¸iÔHÔIÐIÐIÜ�a˜Ó$ò @ˆÜ   D¨)Ó4¼¿¹¸Ó?Ð?Ð?ñ@r/   c                  ó0  — t         j                  j                  d«      } d}| j                  d|«      }t	        dd|d¬«      j                  |«      }t	        dd¬«      j                  |«      }t	        dd	d¬
«      j                  |«      }t        t        j                  |j                  «      t        j                  |j                  «      «       t        t        j                  |j                  «      t        j                  |j                  «      «       y)zßCheck that exposing and setting `n_oversamples` will provide accurate results
    even when `X` as a large number of features.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/20589
    r   rP   r   r2   r   )r1   r0   Ún_oversamplesrV   r   r4   r   rU   N)	r?   rW   rp   r˜   r
   r9   r   rò   r#   )rT   r‡   rB   Úpca_randomizedrÆ   ry   s         r-   Ú%test_pca_randomized_svd_n_oversamplesr…  }  sÕ   € ô �)‰)×
Ñ
 Ó
"€CØ€JØ�	‰	�%˜Ó$€Aô ØØØ Øô	÷
 
�cˆ!ƒfð ô  ¨fÔ5×9Ñ9¸!Ó<€HÜ !°ÀqÔI×MÑMÈaÓP€Jä”B—F‘F˜8×/Ñ/Ó0´"·&±&¸×9OÑ9OÓ2PÔQÜ”B—F‘F˜>×5Ñ5Ó6¼¿¹¸z×?UÑ?UÓ8VÕWr/   c                  óÌ   — t        d¬«      j                  t        j                  «      } | j	                  «       }t        t        d«      D �cg c]  }d|› �‘Œ	 c}|«       yc c}w )z Check feature names out for PCA.rL   r€   rC   N)r
   r9   r7   r8   Úget_feature_names_outr   r  )rC   ÚnamesrL  s      r-   Útest_feature_names_outr‰  —  sK   € ä
˜1Ô
×
!Ñ
!¤$§)¡)Ó
,€Cà×%Ñ%Ó'€EÜ¬5°«8Ö4 a˜#˜a˜Sš	Ò4°eÕ<ùÒ4s   ÁA!c                 óV  — t         j                  j                  d«      }|j                  dd«      }t	        «       j                  |«      }|j                  |j                  z  }t        j                  |dd¬«      j                  «       }t         j                  j                  ||«       y)z9Check the accuracy of PCA's internal variance calculationr   r   r3  r2   r•   N)r?   rW   rp   r˜   r
   r9   r$   r¼   rØ   r½   Útestingr   )r‰   rT   rB   rC   Úpca_varÚtrue_vars         r-   Útest_variance_correctnessrŽ  Ÿ  s|   € ô �)‰)×
Ñ
 Ó
"€CØ�	‰	�$˜Ó€AÜ
‹%�)‰)�A‹,€CØ×%Ñ%¨×(EÑ(EÑE€GÜ�v‰v�a˜a aÔ(×,Ñ,Ó.€HÜ‡J�J×Ñ˜w¨Õ1r/   c           	      ó  — t        |||«      \  }}t        j                  j                  |«      }|j	                  ||¬«      }|j                  |«       |j                  «       }	|j                  «       }
|j                  dk(  rdnd}t        d¬«      5  t        |«      j                  |«      }|j                  «       }|j                  dk(  sJ ‚|j                  |j                  k(  sJ ‚t        t        |t        d¬	«      |	|t        |«      ¬
«       |j                  «       }|j                  dk(  sJ ‚|j                  |j                  k(  sJ ‚t        t        |t        d¬	«      |
|t        |«      ¬
«       d d d «       y # 1 sw Y   y xY w)Nr   r¶   g-Cëâ6*?gH¯¼šò×Š>T©Úarray_api_dispatch)rï   rï   Úcpu©Úxpr   r    )r   r7   r8   rµ   Úasarrayr9   r>   r=   r»   r   r   r;   r   r   r?   r   )ÚnameÚ	estimatorÚarray_namespaceÚdevice_nameÚ
dtype_namer”  r   Úiris_npÚiris_xpÚprecision_npÚcovariance_npr!   Úestimator_xpÚprecision_xpÚcovariance_xps                  r-   Úcheck_array_api_get_precisionr¢  ª  sb  € ô & o°{ÀJÓO�J€BˆÜ�i‰i×Ñ˜zÓ*€GØ�j‰j˜¨ˆjÓ0€Gà‡M�M�'ÔØ×*Ñ*Ó,€LØ×,Ñ,Ó.€Mà—=‘= IÒ-‰4°4€DÜ	¨4Ô	0ñ 
Ü˜YÓ'×+Ñ+¨GÓ4ˆØ#×1Ñ1Ó3ˆØ×!Ñ! VÒ+Ð+Ð+Ø×!Ñ! W§]¡]Ò2Ð2Ð2äÜ�L¤R°Ô6ØØÜ 
Ó+õ		
ð %×3Ñ3Ó5ˆØ×"Ñ" fÒ,Ð,Ð,Ø×"Ñ" g§m¡mÒ3Ð3Ð3äÜ�M¤b°Ô7ØØÜ 
Ó+õ		
÷!
÷ 
ñ 
ús   ÂC#E?Å?Fz(array_namespace, device_name, dtype_nameÚcheckr—  r4   r±   rK   ÚQR)r1   r0   Úpower_iteration_normalizerrV   c                 ó`   — | j                   j                  }t        | «      }  ||| |||¬«       y )N©r™  rš  )Ú	__class__Ú__name__r   )r—  r£  r˜  r™  rš  r–  s         r-   Útest_pca_array_api_compliancerª  Î  s6   € ð: ×Ñ×'Ñ'€DÜ�iÓ €IÙ	ØØØØØör/   r  c                 ó   — | j                   j                  } ||| |||¬«       t        |||«      \  }}t        d¬«      \  }}	|j	                  |d¬«      }t        |j                  «      }
t        | «      }|j                  ||¬«      }|j                  |	|¬«      }|j                  ||	«       |j                  }|j                  }t        |«      }t        d¬«      5  |j                  ||«       |j                  }t        |«      t        |«      k(  sJ ‚t        |t        d	¬
«      }|j                  }t        |«      t        |«      k(  sJ ‚t        |t        d	¬
«      }d d d «       j                  |j                  k(  sJ ‚|j                   d   |j                   d   k(  sJ ‚j                  |j                  k(  sJ ‚t#        |j                   d   |j                   d   «      }t%        |d | |d | |
¬«       |j                   d   |j                   d   k7  r\|d   }||d  }||d  }t'        t        j(                  ||z
  «      |
k  «      sJ ‚t'        t        j(                  ||z
  «      |
k  «      sJ ‚y y # 1 sw Y   �ŒxY w)Nr§  ro  )rV   Fr¯   r   Tr�  r’  r“  r2   r   r6   r}   )r¨  r©  r   r   rµ   r   r»   r   r•  r9   r#   r$   r   Úarray_devicer   r?   r;   r³   r   rº   rò   )r—  r£  r˜  r™  rš  r–  r”  r   rB   rb  r"   ÚestÚX_xpÚy_xpÚcomponents_npÚexplained_variance_npÚest_xpÚcomponents_xpÚcomponents_xp_npÚexplained_variance_xpÚexplained_variance_xp_npÚmin_componentsÚreference_varianceÚextra_variance_npÚextra_variance_xp_nps                            r-   Ú!test_pca_mle_array_api_compliancer»  ö  s�  € ð0 ×Ñ×'Ñ'€DÙ	ØØØØØõô & o°{ÀJÓO�J€Bˆä¨BÔ/�D€A€qØ	�‰� %ˆÓ(€AÜ˜!Ÿ'™'Ó"€Dä
�	Ó
€Cà�:‰:�a ˆ:Ó'€DØ�:‰:�a ˆ:Ó'€Dà‡G�GˆAˆq„Mà—O‘O€MØ×3Ñ3Ðä�3‹Z€FÜ	¨4Ô	0ñ WØ�
‰
�4˜ÔØ×*Ñ*ˆÜ˜MÓ*¬l¸4Ó.@Ò@Ð@Ð@Ü" =´RÀÔFÐà &× :Ñ :ÐÜÐ1Ó2´lÀ4Ó6HÒHÐHÐHÜ#*Ð+@ÄRÐPUÔ#VÐ ÷Wð ×!Ñ! ]×%8Ñ%8Ò8Ð8Ð8Ø×!Ñ! !Ñ$¨×(;Ñ(;¸AÑ(>Ò>Ð>Ð>Ø#×)Ñ)Ð-B×-HÑ-HÒHÐHÐHô Ð)×/Ñ/°Ñ2°M×4GÑ4GÈÑ4JÓK€NÜØ   .Ð1Ø˜o˜~Ð.Øõð ×Ñ˜aÑ  M×$7Ñ$7¸Ñ$:Ò:Ø2°2Ñ6ÐØ1°.°/ÐBÐØ7¸¸ÐHÐÜ”2—6‘6Ð+Ð.@Ñ@ÓAÀDÑHÔIÐIÐIÜ”2—6‘6Ð.Ð1CÑCÓDÀtÑKÔLÐLÑLð ;÷3Wñ Wús   ÃBI3É3I=ÚSCIPY_ARRAY_APIÚ1zSCIPY_ARRAY_API not set to 1.)Úreasonc                  óž  — t        j                  d«      } | j                  t        j                  «      }t        ddd¬«      }t        j                  d«      }t        j                  t        |¬«      5  t        d¬	«      5  |j                  |«       d d d «       d d d «       |j                  d
d¬«       t        j                  d«      }t        j                  t        |¬«      5  t        d¬	«      5  |j                  |«       d d d «       d d d «       |j                  d
d¬«       t        j                  d«      }t        j                  t        |¬«      5  t        d¬	«      5  |j                  |«       d d d «       d d d «       y # 1 sw Y   ŒöxY w# 1 sw Y   ŒúxY w# 1 sw Y   ŒœxY w# 1 sw Y   Œ xY w# 1 sw Y   ŒBxY w# 1 sw Y   y xY w)NÚarray_api_strictrL   r   r   rU   zCPCA with svd_solver='arpack' is not supported for Array API inputs.rn   Tr�  r   ÚLU)r0   r¥  z[Array API does not support LU factorization. Set `power_iteration_normalizer='QR'` instead.r   z’Array API does not support LU factorization, falling back to QR instead. Set `power_iteration_normalizer='QR'` explicitly to silence this warning.)rq   Úimportorskipr•  r7   r8   r
   ÚreÚescaperr   r  r   r9   Ú
set_paramsÚwarnsÚUserWarning)r”  rœ  rC   Úexpected_msgs       r-   Ú7test_array_api_error_and_warnings_on_unsupported_paramsrÉ  K  s€  € ô 
×	Ñ	Ð/Ó	0€BØ�j‰jœŸ™Ó#€Gä
˜1¨ÀÔ
B€CÜ—9‘9ØMó€Lô 
�‰”z¨Ô	6ñ Ü¨tÔ4ñ 	Ø�G‰G�GÔ÷	÷ð ‡N�N˜lÀt€NÔLÜ—9‘9ð	6ó€Lô 
�‰”z¨Ô	6ñ Ü¨tÔ4ñ 	Ø�G‰G�GÔ÷	÷ð ‡N�N˜lÀv€NÔNÜ—9‘9ð	Qó€Lô 
�‰”k¨Ô	6ñ Ü¨tÔ4ñ 	Ø�G‰G�GÔ÷	÷ð ÷#	ð 	ú÷ð ú÷	ð 	ú÷ð ú÷	ð 	ú÷ð úsl   Á3FÂ FÂFÃ%F+Ã2FÄF+ÅGÅ$F7Å6GÆF	ÆFÆFÆF(	Æ$F+Æ+F4Æ7G 	Æ<GÇG)gH¯¼šò×z>r5   )nÚosrÃ  rƒ   Únumpyr?   rq   Únumpy.testingr   Úsklearnr   r   Úsklearn.baser   Úsklearn.datasetsr   r   r	   Úsklearn.decompositionr
   Úsklearn.decomposition._pcar   r   Úsklearn.utils._array_apir   r   r   r   r¬  Ú-sklearn.utils._test_common.instance_generatorr   Úsklearn.utils._testingr   r   Úsklearn.utils.estimator_checksr   Úsklearn.utils.fixesr   r   r   r7   ÚPCA_SOLVERSrY   rZ   r³   ÚSPARSE_MAX_COMPONENTSr.   ÚmarkÚparametrizer  r8   r;   rH   rd   rj   ru   r{   rˆ   r¦   rÛ   ÚlistÚsetrÑ   rW   rp   r˜   rÞ   rá   rë   r÷   rù   rþ   rñ   r@  r  r	  r  r  r  r  r"  r%  rI  r(  r1  r6  r<  r>  rA  rG  rM  rQ  rO  rP  rc  rh  rl  rt  rw  r{  r�  r…  r‰  rŽ  r¢  rª  r»  ÚskipifÚenvironÚgetrÉ  r²   r/   r-   ú<module>rà     s�	  ðÛ 	Û 	Û ã Û Ý ,ç ,Ý ß QÑ QÝ %ß J÷ñ õ
 <Ý Rß Hõ÷ UÑ Tà€x×ÑÓ€ÚI€ð
 Ñ €ˆ(Ù˜H hÓ/Ð ó6ð ‡�×Ñ˜ {Ó3Ø‡�×Ñ˜©¨q°$·)±)·/±/À!Ñ2DÓ)EÓFñLó Gó 4ðLð( ‡�×Ñ˜Ò$5Ó6Ø‡�×Ñ˜ªÓ4Ø‡�×ÑÐ+¨^¸nÑ-LÓMØ‡�×Ñ˜¨Ð2CÐ'DÓEØ‡�×Ñ˜¢,Ó/ñ+Qó 0ó Fó Nó 5ó 7ð
+Qð\ ‡�×ÑÐ+¨^¸nÑ-LÓMñLó NðLð( ‡�×Ñ˜¨°fÐ'=Ó>Ø‡�×ÑÐ+¨^¸nÑ-LÓMñ	ó Nó ?ð	ð ‡�×ÑÐ+¨^¸nÑ-LÓMñWó NðWòð ‡�×Ñ˜ $¨ Ó/Ø‡�×Ñ˜ ;Ó/ñ1Kó 0ó 0ð1Kðj ‡�×ÑØ™™t¡C¨Ó$4¸ÀÐ7GÑ$GÓHÓIóð ‡�×Ñ˜¨°Ð'7Ó8Ø‡�×ÑÐ)¨E°4¨=Ó9Ø‡�×Ñ˜ E¨4 =Ó1ñC
ó 2ó :ó 9óðC
ðL ‡�×ÑØà
�	‰	×Ñ˜aÓ ×&Ñ& s¨BÓ/Ø$ˆ×$Ñ$ S¨"¸BÈQÔOÐPQÑRØ
�	‰	×Ñ˜aÓ ×&Ñ& r¨3Ó/ðò
 	:ð ó ð ‡�×Ñ˜ {Ó3ñIó 4óðIð ‡�×Ñ˜¨°,Ð'?Ó@ñVó AðVð ‡�×Ñ˜ {Ó3ñ?ó 4ð?ð: ‡�×Ñ˜ {Ó3ñ6ó 4ð6ð ‡�×Ñ˜ {Ó3ñ4ó 4ð4ð ‡�×Ñ˜Ò'GÓHØ‡�×Ñ˜ E¨4 =Ó1ñ-ó 2ó Ið-ð  ‡�×ÑØ
ˆXˆR�X‰X’y¢)Ð,Ó-¨x¨r¯x©xºÂIÐ8NÓ/O×/QÑ/QÐRóð ‡�×ÑØ'òóñ ?ó!óð&?ð, ‡�×ÑØà	‘�T—Y‘Y—_‘_Ó%Ð&Ø	‘3�t—y‘y—‘Ó'¨!Ñ+Ð,Ø	‘s˜4Ÿ9™9Ÿ?™?Ó+Ð,ðóð ‡�×Ñ˜ $§)¡)¨T¯Y©Y¯[©[Ð!9Ó:ñ.ó ;óð.ð ‡�×Ñ˜¨°Ð'7Ó8ñ"ó 9ð"ð ‡�×Ñ˜¨°,Ð'?Ó@ñó Aðò"ò'ò"*ò
*ð ‡�×ÑØ-à	�‰�D˜!ÐØ	�‰�D˜!ÐØ	�‰×	Ñ	˜qÓ	!×	&Ñ	& q¨"Ó	-¨s°AÐ6ðóñ7óð7ð ‡�×Ñ˜ {Ó3ñó 4ðò*ð ‡�×Ñ˜ {Ó3ñHó 4ðHð ‡�×Ñ˜¨°,Ð'?Ó@ñFó AðFð ‡�×Ñ˜¨°Ð'=Ó>ñó ?ðð* ‡�×ÑØ:òóñ	@óð	@ð ‡�×Ñ˜ {Ó3ñTó 4ðTð ‡�×Ñ˜ {Ó3ñ5ó 4ð5ò
Rò0Gò"	,ò9ò
/ò"ò
ò.ò
@òXò4=ð ‡�×Ñ˜ $¨ Ó/ñ2ó 0ð2ò!
ðH ‡�×ÑØ.Ù-Ó/óð ‡�×ÑØØ%Ð'DÐEØ ð ó ð
 ‡�×ÑØá˜ vÔ.Ù˜ v°dÔ;Ù˜¨¸Ô=Ù˜Ð'8Ô9Ù˜Ð'8ÀÔFÙØØ#Ø'+Øô		
ðð 	!ð ó ñ"ó#óó	ð4ð ‡�×ÑØ.Ù-Ó/óð ‡�×ÑØØ"Ð#Ø ð ó ð
 ‡�×ÑØñ 	˜¨6Ô2ðð 	!ð ó ñ=Móóó	ð*=Mð@ ‡�×ÑØ‡J�J‡N�NÐ$Ó%¨Ñ,Ð5Tð ó ñóñr/   