
    0PhA                     f   d Z ddlZddlZddlZddlmZmZ ddlm	Z	 ddl
mZmZ ddlmZmZmZ ddlmZmZmZ  e	j                    Zd Zej                            d	eez   ez             d
             Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-d Z.dS )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                     t           j        } | j        d         dz  }t          d|          }t	          d          }|                    |            |                    |           }|j        | j        d         dfk    sJ t          j                            |j	        
                                |j	        
                                d           dd| j        d         fD ]}t          ||	          }|                    |            |                                }|                                }t          j                            t          j        ||          t          j        | j        d                   d
           d S )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           p/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/decomposition/tests/test_incremental_pca.pytest_incremental_pcar1      sw   	AqJqZ@@@D
1


Ca&&q))M171:q/1111J&**,,%))++     Aqwqz* 
 
lzBBB!!##&&((	

""F3	""BF171:$6$6U 	# 	
 	
 	
 	

 
    sparse_containerc                    t           j        }t          d          }|                    |            | |          }|j        d         dz  }t          d|          }|                    |          }|j        |j        d         dfk    sJ t          j                            |j	        
                                |j	        
                                d           dd|j        d         fD ]}t          ||	          }|                    |           |                                }|                                }	t          j                            t          j        ||	          t          j        |j        d                   d
           t!          j        t$          d          5  |                    |           d d d            d S # 1 swxY w Y   d S )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<   0   s"   
 		A
1


Ca""H"a'JqZ@@@D&&x00M8>!#4a"88888J&**,,%))++     Aqwqz* 
 
lzBBB!!##&&((	

""F3	""BF8>!+<$=$=E 	# 	
 	
 	
 	
 
=
 
 
 # # 	"""# # # # # # # # # # # # # # # # # #s   +GGGc                  N   t           j                            d          } d\  }}|                     ||          dz  }|d dxx         t          j        g d          z  cc<   d|                     d|          z  t          j        g d          z   }t          d                              |                              |          }|t          j        |dz  	                                          z  }t          t          j        |d	         d	                   d
d           d S )N  )d   r   g?
   )r         r   r   r   r         ?)r!   randomRandomStaterandnarrayr   r%   	transformsqrtr$   r	   abs)rngnpr*   XtYts         r0   %test_incremental_pca_check_projectionrP   Y   s   
)


%
%CDAq		!Q#AcrcFFFbhyyy!!!FFF	syyA	)))!4!4	4B
 
Q	'	'	'	+	+A	.	.	8	8	<	<B "'2q5++--
 
  B r!uQx((#q11111r2   c                  p   t           j                            d          } d\  }}|                     ||          }|d d dfxx         dz  cc<   |g dz  }t	          dd                              |          }|                    |          }|                    |          }t          ||d	
           d S )Nr>   2   r   r   h㈵>rB   rA   r   r   r@   r   r   decimal)	r!   rD   rE   rF   r   r%   rH   inverse_transformr	   )rK   rL   rM   r*   r+   Y	Y_inverses          r0   test_incremental_pca_inverser[   n   s    
)


%
%CDAq		!QAaaadGGGwGGGNA qR888<<Q??DqA&&q))I9a000000r2   c                     t          j        g dg dg          } | j        \  }}d}t          j        t
          d                    ||                    5  t          |d                              |            d d d            n# 1 swxY w Y   d}t          j        t
          d	| d
| d          5  t          |          	                    |            d d d            d S # 1 swxY w Y   d S )N)r   r   r   )r   r   r   rA   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!   rG   r   r7   r8   
ValueErrorformatr   r%   r:   )r*   	n_samples
n_featuresr   s       r0   test_incremental_pca_validationra   ~   s   
)))YYY'((AGIzL	 !&z::
 
 
 	; 	; 	|33377:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; L	ML M M!*M M M
 
 
 A A 	L111==a@@@A A A A A A A A A A A A A A A A A As$   %BBB6$C''C+.C+c                     t          d          } t          j                    5  t          j        dt                     |                     t          j                            dd                     d d d            n# 1 swxY w Y   t          j                    5  t          j        dt                     | 	                    t          j                            dd                     d d d            d S # 1 swxY w Y   d S )NrB   r   error   )
