o
    ×tBh<  ã                   @   sB  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 ¡ Zd
d„ Zej dejejejg¡dd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z dd„ Z!dd„ Z"dd „ Z#d!d"„ Z$d#d$„ Z%d%d&„ Z&d'd(„ Z'd)d*„ Z(d+d,„ Z)d-d.„ Z*d/d0„ Z+d1d2„ Z,d3d4„ Z-dS )5zTests for Incremental PCA.é    N)Úassert_almost_equal)Úassert_array_almost_equal)Úassert_allclose_dense_sparse)Úassert_array_equal)Údatasets)ÚPCAÚIncrementalPCA)Úsparsec                  C   sÚ   t j} | jd d }td|d}tdd}| | ¡ | | ¡}|j| jd dfks+J ‚tjj|j	 
¡ |j	 
¡ dd dd| jd fD ](}t||d	}| | ¡ | ¡ }| ¡ }tjjt ||¡t | jd ¡d
d qBd 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Ú	precision© r,   ú‡/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sklearn/decomposition/tests/test_incremental_pca.pyÚtest_incremental_pca   s*   


ý
ÿûr.   Úmatrix_classc           
      C   s  t j}tdd}| |¡ | |ƒ}|jd d }td|d}| |¡}|j|jd dfks/J ‚tjj|j	 
¡ |j	 
¡ dd dd|jd fD ](}t||d	}| |¡ | ¡ }| ¡ }	tjjt ||	¡t |jd ¡d
d qFtjtdd | |¡ W d   ƒ d S 1 s‡w   Y  d S )Nr   r   r   r
   r   r   r   r   r   r   r   z…IncrementalPCA.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)
r/   r&   r(   ÚX_sparser   r'   r)   r   r*   r+   r,   r,   r-   Útest_incremental_pca_sparse.   s6   


ý
ÿý"ør7   c                  C   sª   t j d¡} d\}}|  ||¡d }|d d…  t  g d¢¡7  < d|  d|¡ t  g d¢¡ }tdd |¡ |¡}|t  |d  	¡ ¡ }t
t  |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ÚYtr,   r,   r-   Ú%test_incremental_pca_check_projectionW   s   rJ   c                  C   s|   t j d¡} d\}}|  ||¡}|d d …df  d9  < |g d¢7 }tddd |¡}| |¡}| |¡}t||d	d
 d S )Nr8   ©é2   r
   r   çñhãˆµøä>©r<   r;   r
   r   r:   r   r
   ©Údecimal)	r   r>   r?   r@   r   r!   rB   Úinverse_transformr   )rE   rF   rG   r&   r'   ÚYÚ	Y_inverser,   r,   r-   Útest_incremental_pca_inversel   s   

rT   c               	   C   sÂ   t  g d¢g d¢g¡} | j\}}dD ]&}tjtd ||¡d t|dd | ¡ W d   ƒ n1 s3w   Y  qd}tjtd	 ||¡d t|d
 	| ¡ W d   ƒ d S 1 sZw   Y  d S )N)r   r   r   )r   r   r   )éÿÿÿÿr   g®Gáz®ï?r;   zdn_components={} invalid for n_features={}, need more rows than columns for IncrementalPCA processingr0   r:   r   r
   zGn_components={} must be less or equal to the batch number of samples {}r   )
r   rA   r   r2   r3   Ú
ValueErrorÚformatr   r!   r5   )r&   Ú	n_samplesÚ
n_featuresr   r,   r,   r-   Útest_incremental_pca_validation|   s&   
ú	÷€û"ørZ   c                  C   s    t dd} t ¡  t dt¡ |  tj dd¡¡ W d   ƒ n1 s$w   Y  t ¡  t dt¡ |  	tj dd¡¡ W d   ƒ d S 1 sIw   Y  d S )Nr<   r   Úerroré   )
r   ÚwarningsÚcatch_warningsÚsimplefilterÚRuntimeWarningr5   r   r>   r@   r!   )r'   r,   r,   r-   Ú!test_n_samples_equal_n_components™   s   

þ
"þra   c                  C   sr   t j d¡} dD ].\}}|  ||¡}td d}| |¡ |jt|jƒks&J ‚| |¡ |j|j	jd ks6J ‚qd S )Nr8   ))rL   r:   )r:   rL   r   r   )
r   r>   r?   Úrandr   r5   Ún_components_Úminr   Úcomponents_)rE   rX   rY   r&   r'   r,   r,   r-   Útest_n_components_none¥   s   


