U
    _»{jh4  ã                
   @   sØ  d dl Z d dlZd dlZd dlmZ d dlmZmZm	Z	 d dl
mZ d dlmZmZmZ d9dd„Zdd	„ Zd
d„ Zedd„ ƒZdd„ Zdd„ Zdd„ Zdd„ Zejjddd�dd„ ƒZdd„ Zdd„ Zej de	eg¡ej d dd!g¡d"d#„ ƒƒZej de	ef¡ej d$d%¡ej d&ejejfej ej fej!ej fej"ej ff¡d'd(„ ƒƒƒZ#ej de	ef¡ej d$d%¡d)d*„ ƒƒZ$ej de	eg¡d+d,„ ƒZ%d-d.„ Z&d/d0„ Z'd1d2„ Z(d3d4„ Z)d5d6„ Z*ej de	eg¡d7d8„ ƒZ+dS ):é    N)Úassert_array_equal)ÚPCAÚMiniBatchSparsePCAÚ	SparsePCA)Úcheck_random_state)Úassert_allcloseÚassert_array_almost_equalÚ!if_safe_multiprocessing_with_blasc                 C   s  |d |d  }t |ƒ}| || ¡}| | |¡}dddg}dddg}	t| ƒD ]’}
t |¡}||
 d |	|
  ||
 d |	|
   }}||
 d |	|
  ||
 d |	|
   }}d|||… d d …||…f< | ¡ ||
d d …f< qLt ||¡}|d| |jd |jd ¡ 7 }|||fS )	Nr   é   )é   r   )é   é   )é   r
   é   g      ð?gš™™™™™¹?)r   ÚrandnÚrangeÚnpZzerosZravelÚdotÚshape)Ún_componentsÚ	n_samplesZ
image_sizeÚrandom_stateÚ
n_featuresÚrngÚUÚVZcentersÚszÚkZimgZxminZxmaxZyminZymaxÚY© r   új/var/www/html/bwave/python/venv/lib/python3.8/site-packages/sklearn/decomposition/tests/test_sparse_pca.pyÚgenerate_toy_data   s    


** r!   c                  C   s„   t j d¡} |  dd¡}td| d�}| |¡}|jjdks>t‚|jdksLt‚td| d�}| |¡}|jjd	ksrt‚|jd
ks€t‚d S )Nr   é   é
   r   ©r   r   ©r   r#   ©r"   r   é   ©r'   r#   ©r"   r'   )	r   ÚrandomÚRandomStater   r   Úfit_transformÚcomponents_r   ÚAssertionError)r   ÚXÚspcar   r   r   r    Útest_correct_shapes-   s    

r1   c                  C   sl   d} t j d¡}tddd|d�\}}}tdd| dd�}| |¡ tdd	d| d
�}| |¡ t|j|jƒ d S )Nr
   r   r   r#   ©r   r   ©r   Úlars©r   ÚmethodÚalphar   Úcd)r   r6   r   r7   )r   r*   r+   r!   r   Úfitr   r-   )r7   r   r   Ú_Ú	spca_larsÚ
spca_lassor   r   r    Útest_fit_transform;   s    

r=   c                  C   sŽ   d} t j d¡}tddd|d�\}}}tdd| dd�}| |¡ | |¡}tdd	d| dd
� |¡}| |¡}t  |jdk¡r€t	‚t
||ƒ d S )Nr
   r   r   r#   r2   r3   r4   r5   r   )r   Ún_jobsr6   r7   r   )r   r*   r+   r!   r   r9   Ú	transformÚallr-   r.   r   )r7   r   r   r:   r;   ÚU1r0   ÚU2r   r   r    Útest_fit_transform_parallelH   s$    

    ÿþ
rC   c                  C   sZ   t j d¡} tddd| d�\}}}d|d d …df< tdd�}t  t  | |¡¡¡rVt‚d S )Nr   r   r#   r2   r3   r   ©r   )	r   r*   r+   r!   r   ÚanyÚisnanr,   r.   )r   r   r:   Z	estimatorr   r   r    Útest_transform_nanY   s
    
rG   c                  C   sf   t j d¡} tddd| d�\}}}tdd| d�}| |¡}tdd| d�}| |¡ |¡}t||ƒ d S )	Nr   r   éA   r2   r3   r4   )r   r6   r   r8   )	r   r*   r+   r!   r   r,   r9   r?   r   )r   r   r:   r;   rA   r<   rB   r   r   r    Útest_fit_transform_tallc   s    
rI   c                  C   st   t j d¡} |  dd¡}|  dd¡}td||d| d�}| |  dd¡¡ t|j|t jj	|dd�d d …d f  ƒ d S )Nr   é   r   é   )r   ÚU_initÚV_initÚmax_iterr   r
   )Zaxis)
