a
    ¶Àh   ã                   @   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g d¢¡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 d.g d/¢¡ej dd¡d0d1„ ƒƒZdS )2z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   új/var/www/html/assistant/venv/lib/python3.9/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&J ‚|jj | |fks:J ‚d S )Nr   )Úshaper   Úfitr3   r/   )r3   r   Ú
n_featuresÚtsvdr   r   r   Útest_attributes)   s    
r;   zalgorithm, n_components))r   r   )r   é8   )r   r<   c                 C   sD   t ||d}t t¡ | | ¡ W d   ƒ n1 s60    Y  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sPJ ‚| |¡}|j |dfkslJ ‚d S )Nr   r   Útoé   ©r3   )r7   r,   Úgetattrr   r-   Ú	transform)r@   r   Ú	n_samplesZXfmtr:   ÚXtransr   r   r   Útest_sparse_formats?   s    
 


rI   Ú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,   )rJ   r   r:   ZXtZXinvr   r   r   Útest_inverse_transformJ   s    

rL   c                 C   sB   | j d }|  tj¡}tdd}| |¡}|j ||jfks>J ‚d S )Nr   r%   rD   )r7   Zastyper   Zint64r   r-   r3   )r   rG   ZXintr:   rH   r   r   r   Útest_integersT   s
    


rM   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    
þrU   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snJ ‚d S )Nr    r4   )r#   Ún_iterrN   g{®Gázt?r&   )r,   r   r8   r   rR   rS   )r   r   r   r   Zsvd_10Zsvd_20r   r   r   Ú(test_explained_variance_components_10_20t   s    ýÿrW   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&   rQ   )r   r   ÚRandomStateÚrandnr   r8   rF   r   rS   Úsingular_values_ZlinalgZnormÚsqrt)r   r   rG   r9   r   ÚpcaÚX_pcar   r   r   Ú test_singular_values_consistencyˆ   s    
ýÿrb   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g d¢dd d S )Nr   r$   én   é   rZ   r[   rQ   ç‰A`åÐ"	@r   çX9´Èv¾@)re   rf   rP   g›+¡†›„=r&   )r   r   r\   r]   r   r-   r_   rS   Údotr/   r8   r   r^   )r   r   rG   r9   r   r`   ra   Z	X_hat_pcar   r   r   Útest_singular_values_expectedŸ   s    

rh   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   rQ   r4   r   )r3   r   r#   r   Z
svd_solverg•Ö&è.>r&   r*   )	r,   ÚmeanÚdictr   r   r-   r   Zmean_r/   )r   ZX_denseZX_cÚparamsr0   r`   ZXt_svdZXt_pcar   r   r   Útest_truncated_svd_eq_pca´   s    

rl   zalgorithm, tol))r   rO   )r   gíµ ÷Æ°>)r   rO   c                 C   sN   |dkr| n|   ¡ }tddd||d}| |¡}| |¡ |¡}t||ƒ d S )Nr    é   é   r   )r3   rV   r   r#   Útol)r,   r   r-   r8   rF   r   )r   r#   ro   r   r   r0   ZX_transformed_1ZX_transformed_2r   r   r   Útest_fit_transformÈ   s    
ÿ
rp   ) Ú__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?   rI   rL   rM   rU   rW   rb   rh   rl   rp   r   r   r   r   Ú<module>   sR   


þ


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