U
    ‘Ç-eb^  ã                
   @   s¾  d dl 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mZ d dlmZ e	 ¡ Zdd	d
dgZej de¡ej dedejjd ƒ¡dd„ ƒƒZdd„ Zej dddg¡ej de¡dd„ ƒƒZej dd	d
g¡dd„ ƒZejjdej d ¡  dd¡e	j!dddd dd  gd d!gd"ej de¡d#d$„ ƒƒZ"ej dd	d
g¡d%d&„ ƒZ#ej de¡d'd(„ ƒZ$ej de¡d)d*„ ƒZ%ej de¡d+d,„ ƒZ&ej ddd	d
g¡ej d-ddg¡d.d/„ ƒƒZ'ej d0e (d dd gdd d gg¡e (d dd gdd d gg¡j)g¡ej d1d2d3d4d5g¡d6d7„ ƒƒZ*ej d8de+ejjƒfd	e+ejjƒd fd
e+ejjƒfg¡ej d0ejejj)g¡d9d:„ ƒƒZ,ej dddg¡d;d<„ ƒZ-ej dd	d
g¡d=d>„ ƒZ.d?d@„ Z/dAdB„ Z0dCdD„ Z1dEdF„ Z2ej dGejdHdIfejdJdfej d ¡ 3dKdL¡dMdIfg¡dNdO„ ƒZ4ej de¡dPdQ„ ƒZ5dRdS„ Z6ej de¡dTdU„ ƒZ7ej dd	d
g¡dVdW„ ƒZ8ej ddd
g¡dXdY„ ƒZ9ej dZej d ¡j:d[d\dMdfej d ¡j:d]d\dKdfej d ¡j:d[d\d^dfej d ¡j:d[d\d_d
fg¡d`da„ ƒZ;ej de¡dbdc„ ƒZ<ej de¡ddde„ ƒZ=ej de¡dfdg„ ƒZ>dhdi„ Z?djdk„ Z@dldm„ ZAdndo„ ZBdpdq„ ZCdrds„ ZDdtdu„ ZEdvdw„ ZFdxdy„ ZGdzd{„ ZHd|d}„ ZIej dddg¡d~d„ ƒZJdS )€é    N)Úassert_array_equal)Údatasets)Ú	load_iris)ÚPCA)Ú_assess_dimensionÚ_infer_dimension)Úassert_allcloseÚfullÚarpackÚ
randomizedÚautoÚ
svd_solverÚn_componentsé   c                 C   s’   t j}t|| d}| |¡ |¡}|jd |ks4t‚| |¡}t||ƒ | |¡}t||ƒ | 	¡ }| 
¡ }tt ||¡t |jd ¡dd d S )N©r   r   r   çê-™—q=©Zatol)ÚirisÚdatar   ÚfitÚ	transformÚshapeÚAssertionErrorÚfit_transformr   Zget_covarianceZget_precisionÚnpÚdotÚeye)r   r   ÚXÚpcaZX_rZX_r2ÚcovÚ	precision© r!   úe/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/sklearn/decomposition/tests/test_pca.pyÚtest_pca   s    



r#   c               	   C   sZ   d} | d }t jjdd| |fd}t| d}t ¡  t dt¡ | |¡ W 5 Q R X d S )Né
   é   éÿÿÿÿr   ©Úsize©r   Úerror)	r   ÚrandomÚuniformr   ÚwarningsÚcatch_warningsÚsimplefilterÚRuntimeWarningr   )r   Ú
n_featuresr   r   r!   r!   r"   Útest_no_empty_slice_warning(   s    

r2   ÚcopyTFÚsolverc                 C   sˆ  t j d¡}d}d}d}d}t  | ||¡t  t  t  dd|¡¡| ||¡¡¡}|d d …d d…f  d9  < |j||fks~t‚|j	dd	 	¡ d
ks–t‚| 
¡ }t|d|| ddd}	|	 | 
¡ ¡}
|
j||fksÒt‚|	 |¡}t|
|dd t|
j	dddt  |¡ƒ t|
jdd	t  |¡dd | 
¡ }t|d|| d | 
¡ ¡}	|	 |¡}|j||fks`t‚|j	dd	 	¡ tjdddks„t‚d S )Nr   éd   éP   é   é2   g      $@ç      ð?é   ©ÚaxisgfffffæE@Té   )r   Úwhitenr3   r   Úrandom_stateZiterated_powergü©ñÒMb@?©Zrtolr   ©Zddofr<   r   r   F)r   r>   r3   r   gfffff†R@çš™™™™™¹?)Úrel)r   r+   ÚRandomStater   ÚrandnZdiagZlinspacer   r   Ústdr3   r   r   r   r   ÚonesÚmeanÚzerosr   ÚpytestÚapprox)r4   r3   ÚrngÚ	n_samplesr1   r   Úrankr   ZX_r   Z
X_whitenedZX_whitened2ZX_unwhitenedr!   r!   r"   Útest_whitening3   sN    
"þú	
   ÿþ