r   r*   r+   r   r   r9   r   r-   ZlinalgZnorm)r   rL   rM   Úmodelr   r   r    Útest_initializationm   s        ÿrP   c                  C   sˆ   t j d¡} |  dd¡}tdd| d�}| |¡}|jjdks@t‚|jdksNt‚td	d| d�}| |¡}|jjd
ksvt‚|jdks„t‚d S )Nr   r"   r#   r   r
   )r   rN   r   r%   r&   r'   r(   r)   )	r   r*   r+   r   r   r,   r-   r   r.   )r   r/   Úpcar   r   r   r    Útest_mini_batch_correct_shapesx   s    

rR   Tz"skipping mini_batch_fit_transform.)Úreasonc                  C   sþ   d} t j d¡}tddd|d�\}}}tdd| d� |¡}| |¡}tjdkr˜dd l	}|j
j}d |j
_z$tdd	| dd
�}| |¡ |¡}	W 5 ||j
_X n tdd	| dd
�}| |¡ |¡}	t  |jdk¡rÌt‚t||	ƒ tdd| dd� |¡}
t|
j|jƒ d S )Nr
   r   r   r#   r2   r3   )r   r   r7   Úwin32r   )r   r>   r7   r   r8   r5   )r   r*   r+   r!   r   r9   r?   ÚsysÚplatformÚjoblibÚparallelÚmultiprocessingr@   r-   r.   r   )r7   r   r   r:   r;   rA   rW   Z_mpr0   rB   r<   r   r   r    Útest_mini_batch_fit_transform‡   s>    

   ÿ
   ÿþrZ   c                  C   sh   d} t j d¡}tddd|d�\}}}tdd| |d�}| |¡}| |d d	… ¡}t|d |d ƒ d S )
Nr
   r   r   éè  r2   r3   r4   r5   r#   )r   r*   r+   r!   r   r,   r?   r   )r7   r   r   r:   r;   Zresults_trainZresults_testr   r   r    Útest_scaling_fit_transform§   s    
r\   c                  C   sà   t j d¡} tddd| d�\}}}tddd| d�\}}}tdddd�}tdd	�}| |¡ | |¡ | |¡}| |¡}tt  	|j
 |j
j¡¡t  d¡d
d� |t  |dd d …f ¡9 }|t  |dd d …f ¡9 }t||ƒ d S )Nr   r   r[   r2   r3   r#   r   )r7   Úridge_alphar   rD   gñhãˆµøä>)Zatol)r   r*   r+   r!   r   r   r9   r?   r   Úabsr-   r   ÚTÚeyeÚsign)r   r   r:   ÚZr0   rQ   Zresults_test_pcaZresults_test_spcar   r   r    Útest_pca_vs_spca±   s"    




  ÿrc   ÚSPCAr   r   c                 C   sZ   t j d¡}d\}}| ||¡}| |d� |¡}|d k	rH|j|ksVt‚n|j|ksVt‚d S )Nr   ©r"   r#   rD   )r   r*   r+   r   r9   Zn_components_r.   )rd   r   r   r   r   r/   rO   r   r   r    Útest_spca_n_components_Ã   s    rf   r6   )r4   r8   zdata_type, expected_typec                 C   s`   d\}}}t j d¡}| ||¡ |¡}| ||d�}	|	 |¡}
|
j|ksLt‚|	jj|ks\t‚d S )N©r"   r#   r   r   )r   r6   )	r   r*   r+   r   Úastyper,   Zdtyper.   r-   )rd   r6   Z	data_typeÚexpected_typer   r   r   r   Úinput_arrayrO   Ztransformedr   r   r    Útest_sparse_pca_dtype_matchÒ   s    

rk   c                 C   s’   d}d}d\}}}t j d¡}| ||¡}| |||dd�}	|	 | t j¡¡}
| |||dd�}| | t j¡¡}t||
|d� t|j	|	j	|d� d S )Nçü©ñÒMbP?r   rg   r   )r   r7   r6   r   )Úrtol)
r   r*   r+   r   r,   rh   Úfloat32Úfloat64r   r-   )rd   r6   rm   r7   r   r   r   r   rj   Zmodel_32Ztransformed_32Zmodel_64Ztransformed_64r   r   r    Ú%test_sparse_pca_numerical_consistencyé   s*    
   ÿ   ÿrp   c                    sb   t j d¡}d\}}| ||¡}| dd� |¡}| ¡ }| j ¡ ‰ t‡ fdd„t	dƒD ƒ|ƒ dS )z'Check feature names out for *SparsePCA.r   re   rK   rD   c                    s   g | ]}ˆ › |› �‘qS r   r   )Ú.0Úi©Zestimator_namer   r    Ú