ôrf   c                  C   sæ   t j d¡} d}d}|  ||¡}|  ||¡}|  ||¡}tdd}| |¡ |jdd t t	¡ | 
|¡ W d   ƒ n1 sAw   Y  |jdd t t	¡ | 
|¡ W d   ƒ n1 saw   Y  |jdd | 
|¡ d S )Nr8   r9   é   r   r:   é   )r   r>   r?   r@   r   r!   Ú
set_paramsr2   r3   rV   r5   )rE   rX   rY   r&   ÚX2ÚX3r'   r,   r,   r-   Útest_incremental_pca_set_params·   s$   

ÿÿrl   c                  C   sv   t j d¡} d}|  |d¡}|  |d¡}td d}| |¡ t t¡ | 	|¡ W d   ƒ d S 1 s4w   Y  d S )Nr8   r9   rg   rL   r   )
r   r>   r?   r@   r   r!   r2   r3   rV   r5   )rE   rX   r&   rj   r'   r,   r,   r-   Ú(test_incremental_pca_num_features_changeÎ   s   

"ÿrm   c            
      C   sš   t j d¡} d}d}|  ||¡}g }t  dd¡}|D ]}td |d |¡}| |j¡ qt	|d d… |dd … ƒD ]\}}	t
t  |¡t  |	¡d	d
 q9d S )Nr8   r9   r
   r:   rg   r   rU   r   é   rO   )r   r>   r?   r@   Úaranger   r!   Úappendre   Úzipr   Úsign©
rE   rX   rY   r&   Úall_componentsÚbatch_sizesr   r'   ÚiÚjr,   r,   r-   Ú test_incremental_pca_batch_signsÚ   s   "ÿrx   c            
      C   s   t j d¡} d}d}|  ||¡}g }t  ddd¡}|D ]}td |d |¡}| |j¡ qt	|d d… |dd … ƒD ]\}}	t
||	dd	 q:d S )
Nr8   r9   r
   rg   é(   r   rU   r   rO   )r   r>   r?   r@   ro   r   r!   rp   re   rq   r   rs   r,   r,   r-   Ú!test_incremental_pca_batch_valuesê   s   "ÿrz   c            
      C   sŒ   t j d¡} d}d}|  ||¡}g }t  ddd¡}|D ]}td|d |¡}| |j¡ qt	|d d… |dd … ƒD ]	\}}	t
||	ƒ q:d S )	Nr8   r9   rg   éZ   r
   r   rU   r   )r   r>   r?   r@   ro   r   r!   rp   re   rq   r   )
rE   rX   rY   r&   rt   ru   r   r'   Úcomponents_iÚcomponents_jr,   r,   r-   Útest_incremental_pca_batch_rankú   s   "ÿr~   c            
      C   sÌ   t j d¡} d\}}|  ||¡}|d d …df  d9  < |g d¢7 }d}td|d |¡}td|d}t  d	|d |¡}t|d d
… |dd … ƒD ]\}}	| |||	…d d …f ¡ qIt	|j
|j
dd d S )Nr8   rK   r   rM   rN   r:   r   r   r   rU   r
   rO   )r   r>   r?   r@   r   r!   ro   rq   r5   r   re   )
rE   rF   rG   r&   r   r'   ÚpipcaÚ	batch_itrrv   rw   r,   r,   r-   Ú test_incremental_pca_partial_fit
  s   "r   c                  C   sD   t j} tdd | ¡}tddd | ¡}tt |¡t |¡dƒ d S )Nr   r   é   r   r   )r   r   r   r   r   r   r   rD   )r&   ÚY_pcaÚY_ipcar,   r,   r-   Ú%test_incremental_pca_against_pca_iris  s   r…   c                  C   sn   t j d¡} d}d}|  ||¡d|  d|¡  }tdd |¡}tddd |¡}tt  	|¡t  	|¡dƒ d S )	Nr8   r9   r
   r<   r   r   r‚   r   )
r   r>   r?   r@   rb   r   r   r   r   rD   )rE   rX   rY   r&   rƒ   r„   r,   r,   r-   Ú,test_incremental_pca_against_pca_random_data(  s   r†   c                  C   sˆ   t jdddddd} d}| j\}}dD ].}t|d	 | ¡}t|dd
 | ¡}t|j|j|d t|j|j|d t|j	|j	|d qd S )Néè  r9   ç        r:   r8   ©Útail_strengthÚeffective_rankÚrandom_stater
   )Néc   r   r   rO   )
