
    {KgR>                     ^   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j0                  j3                  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-y)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                  |       }|j                  | j                  d   dfk(  sJ t        j                  j                  |j                  j                         |j                  j                         d       dd| j                  d   fD ]  }t        ||	      }|j                  |        |j                         }|j                         }t        j                  j                  t        j                  ||      t        j                  | j                  d         d
        y )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           t/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/sklearn/decomposition/tests/test_incremental_pca.pytest_incremental_pcar1      s6   		AqJqZ@D
1
Ca&&q)M1771:q/111JJ&&**,%%))+   Aqwwqz*lzB!!#&&(	


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


""FF3	"BFF8>>!+<$=E 	# 	
 + 
=
 	"
 
 
s   F99Gc                     t         j                  j                  d      } d\  }}| j                  ||      dz  }|d dxxx t        j                  g d      z  ccc d| j                  d|      z  t        j                  g d      z   }t        d      j                  |      j                  |      }|t        j                  |dz  j                               z  }t        t        j                  |d	   d	         d
d       y )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crFbhhy!!F	syyA	)!4	4B
 
Q	'	+	+A	.	8	8	<B "''2q5++-
  B r!uQx(#q1r2   c                  8   t         j                  j                  d      } d\  }}| j                  ||      }|d d dfxx   dz  cc<   |g dz  }t	        dd      j                  |      }|j                  |      }|j                  |      }t        ||d	
       y )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adGwGNA qR8<<Q?DqA&&q)I9a0r2   c                     t        j                  g dg dg      } | j                  \  }}d}t        j                  t
        dj                  ||            5  t        |d      j                  |        d d d        d}t        j                  t
        d	j                  ||            5  t        |
      j                  |        d d d        y # 1 sw Y   [xY w# 1 sw Y   y xY w)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   zGn_components={} must be less or equal to the batch number of samples {}r   )
r!   rG   r   r7   r8   
ValueErrorformatr   r%   r:   )r*   	n_samples
n_featuresr   s       r0   test_incremental_pca_validationra   ~   s    
)Y'(AGGIzL	 !&z:
 	|377:
 L	 &y9
 	L1==a@
 

 

 
s   C*CCC$c                     t        d      } t        j                         5  t        j                  dt               | j                  t        j                  j                  dd             d d d        t        j                         5  t        j                  dt               | j                  t        j                  j                  dd             d d d        y # 1 sw Y   pxY w# 1 sw Y   y xY w)NrB   r   error   )
r   warningscatch_warningssimplefilterRuntimeWarningr:   r!   rD   rF   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                  n   t         j                  j                  d      } dD ]  \  }}| j                  ||      }t	        d       }|j                  |       |j                  t        |j                        k(  sJ |j                  |       |j                  |j                  j                  d   k(  rJ  y )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 	!!S\111 	!!T%5%5%;%;A%>>>> "6r2   c                  z   t         j                  j                  d      } d}d}| j                  ||      }| j                  ||      }| j                  ||      }t	        d      }|j                  |       |j                  d       t        j                  t              5  |j                  |       d d d        |j                  d       t        j                  t              5  |j                  |       d d d        |j                  d       |j                  |       y # 1 sw Y   rxY w# 1 sw Y   9xY w)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HHQKOOO$	z	" 
# 	OOO$	z	" 
# 	OOO$Q 
#	" 
#	"s   "D%'D1%D.1D:c                  F   t         j                  j                  d      } d}| j                  |d      }| j                  |d      }t	        d       }|j                  |       t        j                  t              5  |j                  |       d d d        y # 1 sw Y   y xY w)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      sv    
))


%CI		)R A	9b	!Bt,DHHQK	z	" 
#	"	"s   <BB c                     t         j                  j                  d      } d}d}| j                  ||      }g }t        j                  dd      }|D ]9  }t        d |      j                  |      }|j                  |j                         ; t        |d d |dd        D ]9  \  }}	t        t        j                  |      t        j                  |	      d	
       ; y )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!
