o
    Ó\i-/  ã                
   @   sÀ  d dl Zd dlZd dlm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 d dlmZ d2dd	„Zd
d„ Zdd„ Zedd„ ƒZdd„ Zdd„ Zdd„ Z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,d-„ Z(d.d/„ Z)ej de
e	g¡d0d1„ ƒZ*dS )3é    N)Úassert_array_equal)Úmake_low_rank_matrix)ÚPCAÚMiniBatchSparsePCAÚ	SparsePCA)Úcheck_random_state)Úassert_allcloseÚassert_array_almost_equalÚ!if_safe_multiprocessing_with_blas)Úsvd_flipc                 C   s  |d |d  }t |ƒ}| || ¡}| | |¡}g d¢}g d¢}	t| ƒD ]I}
t |¡}||
 d |	|
  ||
 d |	|
  }}||
 d |	|
  ||
 d |	|
  }}d|||… d d …||…f< | ¡ ||
d d …f< q$t ||¡}|d| |jd |jd ¡ 7 }|||fS )Nr   é   ))é   r   )é   é   )é   r   )r   é   r   g      ð?gš™™™™™¹?)r   ÚrandnÚrangeÚnpÚzerosÚravelÚdotÚshape)Ún_componentsÚ	n_samplesÚ
image_sizeÚrandom_stateÚ
n_featuresÚrngÚUÚVÚcentersÚszÚkÚimgÚxminÚxmaxÚyminÚymaxÚY© r*   úŒ/var/www/www-root/data/www/176.119.141.140/sports-predictor/venv/lib/python3.10/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J ‚|jdks&J ‚td| d}| |¡}|jjd	ks9J ‚|jd
ks@J ‚d S )Nr   é   é
   r   ©r   r   ©r   r.   ©r-   r   é   ©r2   r.   ©r-   r2   )r   ÚrandomÚRandomStater   r   Úfit_transformÚcomponents_r   )r   ÚXÚspcar   r*   r*   r+   Útest_correct_shapes.   s   

r;   c                 C   sl   d}t j | ¡}tddd|d\}}}tdd|| d}| |¡ tdd| |d	}| |¡ t|j|jƒ d S )
Nr   r   r.   ©r   r   ©r   Úlars©r   ÚmethodÚalphar   Úcd)r   r@   r   rA   )r   r5   r6   r,   r   Úfitr	   r8   )Úglobal_random_seedrA   r   r)   Ú_Ú	spca_larsÚ
spca_lassor*   r*   r+   Útest_fit_transform<   s   ÿ
ÿ
rH   c           	      C   sŽ   d}t j | ¡}tddd|d\}}}tdd|| d}| |¡ | |¡}tddd|| d	 |¡}| |¡}t  |jd
k¡r@J ‚t	||ƒ d S )Nr   r   r.   r<   r=   r>   r?   r   )r   Ún_jobsr@   rA   r   r   )
r   r5   r6   r,   r   rC   Ú	transformÚallr8   r	   )	rD   rA   r   r)   rE   rF   ÚU1r:   ÚU2r*   r*   r+   Útest_fit_transform_parallelM   s(   ÿ

ûú
rN   c                 C   s\   t j | ¡}tddd|d\}}}d|d d …df< td| d}t  t  | |¡¡¡r,J ‚d S )Nr   r.   r<   r=   r   r   r/   )r   r5   r6   r,   r   ÚanyÚisnanr7   )rD   r   r)   rE   Ú	estimatorr*   r*   r+   Útest_transform_nand   s
   rR   c                 C   sf   t j | ¡}tddd|d\}}}tdd|d}| |¡}tdd|d}| |¡ |¡}t||ƒ d S )Nr   éA   r<   r=   r>   ©r   r@   r   rB   )	r   r5   r6   r,   r   r7   rC   rJ   r	   )rD   r   r)   rE   rF   rL   rG   rM   r*   r*   r+   Útest_fit_transform_talln   s   
rU   c                 C   s‚   t j | ¡}| dd¡}| dd¡}td||d|d}| | dd¡¡ |t jj|ddd }t|j	d d	d j	}t
|j|ƒ d S )
Né   r   é   r   )r   ÚU_initÚV_initÚmax_iterr   r   T)ÚaxisÚkeepdims)ÚuÚv)r   r5   r6   r   r   rC   ÚlinalgÚnormr   ÚTr   r8   )rD   r   rX   rY   ÚmodelÚexpected_componentsr*   r*   r+   Útest_initializationx   s   
ÿrd   c                  C   sˆ   t j d¡} |  dd¡}tdd| d}| |¡}|jjdks J ‚|jdks'J ‚td	d| d}| |¡}|jjd
ks;J ‚|jdksBJ ‚d S )Nr   r-   r.   r   r   )r   rZ   r   r0   r1   r2   r3   r4   )r   r5   r6   r   r   r7   r8   r   )r   r9   Úpcar   r*   r*   r+   Útest_mini_batch_correct_shapes†   s   

