Ë
    êÿæiÝ£  ã                   óJ  — d dl Z 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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(  ej                   «       Z)g d¢Z*d\  Z+Z, e-e+e,«      Z.d}d„Z/ej`                  jc                  de*«      ej`                  jc                  d e2de)jf                  jh                  d   «      «      d„ «       «       Z5ej`                  jc                  dg d¢«      ej`                  jc                  dg d¢«      ej`                  jc                  de(e'z   «      ej`                  jc                  dddg«      ej`                  jc                  dg d¢«      d„ «       «       «       «       «       Z6ej`                  jc                  de(e'z   «      d„ «       Z7ej`                  jc                  ddd g«      ej`                  jc                  de(e'z   «      d!„ «       «       Z8ej`                  jc                  de(e'z   «      d"„ «       Z9d#„ Z:ej`                  jc                  d$d%d&g«      ej`                  jc                  d'e*«      d(„ «       «       Z;ej`                  jc                  d) e< e= e>e*«      d d*hz
  «      «      «      ej`                  jc                  d+d,d-g«      ej`                  jc                  d.d&d%g«      ej`                  jc                  d/d&d%g«      d0„ «       «       «       «       Z?ej`                  jc                  d1ej€                  jƒ                  d «      j…                  d2d3«       ej"                  d2d3d4d ¬5«      d    ej€                  jƒ                  d «      j…                  d6d2«      gg d7¢¬8«      ej`                  jc                  de*«      d9„ «       «       ZCej`                  jc                  dddg«      d:„ «       ZDej`                  jc                  de*«      d;„ «       ZEej`                  jc                  de*«      d<„ «       ZFej`                  jc                  de*«      d=„ «       ZGej`                  jc                  dg d>¢«      ej`                  jc                  d/d&d%g«      d?„ «       «       ZHej`                  jc                  d@ ej’                  g dA¢g dB¢g«       ej’                  g dA¢g dB¢g«      j”                  g«      ej`                  jc                  dCg dD¢«      dE„ «       «       ZKej`                  jc                  dFd  e-e)jf                  jh                  «      fd e-e)jf                  jh                  «      dz
  fd e-e)jf                  jh                  «      fg«      ej`                  jc                  d@e)jf                  e)jf                  j”                  g«      dG„ «       «       ZLej`                  jc                  dd*d g«      dH„ «       ZMej`                  jc                  dddg«      dI„ «       ZNdJ„ ZOdK„ ZPdL„ ZQdM„ ZRej`                  jc                  dNe)jf                  dOdPfe)jf                  dQdfej€                  jƒ                  d «      j§                  dRdS«      dTdPfg«      dU„ «       ZTej`                  jc                  de*«      dV„ «       ZUdW„ ZVej`                  jc                  de*«      dX„ «       ZWej`                  jc                  dddg«      dY„ «       ZXej`                  jc                  dd dg«      dZ„ «       ZYej`                  jc                  d[g d\¢«      d]„ «       ZZej`                  jc                  de*«      d^„ «       Z[ej`                  jc                  de*«      d_„ «       Z\d`„ Z]da„ Z^db„ Z_dc„ Z`dd„ Zade„ Zbdf„ Zcdg„ Zddh„ Zedi„ Zfdj„ Zgej`                  jc                  d$d%d&g«      dk„ «       Zhdl„ Ziej`                  jc                  dm e«       e¬8«      ej`                  jc                  dne%eige ¬8«      ej`                  jc                  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„ «       «       «       Zjej`                  jc                  dm e«       e¬8«      ej`                  jc                  dneige ¬8«      ej`                  jc                  do edvd ¬p«      ge ¬8«      dw„ «       «       «       Zkej`                  jÙ                  e jÚ                  jÝ                  dx«      dyk7  dz¬{«      d|„ «       Zoy)~é    N)Úassert_array_equal)Úconfig_contextÚdatasets)Úclone)Ú	load_irisÚmake_classificationÚmake_low_rank_matrix)ÚPCA)Ú_assess_dimensionÚ_infer_dimension)Ú_atol_for_typeÚ_convert_to_numpyÚ_get_namespace_device_dtype_idsÚ)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)Ú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/Volumes/fast/ai/experiments/voice-extract-mac/.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   5   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        j                  j                  t
        t        ||¬«      «      }	|j                  |	j                  d   «      |z  }
|	j                  |
«      }	t        ||| ¬«      }|j                  |	«       |	j                  «       }t        ||| ¬«      }|j                  |«       t        |||¬«        |t        j                  j                  t
        t        ||¬«      «      }|j                  «       }t        |j                  |«      |j                  |«      |¬«       t        |j                  |«      |j                  |«      |¬«       y)z?Check that the results are the same for sparse and dense input.r5   ç»½×Ùß|Û=©Úrandom_staterI   r2   ©r1   r0   rT   r6   N)r?   ÚrandomÚdefault_rngÚspÚsparseÚ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_sparsere   K   sN  € ð €DØ€Nä—9‘9×(Ñ(Ð);Ó<€LÙÜ
�	‰	×ÑÜÜØ%Øð	 	ó 	
ó	€Að  ×&Ñ& q§w¡w¨q¡zÓ2°UÑ:€LØ	�
‰
�<Ó €Aä
Ø!ØØ'ô€Cð
 ‡G�GˆA„Jà	
�‰‹€BÜØ!ØØ'ô€Dð
 	‡H�HˆR„Lô ˜C ¨DÕ1ñ 
Ü
�	‰	×ÑÜÜØ%Øð	 	ó 	
ó
€Bð �*‰*‹,€Cä�C—M‘M "Ó% s§}¡}°SÓ'9ÀÕOÜ�C—M‘M "Ó% t§~¡~°cÓ':ÀÖPr/   c                 óZ  — t         j                  j                  | «      } |t        j                  j                  t
        t        |d¬«      «      } |t        j                  j                  t
        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?   rV   rW   rX   rY   rZ   r[   r
   r9   r<   r.   r   r:   )r^   rN   rT   rB   rc   Úpca_fitÚpca_fit_transformÚtransformed_Xs           r-   Útest_pca_sparse_fit_transformrj   ˆ   s  € ä—9‘9×(Ñ(Ð);Ó<€LÙÜ
�	‰	×ÑÜÜØ%Øð	 	ó 	
ó	€Añ 
Ü
�	‰	×ÑÜÜØ%Øð	 	ó 	
ó
€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                 óJ  — t         j                  j                  | «      } |t        j                  j                  t
        t        |¬«      «      }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?   rV   ÚRandomStaterX   rY   rZ   r[   r
   ÚpytestÚraisesÚ	TypeErrorr9   )r^   r0   rN   rT   rB   rC   Úerror_msg_patterns          r-   Útest_sparse_pca_solver_errorru   ª   s�   € ô —9‘9×(Ñ(Ð);Ó<€LÙÜ
�	‰	×ÑÜÜØ%ð 	ó 	
ó	€Aô ˜2¨*Ô
5€Cð	Ø&˜< |ð	5ð ô 
�‰”yÐ(9Ö	:Ø�‰�Œ
÷ 
;×	:Ñ	:ús   Á>BÂB"c                 óV  — t         j                  j                  | «      } |t        j                  j                  t
        t        |¬«      «      }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?   rV   rp   rX   rY   rZ   r[   r
   r9   r   r%   )r^   rN   rT   rB   Ú
pca_arpackÚpca_autos         r-   Ú7test_sparse_pca_auto_arpack_singluar_values_consistencyr{   ¾   sŒ   € ô
 —9‘9×(Ñ(Ð);Ó<€LÙÜ
�	‰	×ÑÜÜØ%ð 	ó 	
ó	€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?   rV   Úuniformr
   ÚwarningsÚcatch_warningsÚsimplefilterÚRuntimeWarningr9   )r1   Ú
n_featuresrB   rC   s       r-   Útest_no_empty_slice_warningrˆ   Ð   sn   € à€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   rT   Úiterated_powergü©ñÒMb@?rx   r2   ©Úddofr‘   r5   r6   F)r1   r“   r‰   r0   gfffff†R@rK   )Úrel)r?   rV   rp   r@   ÚrandnÚdiagÚlinspacer;   Ústdr‰   r
   r<   r:   r   ÚonesÚmeanÚzerosr9   rq   Úapprox)rŠ   r‰   ÚrngÚ	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_strengthrT   F©r‰   g¸…ëQ¸ž?çñhãˆµøä>)r"   r!   rR   r5   r   r”   r�   r   r2   r   ©r1   r0   r“   )r1   r0   r“   rT   r   © )r?   rV   rW   Ú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_testr    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_informativerT   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ß   ž  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?   rV   rp   r˜   r
   r9   r   r%   )r0   r    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?   rV   rp   r˜   r
   r<   r   r¾   r%   rÚ   ÚnormÚsqrtr@   r#   r9   )r0   r    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?   rV   rp   r˜   Úarrayr
   r9   r:   ré   r¾   r   Úabs)r0   r    Ú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?   rV   rp   r˜   r
   r9   r:   r¿   r   )	r0   r“   r    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Ô÷ 
2ð �XÒØ!ˆð"ç"(¡&¨°zÓ"Bð 	ô
 �]‰]œ:¨WÖ5Ü�¨Ô4×8Ñ8¸Ô>÷ 6Ð5ð ÷	 
2Ð	1ú÷ 6Ð5ú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
  4  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?   rV   rp   r˜   r
   r9   r(   )r0   r    r¡   r‡   rB   rC   s         r-   Útest_n_components_mler  C  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?   rV   rp   r˜   r
   r  rq   rr   r  r9   )r0   r    r¡   r‡   rB   rC   r  s          r-   Útest_n_components_mle_errorr  N  sx   € ô �)‰)×
Ñ
 Ó
"€CØ#Ñ€IˆzØ�	‰	�)˜ZÓ(€AÜ
˜5¨ZÔ
8€CØJ×QÑQØó€Gô 
�‰”z¨Ö	1Ø�‰�Œ
÷ 
2×	1Ñ	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?   rV   rp   r˜   rò   r
   r9   r1   r(   )r    rô   rõ   rB   rC   s        r-   Útest_pca_dimr  ]  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?   rV   rp   r˜   rò   r
   r9   r$   Úranger   Úmax)rô   rõ   r    rB   rC   ÚspectÚkÚlls           r-   Útest_infer_dim_1r  h  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?   rV   rp   r˜   rò   r
   r9   r$   r   ©rô   rõ   r    rB   rC   r  s         r-   Útest_infer_dim_2r#  y  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&  ‡  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)  ”  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?   rV   rp   r˜   rò   r
   r9   ÚscoreÚlogÚpiÚexpr   )	r0   rô   rõ   r    rB   rC   Úll1ÚhÚll2s	            r-   Útest_pca_scorer2  £  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?   rV   rp   r˜   rò   rž   r  r
   r9   r+  Úargmax)rô   rõ   r    ÚXlrö   r  r  rC   s           r-   Útest_pca_score3r7  ¹  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 )	NTr9  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?   rV   rp   r˜   rò   r
   r9   r'   r+  ÚT)r0   rô   rõ   r    rB   rC   s         r-   Ú'test_pca_zero_noise_variance_edge_casesrB  à  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   rC  rM   r   )r   rC  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   rT   rU   )	r?   rV   rp   r‚   r
   r9   Ú_fit_svd_solverr   r#   )r¡   r‡   r1   Úexpected_solverr8   rz   Úpca_tests          r-   Útest_pca_svd_solver_autorH  ö  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?   rV   rp   Úrandrž   r  r
   r<   r   ÚtileÚreshape)r0   r    rB   ri   ÚirC   s         r-   Útest_pca_deterministic_outputrN    sœ   € ä
�)‰)×
Ñ
 Ó
"€CØ�‰��RÓ€Aä—H‘H˜WÓ%€MÜ�2ŽYˆÜ˜q¨ZÀcÔJˆØ!×/Ñ/°Ó2°1Ñ5ˆ�aš�dÒð ô �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_preservationrR    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?   rV   rp   rJ  r¶   Úfloat64r·   r
   r9   r#   r¼   r:   r   )r0   ÚseedrB   Ú	X_float64Ú	X_float32Úpca_64Úpca_32s          r-   rP  rP  #  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?   rV   rp   Úrandintr¶   Úint64Úint32r
   r9   r#   r¼   rT  r:   r   )r0   ÚX_i64ÚX_i32rX  rY  s        r-   rQ  rQ  ;  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 )NTr9  éþÿÿÿr€   r2   )r   r
   r9   r½   Úcumsumr(   r;   )rB   Úyr+   r1   r,   s        r-   Ú5test_pca_n_components_mostly_explained_variance_ratiord  L  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´9rg  rg  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_rankri  X  sK   € ä�x‰xÒ0Ó1€HØ€IÛˆÜ�]‰]œ:Ð-RÖSÜ˜h¨¨iÔ8÷ TÐSñ ßSÐSú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 )Nrf  r2   rM   ©r¢   r¡   )rL   r�   )r?   rò   r   Úinfr   )rh  r¢   s     r-   Útest_small_eigenvalues_mlerm  a  sn   € ô �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_classrT   r  r€   )r   r   r
   r9   r(   ©rB   r<  rC   s      r-   Útest_mle_redundant_dataru  n  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  é   rp  )r¡   r‡   rT   r  r   r4   z?n_components='mle' is only supported if n_samples >= n_featuresrn   )r   r   r
   rq   rr   r  r9   rt  s      r-   Útest_fit_mle_too_few_samplesrx  }  sX   € ô ×'Ñ'°"ÀÐ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?   rV   rp   r˜   r�   r
   r9   r(   )r¡   Ún_dimrB   Úpca_skls       r-   Útest_mle_simple_caser|  Š  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   rk  rL   )
r?   rœ   rÚ   Úsvdr   rž   rº   r   r  rl  )r¡   r‡   rB   r<  Úsr¢   s         r-   Útest_assess_dimesion_rank_oner‚  •  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_oversamplesrT   r   r4   r   rU   N)	r?   rV   rp   r˜   r
   r9   r   ró   r#   )r    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   ÚnamesrM  s      r-   Útest_feature_names_outrŠ  ¼  sO   € ä
˜1Ô
×
!Ñ
!¤$§)¡)Ó
,€Cà×%Ñ%Ó'€EÜ¬5°¬8Ó4©8 a˜#˜a˜Sš	¨8Ñ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   r4  r2   r•   N)r?   rV   rp   r˜   r
   r9   r$   r½   rÙ   r¾   Útestingr   )r‰   r    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        |«      ¬	«       |j                  «       }|j                  dk(  sJ ‚|j                  |j                  k(  sJ ‚t        t        ||¬«      |	|
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ð   ©Úxpr    )r   r7   r8   r¶   Úasarrayr9   r>   r=   r¼   r   r   r;   r   r   r   )ÚnameÚ	estimatorÚarray_namespacer   Ú
dtype_namer”  Úiris_npÚiris_xpÚprecision_npÚcovariance_npr!   Úestimator_xpÚprecision_xpÚcovariance_xps                 r-   Úcheck_array_api_get_precisionr¡  Ï  sM  € Ü	˜o¨vÓ	6€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Ô2ØØÜ 
Ó+õ		
ð %×3Ñ3Ó5ˆØ×"Ñ" fÒ,Ð,Ð,Ø×"Ñ" g§m¡mÒ3Ð3Ð3äÜ˜m°Ô3ØØÜ 
Ó+õ		
÷! 
1×	0Ñ	0ús   ÂCE1Å1E:z#array_namespace, device, dtype_nameÚcheckr—  r4   r²   rK   ÚQR)r1   r0   Úpower_iteration_normalizerrT   c                 ó`   — | j                   j                  }t        | «      }  ||| |||¬«       y )N©r   r™  )Ú	__class__Ú__name__r   )r—  r¢  r˜  r   r™  r–  s         r-   Útest_pca_array_api_compliancer©  ñ  s/   € ð< ×Ñ×'Ñ'€DÜ�iÓ €IÙ	ˆ$�	˜?°6ÀjÖQr/   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        ||¬	«      }|j                  }t        |«      t        |«      k(  sJ ‚t        ||¬	«      }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¦  rp  rl   Fr°   r   Tr‘  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”  rB   rc  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º    sp  € ð2 ×Ñ×'Ñ'€DÙ	ˆ$�	˜?°6ÀjÕQô 
˜o¨vÓ	6€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Ø�
‰
�4˜ÔØ×*Ñ*ˆÜ˜MÓ*¬l¸4Ó.@Ò@Ð@Ð@Ü,¨]¸rÔBÐà &× :Ñ :ÐÜÐ1Ó2´lÀ4Ó6HÒHÐHÐHÜ#4Ð5JÈrÔ#RÐ ÷ 
1ð ×!Ñ! ]×%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 
1Ñ	0ús   ÃA7I%É%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È  d  sT  € ô 
×	Ñ	Ð/Ó	0€BØ�j‰jœŸ™Ó#€Gä
˜1¨ÀÔ
B€CÜ—9‘9ØMó€Lô 
�‰”z¨Ö	6Ü¨tÖ4Ø�G‰G�GÔ÷ 5÷ 
7ð ‡N�N˜lÀt€NÔLÜ—9‘9ð	6ó€Lô 
�‰”z¨Ö	6Ü¨tÖ4Ø�G‰G�GÔ÷ 5÷ 
7ð ‡N�N˜lÀv€NÔNÜ—9‘9ð	Qó€Lô 
�‰”k¨Ö	6Ü¨tÖ4Ø�G‰G�GÔ÷ 5÷ 
7Ð	6÷# 5Ð4ú÷ 
7Ð	6ú÷ 5Ð4ú÷ 
7Ð	6ú÷ 5Ð4ú÷ 
7Ð	6ú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   )pÚosrÂ  rƒ   Únumpyr?   rq   ÚscipyrX   Únumpy.testingr   Úsklearnr   r   Úsklearn.baser   Úsklearn.datasetsr   r   r	   Úsklearn.decompositionr
   Úsklearn.decomposition._pcar   r   Úsklearn.utils._array_apir   r   r   r   r   r«  Ú-sklearn.utils._test_common.instance_generatorr   Úsklearn.utils._testingr   r   Úsklearn.utils.estimator_checksr   Úsklearn.utils.fixesr   r   r7   ÚPCA_SOLVERSrZ   r[   r´   ÚSPARSE_MAX_COMPONENTSr.   ÚmarkÚparametrizer  r8   r;   rH   re   rj   ru   r{   rˆ   r§   rÜ   ÚlistÚsetrÒ   rV   rp   r˜   rß   râ   rì   rø   rú   rÿ   rò   rA  r  r
  r  r  r  r  r#  r&  rJ  r)  r2  r7  r=  r?  rB  rH  rN  rR  rP  rQ  rd  ri  rm  ru  rx  r|  r‚  r†  rŠ  r�  r¡  r©  rº  ÚskipifÚenvironÚgetrÈ  r³   r/   r-   Ú<module>rà     s¯	  ðÛ 	Û 	Û ã Û Û Ý ,ç ,Ý ß QÑ QÝ %ß J÷ó õ <Ý Rß Hõ÷ ?à€x×ÑÓ€ÚI€ð
 Ñ €ˆ(Ù˜H hÓ/Ð ó6ð ‡�×Ñ˜ {Ó3Ø‡�×Ñ˜©¨q°$·)±)·/±/À!Ñ2DÓ)EÓFñLó Gó 4ðLð( ‡�×Ñ˜Ò$5Ó6Ø‡�×Ñ˜ªÓ4Ø‡�×ÑÐ+¨^¸nÑ-LÓMØ‡�×Ñ˜¨Ð2CÐ'DÓEØ‡�×Ñ˜¢,Ó/ñ5Qó 0ó Fó Nó 5ó 7ð
5Qðp ‡�×ÑÐ+¨^¸nÑ-LÓMñLó NðLðB ‡�×Ñ˜¨°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ò
ðD ‡�×ÑØ)Ù-Ó/Ø'ð ó ð
 ‡�×ÑØØ%Ð'DÐEØ ð ó ð
 ‡�×ÑØá˜ vÔ.Ù˜ v°dÔ;Ù˜¨¸Ô=Ù˜Ð'8Ô9Ù˜Ð'8ÀÔFÙØØ#Ø'+Øô		
ðð 	!ð ó ñ"Ró#óóð6Rð ‡�×ÑØ)Ù-Ó/Ø'ð ó ð
 ‡�×ÑØØ"Ð#Ø ð ó ð
 ‡�×ÑØñ 	˜¨6Ô2ðð 	!ð ó ñ7Móóóð,7Mðt ‡�×ÑØ‡J�J‡N�NÐ$Ó%¨Ñ,Ð5Tð ó ñóñr/   