rO   c                 C   sv   t j d¡}d\}}| ||¡}tddd}td| dd}| |¡ | |¡ t|j|jdd t|j|jdd d S )	Nr   ©r5   r6   r%   r	   r   ©r   r   r?   çš™™™™™©?r@   )	r   r+   rD   rE   r   r   r   Úexplained_variance_Úexplained_variance_ratio_©r   rL   rM   r1   r   Úpca_fullÚ	pca_otherr!   r!   r"   Ú.test_pca_explained_variance_equivalence_solverj   s"    

  ÿýrX   r   r5   r6   éN   )Ún_informativer?   zrandom-datazcorrelated-data)Zidsc                 C   sr   t d|dd}| | ¡}t|jtj|dddƒ tj tj| dd¡d }t	|dd	d d… }t|j|d
d d S )Nr%   r   rQ   r   rA   F)ZrowvarT)Úreverseç{®Gázt?r@   )
r   r   r   rS   r   ÚvarÚlinalgZeigr   Úsorted)r   r   r   ZX_pcaZexpected_resultr!   r!   r"   Ú%test_pca_explained_variance_empirical€   s    

r`   c                 C   sf   t j d¡}d\}}| ||¡}tdd|d}td| |d}| |¡ | |¡ t|j|jdd d S )Nr   rP   r%   r	   rQ   r\   r@   )r   r+   rD   rE   r   r   r   Úsingular_values_rU   r!   r!   r"   Ú$test_pca_singular_values_consistency“   s    

rb   c                 C   s"  t j d¡}d\}}| ||¡}td| |d}| |¡}tt  |jd ¡t j	 
|d¡d ƒ t|jt  t j|d dd¡ƒ d\}}| ||¡}td| |d}| |¡}|t  t j|d dd¡ }|d d …df  d	9  < |d d …d
f  d9  < t  ||j¡}| |¡ t|jd	ddgƒ d S )Nr   rP   r%   rQ   Zfror;   )r5   én   r:   g‰A`åÐ"	@r   gX9´Èv¾@r9   )r   r+   rD   rE   r   r   r   Úsumra   r^   ZnormÚsqrtr   Úcomponents_r   )r   rL   rM   r1   r   r   ÚX_transZX_hatr!   r!   r"   Útest_pca_singular_values¢   s(    
 ÿ 

rh   c                 C   s²   t j d¡}d\}}| ||¡d }|d d…  t  dddg¡7  < d| d|¡ t  dddg¡ }td	| d
 |¡ |¡}|t  |d	  	¡ ¡ }t
