
    -iB                     l   S r SSKrSSKrSSKrSSKrSSK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JrJr  \
R,                  " 5       rS r\R2                  R5                  S	\\-   \-   5      S
 5       rS rS rS rS rS r S r!S r"S r#S r$S r%S r&S r'S r(S r)S r*S r+S r,S r-S r.S r/g)zTests for Incremental PCA.    N)assert_allcloseassert_array_equal)datasets)PCAIncrementalPCA)assert_allclose_dense_sparseassert_almost_equalassert_array_almost_equal)CSC_CONTAINERSCSR_CONTAINERSLIL_CONTAINERSc                     [         R                  n U R                  S   S-  n[        SUS9n[	        SS9nUR                  U 5        UR                  U 5      nUR                  U R                  S   S4:X  d   e[        R                  R                  UR                  R                  5       UR                  R                  5       SS9  SSU R                  S   4 H  n[        XQS	9nUR                  U 5        UR                  5       nUR                  5       n[        R                  R                  [        R                  " Xg5      [        R                  " U R                  S   5      S
S9  M     g )Nr         n_components
batch_sizer   MbP?rtol   r   vIh%<=atol)irisdatashaper   r   fit_transformnptestingr   explained_variance_ratio_sumfitget_covarianceget_precisiondoteye)Xr   ipcapcaX_transformedr   cov	precisions           c/var/www/html/venv/lib/python3.13/site-packages/sklearn/decomposition/tests/test_incremental_pca.pytest_incremental_pcar1      s2   		AqJqZ@D
1
Ca&&q)M1771:q/111JJ&&**,%%))+   Aqwwqz*lB!!#&&(	


""FF3"BFF1771:$6U 	# 	
 +    sparse_containerc                 x   [         R                  n[        SS9nUR                  U5        U " U5      nUR                  S   S-  n[        SUS9nUR                  U5      nUR                  UR                  S   S4:X  d   e[        R                  R                  UR                  R                  5       UR                  R                  5       SS9  SSUR                  S   4 H  n[        XtS	9nUR                  U5        UR                  5       nUR                  5       n	[        R                  R                  [        R                  " X5      [        R                  " UR                  S   5      S
S9  M     [         R"                  " [$        SS9   UR'                  U5        S S S 5        g ! , (       d  f       g = f)Nr   r   r   r   r   r   r   r   r   r   r   zIncrementalPCA.partial_fit does not support sparse input. Either convert data to dense or use IncrementalPCA.fit to do so in batches.match)r   r   r   r    r   r   r!   r"   r   r#   r$   r%   r&   r'   r(   r)   pytestraises	TypeErrorpartial_fit)
r3   r*   r,   X_sparser   r+   r-   r   r.   r/   s
             r0   test_incremental_pca_sparser<   1   sz   
 			A
1
Ca"H"a'JqZ@D&&x0M8>>!#4a"8888JJ&&**,%%))+   Aqwwqz*lB!!#&&(	


""FF3"BFF8>>!+<$=E 	# 	
 + 
=
 	"
 
 
s   F++
F9c                    [         R                  R                  U 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S9R                  U5      R                  U5      nU[         R                  " US-  R                  5       5      -  n[        [         R                  " US   S   5      S	S5        g )
N)d   r   g?
   )r         r   r   r   r         ?)r!   randomRandomStaterandnarrayr   r%   	transformsqrtr$   r	   abs)global_random_seedrngnpr*   XtYts          r0   %test_incremental_pca_check_projectionrP   Z   s    
))

 2
3CDA		!#AcrFbhhy!!F	syyA	)!4	4B
 
Q	'	+	+A	.	8	8	<B "''2q5++-
  B r!uQx(#q1r2   c                 &   [         R                  R                  U 5      nSu  p#UR                  X#5      nUS S 2S4==   S-  ss'   U/ SQ-  n[	        SSS9R                  U5      nUR                  U5      nUR                  U5      n[        XGSS	9  g )
N2   r   r   h㈵>rA   r@   r   r   r?   r   r   decimal)	r!   rC   rD   rE   r   r%   rG   inverse_transformr	   )rJ   rK   rL   rM   r*   r+   Y	Y_inverses           r0   test_incremental_pca_inverser[   o   s    
))

 2
