a
    ¶ÀhA  ã                   @   sB  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	 ¡ Zdd	„ Zej d
ee e ¡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-d.„ Z+d/d0„ Z,d1d2„ Z-d3d4„ Z.dS )5z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                  C   sÚ   t j} | jd d }td|d}tdd}| | ¡ | | ¡}|j| jd dfksVJ ‚tjj|j	 
¡ |j	 
¡ dd dd| jd fD ]P}t||d	}| | ¡ | ¡ }| ¡ }tjjt ||¡t | jd ¡d
d q„d S )Nr   é   é   ©Ún_componentsÚ
batch_size©r   çü©ñÒMbP?©Z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Ú	precision© r-   úl/var/www/html/assistant/venv/lib/python3.9/site-packages/sklearn/decomposition/tests/test_incremental_pca.pyÚtest_incremental_pca   s(    


ý
ÿr/   Úsparse_containerc           
      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 ]P}t||d	}| |¡ | ¡ }| ¡ }	tjjt ||	¡t |jd ¡d
d qŒtjtdd | |¡ W d   ƒ n1 s0    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)
r0   r'   r)   ZX_sparser   r(   r*   r   r+   r,   r-   r-   r.   Útest_incremental_pca_sparse0   s4    


ý
ÿý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'   ZXtZYtr-   r-   r.   Ú%test_incremental_pca_check_projectionY   s    rH   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(   ÚYZ	Y_inverser-   r-   r.   Útest_incremental_pca_inversen   s    

rQ   c                  C   sÀ   t  g d¢g d¢g¡} | j\}}d}tjtd ||¡d" t|dd | ¡ W d   ƒ n1 sb0    Y  d}tjtd	|› d
|› dd  t|d 	| ¡ W d   ƒ n1 s²0    Y  d S )N)r   r   r   )r   r   r   r;   zdn_components={} invalid for n_features={}, need more rows than columns for IncrementalPCA processingr1   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   rA   r   r3   r4   Ú
ValueErrorÚformatr   r"   r6   )r'   Ú	n_samplesÚ
n_featuresr   r-   r-   r.   Útest_incremental_pca_validation~   s$    
ýý	0ÿýrV   c                  C   sž   t dd} t ¡ 0 t dt¡ |  tj dd¡¡ W d   ƒ n1 sH0    Y  t ¡ 0 t dt¡ |  	tj dd¡¡ W d   ƒ n1 s0    Y  d S )Nr<   r   Úerroré   )
r   ÚwarningsÚcatch_warningsÚsimplefilterÚRuntimeWarningr6   r   r>   r@   r"   )r(   r-   r-   r.   Ú!test_n_samples_equal_n_componentsš   s    

2
r]   c                  C   sr   t j d¡} dD ]\\}}|  ||¡}td d}| |¡ |jt|jƒksLJ ‚| |¡ |j|j	jd ksJ ‚qd S )Nr8   ))rJ   r:   )r:   rJ   r   r   )
r   r>   r?   Úrandr   r6   Zn_components_Úminr   Úcomponents_)rE   rT   rU   r'   r(   r-   r-   r.   Útest_n_components_none¦   s    


ra   c                  C   sæ   t j d¡} d}d}|  ||¡}|  ||¡}|  ||¡}tdd}| |¡ |jdd t t	¡ | 
|¡ W d   ƒ n1 s‚0    Y  |jdd t t	¡ | 
|¡ W d   ƒ n1 sÂ0    Y  |jdd | 
|¡ d S )Nr8   r9   é   r   r:   é   )r   r>   r?   r@   r   r"   Z
set_paramsr3   r4   rR   r6   )rE   rT   rU   r'   ÚX2ZX3r(   r-   r-   r.   Útest_incremental_pca_set_params¸   s     

((re   c                  C   st   t j d¡} d}|  |d¡}|  |d¡}td d}| |¡ t t¡ | 	|¡ W d   ƒ n1 sf0    Y  d S )Nr8   r9   rb   rJ   r   )
r   r>   r?   r@   r   r"   r3   r4   rR   r6   )rE   rT   r'   rd   r(   r-   r-   r.   Ú(test_incremental_pca_num_features_changeÏ   s    

rf   c            
      C   sš   t j d¡} d}d}|  ||¡}g }t  dd¡}|D ]"}td |d |¡}| |j¡ q4t	|d d… |dd … ƒD ]"\}}	t
t  |¡t  |	¡d	d
 qrd S )Nr8   r9   r   r:   rb   r   éÿÿÿÿr   é   rM   )r   r>   r?   r@   Úaranger   r"   Úappendr`   Úzipr   Úsign©
