o
    tBh$                  
   @   s  d dl Z d dlZd dlZd dlmZ d dlm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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S )0    N)assert_array_equal)assert_array_almost_equal)assert_allclose)!if_safe_multiprocessing_with_blas)	SparsePCAMiniBatchSparsePCAPCA)check_random_statec                 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/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sklearn/decomposition/tests/test_sparse_pca.pygenerate_toy_data   s   
** 
r*   c                  C      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      )r/   r.   )r-   r/   )r   randomRandomStater   r   fit_transformcomponents_r   )r   Xspcar   r(   r(   r)   test_correct_shapes,      

r6   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   r<   r   r=   )r   r0   r1   r*   r   fitr   r3   )r=   r   r'   _	spca_lars
spca_lassor(   r(   r)   test_fit_transform:   s   

rC   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@J t	|| d S )Nr
   r   r   r.   r8   r9   r:   r;   r   )r   n_jobsr<   r=   r   )
r   r0   r1   r*   r   r?   	transformallr3   r   )r=   r   r'   r@   rA   U1r5   U2r(   r(   r)   test_fit_transform_parallelG   s   



rI   c                  C   sZ   t jd} tddd| d\}}}d|d d df< tdd}t t ||r+J d S )Nr   r   r.   r8   r9   r   r   )r   r0   r1   r*   r   anyisnanr2   )r   r'   r@   	estimatorr(   r(   r)   test_transform_nanX   s
   
rN   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   r8   r9   r:   )r   r<   r   r>   )	r   r0   r1   r*   r   r2   r?   rE   r   )r   r'   r@   rA   rG   rB   rH   r(   r(   r)   test_fit_transform_tallb   s   
rP   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
   )axis)
r   r0   r1   r   r   r?   r   r3   linalgnorm)r   rS   rT   modelr(   r(   r)   test_initializationl   s   
,rZ   c                  C   r+   r,   )r   r0   r1   r   r   r2   r3   r   )r   r4   pcar   r(   r(   r)   test_mini_batch_correct_shapesw   r7   r\   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rOdd l	}|j
j}d |j
_ztdd	| dd
}|||}	W ||j
_n||j
_w tdd	| dd
}|||}	t |jdkriJ t||	 tdd| dd|}
t|
j|j d S )Nr
   r   r   r.   r8   r9   )r   r   r=   win32r   )r   rD   r=   r   r>   r;   )r   r0   r1   r*   r   r?   rE   sysplatformjoblibparallelmultiprocessingrF   r3   r   )r=   r   r'   r@   rA   rG   ra   _mpr5   rH   rB   r(   r(   r)   test_mini_batch_fit_transform   s2   


re   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     r8   r9   r:   r;   r.   )r   r0   r1   r*   r   r2   rE   r   )r=   r   r'   r@   rA   results_trainresults_testr(   r(   r)   test_scaling_fit_transform   s   
ri   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   rf   r8   r9   r.   r   )r=   ridge_alphar   rJ   gh㈵>)atol)r   r0   r1   r*   r   r   r?   rE   r   absr3   r   Teyesign)r   r'   r@   Zr5   r[   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.   rJ   )r   r0   r1   r   r?   n_components_)rt   r   r   r   r   r4   rY   r(   r(   r)   test_spca_n_components_   s   rw   r<   )r:   r>   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   r0   r1   r   astyper2   dtyper3   )rt   r<   	data_typeexpected_typer   r   r   r   input_arrayrY   transformedr(   r(   r)   test_sparse_pca_dtype_match   s   

r   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 )NgMbP?r   rx   r   )r   r=   r<   r   )rtol)
r   r0   r1   r   r2   ry   float32float64r   r3   )rt   r<   r   r=   r   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   rR   rJ   c                    s   g | ]}  | qS r(   r(   ).0iestimator_namer(   r)   
<listcomp>  s    z/test_spca_feature_names_out.<locals>.<listcomp>N)
r   r0   r1   r   r?   get_feature_names_out__name__lowerr   r   )rt   r   r   r   r4   rY   namesr(   r   r)   test_spca_feature_names_out   s   
 r   )N)&r_   pytestnumpyr   numpy.testingr   sklearn.utils._testingr   r   r   sklearn.decompositionr   r   r   sklearn.utilsr	   r*   r6   rC   rI   rN   rP   rZ   r\   markskipifre   ri   rs   parametrizerw   r   r   int32int64r   r   r   r(   r(   r(   r)   <module>   sR   









	