3CDA		!AadGwGNA qR8<<Q?DqA&&q)Ia0r2   c                     [         R                  " / SQ/ SQ/5      n U R                  u  pSn[        R                  " [
        SR                  X25      S9   [        USS9R                  U 5        S S S 5        Sn[        R                  " [
        S	U S
U S3S9   [        US9R                  U 5        S S S 5        g ! , (       d  f       NR= f! , (       d  f       g = f)N)r   r   r   )r   r   r   r@   zdn_components={} invalid for n_features={}, need more rows than columns for IncrementalPCA processingr5   r?   r   r   zn_components=z6 must be less or equal to the batch number of samples z  for the first partial_fit call.r   )
r!   rF   r   r7   r8   
ValueErrorformatr   r%   r:   )r*   	n_samples
n_featuresr   s       r0   test_incremental_pca_validationra      s    
)Y'(AGGIL	 !&:
 	|377:
 L	L> *!!*+KM
 	L1==a@
 

 

 
s   B;C;
C	
Cc                     [        SS9n [        R                  " 5          [        R                  " S[        5        U R                  [        R                  R                  SS5      5        S S S 5        [        R                  " 5          [        R                  " S[        5        U R                  [        R                  R                  SS5      5        S S S 5        g ! , (       d  f       Nw= f! , (       d  f       g = f)NrA   r   error   )
r   warningscatch_warningssimplefilterRuntimeWarningr:   r!   rC   rE   r%   )r+   s    r0   !test_n_samples_equal_n_componentsri      s     q)D		 	 	"g~6A./ 
# 
	 	 	"g~6A&' 
#	" 
#	" 
#	"s   ACAC,
C),
C:c                  l   [         R                  R                  S5      n S H  u  pU R                  X5      n[	        S S9nUR                  U5        UR                  [        UR                  5      :X  d   eUR                  U5        UR                  UR                  R                  S   :X  a  M   e   g )N  ))rS   r?   )r?   rS   r   r   )
r!   rC   rD   randr   r:   n_components_minr   components_)rK   r_   r`   r*   r+   s        r0   test_n_components_nonerp      s    
))


%C!5	HHY+40 	!!S\111 	!!T%5%5%;%;A%>>>> "6r2   c                  t   [         R                  R                  S5      n SnSnU R                  X5      nU R                  X5      nU R                  X5      n[	        SS9nUR                  U5        UR                  SS9  [        R                  " [        5         UR                  U5        S S S 5        UR                  SS9  [        R                  " [        5         UR                  U5        S S S 5        UR                  SS9  UR                  U5        g ! , (       d  f       Nr= f! , (       d  f       N@= f)Nrk   r>      r   r?      )r!   rC   rD   rE   r   r%   
set_paramsr7   r8   r]   r:   )rK   r_   r`   r*   X2X3r+   s          r0   test_incremental_pca_set_paramsrw      s    
))


%CIJ		)(A	9	)B	9	)Br*DHHQKOOO$	z	" 
# 	OOO$	z	" 
# 	OOO$Q 
#	" 
#	"s   DD)
D&)
D7c                  L   [         R                  R                  S5      n SnU R                  US5      nU R                  US5      n[	        S S9nUR                  U5        [        R                  " [        5         UR                  U5        S S S 5        g ! , (       d  f       g = f)Nrk   r>   rr   rS   r   )
r!   rC   rD   rE   r   r%   r7   r8   r]   r:   )rK   r_   r*   ru   r+   s        r0   (test_incremental_pca_num_features_changery      sv    
))