rf   c                 C   sh   d}t j | ¡}tddd|d\}}}tdd||d}| |¡}| |d d… ¡}t|d	 |d	 ƒ d S )
Nr   r   éè  r<   r=   r>   r?   r.   r   )r   r5   r6   r,   r   r7   rJ   r   )rD   rA   r   r)   rE   rF   Úresults_trainÚresults_testr*   r*   r+   Útest_scaling_fit_transform”   s   
rj   c           	      C   sè   t j | ¡}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
d d S )Nr   rg   r<   r=   r.   r   r   )rA   Úridge_alphar   r   r/   g-Cëâ6?)Úatol)r   r5   r6   r,   r   r   rC   rJ   r   Úabsr8   r   ra   ÚeyeÚsign)	rD   r   r)   rE   ÚZr:   re   Úresults_test_pcaÚresults_test_spcar*   r*   r+   Útest_pca_vs_spcaž   s   



ÿrs   ÚSPCAr   r   c                 C   s\   t j d¡}d\}}| ||¡}| |d |¡}|d ur%|j|ks#J ‚d S |j|ks,J ‚d S )Nr   ©r-   r.   ©r   )r   r5   r6   r   rC   Ún_components_)rt   r   r   r   r   r9   rb   r*   r*   r+   Útest_spca_n_components_°   s   rx   r@   )r>   rB   zdata_type, expected_typec                 C   s`   d\}}}t j d¡}| ||¡ |¡}| ||d}	|	 |¡}
|
j|ks&J ‚|	jj|ks.J ‚d S )N)r-   r.   r   r   )r   r@   )r   r5   r6   r   Úastyper7   Údtyper8   )rt   r@   Ú	data_typeÚexpected_typer   r   r   r   Úinput_arrayrb   Útransformedr*   r*   r+   Útest_sparse_pca_dtype_match¿   s   

r   c                 C   sv   d\}}}t ||||d}| |||d}| | tj¡¡}| |||d}	|	 | tj¡¡}
t|
|ƒ t|	j|jƒ d S )N)é   r€   rV   )r   r   Úeffective_rankr   rT   )r   r7   ry   r   Úfloat32Úfloat64r   r8   )rt   r@   rD   r   r   r   r}   Úmodel_32Útransformed_32Úmodel_64Útransformed_64r*   r*   r+   Ú%test_sparse_pca_numerical_consistencyÖ   s*   
üýý
rˆ   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   ru   rW   rv   c                    s   g | ]}ˆ › |› ‘qS r*   r*   )Ú.0Úi©Úestimator_namer*   r+   Ú
<listcomp>þ   s    z/test_spca_feature_names_out.<locals>.<listcomp>N)
r   r5   r6   r   rC   Úget_feature_names_outÚ__name__Úlowerr   r   )rt   r   r   r   r9   rb   Únamesr*   r‹   r+   Útest_spca_feature_names_outó   s   
 r’   c                 C   s˜   t j | ¡}d\}}| ||¡}tdd| d |¡}tdd| d |¡}|j|jk s,J ‚tddd| d |¡}tddd| d |¡}|j|jk sJJ ‚d	S )
z@Check that `tol` and `max_no_improvement` act as early stopping.)é2   r.   éd   g      à?)rZ   Útolr   gü©ñÒMbP?gíµ ÷Æ°>r   )rZ   r•   Úmax_no_improvementr   N)r   r5   r6   r   r   rC   Ún_iter_)rD   r   r   r   r9   Úmodel_early_stoppedÚmodel_not_early_stoppedr*   r*   r+   Útest_spca_early_stopping  s2   ÿþÿþÿþÿþ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“   rW   r   Ú
randomizedr   )r   Ú
svd_solverr   r>   )r   r@   rk   rA   r   N)	r   r5   r6   r   r   rC   r   r   r8   )rD   r   r9   r   re   r:   r*   r*   r+   Ú$test_equivalence_components_pca_spca  s(   ýüûúr   c           
      C   sn   t j | ¡}d\}}| ||¡}d}t|dd| d}t|| d}| |¡}| |¡}	t| |¡| |	¡ƒ dS )zDCheck that `inverse_transform` in `SparsePCA` and `PCA` are similar.©r.   rV   r   çê-™—q=©r   rA   rk   r   r/   N)	r   r5   r6   r   r   r   r7   r   Úinverse_transform)
rD   r   r   r   r9   r   r:   re   ÚX_trans_spcaÚX_trans_pcar*   r*   r+   Ú!test_sparse_pca_inverse_transform5  s    ü

ÿr¤   c           	      C   sR   t j |¡}d\}}| ||¡}|}| |dd|d}| |¡}t| |¡|ƒ dS )z^Check the `transform` and `inverse_transform` round trip with no loss of
    information.
    rž   rŸ   r    N)r   r5   r6   r   r7   r   r¡   )	rt   rD   r   r   r   r9   r   r:   r¢   r*   r*   r+   Ú+test_transform_inverse_transform_round_tripJ  s   ü
r¥   )N)+Únumpyr   ÚpytestÚnumpy.testingr   Úsklearn.datasetsr   Úsklearn.decompositionr   r   r   Úsklearn.utilsr   Úsklearn.utils._testingr   r	   r
   Úsklearn.utils.extmathr   r,   r;   rH   rN   rR   rU   rd   rf   rj   rs   ÚmarkÚparametrizerx   r‚   rƒ   Úint32Úint64r   rˆ   r’   rš   r   r¤   r¥   r*   r*   r*   r+   Ú<module>   sV   








üþ	
