o
    Ó\iB  ã                   @   sJ  d Z ddl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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Útestingr   Úexplained_variance_ratio_ÚsumÚfitÚget_covarianceÚget_precisionÚdotÚeye)ÚXr   ÚipcaÚpcaÚX_transformedr   ÚcovÚ	precision© r.   ú‘/var/www/www-root/data/www/176.119.141.140/sports-predictor/venv/lib/python3.10/site-packages/sklearn/decomposition/tests/test_incremental_pca.pyÚtest_incremental_pca   s*   


ý
ÿûr0   Ú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 ](}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)
r1   r(   r*   ÚX_sparser   r)   r+   r   r,   r-   r.   r.   r/   Útest_incremental_pca_sparse1   s6   


ý
ÿý"ør9   c                 C   sª   t j | ¡}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)Úglobal_random_seedÚrngÚnÚpr(   ÚXtÚYtr.   r.   r/   Ú%test_incremental_pca_check_projectionZ   s   rL   c                 C   s|   t j | ¡}d\}}| ||¡}|d d …df  d9  < |g d¢7 }tddd |¡}| |¡}| |¡}t||dd	 d S )
N©é2   r   r   çñhãˆµøä>©r=   r<   r   r   r;   r   r   ©Údecimal)	r   r?   r@   rA   r   r#   rC   Úinverse_transformr   )rF   rG   rH   rI   r(   r)   ÚYÚ	Y_inverser.   r.   r/   Útest_incremental_pca_inverseo   s   

rV   c                  C   sÂ   t  g d¢g d¢g¡} | j\}}d}tjtd ||¡d t|dd | ¡ W d   ƒ n1 s1w   Y  d}tjtd	|› d
|› dd t|d 	| ¡ W d   ƒ d S 1 sZw   Y  d S )N)r   r   r   )r   r   r   r<   zdn_components={} invalid for n_features={}, need more rows than columns for IncrementalPCA processingr2   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   rB   r   r4   r5   Ú
ValueErrorÚformatr   r#   r7   )r(   Ú	n_samplesÚ
n_featuresr   r.   r.   r/   Útest_incremental_pca_validation   s&   
ú	÷ÿý"ùr[   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ÚRuntimeWarningr7   r   r?   rA   r#   )r)   r.   r.   r/   Ú!test_n_samples_equal_n_components›   s   

þ
"þrb   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 )NéÏ  ))rN   r;   )r;   rN   r   r   )
r   r?   r@   Úrandr   r7   Ún_components_Úminr   Úcomponents_)rG   rY   rZ   r(   r)   r.   r.   r/   Útest_n_components_none§   s   


ôrh   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 )Nrc   r:   é   r   r;   é   )r   r?   r@   rA   r   r#   Ú
set_paramsr4   r5   rW   r7   )rG   rY   rZ   r(   ÚX2ÚX3r)   r.   r.   r/   Útest_incremental_pca_set_params¹   s$   

ÿÿrn   c                  C   sv   t j d¡} d}|  |d¡}|  |d¡}td d}| |¡ t t¡ | 	|¡ W d   ƒ d S 1 s4w   Y  d S )Nrc   r:   ri   rN   r   )
r   r?   r@   rA   r   r#   r4   r5   rW   r7   )rG   rY   r(   rl   r)   r.   r.   r/   Ú(test_incremental_pca_num_features_changeÐ   s   

"ÿro   c                 C   sŠ   t j | ¡}d}d}| ||¡}g }t  dd¡}|D ]}td |d |¡}| |j¡ qt	 
|¡D ]\}	}
tt  |	¡t  |
¡dd q1d S )Nr:   r   r;   ri   r   é   rQ   )r   r?   r@   rA   Úaranger   r#   Úappendrg   Ú	itertoolsÚpairwiser   Úsign©rF   rG   rY   rZ   r(   Úall_componentsÚbatch_sizesr   r)   ÚiÚjr.   r.   r/   Ú test_incremental_pca_batch_signsÜ   s   ÿr{   c                  C   s´   t j d¡} d\}}|  ||¡}|d d …df  d9  < |g d¢7 }|}t|d}| |d |… ¡ t||ƒD ]}| |||d … ¡ q7t|d}| |¡ t	|j
|j
dd d S )	Nrc   rM   r   rO   rP   r   r   r   )r   r?   r@   rA   r   r7   Úranger   r#   r   rg   )rG   rH   rI   r(   r   ÚpipcaÚidxr*   r.   r.   r/   Ú,test_incremental_pca_partial_fit_small_batchì   s   