r   warningscatch_warningssimplefilterRuntimeWarningr:   r!   rD   rF   r%   )r+   s    r0   !test_n_samples_equal_n_componentsri      sY    q)))D		 	"	" 0 0g~666A..///0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
	 	"	" ( (g~666A&&'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s%   AA>>BBAC77C;>C;c                  l   t           j                            d          } dD ]\  }}|                     ||          }t	          d           }|                    |           |j        t          |j                  k    sJ |                    |           |j        |j	        j        d         k    sJ d S )Nr>   ))rS   r@   )r@   rS   r   r   )
r!   rD   rE   randr   r:   n_components_minr   components_)rK   r_   r`   r*   r+   s        r0   test_n_components_nonero      s    
)


%
%C!5 ? ?	:HHY
++4000 	!S\\1111 	!T%5%;A%>>>>>>? ?r2   c                     t           j                            d          } d}d}|                     ||          }|                     ||          }|                     ||          }t	          d          }|                    |           |                    d           t          j        t                    5  |
                    |           d d d            n# 1 swxY w Y   |                    d           t          j        t                    5  |
                    |           d d d            n# 1 swxY w Y   |                    d           |
                    |           d S )Nr>   r?      r   r@      )r!   rD   rE   rF   r   r%   
set_paramsr7   r8   r]   r:   )rK   r_   r`   r*   X2X3r+   s          r0   test_incremental_pca_set_paramsrv      s   
)


%
%CIJ		)Z((A	9j	)	)B	9j	)	)Br***DHHQKKKOOO$$$	z	"	"                 	OOO$$$	z	"	"                 	OOO$$$Qs$   :CC #C D88D<?D<c                  x   t           j                            d          } d}|                     |d          }|                     |d          }t	          d           }|                    |           t          j        t                    5  |	                    |           d d d            d S # 1 swxY w Y   d S )Nr>   r?   rq   rS   r   )
r!   rD   rE   rF   r   r%   r7   r8   r]   r:   )rK   r_   r*   rt   r+   s        r0   (test_incremental_pca_num_features_changerx      s    
)


%
%CI		)R  A	9b	!	!Bt,,,DHHQKKK	z	"	"                   s   B//B36B3c                     t           j                            d          } d}d}|                     ||          }g }t          j        dd          }|D ]@}t          d |                              |          }|                    |j                   At          |d d         |dd                    D ];\  }}	t          t          j        |          t          j        |	          d	
           <d S )Nr>   r?   r   r@   rq   r   r      rV   )r!   rD   rE   rF   aranger   r%   appendrn   zipr	   sign
rK   r_   r`   r*   all_componentsbatch_sizesr   r+   ijs
             r0    test_incremental_pca_batch_signsr      s    
)


%
%CIJ		)Z((AN)B##K! 0 0
4JGGGKKANNd.////N3B3');<< ? ?1BGAJJ

A>>>>>? ?r2   c                     t           j                            d          } d\  }}|                     ||          }|d d dfxx         dz  cc<   |g dz  }|}t	          |          }|                    |d |                    t          ||          D ]"}|                    |||dz                       #t          |          }|                    |           t          |j
        |j
        d           d S )	Nr>   rR   r   rT   rU   r   r   r   )r!   rD   rE   rF   r   r:   ranger   r%   r   rn   )rK   rL   rM   r*   r   pipcaidxr,   s           r0   ,test_incremental_pca_partial_fit_small_batchr      s    )


%
%CDAq		!QAaaadGGGwGGGNAL555E	a&'''\1%% , ,!C#'M*++++
<
(
(
(CGGAJJJCOU%6TBBBBBBr2   c                     t           j                            d          } d}d}|                     ||          }g }t          j        ddd          }|D ]@}t          d |                              |          }|                    |j                   At          |d d         |dd                    D ]\  }}	t          ||	d	           d S )
Nr>   r?   r   rq   (   r   rz   r   rV   )r!   rD   rE   rF   r|   r   r%   r}   rn   r~   r	   r   s
             r0   !test_incremental_pca_batch_valuesr      s    
)


%
%CIJ		)Z((AN)BA&&K! 0 0
4JGGGKKANNd.////N3B3');<< - -1Aq!,,,,,- -r2   c                     t           j                            d          } d}d}|                     ||          }g }t          j        ddd          }|D ]@}t          d|                              |          }|                    |j                   At          |d d         |dd                    D ]\  }}	t          ||	           d S )	Nr>   r?   rq   Z   r   r   rz   r   )r!   rD   rE   rF   r|   r   r%   r}   rn   r~   r   )
rK   r_   r`   r*   r   r   r   r+   components_icomponents_js
             r0   test_incremental_pca_batch_rankr     s    
)


