
    Mpj9                        S SK r S SKrS SKrS SKrS SKrS SKJr  S SKJ	r	J
r
  S SKJr  S SKJrJrJr  S SKJr  S SKJrJr  S SKJrJrJr  S S	KJr  S S
KJr  S SKJrJ r   S SK!J"r"  S SK#J$r$J%r%J&r&  \
R                  " 5       r'/ SQr(Su  r)r*\+" \)\*5      r,S}S jr-\R\                  R_                  S\(5      \R\                  R_                  S\0" S\'Rb                  Rd                  S   5      5      S 5       5       r3\R\                  R_                  S/ SQ5      \R\                  R_                  S/ SQ5      \R\                  R_                  S\%\$-   5      \R\                  R_                  SSS/5      \R\                  R_                  S/ SQ5      S 5       5       5       5       5       r4\R\                  R_                  S\%\$-   5      S 5       r5\R\                  R_                  SSS /5      \R\                  R_                  S\%\$-   5      S! 5       5       r6\R\                  R_                  S\%\$-   5      S" 5       r7S# r8\R\                  R_                  S$S%S&/5      \R\                  R_                  S'\(5      S( 5       5       r9\R\                  R_                  S)\:" \;" \<" \(5      S S*1-
  5      5      5      \R\                  R_                  S+S,S-/5      \R\                  R_                  S.S&S%/5      \R\                  R_                  S/S&S%/5      S0 5       5       5       5       r=\R\                  R_                  S1\R|                  R                  S 5      R                  S2S35      \
R                  " S2S3S4S S59S    \R|                  R                  S 5      R                  S6S25      // S7QS89\R\                  R_                  S\(5      S9 5       5       rA\R\                  R_                  SSS/5      S: 5       rB\R\                  R_                  S\(5      S; 5       rC\R\                  R_                  S\(5      S< 5       rD\R\                  R_                  S\(5      S= 5       rE\R\                  R_                  S/ S>Q5      \R\                  R_                  S/S&S%/5      S? 5       5       rF\R\                  R_                  S@\R                  " / SAQ/ SBQ/5      \R                  " / SAQ/ SBQ/5      R                  /5      \R\                  R_                  SC/ SDQ5      SE 5       5       rI\R\                  R_                  SFS \+" \'Rb                  Rd                  5      4S\+" \'Rb                  Rd                  5      S-
  4S\+" \'Rb                  Rd                  5      4/5      \R\                  R_                  S@\'Rb                  \'Rb                  R                  /5      SG 5       5       rJ\R\                  R_                  SS*S /5      SH 5       rK\R\                  R_                  SSS/5      SI 5       rLSJ rMSK rNSL rOSM rP\R\                  R_                  SN\'Rb                  SOSP4\'Rb                  SQS4\R|                  R                  S 5      R                  SRSS5      STSP4/5      SU 5       rR\R\                  R_                  S\(5      SV 5       rSSW rT\R\                  R_                  S\(5      SX 5       rU\R\                  R_                  SSS/5      SY 5       rV\R\                  R_                  SS S/5      SZ 5       rW\R\                  R_                  S[/ S\Q5      S] 5       rX\R\                  R_                  S\(5      S^ 5       rY\R\                  R_                  S\(5      S_ 5       rZS` r[Sa r\Sb r]Sc r^Sd r_Se r`Sf raSg rbSh rcSi rdSj re\R\                  R_                  S$S%S&/5      Sk 5       rfSl rg\R\                  R_                  Sm\" 5       5      \R\                  R_                  Sn\"\g/\S89\R\                  R_                  So\" SPS Sp9\" SPS S%Sq9\" SrS S%Sq9\" SPSSp9\" SPSS%Sq9\" SPSSsS St9/\S89Su 5       5       5       rh\R\                  R_                  Sm\" 5       5      \R\                  R_                  Sn\g/\S89\R\                  R_                  So\" SvS Sp9/\S89Sw 5       5       5       ri\R\                  R                  \ R                  R                  Sx5      Sy:g  SzS{9S| 5       rmg)~    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                    [        U R                  UR                  X#S9  [        U R                  UR                  X#S9  [        U R                  UR                  X#S9  [        U R                  UR                  X#S9  [        U R
                  UR
                  X#S9  U R                  UR                  :X  d   eU R                  UR                  :X  d   eU R                  UR                  :X  d   eg )Nrtolatol)	r   components_explained_variance_singular_values_mean_noise_variance_n_components_
n_samples_n_features_in_)pca1pca2r!   r"   s       `/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/sklearn/decomposition/tests/test_pca.py_check_fitted_pca_closer.   %   s    D$$d&6&6TM  $":": D))4+@+@tWDJJ