<listcomp>  s     z/test_spca_feature_names_out.<locals>.<listcomp>N)
r   r*   r+   r   r9   Zget_feature_names_outÚ__name__Úlowerr   r   )rd   r   r   r   r/   rO   Únamesr   rs   r    Útest_spca_feature_names_out  s    
rx   c               	   C   s¤   t j d¡} d\}}|  ||¡}d}tjt|d�� tdd� |¡ W 5 Q R X d\}}tjt|d�� t||dd� |¡}W 5 Q R X |j	d	ks’t
‚|j	|ks t
‚d
S )zvCheck that we raise a warning for the deprecation of `n_iter` and it is ignored
    when `max_iter` is specified.
    r   re   z9'n_iter' is deprecated in version 1.1 and will be removed©Úmatchr   )Ún_iter)r
   éd   )r{   rN   r   r
   N)r   r*   r+   r   ÚpytestÚwarnsÚFutureWarningr   r9   Ún_iter_r.   )r   r   r   r/   Zwarn_msgr{   rN   rO   r   r   r    Útest_spca_n_iter_deprecation  s"      ÿþr�   c               	   C   sb   t  ddgddgddgddgddgddgg¡} tdd� | ¡}tjtdd	�� |j W 5 Q R X d S )
Néÿÿÿÿéþÿÿÿéýÿÿÿr
   r   r   rD   z`n_features_` was deprecatedry   )r   Úarrayr   r9   r}   r~   r   Zn_features_)r/   rQ   r   r   r    Útest_pca_n_features_deprecation%  s    .r†   c                 C   s˜   t j | ¡}d\}}| ||¡}tdd| d� |¡}tdd| d� |¡}|j|jk sXt‚tddd| d� |¡}tddd| d� |¡}|j|jk s”t‚d	S )
z@Check that `tol` and `max_no_improvement` act as early stopping.)é2   r#   r|   g      à?)rN   Útolr   rl   g�íµ ÷Æ°>r   )rN   rˆ   Zmax_no_improvementr   N)r   r*   r+   r   r   r9   r€   r.   )Úglobal_random_seedr   r   r   r/   Zmodel_early_stoppedZmodel_not_early_stoppedr   r   r    Útest_spca_early_stopping,  sF      ÿþ  ÿþ   ÿþ   ÿþrŠ   c                 C   sZ   t j | ¡}| dd¡}d}t|ddd� |¡}t|ddddd� |¡}t|j|jƒ d	S )
z¤Check the equivalence of the components found by PCA and SparsePCA.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/23932
    r‡   rK   r   Z
randomizedr   )r   Z
svd_solverr   r4   )r   r6   r]   r7   r   N)	r   r*   r+   r   r   r9   r   r   r-   )r‰   r   r/   r   rQ   r0   r   r   r    Ú$test_equivalence_components_pca_spcaF  s(    ýüûúr‹   c            	      C   sn   t j d¡} d\}}|  ||¡}d}t|dddd�}t|dd�}| |¡}| |¡}t| |¡| |¡ƒ dS )zDCheck that `inverse_transform` in `SparsePCA` and `PCA` are similar.r   ©r#   rJ   r   çê-�™—q=©r   r7   r]   r   r$   N)	r   r*   r+   r   r   r   r,   r   Úinverse_transform)	r   r   r   r/   r   r0   rQ   ÚX_trans_spcaZX_trans_pcar   r   r    Ú!test_sparse_pca_inverse_transform`  s"       ÿ

 ÿr‘   c                 C   sR   t j d¡}d\}}| ||¡}|}| |dddd�}| |¡}t| |¡|ƒ dS )z^Check the `transform` and `inverse_transform` round trip with no loss of
    information.
    r   rŒ   r�   rŽ   N)r   r*   r+   r   r,   r   r�   )rd   r   r   r   r/   r   r0   r�   r   r   r    Ú+test_transform_inverse_transform_round_tripr  s       ÿ
r’   )N),rU   Únumpyr   r}   Znumpy.testingr   Zsklearn.decompositionr   r   r   Zsklearn.utilsr   Zsklearn.utils._testingr   r   r	   r!   r1   r=   rC   rG   rI   rP   rR   ÚmarkZskipifrZ   r\   rc   Zparametrizerf   rn   ro   Zint32Zint64rk   rp   rx   r�   r†   rŠ   r‹   r‘   r’   r   r   r   r    Ú<module>   sZ   









üþ	