r   Úmake_low_rank_matrixr   r   r!   r   r   Úexplained_variance_r   Únoise_variance_)r&   ÚprecrX   rY   Úncr(   r'   r,   r,   r-   Útest_explained_variances5  s    
ÿ

ÿ
ÿ÷r“   c            	      C   sä  t j d¡} d}d}tj||dd| d}tdd| d |¡}tddd	 |¡}t|j	|j	d
ƒ | 
|¡}| 
|¡}tt  |j	d ¡t j |d¡d dƒ tt  |j	d ¡t j |d¡d d
ƒ t|j	t  t j|d dd¡dƒ t|j	t  t j|d dd¡d
ƒ t j d¡} d}d}tj||dd| d}tdd| d}tddd	}| |¡}|t  t j|d dd¡ }|d d …df  d9  < |d d …df  d9  < t  ||j¡}| |¡ | |¡ t|j	g d¢dƒ t|j	g d¢dƒ d S )Nr   r‡   r9   rˆ   r:   r‰   Úfull)r   Ú
svd_solverrŒ   r   r   g       @Úfroé   )Úaxisén   r
   ç‰A`åÐ"	@r   çX9´Èv¾@)rš   r›   r=   é   )r   r>   r?   r   rŽ   r   r!   r   r   Úsingular_values_rB   r    ÚlinalgÚnormrC   r   r$   re   )	rE   rX   rY   r&   r(   r'   ÚX_pcaÚX_ipcaÚX_hatr,   r,   r-   Útest_singular_valuesH  sP   
ÿ

 ÿ ÿÿÿ
ÿ


r£   c                  C   sÂ   t jdddddd} d}| j\}}dD ]K}td	|d
 | ¡}td	|dd | ¡}| | ¡}| | ¡}tt 	|¡t 	|¡|d | 
|¡}	| 
|¡}
t| |	|d t| |
|d t|
|	|d qd S )Nr‡   r:   rˆ   r   r8   r‰   r
   )Né	   T)Úwhitenr   éú   )r¥   r   r   rO   )r   rŽ   r   r   r!   r   rB   r   r   rD   rQ   )r&   r‘   rX   rY   r’   r(   r'   ÚXt_pcaÚXt_ipcaÚ	Xinv_ipcaÚXinv_pcar,   r,   r-   Útest_whitening  s"   
ÿ




õr«   c                  C   s’   t j d¡} |  dd¡d }|  dd¡d }tdd}| |¡ t|jƒ|_| |¡ |j}tdd}| |¡ | |¡ |j}t j	 
||¡ d S )Nr   r<   r
   r   r\   r   )r   r>   r?   r@   r   r5   ÚfloatÚn_samples_seen_r   r   r   )rE   ÚAÚBr(   Ú singular_vals_float_samples_seenÚpca2Úsingular_vals_int_samples_seenr,   r,   r-   Ú/test_incremental_pca_partial_fit_float_division–  s   





ÿr³   c                  C   sX   t j d¡} |  dd¡}tddd}| |¡ tdd}| |¡ t j |j	|j	¡ d S )Nr   i ¡ r   i'  r   r   )
r   r>   r?   rb   r   r!   r   r   r   r   )rE   r®   r'   r(   r,   r,   r-   Ú'test_incremental_pca_fit_overflow_error¯  s   


r´   c                  C   s6   t dd tj¡} |  ¡ }tdd„ tdƒD ƒ|ƒ dS )z+Check feature names out for IncrementalPCA.r   r   c                 S   s   g | ]}d |› ‘qS )Úincrementalpcar,   )Ú.0rv   r,   r,   r-   Ú
<listcomp>Ã  s    z:test_incremental_pca_feature_names_out.<locals>.<listcomp>N)r   r!   r   r   Úget_feature_names_outr   Úrange)r'   Únamesr,   r,   r-   Ú&test_incremental_pca_feature_names_out¾  s   r»   ).Ú__doc__Únumpyr   r2   r]   Úsklearn.utils._testingr   r   r   Únumpy.testingr   Úsklearnr   Úsklearn.decompositionr   r   Úscipyr	   Ú	load_irisr   r.   ÚmarkÚparametrizeÚ
csc_matrixÚ
csr_matrixÚ
lil_matrixr7   rJ   rT   rZ   ra   rf   rl   rm   rx   rz   r~   r   r…   r†   r“   r£   r«   r³   r´   r»   r,   r,   r,   r-   Ú<module>   sH    ÿ
&
9