%CI		)R A	9b	!Bt,DHHQK	z	" 
#	"	"s   :B
B#c                    [         R                  R                  U 5      nSnSnUR                  X#5      n/ n[         R                  " SS5      nU H7  n[        S US9R                  U5      nUR                  UR                  5        M9     [        R                  " U5       H8  u  p[        [         R                  " U	5      [         R                  " U
5      SS9  M:     g )Nr>   r   r?   rr   r      rV   )r!   rC   rD   rE   aranger   r%   appendro   	itertoolspairwiser	   signrJ   rK   r_   r`   r*   all_componentsbatch_sizesr   r+   ijs              r0    test_incremental_pca_batch_signsr      s    
))

 2
3CIJ		)(AN))B#K!
4JGKKANd../ " "">2BGGAJ
A> 3r2   c                     [         R                  R                  S5      n Su  pU R                  X5      nUS S 2S4==   S-  ss'   U/ SQ-  nUn[	        US9nUR                  US U 5        [        XA5       H  nUR                  X6US-    5        M     [        US9nUR                  U5        [        UR                  UR                  SS9  g )	Nrk   rR   r   rT   rU   r   r   r   )r!   rC   rD   rE   r   r:   ranger   r%   r   ro   )rK   rL   rM   r*   r   pipcaidxr,   s           r0   ,test_incremental_pca_partial_fit_small_batchr      s     ))


%CDA		!AadGwGNAL5E	a&'\%!#'*+ & <
(CGGAJCOOU%6%6TBr2   c                 l   [         R                  R                  U 5      nSnSnUR                  X#5      n/ n[         R                  " SSS5      nU H7  n[        S US9R                  U5      nUR                  UR                  5        M9     [        R                  " U5       H  u  p[        XSS9  M     g )Nr>   r   rr   (   r   r   rV   )r!   rC   rD   rE   r|   r   r%   r}   ro   r~   r   r	   r   s              r0   !test_incremental_pca_batch_valuesr     s    
))

 2
3CIJ		)(AN))BA&K!
4JGKKANd../ " "">2A!, 3r2   c                  n   [         R                  R                  S5      n SnSnU R                  X5      n/ n[         R                  " SSS5      nU H7  n[        SUS9R                  U5      nUR                  UR                  5        M9     [        R                  " U5       H  u  p[        X5        M     g )Nrk   r>   rr   Z   r   r   )r!   rC   rD   rE   r|   r   r%   r}   ro   r~   r   r   )
rK   r_   r`   r*   r   r   r   r+   components_icomponents_js
             r0   test_incremental_pca_batch_rankr     s    
))


%CIJ		)(AN))BA&K!
2*EII!Ld../ " '0&8&8&H"$\@ 'Ir2   c                    [         R                  R                  U 5      nSu  p#UR                  X#5      nUS S 2S4==   S-  ss'   U/ SQ-  nSn[	        SUS9R                  U5      n[	        SUS9n[         R                  " SUS-   U5      n[        R                  " U5       H  u  pUR                  XIU
2S S 24   5        M      [        UR                  UR                  S	S
9  g )NrR   r   rT   rU   r?   r   r   r   r   rV   )r!   rC   rD   rE   r   r%   r|   r~   r   r:   r	   ro   )rJ   rK   rL   rM   r*   r   r+   r   	batch_itrr   r   s              r0    test_incremental_pca_partial_fitr   !  s    
))

 2