rE   rT   rU   r'   Úall_componentsÚbatch_sizesr   r(   ÚiÚjr-   r-   r.   Ú test_incremental_pca_batch_signsÛ   s    "rr   c                  C   s´   t j d¡} d\}}|  ||¡}|d d …df  d9  < |g d¢7 }|}t|d}| |d |… ¡ t||ƒD ]}| |||d … ¡ qnt|d}| |¡ t	|j
|j
dd d S )	Nr8   rI   r   rK   rL   r   r   r   )r   r>   r?   r@   r   r6   Úranger   r"   r   r`   )rE   rF   rG   r'   r   ÚpipcaÚidxr)   r-   r-   r.   Ú,test_incremental_pca_partial_fit_small_batchë   s    


rv   c            
      C   s   t j d¡} d}d}|  ||¡}g }t  ddd¡}|D ]"}td |d |¡}| |j¡ q6t	|d d… |dd … ƒD ]\}}	t
||	dd	 qtd S )
Nr8   r9   r   rb   é(   r   rg   r   rM   )r   r>   r?   r@   ri   r   r"   rj   r`   rk   r   rm   r-   r-   r.   Ú!test_incremental_pca_batch_values   s    "rx   c            
      C   sŒ   t j d¡} d}d}|  ||¡}g }t  ddd¡}|D ]"}td|d |¡}| |j¡ q6t	|d d… |dd … ƒD ]\}}	t
||	ƒ qtd S )	Nr8   r9   rb   éZ   r   r   rg   r   )r   r>   r?   r@   ri   r   r"   rj   r`   rk   r   )
rE   rT   rU   r'   rn   ro   r   r(   Zcomponents_iZcomponents_jr-   r-   r.   Útest_incremental_pca_batch_rank  s    "rz   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 ¡ q’t	|j
|j
dd d S )Nr8   rI   r   rK   rL   r:   r   r   r   rg   r   rM   )r   r>   r?   r@   r   r"   ri   rk   r6   r   r`   )
rE   rF   rG   r'   r   r(   rt   Z	batch_itrrp   rq   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_iris4  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@   r^   r   r   r   r   rD   )rE   rT   rU   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   ©Ztail_strengthZeffective_rankÚrandom_stater   )Néc   r   r   rM   )
r   Úmake_low_rank_matrixr   r   r"   r   r   Zexplained_variance_r    Znoise_variance_)r'   ÚprecrT   rU   Úncr)   r(   r-   r-   r.   Útest_explained_variancesK  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   Z
svd_solverr„   r   r   g       @Zfroé   )Zaxisén   r   ç‰A`åÐ"	@r   çX9´Èv¾@)r   rŽ   r=   é   )r   r>   r?   r   r†   r   r"   r   r	   Úsingular_values_rB   r!   ZlinalgZnormrC   r   r%   r`   )	rE   rT   rU   r'   r)   r(   ZX_pcaZX_ipcaZX_hatr-   r-   r.   Útest_singular_values^  sP    
ÿ

 ÿ ÿÿÿ
ÿ


r‘   c                 C   sÚ   t jdddd| d}d}dD ]¸}td|d	 |¡}td|d
d |¡}|jdk}| |¡}| |¡}tt 	|¡d d …|f t 	|¡d d …|f |d | 
|¡}	| 
|¡}
t||	|d t||
|d t|
|	|d qd S )Nr   r:   r‚   r   rƒ   r   )Né	   T)Úwhitenr   éú   )r“   r   r   gê-™—q=r   )r   r†   r   r"   r   r    rB   r   r   rD   rO   )Zglobal_random_seedr'   r   rˆ   r)   r(   Zstable_maskZXt_pcaZXt_ipcaZ	Xinv_ipcaZ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   rX   r   )r   r>   r?   r@   r   r6   ÚfloatZn_samples_seen_r   r   r   )rE   ÚAÚBr)   Z singular_vals_float_samples_seenZpca2Z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?   r^   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 )Zincrementalpcar-   )Ú.0rp   r-   r-   r.   Ú
<listcomp>æ  ó    z:test_incremental_pca_feature_names_out.<locals>.<listcomp>N)r   r"   r   r   Zget_feature_names_outr   rs   )r(   Únamesr-   r-   r.   Ú&test_incremental_pca_feature_names_outá  s    rŸ   )/Ú__doc__rY   Únumpyr   r3   Znumpy.testingr   r   Zsklearnr   Zsklearn.decompositionr   r   Zsklearn.utils._testingr   r   r	   Zsklearn.utils.fixesr
   r   r   Z	load_irisr   r/   ÚmarkZparametrizer7   rH   rQ   rV   r]   ra   re   rf   rr   rv   rx   rz   r{   r   r€   r‰   r‘   r•   r™   rš   rŸ   r-   r-   r-   r.   Ú<module>   sD   ÿ
&
9"