t  |d d ¡ddd d S )Nr   ©r5   r:   rB   r$   r:   é   é   r   r%   r   r9   r\   r@   )r   r+   rD   rE   Úarrayr   r   r   re   rd   r   Úabs)r   rL   ÚnÚpr   ÚXtZYtr!   r!   r"   Útest_pca_check_projectionÀ   s      rq   c                 C   s^   ddgddgg}t d| dd}| |¡}|js6tdƒ‚t| ¡ ddd t| ¡ d	d
d d S )Nr9   g        r   r   rQ   )r%   r   r   r   g¸…ëQ¸æ?r\   r@   )r   r   r   r   r   rH   rF   )r   r   r   rg   r!   r!   r"   Útest_pca_check_projection_listÏ   s    
rr   r>   c           	      C   s€   t j d¡}d\}}| ||¡}|d d …df  d9  < |dddg7 }td| |d	 |¡}| |¡}| |¡}t||d
d d S )Nr   )r8   r:   r   gñhãˆµøä>rk   rj   r:   r%   )r   r   r>   çñhãˆµøÔ>r@   )	r   r+   rD   rE   r   r   r   Zinverse_transformr   )	r   r>   rL   rn   ro   r   r   ÚYZ	Y_inverser!   r!   r"   Útest_pca_inverseÚ   s    

ru   r   z!svd_solver, n_components, err_msg)r
   r   ú2must be between 1 and min\(n_samples, n_features\))r   r   rv   )r
   r%   zmust be strictly less than min)r   r:   zZn_components=3 must be between 0 and min\(n_samples, n_features\)=2 with svd_solver='full'c              	   C   s|   d}t || d}tjt|d | |¡ W 5 Q R X | dkrx|}d ||¡}tjt|d t || d |¡ W 5 Q R X d S )Nr%   ©r   ©Úmatchr
   zgn_components={}L? must be strictly less than min\(n_samples, n_features\)={}L? with svd_solver='arpack')r   rJ   ÚraisesÚ
ValueErrorr   Úformat)r   r   r   Úerr_msgZ
smallest_dZ
pca_fittedr!   r!   r"   Útest_pca_validationì   s     þÿr~   zsolver, n_components_c                 C   s&   t |d}| | ¡ |j|ks"t‚d S )Nrw   )r   r   Ún_components_r   )r   r4   r   r   r!   r!   r"   Útest_n_components_none  s    


r€   c                 C   sH   t j d¡}d\}}| ||¡}td| d}| |¡ |jdksDt‚d S )Nr   ©iX  r$   Úmler   r   )r   r+   rD   rE   r   r   r   r   )r   rL   rM   r1   r   r   r!   r!   r"   Útest_n_components_mle$  s    
rƒ   c              	   C   s^   t j d¡}d\}}| ||¡}td| d}d | ¡}tjt|d | 	|¡ W 5 Q R X d S )Nr   r   r‚   r   z:n_components='mle' cannot be a string with svd_solver='{}'rx   )
r   r+   rD   rE   r   r|   rJ   rz   r{   r   )r   rL   rM   r1   r   r   r}   r!   r!   r"   Útest_n_components_mle_error/  s    ÿr„   c               
   C   sz   t j d¡} d\}}|  ||¡d }|d d…  t  ddddd	g¡7  < td
dd |¡}|jd
ksht‚|j	dksvt‚d S )Nr   ©r5   rk   rB   r$   r:   rj   rk   r   r%   r‚   r	   r   )
r   r+   rD   rE   rl   r   r   r   r   r   )rL   rn   ro   r   r   r!   r!   r"   Útest_pca_dim>  s    $r†   c               	      s´   d\‰ } t j d¡}| ˆ | ¡d | ˆ d¡t  dddddg¡  t  ddd	dd
g¡ }t| dd}| |¡ |j‰t  ‡ ‡fdd„td| ƒD ƒ¡}|d | 	¡ dˆ   ks°t
‚d S )N©éè  rk   r   rB   r   r:   rj   rk   r%   r=   é   r	   r   c                    s   g | ]}t ˆ|ˆ ƒ‘qS r!   )r   )Ú.0Úk©rn   Úspectr!   r"   Ú
<listcomp>V  s     z$test_infer_dim_1.<locals>.<listcomp>ç{®Gáz„?)r   r+   rD   rE   rl   r   r   rS   ÚrangeÚmaxr   )ro   rL   r   r   Úllr!   rŒ   r"   Útest_infer_dim_1I  s    ÿþÿ
 r“   c               
   C   sž   d\} }t j d¡}| | |¡d }|d d…  t  ddddd	g¡7  < |dd
