U
    -eh4                  
   @   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   l/var/www/html/Darija-Ai-Train/env/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st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rt	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st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rd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rt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   gh㈵>)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 )NMbP?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st
|j	|kst
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 )
Nr
   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 st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 )
zCheck 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   









	