%
%CIJ		)Z((AN)BA&&K! 0 0
2*EEEII!LLd.////&)."*=~abb?Q&R&R A A"l$\<@@@@A Ar2   c                     t           j                            d          } d\  }}|                     ||          }|d d dfxx         dz  cc<   |g dz  }d}t	          d|                              |          }t	          d|          }t          j        d	|dz   |          }t          |d d
         |dd                    D ]&\  }}	|                    |||	d d f                    't          |j
        |j
        d           d S )Nr>   rR   r   rT   rU   r@   r   r   r   rz   r   rV   )r!   rD   rE   rF   r   r%   r|   r~   r:   r	   rn   )
rK   rL   rM   r*   r   r+   r   	batch_itrr   r   s
             r0    test_incremental_pca_partial_fitr      s!   
)


%
%CDAq		!QAaaadGGGwGGGNA JqZ@@@DDQGGDjAAAE	!QUJ//IIcrcNIabbM22 % %1!AaCF)$$$$(%*;QGGGGGGr2   c                     t           j        } t          d                              |           }t	          dd                              |           }t          t          j        |          t          j        |          d           d S )Nr   r      r   r   )r   r   r   r    r   r	   r!   rJ   )r*   Y_pcaY_ipcas      r0   %test_incremental_pca_against_pca_irisr   4  so    	AQ--a00Er:::HHKKFurvf~~q99999r2   c                     t           j                            d          } d}d}|                     ||          d|                     d|          z  z   }t          d                              |          }t          dd                              |          }t          t          j	        |          t          j	        |          d           d S )	Nr>   r?   r   rB   r   r   r   r   )
r!   rD   rE   rF   rk   r   r    r   r	   rJ   )rK   r_   r`   r*   r   r   s         r0   ,test_incremental_pca_against_pca_random_datar   >  s    
)


%
%CIJ		)Z((1sxx:/F/F+FFAQ--a00Er:::HHKKFurvf~~q99999r2   c                     t          j        ddddd          } d}| j        \  }}dD ]}t          |	                              |           }t          |d
                              |           }t          |j        |j        |           t          |j        |j        |           t          |j	        |j	        |           d S )N  r?           r@   r>   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   K  s    %cRd	 	 	A DGIz 	U 	Ur"""&&q))2#>>>BB1EE#T%=t	
 	
 	
 	
 	)4+ISW	
 	
 	
 	
 	C/1EtTTTTT	U 	Ur2   c            	      B   t           j                            d          } d}d}t          j        ||dd|           }t          dd|                               |          }t          dd	                              |          }t          |j	        |j	        d
           |
                    |          }|
                    |          }t          t          j        |j	        dz            t           j                            |d          dz  d           t          t          j        |j	        dz            t           j                            |d          dz  d
           t          |j	        t          j        t          j        |dz  d                    d           t          |j	        t          j        t          j        |dz  d                    d
           t           j                            d          } d}d}t          j        ||dd|           }t          dd|           }t          dd	          }|                    |          }|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                  }|                    |           |                    |           t          |j	        g dd           t          |j	        g dd           d S )Nr   r   r?   r   r@   r   full)r   
svd_solverr   r   r   g       @fro   )axisn   r   A`"	@r   X9v@)r   r   rC      )r!   rD   rE   r   r   r   r%   r   r
   singular_values_rH   r$   linalgnormrI   r    r(   rn   )	rK   r_   r`   r*   r,   r+   X_pcaX_ipcaX_hats	            r0   test_singular_valuesr   ^  s    )


"
"CIJ%:SRU	 	 	A 2&s
C
C
C
G
G
J
JCrc:::>>qAADc2D4I1MMM MM!E^^AF
s#S())29>>%+G+G3+NPR   
t$c)**BINN65,I,IS,PRS  
 bgbfUCZa&@&@&@AA2   rwrvfck'B'B'BCCQ  
 )


"
"CIJ%:SQT	 	 	A 1c
B
B
BCqS999Da  E	RWRVE3JQ///000E	!!!Q$KKK5KKK	!!!Q$KKK5KKKF5#/**EGGENNNHHUOOOc24G4G4GLLLd35H5H5H"MMMMMr2   c                    t          j        dddd|           }d}dD ]+}t          d|	                              |          }t	          d|d
                              |          }|j        dk    }|                    |          }|                    |          }t          t          j	        |          d d |f         t          j	        |          d d |f         |           |
                    |          }	|
                    |          }
t          ||	|           t          ||
|           t          |
|	|           -d S )Nr   r@   r   r   r   r   )N	   T)whitenr      )r   r   r   g-q=r   )r   r   r   r%   r   r#   rH   r   r!   rJ   rX   )global_random_seedr*   r   r   r,   r+   stable_maskXt_pcaXt_ipca	Xinv_ipcaXinv_pcas              r0   test_whiteningr     sm   %bADV	 	 	A D 8 8B///33A66TsKKKOOPQRR 3e;q!!..##F6NN111k>*F7OOAAA{N+	
 	
 	
 	
 **733	((009400008$////)$7777738 8r2   c                     t           j                            d          } |                     dd          dz   }|                     dd          dz   }t	          d          }|                    |           t          |j                  |_        |                    |           |j        }t	          d          }|                    |           |                    |           |j        }t           j	        
                    ||           d S )Nr   rB   r   r   rd   r   )r!   rD   rE   rF   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44COOA'*';$q)))DQQ%)%:"J(*H    r2   c                  Z   t           j                            d          } |                     dd          }t	          dd          }|                    |           t          d          }|                    |           t           j                            |j	        |j	                   d S )Nr   i  r   i'  r   r   )
r!   rD   rE   rk   r   r%   r   r"   r   r   )rK   r   r+   r,   s       r0   'test_incremental_pca_fit_overflow_errorr     s     )


"
"CAqU;;;DHHQKKK
1


CGGAJJJJt4c6JKKKKKr2   c                      t          d                              t          j                  } |                                 }t          d t          d          D             |           dS )z+Check feature names out for IncrementalPCA.r   r   c                     g | ]}d | S )incrementalpca ).0r   s     r0   
<listcomp>z:test_incremental_pca_feature_names_out.<locals>.<listcomp>  s!    ???,,,???r2   N)r   r%   r   r   get_feature_names_outr   r   )r+   namess     r0   &test_incremental_pca_feature_names_outr     s^    q)))--di88D&&((E??eAhh???GGGGGr2   )/__doc__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   ro   rv   rx   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r2   r0   <module>r      so             = = = = = = = =       5 5 5 5 5 5 5 5         
 O N N N N N N N N Nx
 
 
6 7.H ## ## ##L2 2 2*1 1 1 A A A8	( 	( 	(? ? ?$  .	 	 	? ? ? C C C*- - - A A A H H H(: : :
: 
: 
:U U U&6N 6N 6Nr8 8 8D  2L L LH H H H Hr2   