…  t  dddd	dg¡7  < t|dd}| |¡ |j}t|| ƒdksšt	‚d S )Nr‡   r   rB   r$   r:   rj   rk   r   r%   é   r‰   r=   r&   r	   r   ©
r   r+   rD   rE   rl   r   r   rS   r   r   ©rn   ro   rL   r   r   r   r!   r!   r"   Útest_infer_dim_2Z  s    $$
r—   c                  C   sÆ   d\} }t j d¡}| | |¡d }|d d…  t  ddddd	g¡7  < |dd
…  t  dddd	dg¡7  < |dd…  d	t  dddddg¡ 7  < t|dd}| |¡ |j}t|| ƒd	ksÂt	‚d S )Nr…   r   rB   r$   r:   rj   rk   r   r%   r”   r‰   r=   r&   r7   é(   r	   r   r•   r–   r!   r!   r"   Útest_infer_dim_3h  s    $$(
r™   z'X, n_components, n_components_validatedgffffffî?r%   r   rk   r”   g      à?c                 C   s<   t |dd}| | ¡ |jt |¡ks*t‚|j|ks8t‚d S )Nr	   r   )r   r   r   rJ   rK   r   r   )r   r   Zn_components_validatedr   r!   r!   r"   Ú$test_infer_dim_by_explained_varianceu  s    	
rš   c           	      C   sð   d\}}t j d¡}| ||¡d t  dddg¡ }td| d}| |¡ | |¡}d	t  dt j	 t  
d
¡ d ¡ | }t|| d
dd | | ||¡d t  dddg¡ ¡}||ks¾t‚tdd| d}| |¡ | |¡}||ksìt‚d S )N)rˆ   r:   r   rB   r:   rj   rk   r%   r   g      à¿r   g|®Gáz„?rR   r@   gš™™™™™É?T)r   r>   r   )r   r+   rD   rE   rl   r   r   ÚscoreÚlogÚpiÚexpr   r   )	r   rn   ro   rL   r   r   Zll1ÚhZll2r!   r!   r"   Útest_pca_score„  s     

&&

r    c                  C   sÔ   d\} }t j d¡}| | |¡| | d¡t  dddg¡  t  dddg¡ }| | |¡| | d¡t  dddg¡  t  dddg¡ }t  |¡}t|ƒD ](}t|dd	}| |¡ | 	|¡||< q–| 
¡ dksÐt‚d S )
N)éÈ   r:   r   r   r:   rj   rk   r=   r	   r   )r   r+   rD   rE   rl   rI   r   r   r   r›   Zargmaxr   )rn   ro   rL   ZXlrp   r’   r‹   r   r!   r!   r"   Útest_pca_score3š  s    88

r¢   c                 C   sF   t jdd\}}td| dd}| |¡ t |j|j dk¡sBt‚d S )NT©Z
return_X_yr7   r   rQ   )	r   Úload_digitsr   r   r   ÚallrS   Únoise_variance_r   )r   r   Ú_r   r!   r!   r"   Útest_pca_sanity_noise_variance©  s    
r¨   c                 C   s^   t jdd\}}tdddd}td| dd}| |¡ | |¡ t| |¡| |¡dd d S )	NTr£   r7   r	   r   rQ   rs   r@   )r   r¤   r   r   r   r›   )r   r   r§   rV   rW   r!   r!   r"   Ú"test_pca_score_consistency_solversµ  s    

r©   c                 C   sŒ   d\}}t j d¡}| ||¡d t  dddg¡ }t|| d}| |¡ |jdksXt‚| 	|¡ | |j
¡ |jdks|t‚| 	|j
¡ d S )Nri   r   rB   r:   rj   rk   r   )r   r+   rD   rE   rl   r   r   r¦   r   r›   ÚT)r   rn   ro   rL   r   r   r!   r!   r"   Ú'test_pca_zero_noise_variance_edge_casesÁ  s     

