U
    ¿9%e   ã                   @   s°  d Z ddlZddlZddlmZ ddlmZm	Z	 ddl
mZ ddlmZmZ ddgZejdd	d
d„ ƒZej ddg¡ej dd¡dd„ ƒƒZej dd¡dd„ ƒZej ddddg¡dd„ ƒZej dd¡dd„ ƒZej de¡d d!„ ƒZd"d#„ Zej dd¡ej dd$d%g¡ej de¡d&d'„ ƒƒƒZej dd¡ej de¡d(d)„ ƒƒZej de¡d*d+„ ƒZej de¡d,d-„ ƒZd.d/„ Zej d0d1d2d3g¡ej dd¡d4d5„ ƒƒZdS )6zTest truncated SVD transformer.é    N)ÚPCAÚTruncatedSVD)Úcheck_random_state)Úassert_allcloseÚassert_array_lessÚarpackÚ
randomizedÚmodule)Úscopec                  C   s:   t dƒ} tjdddd| d}dt |j¡ |jd d …< |S )Né*   é<   é7   çš™™™™™É?Úcsr)ZdensityÚformatÚrandom_stateé   )r   ÚspÚrandomÚnpÚlogÚdata)ÚrngÚX© r   úm/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/sklearn/decomposition/tests/test_truncated_svd.pyÚX_sparse   s    r   ÚsolverÚkind)ÚdenseÚsparsec           
      C   sÊ   |dkr| n|   ¡ }tddd}td|ddd}| |¡d d …d d…f }| |¡d d …d d…f }t||d	d
 t |j¡}t |j¡}	t|d d… |	d d… dd
 t|dd … |	dd … dd d S )Nr    é   r   ©Ú	algorithmr   éd   )r#   r   Zn_oversamplesé   gü©ñÒMb`?©Úrtolé	   gü©ñÒMbP?ç{®Gáz„?©Úatol)Útoarrayr   Úfit_transformr   r   ÚabsÚcomponents_)
r   r   r   r   Zsvd_aÚsvdZXaZXrZcomp_aÚcompr   r   r   Útest_solvers   s    r2   Ún_components)é
   é   é)   r   c                 C   s>   |j d }t| ƒ |¡}|j| ks&t‚|jj | |fks:t‚d S )Nr   )Úshaper   Úfitr3   ÚAssertionErrorr/   )r3   r   Ú
n_featuresÚtsvdr   r   r   Útest_attributes)   s    
r<   zalgorithm, n_components)r   r   )r   é8   )r   r=   c              	   C   s0   t ||d}t t¡ | | ¡ W 5 Q R X d S )N)r3   r#   )r   ÚpytestZraisesÚ
ValueErrorr8   )r   r#   r3   r;   r   r   r   Útest_too_many_components1   s    	r@   Úfmt)Úarrayr   ZcscZcooZlilc                 C   sp   |j d }| dkr| ¡ nt|d|  ƒƒ }tdd}| |¡}|j |dfksPt‚| |¡}|j |dfkslt‚d S )Nr   r   Útoé   ©r3   )r7   r,   Úgetattrr   r-   r9   Ú	transform)rA   r   Ú	n_samplesZXfmtr;   ÚXtransr   r   r   Útest_sparse_formats?   s    
 


rJ   Úalgoc                 C   s:   t dd| d}| |¡}| |¡}t|| ¡ ddd d S )Né4   r   )r3   r   r#   gš™™™™™¹?r   )r'   r+   )r   r-   Zinverse_transformr   r,   )rK   r   r;   ZXtZXinvr   r   r   Útest_inverse_transformJ   s    

rM   c                 C   sB   | j d }|  tj¡}tdd}| |¡}|j ||jfks>t‚d S )Nr   r%   rE   )r7   Zastyper   Zint64r   r-   r3   r9   )r   rH   ZXintr;   rI   r   r   r   Útest_integersT   s
    


rN   r4   é   c           
      C   s‚   |dkr| n|   ¡ }t||d}| |¡}td|jƒ t|j ¡ dƒ tj|   ¡ dd ¡ }tj|dd}|| }	t|j|	ƒ d S )Nr    r"   ç        ç      ð?r   ©Zaxis)	r,   r   r-   r   Úexplained_variance_ratio_Úsumr   Úvarr   )
r   r   r3   r   r   r0   ZX_trZtotal_varianceZ	variancesZtrue_explained_variance_ratior   r   r   Útest_explained_variance\   s    
þrV   c                 C   sr   |dkr| n|   ¡ }td|dd |¡}td|dd |¡}t|j|jd d… dd |j ¡ |j ¡ ksnt‚d S )Nr    r4   )r#   Ún_iterrO   g{®Gázt?r&   )r,   r   r8   r   rS   rT   r9   )r   r   r   r   Zsvd_10Zsvd_20r   r   r   Ú(test_explained_variance_components_10_20t   s    ýÿrX   c                 C   sŽ   t j d¡}d\}}| ||¡}td| |d |¡}| |¡}tt  |j	d ¡t j
 |d¡d dd t|j	t  t j|d dd	¡dd d S )
Nr   )r$   éP   é   ©r3   r#   r   ç       @Zfror)   r&   rR   )r   r   ÚRandomStateÚrandnr   r8   rG   r   rT   Úsingular_values_ZlinalgZnormÚsqrt)r   r   rH   r:   r   ÚpcaÚX_pcar   r   r   Ú test_singular_values_consistencyˆ   s    
ý  ÿrc   c                 C   s¶   t j 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d d S )Nr   r$   én   é   r[   r\   rR   g‰A`åÐ"	@r   gX9´Èv¾@rQ   g›+¡†›„=r&   )r   r   r]   r^   r   r-   r`   rT   Údotr/   r8   r   r_   )r   r   rH   r:   r   ra   rb   Z	X_hat_pcar   r   r   Útest_singular_values_expectedŸ   s    

rg   c                 C   sŒ   |   ¡ }||jdd }tddd}tf ddi|—Ž}tf ddi|—Ž}| |¡}| |¡}t||d	d
 t|jdd	d t|j|jƒ d S )Nr   rR   r4   r   )r3   r   r#   r   Z
svd_solverg•Ö&è.>r&   r*   )	r,   ZmeanÚdictr   r   r-   r   Zmean_r/   )r   ZX_denseZX_cÚparamsr0   ra   ZXt_svdZXt_pcar   r   r   Útest_truncated_svd_eq_pca´   s    

rj   zalgorithm, tol)r   rP   )r   gíµ ÷Æ°>)r   rP   c                 C   sN   |dkr| n|   ¡ }tddd||d}| |¡}| |¡ |¡}t||ƒ d S )Nr    é   é   r   )r3   rW   r   r#   Útol)r,   r   r-   r8   rG   r   )r   r#   rm   r   r   r0   ZX_transformed_1ZX_transformed_2r   r   r   Útest_fit_transformÈ   s        ÿ
rn   ) Ú__doc__Únumpyr   r>   Zscipy.sparser    r   Zsklearn.decompositionr   r   Zsklearn.utilsr   Zsklearn.utils._testingr   r   ZSVD_SOLVERSZfixturer   ÚmarkZparametrizer2   r<   r@   rJ   rM   rN   rV   rX   rc   rg   rj   rn   r   r   r   r   Ú<module>   sZ   


ýþ



	

 ÿ