r   c                 C   s€   t j | ¡}d}d}| ||¡}g }t  ddd¡}|D ]}td |d |¡}| |j¡ qt	 
|¡D ]\}	}
t|	|
dd q2d S )Nr:   r   ri   é(   r   r   rQ   )r   r?   r@   rA   rq   r   r#   rr   rg   rs   rt   r   rv   r.   r.   r/   Ú!test_incremental_pca_batch_values  s   ÿr   c            
      C   s|   t j d¡} d}d}|  ||¡}g }t  ddd¡}|D ]}td|d |¡}| |j¡ qt	 
|¡D ]	\}}	t||	ƒ q2d S )Nrc   r:   ri   éZ   r   r   )r   r?   r@   rA   rq   r   r#   rr   rg   rs   rt   r   )
rG   rY   rZ   r(   rw   rx   r   r)   Úcomponents_iÚcomponents_jr.   r.   r/   Útest_incremental_pca_batch_rank  s   ÿr…   c                 C   s¼   t j | ¡}d\}}| ||¡}|d d …df  d9  < |g d¢7 }d}td|d |¡}td|d}t  d|d |¡}t |¡D ]\}	}
| 	||	|
…d d …f ¡ qAt
|j|jd	d
 d S )NrM   r   rO   rP   r;   r   r   r   r   rQ   )r   r?   r@   rA   r   r#   rq   rs   rt   r7   r   rg   )rF   rG   rH   rI   r(   r   r)   r}   Ú	batch_itrry   rz   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   rE   )r(   ÚY_pcaÚY_ipcar.   r.   r/   Ú%test_incremental_pca_against_pca_iris5  s   r‹   c                 C   sn   t j | ¡}d}d}| ||¡d| d|¡  }tdd |¡}tddd |¡}tt  	|¡t  	|¡dƒ d S )Nr:   r   r=   r   r   rˆ   r   )
r   r?   r@   rA   rd   r   r   r   r   rE   )rF   rG   rY   rZ   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éè  r:   ç        r;   rc   ©Útail_strengthÚeffective_rankÚrandom_stater   )Néc   r   r   rQ   )
r   Úmake_low_rank_matrixr   r   r#   r   r   Úexplained_variance_r!   Únoise_variance_)r(   ÚprecrY   rZ   Úncr*   r)   r.   r.   r/   Útest_explained_variancesL  s    
ÿ

ÿ
ÿ÷r™   c           
      C   sä  t j | ¡}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}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:   rŽ   r;   r   Úfull)r   Ú
svd_solverr’   é–   r   r   g       @Úfroé   r   )Úaxisén   r   ç‰A`åÐ"	@r   çX9´Èv¾@)r¡   r¢   r>   é   )r   r?   r@   r   r”   r   r#   r   r	   Úsingular_values_rC   r"   ÚlinalgÚnormrD   r   r&   rg   )
rF   rG   rY   rZ   r(   r*   r)   ÚX_pcaÚX_ipcaÚ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!   rC   r   r   rE   rS   )rF   r(   r   r˜   r*   r)   Ústable_maskÚ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@   rA   r   r7   ÚfloatÚn_samples_seen_r¤   r    r   )rG   Ú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@   rd   r   r#   r   r    r   r¤   )rG   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.   )Ú.0ry   r.   r.   r/   Ú
<listcomp>ç  s    z:test_incremental_pca_feature_names_out.<locals>.<listcomp>N)r   r#   r   r   Úget_feature_names_outr   r|   )r)   Únamesr.   r.   r/   Ú&test_incremental_pca_feature_names_outâ  s   rÂ   )0Ú__doc__rs   r^   Únumpyr   r4   Únumpy.testingr   r   Úsklearnr   Úsklearn.decompositionr   r   Úsklearn.utils._testingr   r   r	   Úsklearn.utils.fixesr
   r   r   Ú	load_irisr   r0   ÚmarkÚparametrizer9   rL   rV   r[   rb   rh   rn   ro   r{   r   r   r…   r‡   r‹   rŒ   r™   rª   r³   r»   r¼   rÂ   r.   r.   r.   r/   Ú<module>   sH    ÿ
&
9"