
    _nd;                     |   d Z ddlZddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZmZ dd	lmZ  ej                    Zd
 Zej                            dej        ej        ej        g          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_almost_equal)assert_array_almost_equal)assert_allclose_dense_sparse)assert_array_equal)datasets)PCAIncrementalPCA)sparsec                     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testingassert_allcloseexplained_variance_ratio_sumfitget_covarianceget_precisiondoteye)Xr   ipcapcaX_transformedr   cov	precisions           Plib/python3.11/site-packages/sklearn/decomposition/tests/test_incremental_pca.pytest_incremental_pcar/      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 	# 	
 	
 	
 	

 
    matrix_classc                    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)
r1   r(   r*   X_sparser   r)   r+   r   r,   r-   s
             r.   test_incremental_pca_sparser:   .   s   
 		A
1


Ca|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         r.   %test_incremental_pca_check_projectionrN   W   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1r0   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㈵>r@   r?   r   r   r>   r   r   decimal)	r   rB   rC   rD   r	   r#   rF   inverse_transformr   )rI   rJ   rK   r(   r)   Y	Y_inverses          r.   test_incremental_pca_inverserY   l   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0r0   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	                    ||                    5  t          |
          	                    |            d d d            d S # 1 swxY w Y   d S )N)r   r   r   )r   r   r   r?   zdn_components={} invalid for n_features={}, need more rows than columns for IncrementalPCA processingr3   r>   r   r   zGn_components={} must be less or equal to the batch number of samples {}r   )
r   rE   r   r5   r6   
ValueErrorformatr	   r#   r8   )r(   	n_samples
n_featuresr   s       r.   test_incremental_pca_validationr_   |   s   
)))YYY'((AGIzL	 !&z::
 
 
 	; 	; 	|33377:::	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	; L	 &y99
 
 
 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$C44C8;C8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 )Nr@   r   error   )
r	   warningscatch_warningssimplefilterRuntimeWarningr8   r   rB   rD   r#   )r)   s    r.   !test_n_samples_equal_n_componentsrg      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<   ))rQ   r>   )r>   rQ   r   r   )
r   rB   rC   randr	   r8   n_components_minr   components_)rI   r]   r^   r(   r)   s        r.   test_n_components_nonerm      s    
)


%
%C!5 ? ?	:HHY
++4000 	!S\\1111 	!T%5%;A%>>>>>>? ?r0   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   rB   rC   rD   r	   r#   
set_paramsr5   r6   r[   r8   )rI   r]   r^   r(   X2X3r)   s          r.   test_incremental_pca_set_paramsrt      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=   ro   rQ   r   )
r   rB   rC   rD   r	   r#   r5   r6   r[   r8   )rI   r]   r(   rr   r)   s        r.   (test_incremental_pca_num_features_changerv      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>   ro   r   r      rT   )r   rB   rC   rD   aranger	   r#   appendrl   zipr   sign
rI   r]   r^   r(   all_componentsbatch_sizesr   r)   ijs
             r.    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>>>>>? ?r0   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   ro   (   r   rx   r   rT   )r   rB   rC   rD   rz   r	   r#   r{   rl   r|   r   r~   s
             r.   !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!,,,,,- -r0   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=   ro   Z   r   r   rx   r   )r   rB   rC   rD   rz   r	   r#   r{   rl   r|   r   )
rI   r]   r^   r(   r   r   r   r)   components_icomponents_js
             r.   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r0   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<   rP   r   rR   rS   r>   r   r   r   rx   r   rT   )r   rB   rC   rD   r	   r#   rz   r|   r8   r   rl   )
rI   rJ   rK   r(   r   r)   pipca	batch_itrr   r   s
             r.    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Gr0   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   rH   )r(   Y_pcaY_ipcas      r.   %test_incremental_pca_against_pca_irisr     so    	AQ--a00Er:::HHKKFurvf~~q99999r0   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   r@   r   r   r   r   )
r   rB   rC   rD   ri   r   r   r	   r   rH   )rI   r]   r^   r(   r   r   s         r.   ,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9r0   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   rT   )
r   make_low_rank_matrixr   r   r#   r	   r   explained_variance_r!   noise_variance_)r(   precr]   r^   ncr*   r)   s          r.   test_explained_variancesr   5  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r0   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   rA      )r   rB   rC   r   r   r   r#   r	   r   singular_values_rF   r"   linalgnormrG   r   r&   rl   )	rI   r]   r^   r(   r*   r)   X_pcaX_ipcaX_hats	            r.   test_singular_valuesr   H  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Mr0   c                  p   t          j        ddddd          } d}| j        \  }}dD ]}t          d	|
                              |           }t          d	|d                              |           }|                    |           }|                    |           }t          t          j	        |          t          j	        |          |           |
                    |          }	|
                    |          }
t          | |	|           t          | |
|           t          |
|	|           d S )Nr   r>   r   r   r<   r   r   )N	   T)whitenr      )r   r   r   rT   )r   r   r   r   r#   r	   rF   r   r   rH   rV   )r(   r   r]   r^   r   r*   r)   Xt_pcaXt_ipca	Xinv_ipcaXinv_pcas              r.   test_whiteningr     sB   %bAD	 	 	A DGIz ? ?B///33A66TsKKKOOPQRRq!!..##BF6NNBF7OOTJJJJ**733	((00Ay$7777Ax6666Hi>>>>>? ?r0   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   r@   r   r   rb   r   )r   rB   rC   rD   r	   r8   floatn_samples_seen_r   r   r    )rI   ABr*    singular_vals_float_samples_seenpca2singular_vals_int_samples_seens          r.   /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    r0   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   rB   rC   ri   r	   r#   r   r   r    r   )rI   r   r)   r*   s       r.   'test_incremental_pca_fit_overflow_errorr     s     )


"
"CAqU;;;DHHQKKK
1


CGGAJJJJt4c6JKKKKKr0   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     r.   
<listcomp>z:test_incremental_pca_feature_names_out.<locals>.<listcomp>  s!    ???,,,???r0   N)r	   r#   r   r   get_feature_names_outr   range)r)   namess     r.   &test_incremental_pca_feature_names_outr     s^    q)))--di88D&&((E??eAhh???GGGGGr0   ).__doc__numpyr   r5   rc   sklearn.utils._testingr   r   r   numpy.testingr   sklearnr   sklearn.decompositionr   r	   scipyr
   	load_irisr   r/   markparametrize
csc_matrix
csr_matrix
lil_matrixr:   rN   rY   r_   rg   rm   rt   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r0   r.   <module>r      sQ             6 6 6 6 6 6 < < < < < < ? ? ? ? ? ? , , , , , ,       5 5 5 5 5 5 5 5      x
 
 
6 V&(96;LM ## ## ##L2 2 2*1 1 1 A A A:	( 	( 	(? ? ?$  .	 	 	? ? ? - - - A A A H H H(: : :
: 
: 
:U U U&6N 6N 6Nr? ? ?*  2L L LH H H H Hr0   