AD(($*>*>TU!3!3333??doo---$"5"5555    
svd_solvern_components   c                    [         R                  n[        XS9nUR                  U5      R	                  U5      nUR
                  S   U:X  d   eUR                  U5      n[        XE5        UR	                  U5      n[        XE5        UR                  5       nUR                  5       n[        [        R                  " Xg5      [        R                  " UR
                  S   5      SS9  g )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
<
?C ''!*

q
!C99Q<<''' QDC
--
CC 


C!!#IBFF3*BFF1771:,>UKr/   density){Gz?皙?g333333?)r2      
   sparse_containerr   r   scale)r2   rM   d   c                 ~   SnSn[         R                  R                  U 5      nU" [        [        [
        4XS95      n	UR                  U	R                  S   5      U-  n
U	R                  U
5      n	[        UUU S9nUR                  U	5        U	R                  5       n[        UUU S9nUR                  U5        [        XUS9  U" [        [        [
        4XS95      nUR                  5       n[        UR                  U5      UR                  U5      US9  [        UR                  U5      UR                  U5      US9  g)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
3Ch1sL	A ::aggaj)E1L	

< A
!'C
 GGAJ	
B!'D
 	HHRL CD1 
h1sL
B **,CCMM"%s}}S'9OCMM"%t~~c':Pr/   c                    [         R                  R                  U 5      n[        [        4nU" [        X2SS95      nU" [        X2SS95      n[        SSU S9n[        SSU S9nUR                  U5        UR                  U5      n[        Xg5        [        XR                  U5      5        [        XR                  U5      5        [        UR                  U5      UR                  U5      5        g )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
3CX
C-cDIJA	.sTJ	KBrhEWXGH;M KKN%33A6MG7M#>#>q#ABM#4#4Q#78G%%b)+<+F+Fr+JKr/   r   r   c                    [         R                  R                  U 5      nU" [        [        [
        4US95      n[        SUS9nSU S3n[        R                  " [        US9   UR                  U5        S S S 5        g ! , (       d  f       g = f)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      sz     ))

 2
3C-x.BLMA
2*
5C	&<|	5  
y(9	:
 
;	:	:s   #A>>
Bc                    [         R                  R                  U 5      nU" [        [        [
        4US95      n[        SSS9R                  U5      n[        SSS9R                  U5      n[        UR                  UR                  SS9  g)	zHCheck that "auto" and "arpack" solvers are equivalent for sparse inputs.rl   rM   r   r4   r   {Gzt?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
3C-x.BLMA":>>qAJv6::1=HJ//1J1JQUVr/   c                     Sn U S-   n[         R                  R                  SSX4S9n[        U S9n[        R
                  " 5          [        R                  " S[        5        UR                  U5        S S S 5        g ! , (       d  f       g = f)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      sl    L!J
		"a|&@AA
<
(C		 	 	"g~6
 
#	"	"s   -A<<
B
copyTFsolverc                 z   [         R                  R                  S5      nSnSnSnSn[         R                  " UR	                  X65      [         R                  " [         R
                  " [         R                  " SSU5      5      UR	                  Xd5      5      5      nUS S 2S S24==   S-  ss'   UR                  X44:X  d   eUR                  SS	9R                  5       S
:  d   eUR                  5       n[        USUU SSS9n	U	R                  UR                  5       5      n
U
R                  X54:X  d   eU	R                  U5      n[        XSS9  [        U
R                  SSS9[         R                  " U5      5        [        U
R                  SS	9[         R                   " U5      SS9  UR                  5       n[        USXS9R#                  UR                  5       5      n	U	R                  U5      nUR                  X54:X  d   eUR                  SS	9R                  5       [$        R&                  " SSS9:X  d   eg )Nr   rP   P   rm   2   g      $@      ?   axisgfffffE@T   )r1   whitenr   r0   rV   iterated_powergMb@?rx   r2   ddofr   r5   r6   F)r1   r   r   r0   gfffffR@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 			)"
rwwr{{4d34cii6QR	A a"fINI77y---- 55a5=%%% 
B
!C ""2779-J	8888--#KJ$7JNNN2BGGL4IJJOOO+RXXl-C%P	
B
!%d	c"'')n  ==$L)!:::: #'')V]]4T-JJJJr/   other_svd_solverr   
data_shapetallwiderank_deficientr   c                 	   US:X  a  Su  pgOSu  pgSnU(       aR  [         R                  R                  U5      n	[        Xg5      S-  n
U	R	                  Xh-   U
4S9U	R	                  X4S9-  nO[        Xh-   USUS9n[        Xg5      n
UR                  US	S
9nUS U XS  pU[         R                  :X  a  [        SSS9nSnO[        SSS9nSn0 nU S:X  a  SnSS0nO"U S:X  a  [         R                  " Xg5      S-
  nOS n[        USUS9n[        SUU UUS.UD6nUR                  U5      n[         R                  " U5      R                  5       (       d   eUR                  U:X  d   eUR                  U5      n[         R                  " U5      R                  5       (       d   eUR                  U:X  d   eUR                  S:  R                  5       (       d   e[!        UR                  UR                  40 UD6  [!        UR"                  UR"                  40 UD6  UR$                  n[         R                  " U5      R                  5       (       d   eUR$                  n[         R                  " U5      R                  5       (       d   eUR                  U:  nUR'                  5       S:  d   e[!        UU   UU   40 UD6  [!        US S 2U4   US S 2U4   40 UD6  UR)                  U5      n[         R                  " U5      R                  5       (       d   eUR                  U:X  d   eUR)                  U5      n[         R                  " U5      R                  5       (       d   eUR                  U:X  d   e[!        US S 2U4   US S 2U4   40 UD6  UR+                  U5      n[         R                  " U5      R                  5       (       d   eUR                  U:X  d   eUR+                  U5      n[         R                  " U5      R                  5       (       d   eUR                  U:X  d   eUR$                  R,                  S   UR$                  R,                  S   :X  a  [!        UU40 UD6  [!        UU40 UD6  g UR$                  R,                  S   U
:  a.  UR                  R                  5       U:  d   e[!        UU40 UD6  g [!        UR)                  U5      S S 2U4   UR)                  U5      S S 2U4   40 UD6  g )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      s6    V '	: '	Nii##$679)Q.,d3   
d%789 !0!+	
 9)	E*A
mQz]Vrzz!D)!U+"<' .3	X	% zz)81< OH !#'	
 I "//8;;)*..0000##|333#11':;;*+//1111$$444((A-224444H00)2O2OXSWX**++ 
 $//;;+,002222 ,,;;'(,,.... )),>>F::<!(02B62JSdS AvI&(:1f9(EIM !**62;;()--////""l222",,V4;;)*..0000##|333&q&y13DQY3OXSWX "334EF;;)*..0000##|333#556HI;;*+//1111$$444!!!$(<(<(B(B1(EE 	*F;d;+V<t<				#	#A	&	- ++//14FFFF*,?H4H 	121f9= 34QY?	
 	
r/   rB   rP   r   N   )n_informativerV   rM   )zrandom-tallzcorrelated-tallzrandom-wide)idsc           	      >   [        SUSS9nUR                  U 5      n[        UR                  [        R
                  " USSS95        [        R                  R                  [        R                  " U SS95      S   n[        USS	9S S n[        UR                  US
S9  g )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!
DCa EC++RVVE-JKiimmBFF1U$;<Q?O_d;BQ?OC++_4Hr/   c                    [         R                  R                  S5      nSu  p#UR                  X#5      n[	        SSUS9n[	        SXS9nUR                  U5        UR                  U5        [        UR                  UR                  SS9  g )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     sv    
))


"C#I		)(Af3GHzLILLOMM!H--y/I/IPTUr/   c           
      R   [         R                  R                  S5      nSu  p#UR                  X#5      n[	        SXS9nUR                  U5      n[        [         R                  " UR                  S-  5      [         R                  R                  US5      S-  5        [        UR                  [         R                  " [         R                  " US-  SS95      5        Su  p#UR                  X#5      n[	        SXS9nUR                  U5      nU[         R                  " [         R                  " US-  SS95      -  nUS S 2S4==   S	-  ss'   US S 2S
4==   S-  ss'   [         R                  " XeR                  5      nUR                  U5        [        UR                  / SQ5        g )Nr   r   rL   rU   fror   )rP   n   r   A`"	@r2   X9v@)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     sQ   
))


"C#I		)(A
1
FC"G 
s##Q&')G1)L C(("''"&&!!2L*MN %I		)(A
1
FC"Grwwrvvgqjq122GAqDMUMAqDMUMFF7OO,EGGENC((*=>r/   c                    [         R                  R                  S5      nSu  p#UR                  X#5      S-  nUS S=== [         R                  " / SQ5      -  sss& SUR                  SU5      -  [         R                  " / SQ5      -   n[        SU S9R                  U5      R                  U5      nU[         R                  " US-  R                  5       5      -  n[        [         R                  " US   S   5      S	S
S9  g )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DA		!#AcrFbhhy!!F	syyA	)!4	4B	!
	3	7	7	:	D	DR	HB"''2q5++-
  BBFF2a58$c5r/   c                     SS/SS//n[        SU SS9nUR                  U5      nUR                  (       d   S5       e[        UR	                  5       SSS9  [        UR                  5       S	S
S9  g )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c3Z A
1!
DC"G== & =GLLNDu5GKKM4d3r/   )r   r   r   c                 &   [         R                  R                  S5      nSu  p4UR                  X45      nUS S 2S4==   S-  ss'   U/ SQ-  n[	        SXS9R                  U5      nUR                  U5      nUR                  U5      n[        XXSS	9  g )
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DA		!AadGwGNA 1
C
G
G
JCaA%%a(IAt,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                 l   Sn[        X S9n[        R                  " [        US9   UR	                  U5        S S S 5        U S:X  aN  UnSR                  X$5      n[        R                  " [        US9   [        X S9R	                  U5        S S S 5        g g ! , (       d  f       Nc= f! , (       d  f       g = f)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\9J	z	1t 
2 X!""(&"B 	
 ]]:W5488> 65 	 
2	1 65s   B1B%
B"%
B3zsolver, n_components_c                 \    [        US9nUR                  U 5        UR                  U:X  d   eg )Nr  )r
   r9   r(   )r8   r   r(   rC   s       r-   test_n_components_noner	    s-     
 CGGDM---r/   c                     [         R                  R                  S5      nSu  p#UR                  X#5      n[	        SU S9nUR                  U5        UR                  S:X  d   eg )Nr   iX  rM   mler4   r2   )r?   rW   rp   r   r
   r9   r(   )r0   rT   r   r   rB   rC   s         r-   test_n_components_mler    sY     ))


"C#I		)(A
5Z
8CGGAJ!!!r/   c                 *   [         R                  R                  S5      nSu  p#UR                  X#5      n[	        SU S9nSR                  U 5      n[        R                  " [        US9   UR                  U5        S S S 5        g ! , (       d  f       g = f)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  )  st     ))


"C#I		)(A
5Z
8CJQQG 
z	1
 
2	1	1s   )B
Bc                  4   [         R                  R                  S5      n Su  pU R                  X5      S-  nUS S=== [         R                  " / SQ5      -  sss& [        SSS9R                  U5      nUR                  S:X  d   eUR                  S	:X  d   eg )
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DA		!#AcrFbhh''F
5V
4
8
8
;Cu$$$!!!r/   c            
         Su  p[         R                  R                  S5      nUR                  X5      S-  UR                  U S5      [         R                  " / SQ5      -  -   [         R                  " / SQ5      -   n[        USS9nUR                  U5        UR                  n[         R                  " [        SU5       Vs/ s H  n[        XVU 5      PM     sn5      nUS   UR                  5       S	U -  -
  :  d   eg s  snf )
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     DA
))


"C		!#
))Aq/BHH_5
5	6
((?
#	$ 
 1
0CGGAJ##E	5A;G;a$Uq1;G	HBa52668dQh&&&& Hs   C?c                  r   Su  p[         R                  R                  S5      nUR                  X5      S-  nUS S=== [         R                  " / SQ5      -  sss& USS=== [         R                  " / SQ5      -  sss& [        USS	9nUR                  U5        UR                  n[        XP5      S
:  d   eg )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     DA
))


"C		!#AcrFbhh''FbH)**H
1
0CGGAJ##EE%)))r/   c            	         Su  p[         R                  R                  S5      nUR                  X5      S-  nUS S=== [         R                  " / SQ5      -  sss& USS=== [         R                  " / SQ5      -  sss& USS	=== S
[         R                  " / SQ5      -  -  sss& [        USS9nUR                  U5        UR                  n[        XP5      S
:  d   eg )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    DA
))


"C		!#AcrFbhh''FbH)**HbHBHH/000H
1
0CGGAJ##EE%)))r/   z'X, n_components, n_components_validatedgffffff?rL   rJ   r   r  r   c                     [        USS9nUR                  U 5        UR                  [        R                  " U5      :X  d   eUR
                  U:X  d   eg )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GGAJv}}\:::: 6666r/   c                    Su  p[         R                  R                  S5      nUR                  X5      S-  [         R                  " / SQ5      -   n[        SU S9nUR                  U5        UR                  U5      nS[         R                  " S[         R                  -  [         R                  " S5      -  S	-  5      -  U-  n[        Xg-  SS
S9  UR                  UR                  X5      S-  [         R                  " / SQ5      -   5      nXh:  d   e[        SSU S9nUR                  U5        UR                  U5      nXh:  d   eg )N)r   r   r   rK   r   rL   r4   g      r2   g|Gz?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    DA
))


"C		!# 33A
1
4CGGAJ
))A,Crvva"%%i"&&)+f4559ACGQT*
))CIIaOc)BHHY,??
@C99
1Tj
ACGGAJ
))A,C99r/   c                  z   Su  p[         R                  R                  S5      nUR                  X5      UR                  U S5      [         R                  " / SQ5      -  -   [         R                  " / SQ5      -   nUR                  X5      UR                  U S5      [         R                  " / SQ5      -  -   [         R                  " / SQ5      -   n[         R
                  " U5      n[        U5       H1  n[        USS9nUR                  U5        UR                  U5      XV'   M3     UR                  5       S:X  d   eg )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    DA
))


"C	1399Q?RXXi-@@	@288ICV	VB	1399Q?RXXi-@@	@288ICV	VB	!B1XqV4		" 
 99;!r/   c                     [         R                  " SS9u  p[        SU SS9nUR                  U5        [        R
                  " UR                  UR                  -
  S:  5      (       d   eg )NT
return_X_yrm   r   rU   )r   load_digitsr
   r9   r?   r   r$   r'   )r0   rB   _rC   s       r-   test_pca_sanity_noise_variancer<    sZ     40DA
2*1
ECGGAJ663**S-@-@@QFGGGGr/   c                     [         R                  " SS9u  p[        SSSS9n[        SU SS9nUR                  U5        UR                  U5        [	        UR                  U5      UR                  U5      SS9  g )	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>    sg     40DAvAFH
KILLOMM!HNN1%yq'9Er/   c                    Su  p[         R                  R                  S5      nUR                  X5      S-  [         R                  " / SQ5      -   n[        X S9nUR                  U5        UR                  S:X  d   eUR                  U5        UR                  UR                  5        UR                  S:X  d   eUR                  UR                  5        g )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     DA
))


"C		!# 33A
1
4CGGAJ!### IIaLGGACCL!### IIaccNr/   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                 .   [         R                  R                  S5      R                  X4S9n[	        USS9n[	        X#SS9nUR                  U5        UR                  U:X  d   eUR                  U5        [        UR                  UR                  5        g )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      99  #++)1H+ID1=H!AH LL##666LLH(((*>*>?r/   c           	      n   [         R                  R                  S5      nUR                  SS5      n[         R                  " S5      n[        S5       H'  n[        SXS9nUR                  U5      S   X4S S 24'   M)     [        U[         R                  " USS S 24   S5      R                  SS5      5        g )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HHW%M2YqZJ!//215d  M277=A+>#C#K#KBPQ#RSr/   c                 0    [        X5        [        U 5        g )N)"check_pca_float_dtype_preservation$check_pca_int_dtype_upcast_to_double)r0   r]   s     r-   test_pca_dtype_preservationrQ    s    &zF(4r/   c                    [         R                  R                  U5      R                  SS5      nUR	                  [         R
                  SS9nUR	                  [         R                  5      n[        SXS9R                  U5      n[        SXS9R                  U5      nUR                  R                  [         R
                  :X  d   eUR                  R                  [         R                  :X  d   eUR                  U5      R                  [         R
                  :X  d   eUR                  U5      R                  [         R                  :X  d   e[        UR                  UR                  SSS9  g )	Nr   r   Fr   r   rU   gMbP?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1A%0I$IaJJNNF aJJNNF ##rzz111##rzz111I&,,

:::I&,,

:::
 F&&(:(:DQr/   c                    [         R                  R                  S5      R                  SSS5      nUR	                  [         R
                  SS9nUR	                  [         R                  SS9n[        SU SS9R                  U5      n[        SU SS9R                  U5      nUR                  R                  [         R                  :X  d   eUR                  R                  [         R                  :X  d   eUR                  U5      R                  [         R                  :X  d   eUR                  U5      R                  [         R                  :X  d   e[        UR                  UR                  SS	9  g )
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   II!!!$,,Qi@ELLL.ELLL.EaJQGKKERFaJQGKKERF##rzz111##rzz111E"((BJJ666E"((BJJ666F&&(:(:Fr/   c                      [        SS9u  p[        5       R                  X5      nUR                  R	                  5       S   n[        US9R                  X5      nUR
                  U R                  S   :X  d   eg )NTr8  r   r2   )r   r
   r9   r   cumsumr(   r;   )rB   yr+   r1   r,   s        r-   5test_pca_n_components_mostly_explained_variance_ratiorc  '  si     %DA599Q?D1188:2>LL)--a3D+++r/   c                      [         R                  " / SQ5      n SnS H1  n[        R                  " [        SS9   [        XU5        S S S 5        M3     g ! , (       d  f       ME  = f)Nr2   KH9rf  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  sI    xx01HI]]:-RShi8 TS SSs   A
A"	c                      [         R                  " / SQ5      n [        U SSS9[         R                  * :  d   eS H$  n[        XS5      [         R                  * :X  a  M$   e   [	        U S5      S:X  d   eg )Nre  r2   rM   r   r   )rL   r   )r?   r   r   infr   )rg  r   s     r-   test_small_eigenvalues_mlerl  <  sl     xx01HXA<wFFF 4???  Hb)Q...r/   c            	          [         R                  " SSSSSSS9u  p[        SS9R                  U 5      nUR                  S:X  d   eg )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  sS     ''DA 5
!
%
%a
(C!!!r/   c                      [         R                  " SSSS9u  p[        SSS9n[        R                  " [
        SS	9   UR                  U 5        S S S 5        g ! , (       d  f       g = f)
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  sV     ''"RTUDA
5V
4C	O
 	
	
 
 
s   A
A%c                     Su  p[         R                  R                  S5      R                  X5      n[         R                  " US S 2S S24   SS9US S 2S4'   [        SSS9nUR                  U5        UR                  US-
  :X  d   eg )	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
		a &&y8AwwqCRCyr*AaeH%F+GKKN  EAI---r/   c                  z   Su  p[         R                  " X45      n[         R                  R                  USS9u  p4n[	        USS  [         R
                  " US-
  5      SS9  [         R                  " [        USU S95      (       d   e[        SU5       H$  n[        XEU 5      [         R                  * :X  a  M$   e   g )	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
'(AiimmATm2GA!AabE288JN3%@;;(iHIIIIa$ )4??? %r/   c                  &   [         R                  R                  S5      n SnU R                  SU5      n[	        SSUSS9R                  U5      n[	        SSS9R                  U5      n[	        SS	SS
9R                  U5      n[        [         R                  " UR                  5      [         R                  " UR                  5      5        [        [         R                  " UR                  5      [         R                  " UR                  5      5        g)zCheck 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MaPJBFF8//0"&&9O9O2PQBFF>556z?U?U8VWr/   c                      [        SS9R                  [        R                  5      n U R	                  5       n[        [        S5       Vs/ s H  nSU 3PM
     snU5        gs  snf )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    sO    
1

!
!$))
,C%%'E5848a#aS	84e<4s   	A!c                 P   [         R                  R                  S5      nUR                  SS5      n[	        5       R                  U5      nUR                  UR                  -  n[         R                  " USSS9R                  5       n[         R                  R                  XE5        g)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    sz     ))


"C		$A
%))A,C%%(E(EEGvvaaa(,,.HJJw1r/   c           	          [        X#U5      u  pV[        R                  R                  U5      nUR	                  XvS9nUR                  U5        UR                  5       n	UR                  5       n
UR                  S:X  a  SOSn[        SS9   [        U5      R                  U5      nUR                  5       nUR                  S:X  d   eUR                  UR                  :X  d   e[        [        U[        SS	9U	U[        U5      S
9  UR                  5       nUR                  S:X  d   eUR                  UR                  :X  d   e[        [        U[        SS	9U
U[        U5      S
9  S S S 5        g ! , (       d  f       g = f)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    sS    &oJOJBiiz*Gjjj0GMM'**,L,,.M==I-44D	4	0Y'++G4#113!!V+++!!W]]222LR6
+		
 %335""f,,,""gmm333Mb7
+		
! 
1	0	0s   CE//
E=z(array_namespace, device_name, dtype_namecheckr  r4   r   rK   QR)r1   r0   power_iteration_normalizerrV   c                 Z    U R                   R                  n[        U 5      n U" UU UUUS9  g )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                    U R                   R                  nU" UU UUUS9  [        X#U5      u  pg[        SS9u  pUR	                  USS9n[        UR                  5      n
[        U 5      nUR                  XS9nUR                  XS9nUR                  X5        UR                  nUR                  n[        U5      n[        SS9   UR                  X5        UR                  n[        U5      [        U5      :X  d   e[        U[        S	S
9nUR                  n[        U5      [        U5      :X  d   e[        U[        S	S
9nS S S 5        WR                  UR                  :X  d   eUR                   S   UR                   S   :X  d   eWR                  UR                  :X  d   e[#        UR                   S   UR                   S   5      n[%        US U US U U
S9  UR                   S   UR                   S   :w  ah  US   nUUS  nUUS  n['        [        R(                  " UU-
  5      U
:  5      (       d   e['        [        R(                  " UU-
  5      U
:  5      (       d   eg g ! , (       d  f       GN)= f)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    sz   0 ''D	 &oJOJBB/DA	%(A!''"D
	
C::a:'D::a:'DGGAMOOM333ZF	4	0

4**M*l4.@@@@"=RF & : :12l46HHHH#*+@RPU#V  
1 !!]%8%8888!!!$(;(;A(>>>>#))-B-H-HHHH )//2M4G4G4JKN .1o~. a M$7$7$::2261./B7H266+.@@ADHIIII266.1CCDtKLLLL ;3 
1	0s   A<I##
I2SCIPY_ARRAY_API1zSCIPY_ARRAY_API not set to 1.)reasonc                     [         R                  " S5      n U R                  [        R                  5      n[        SSSS9n[        R                  " S5      n[         R                  " [        US9   [        SS	9   UR                  U5        S S S 5        S S S 5        UR                  S
SS9  [        R                  " S5      n[         R                  " [        US9   [        SS	9   UR                  U5        S S S 5        S S S 5        UR                  S
SS9  [        R                  " S5      n[         R                  " [        US9   [        SS	9   UR                  U5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N[= f! , (       d  f       g = f)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   zArray 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  sT    
		/	0Bjj#G
1
BC99ML 
z	6t4GGG 5 
7 NNltNL99	6L 
z	6t4GGG 5 
7 NNlvNN99	QL 
k	6t4GGG 5 
7	6# 54 
7	6 54 
7	6 54 
7	6sl   0
F:E3F
F&%F7F&
GF7"G3
F	=F
F
F#	F&&
F47
G	G
G)gHz>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I
  (Hh/ 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 tC$47G$GHI '78)E4=9E4=1C
 2 : 9C
L 
		a &&sB/$$S"BQOPQR
		a &&r3/
 	:   {3I 4I ,'?@V AV {3? 4?: {36 46 {34 44 'GHE4=1- 2 I-  
RXXy),-rxxI8N/O/Q/QR ' ?!&?, 	TYY__%&	3tyy'!+,	s499??+, $))TYY[[!9:. ;. '78" 9" ,'?@ A"'"*
* -	D!	D!			q	!	&	&q"	-sA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.vd;='89'8F#'+		
 	!  "#	4 .-/ "#   
  	62 	!  =M	*=M@ JJNN$%,5T  r/   