r«   z#data, n_components, expected_solver)rˆ   r8   r'   )r$   r8   r8   r$   c                 C   s@   t |dd}t ||dd}| | ¡ | | ¡ t|j|jƒ d S )Nr   )r   r?   rQ   )r   r   r   rf   )r   r   Zexpected_solverZpca_autoZpca_testr!   r!   r"   Útest_pca_svd_solver_auto×  s      ÿ

r¬   c              	   C   s`   t j d¡ dd¡}tj |¡}tj |¡s0t‚t	d| d}t
 t¡ | |¡ W 5 Q R X d S )Nr   rk   rj   r:   r   )r   r+   rD   ÚrandÚspÚsparseZ
csr_matrixÚissparser   r   rJ   rz   Ú	TypeErrorr   )r   r   r   r!   r!   r"   Útest_pca_sparse_inputí  s    r²   c                 C   s‚   t j d¡}| dd¡}t  d¡}tdƒD ],}td| |d}| |¡d ||d d …f< q*t|t  	|dd d …f d¡ 
dd¡ƒ d S )Nr   r$   )r”   r%   r”   r%   rQ   )r   r+   rD   r­   rI   r   r   r   r   ZtileZreshape)r   rL   r   Ztransformed_XÚir   r!   r!   r"   Útest_pca_deterministic_outputø  s    
r´   c                 C   s   t | ƒ t| ƒ d S )N)Ú"check_pca_float_dtype_preservationÚ$check_pca_int_dtype_upcast_to_doublerw   r!   r!   r"   Útest_pca_dtype_preservation  s    r·   c                 C   sº   t j d¡ dd¡jt jdd}| t j¡}td| dd |¡}td| dd |¡}|j	j
t jksft‚|j	j
t jksxt‚| |¡j
t jksŽt‚| |¡j
t jks¤t‚t|j	|j	dd	 d S )
Nr   rˆ   rj   F©r3   r:   rQ   g-Cëâ6*?r@   )r   r+   rD   r­   ÚastypeÚfloat64Zfloat32r   r   rf   Údtyper   r   r   )r   ZX_64ZX_32Úpca_64Úpca_32r!   r!   r"   rµ   
  s     rµ   c                 C   sÄ   t j d¡ ddd¡}|jt jdd}|jt jdd}td| dd |¡}td| dd |¡}|j	j
t jkspt‚|j	j
t jks‚t‚| |¡j
t jks˜t‚| |¡j
t jks®t‚t|j	|j	dd	 d S )
Nr   rˆ   )rˆ   rj   Fr¸   r:   rQ   g-Cëâ6?r@   )r   r+   rD   Úrandintr¹   Zint64Zint32r   r   rf   r»   rº   r   r   r   )r   ZX_i64ZX_i32r¼   r½   r!   r!   r"   r¶     s    r¶   c                  C   sT   t dd\} }tƒ  | |¡}|j ¡ d }t|d | |¡}|j| jd ksPt‚d S )NTr£   éþÿÿÿr)   r   )r   r   r   rT   Zcumsumr   r   r   )r   ÚyZpca1r   Zpca2r!   r!   r"   Ú5test_pca_n_components_mostly_explained_variance_ratio.  s
    rÁ   c               
   C   sJ   t  ddddg¡} d}dD ]*}tjtdd t| ||ƒ W 5 Q R X qd S )Nr   ç ÂëþKH´9r$   )r   rk   z"should be in \[1, n_features - 1\]rx   )r   rl   rJ   rz   r{   r   )ÚspectrumrM   rN   r!   r!   r"   Útest_assess_dimension_bad_rank:  s
    rÄ   c                  C   sd   t  ddddg¡} t| dddt j ks,t‚dD ]}t| |dƒt j ks0t‚q0t| dƒdks`t‚d S )Nr   rÂ   r$   ©rN   rM   )r%   r:   )r   rl   r   Úinfr   r   )rÃ   rN   r!   r!   r"   Útest_small_eigenvalues_mleC  s
    rÇ   c                  C   s<   t jddddddd\} }tdd | ¡}|jdks8t‚d S )Nr”   r   é   é*   )r1   rZ   Z