4JGKKANd../ " N3B');<1BGGAJ
A> =r2   c                  l   t         j                  j                  d      } d}d}| j                  ||      }g }t        j                  ddd      }|D ]9  }t        d |      j                  |      }|j                  |j                         ; t        |d d |dd        D ]  \  }}	t        ||	d	        y )
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!
4JGKKANd../ " N3B');<1Aq!, =r2   c                  h   t         j                  j                  d      } d}d}| j                  ||      }g }t        j                  ddd      }|D ]9  }t        d|      j                  |      }|j                  |j                         ; t        |d d |dd        D ]  \  }}	t        ||	        y )	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!
2*EII!Ld../ " '*."*=~ab?Q&R"l$\<@ 'Sr2   c                     t         j                  j                  d      } d\  }}| j                  ||      }|d d dfxx   dz  cc<   |g dz  }d}t	        d|      j                  |      }t	        d|      }t        j                  d	|dz   |      }t        |d d
 |dd        D ]  \  }}	|j                  |||	d d f          ! t        |j                  |j                  d       y )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+   pipca	batch_itrr   r   s
             r0    test_incremental_pca_partial_fitr     s    
))


%CDAq		!QAadGwGNA JqZ@DDQGDjAE		!QUJ/IIcrNIabM21!AaCF)$ 3((%*;*;QGr2   c                      t         j                  } t        d      j                  |       }t	        dd      j                  |       }t        t        j                  |      t        j                  |      d       y )Nr   r      r   r   )r   r   r   r    r   r	   r!   rJ   )r*   Y_pcaY_ipcas      r0   %test_incremental_pca_against_pca_irisr      sS    		AQ--a0Er:HHKFurvvf~q9r2   c                  n   t         j                  j                  d      } d}d}| j                  ||      d| j	                  d|      z  z   }t        d      j                  |      }t        dd      j                  |      }t        t        j                  |      t        j                  |      d       y )	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FAQ--a0Er:HHKFurvvf~q9r2   c                     t        j                  ddddd      } d}| j                  \  }}dD ]  }t        |	      j	                  |       }t        |d
      j	                  |       }t        |j                  |j                  |       t        |j                  |j                  |       t        |j                  |j                  |        y )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   7  s    %%cRd	A DGGIzr"&&q)2#>BB1E##T%=%=t	
 	))4+I+ISW	
 	C//1E1EtT r2   c            	         t         j                  j                  d      } d}d}t        j                  ||dd|       }t        dd|       j                  |      }t        dd	      j                  |      }t        |j                  |j                  d
       |j                  |      }|j                  |      }t        t        j                  |j                  dz        t         j                  j                  |d      dz  d       t        t        j                  |j                  dz        t         j                  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                  j                  d      } d}d}t        j                  ||dd|       }t        dd|       }t        dd	      }|j                  |      }|t        j                  t        j                  |dz  d            z  }|d d dfxx   dz  cc<   |d d dfxx   dz  cc<   t        j                   ||j"                        }|j                  |       |j                  |       t        |j                  g dd       t        |j                  g dd       y )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   J  st    ))


"C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
 ))


"C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                 :   t        j                  dddd|       }d}dD ]  }t        d|	      j                  |      }t	        d|d
      j                  |      }|j
                  dkD  }|j                  |      }|j                  |      }t        t        j                  |      d d |f   t        j                  |      d d |f   |       |j                  |      }	|j                  |      }
t        ||	|       t        ||
|       t        |
|	|        y )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     s   %%bADV	A DB/33A6TsKOOPQR 33e;q!..#FF6N1k>*FF7OA{N+	
 **73	((09408$/)$73 r2   c                     t         j                  j                  d      } | j                  dd      dz   }| j                  dd      dz   }t	        d      }|j                  |       t        |j                        |_        |j                  |       |j                  }t	        d      }|j                  |       |j                  |       |j                  }t         j                  j                  ||       y )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 34COOA'*';';$q)DQQ%)%:%:"JJ(*Hr2   c                  D   t         j                  j                  d      } | j                  dd      }t	        dd      }|j                  |       t        d      }|j                  |       t         j                  j                  |j                  |j                         y )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     st     ))


"CAqU;DHHQK
1
CGGAJJJt44c6J6JKr2   c                      t        d      j                  t        j                        } | j	                         }t        t        d      D cg c]  }d| 	 c}|       yc c}w )z+Check feature names out for IncrementalPCA.r   r   incrementalpcaN)r   r%   r   r   get_feature_names_outr   range)r+   namesr   s      r0   &test_incremental_pca_feature_names_outr     sP    q)--dii8D&&(EeAh?h.,h?G?s   A!).__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    r2   r0   <module>r      s         =  5 
 O Nx
6 7.H####L2*1 A:	(?$.	? - A H(:
:U&6Nr8D2LHr2   