3CDA		!AadGwGNA JqZ@DDQGDjAE		!QUJ/I""9-!aCF)$ .((%*;*;QGr2   c                      [         R                  n [        SS9R                  U 5      n[	        SSS9R                  U 5      n[        [        R                  " U5      [        R                  " U5      S5        g )Nr   r      r   r   )r   r   r   r    r   r	   r!   rI   )r*   Y_pcaY_ipcas      r0   %test_incremental_pca_against_pca_irisr   5  sS    		AQ--a0Er:HHKFurvvf~q9r2   c                 d   [         R                  R                  U 5      nSnSnUR                  X#5      SUR	                  SU5      -  -   n[        SS9R                  U5      n[        SSS9R                  U5      n[        [         R                  " U5      [         R                  " U5      S5        g )Nr>   r   rA   r   r   r   r   )
r!   rC   rD   rE   rl   r   r    r   r	   rI   )rJ   rK   r_   r`   r*   r   r   s          r0   ,test_incremental_pca_against_pca_random_datar   ?  s    
))

 2
3CIJ		)(1sxx:/F+FFAQ--a0Er:HHKFurvvf~q9r2   c                     [         R                  " SSSSSS9n SnU R                  u  p#S H  n[        US	9R	                  U 5      n[        USS
9R	                  U 5      n[        UR                  UR                  US9  [        UR                  UR                  US9  [        UR                  UR                  US9  M     g )N  r>           r?   rk   tail_strengtheffective_rankrandom_stater   )Nc   r   r   rV   )
r   make_low_rank_matrixr   r   r%   r   r	   explained_variance_r#   noise_variance_)r*   precr_   r`   ncr,   r+   s          r0   test_explained_variancesr   L  s    %%cRd	A DGGIr"&&q)2#>BB1E##T%=%=t	
 	))4+I+ISW	
 	C//1E1EtT r2   c           
         [         R                  R                  U 5      nSnSn[        R                  " X#SSUS9n[        SSUS9R                  U5      n[        SSS	9R                  U5      n[        UR                  UR                  S
5        UR                  U5      nUR                  U5      n[        [         R                  " UR                  S-  5      [         R                  R                  US5      S-  S5        [        [         R                  " UR                  S-  5      [         R                  R                  US5      S-  S
5        [        UR                  [         R                  " [         R                  " US-  SS95      S5        [        UR                  [         R                  " [         R                  " US-  SS95      S
5        [         R                  R                  U 5      nSnSn[        R                  " X#SSUS9n[        SSUS9n[        SS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                   " XuR"                  5      n	UR                  U	5        UR                  U	5        [        UR                  / SQS5        [        UR                  / SQS5        g )Nr   r>   r   r?   r   full)r   
svd_solverr      r   r   g       @fro   r   )axisn   r   A`"	@r   X9v@)r   r   rB      )r!   rC   rD   r   r   r   r%   r   r
   singular_values_rG   r$   linalgnormrH   r    r(   ro   )
rJ   rK   r_   r`   r*   r,   r+   X_pcaX_ipcaX_hats
             r0   test_singular_valuesr   _  sp    ))

 2
3CIJ%%SRU	A 2&s
C
G
G
JCrc:>>qADc22D4I4I1M MM!E^^AF
s##S()299>>%+G3+NPR 
t$$c)*BIINN65,IS,PRS
 bggbffUCZa&@A2 rwwrvvfck'BCQ
 ))

 2
3CIJ%%SQT	A 1c
BCqS9Da E	RWWRVVE3JQ/00E	!Q$K5K	!Q$K5KFF5//*EGGENHHUOc224GLd335H"Mr2   c                    [         R                  " SSSSU S9nSnS H  n[        SUS	9R                  U5      n[	        SUS
S9R                  U5      nUR
                  S:  nUR                  U5      nUR                  U5      n[        [        R                  " U5      S S 2U4   [        R                  " U5      S S 2U4   US9  UR                  U5      n	UR                  U5      n
[        XUS9  [        XUS9  [        XUS9  M     g )Nr   r?   r   r   r   r   )N	   T)whitenr      )r   r   r   g-q=r   )r   r   r   r%   r   r#   rG   r   r!   rI   rX   )rJ   r*   r   r   r,   r+   stable_maskXt_pcaXt_ipca	Xinv_ipcaXinv_pcas              r0   test_whiteningr     s   %%bADV	A DB/33A6TsKOOPQR 33e;q!..#FF6N1k>*FF7OA{N+	
 **73	((040$/$73 r2   c                     [         R                  R                  S5      n U R                  SS5      S-   nU R                  SS5      S-   n[	        SS9nUR                  U5        [        UR                  5      Ul        UR                  U5        UR                  n[	        SS9nUR                  U5        UR                  U5        UR                  n[         R                  R                  XF5        g )Nr   rA   r   r   rd   r   )r!   rC   rD   rE   r   r:   floatn_samples_seen_r   r"   r   )rK   ABr,    singular_vals_float_samples_seenpca2singular_vals_int_samples_seens          r0   /test_incremental_pca_partial_fit_float_divisionr     s     ))


"C		!Q!A		!Q!A
a
(COOA 3 34COOA'*';';$q)DQQ%)%:%:"JJ(r2   c                  8   [         R                  R                  S5      n U R                  SS5      n[	        SSS9nUR                  U5        [        SS9nUR                  U5        [         R                  R                  UR                  UR                  5        g )Nr   i  r   i'  r   r   )
r!   rC   rD   rl   r   r%   r   r"   r   r   )rK   r   r+   r,   s       r0   'test_incremental_pca_fit_overflow_errorr     st     ))


"CAqU;DHHQK
1
CGGAJJJt44c6J6JKr2   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 IncrementalPCA.r   r   incrementalpcaN)r   r%   r   r   get_feature_names_outr   r   )r+   namesr   s      r0   &test_incremental_pca_feature_names_outr     sP    q)--dii8D&&(EeAh?h.,h?G?s   	A!)0__doc__r~   re   numpyr!   r7   numpy.testingr   r   sklearnr   sklearn.decompositionr   r   sklearn.utils._testingr   r	   r
   sklearn.utils.fixesr   r   r   	load_irisr   r1   markparametrizer<   rP   r[   ra   ri   rp   rw   ry   r   r   r   r   r   r   r   r   r   r   r   r   r    r2   r0   <module>r      s          =  5 
 O N
6 7.H####L2*1 A8	(?$.	? C*- A H(:
:U&6Nr8D2LHr2   