n_repeatedZn_redundantZn_clusters_per_classr?   r‚   r)   )r   Úmake_classificationr   r   r   r   ©r   r§   r   r!   r!   r"   Útest_mle_redundant_dataP  s    ú
rÌ   c               	   C   sH   t jdddd\} }tddd}tjtdd	 | | ¡ W 5 Q R X d S )
Nr”   é   rÉ   )rM   r1   r?   r‚   r	   r   z?n_components='mle' is only supported if n_samples >= n_featuresrx   )r   rÊ   r   rJ   rz   r{   r   rË   r!   r!   r"   Útest_fit_mle_too_few_samples_  s    þrÎ   c                  C   sr   d\} }t j d¡ | |¡}t j|d d …d d…f dd|d d …df< tddd}| |¡ |j|d ksnt‚d S )	N)rˆ   r$   r   r&   r;   r‚   r	   rw   r   )	r   r+   rD   rE   rH   r   r   r   r   )rM   Zn_dimr   Zpca_sklr!   r!   r"   Útest_mle_simple_casel  s    *
rÏ   c                  C   s   d\} }t  | |f¡}t jj|dd\}}}t|dd … t  |d ¡dd t  t|d| d¡sdt‚t	d|ƒD ]}t||| ƒt j
 ksnt‚qnd S )	N)é	   r‰   T)Zfull_matricesr   r   r   rÅ   r%   )r   rG   r^   Zsvdr   rI   Úisfiniter   r   r   rÆ   )rM   r1   r   r§   ÚsrN   r!   r!   r"   Útest_assess_dimesion_rank_onew  s     rÓ   c                  C   s   t j d¡} d}|  d|¡}tdd|dd |¡}tddd |¡}tdd	dd
 |¡}tt  |j¡t  |j¡ƒ tt  |j¡t  |j¡ƒ dS )zßCheck that exposing and setting `n_oversamples` will provide accurate results
    even when `X` as a large number of features.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/20589
    r   r5   rˆ   r   r   )r   r   Zn_oversamplesr?   r	   r   r
   rQ   N)	r   r+   rD   rE   r   r   r   rm   rf   )rL   r1   r   Zpca_randomizedrV   Z
pca_arpackr!   r!   r"   Ú%test_pca_randomized_svd_n_oversamples„  s    üûrÔ   c                  C   s6   t dd tj¡} |  ¡ }tdd„ tdƒD ƒ|ƒ dS )z Check feature names out for PCA.r%   r)   c                 S   s   g | ]}d |› ‘qS )r   r!   )rŠ   r³   r!   r!   r"   rŽ   £  s     z*test_feature_names_out.<locals>.<listcomp>N)r   r   r   r   Zget_feature_names_outr   r   )r   Únamesr!   r!   r"   Útest_feature_names_outž  s    rÖ   c                 C   sV   t j d¡}| dd¡}tƒ  |¡}|j|j }t j|ddd 	¡ }t j
 ||¡ dS )z9Check the accuracy of PCA's internal variance calculationr   rˆ   r¡   r   rA   N)r   r+   rD   rE   r   r   rS   rT   r]   rd   Útestingr   )r3   rL   r   r   Zpca_varZtrue_varr!   r!   r"   Útest_variance_correctness¦  s    rØ   )Kr-   Únumpyr   rJ   Zscipyr®   Znumpy.testingr   Zsklearnr   Zsklearn.datasetsr   Zsklearn.decompositionr   Zsklearn.decomposition._pcar   r   Zsklearn.utils._testingr   r   ZPCA_SOLVERSÚmarkZparametrizer   r   r   r#   r2   rO   rX   r+   rD   rE   rÊ   r`   rb   rh   rq   rr   ru   rl   rª   r~   Úminr€   rƒ   r„   r†   r“   r—   r™   r­   rš   r    r¢   r¨   r©   r«   r,   r¬   r²   r´   r·   rµ   r¶   rÁ   rÄ   rÇ   rÌ   rÎ   rÏ   rÓ   rÔ   rÖ   rØ   r!   r!   r!   r"   Ú<module>   sæ   5
þú





 4ÿüþýþ




ýþ




ùþ





	