o
    i                     @   s  d dl Z d dlZd dlZd dl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mZ d dlmZ d dlmZmZ d dlmZmZmZmZ d d	lm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( e Z)g dZ*d\Z+Z,e-e+e,Z.dddZ/ej01de*ej01de2de)j3j4d dd Z5ej01dg dej01dg dej01de(e' ej01dddgej01dg d d!d" Z6ej01de(e' d#d$ Z7ej01dd%d&gej01de(e' d'd( Z8ej01de(e' d)d* Z9d+d, Z:ej01d-d.d/gej01d0e*d1d2 Z;ej01d3e<e=e>e*d&d4h ej01d5d6d7gej01d8d/d.gej01d9d/d.gd:d; Z?ej0j1d<ej@Ad Bd=d>ejd=d>d?d d@d  ej@Ad BdAd=gg dBdCej01de*dDdE ZCej01ddd%gdFdG ZDej01de*dHdI ZEej01de*dJdK ZFej01de*dLdM ZGej01dg dNej01d9d/d.gdOdP ZHej01dQeIg dRg dSgeIg dRg dSgjJgej01dTg dUdVdW ZKej01dXd&e-e)j3j4fde-e)j3j4d fd%e-e)j3j4fgej01dQe)j3e)j3jJgdYdZ ZLej01dd4d&gd[d\ ZMej01ddd%gd]d^ ZNd_d` ZOdadb ZPdcdd ZQdedf ZRej01dge)j3dhdife)j3djdfej@Ad Sdkdldmdifgdndo ZTej01de*dpdq ZUdrds ZVej01de*dtdu ZWej01ddd%gdvdw ZXej01dd&d%gdxdy ZYej01dzg d{d|d} ZZej01de*d~d Z[ej01de*dd Z\dd Z]dd Z^dd Z_dd Z`dd Zadd Zbdd Zcdd Zddd Zedd Zfdd Zgej01d-d.d/gdd Zhdd Ziej0j1de edCej0j1de%eige dCej0j1dedid&dedid&d.dedd&d.dediddedidd.dedid%dd dge dCdd Zjej0j1de edCej0j1deige dCej0j1dedd&dge dCdd Zkej0jle jmnddkdddd ZodS )    N)assert_array_equal)config_contextdatasets)clone)	load_irismake_classificationmake_low_rank_matrix)PCA)_assess_dimension_infer_dimension)_atol_for_type_convert_to_numpy_get_namespace_device_dtype_ids)yield_namespace_device_dtype_combinationsdevice)_get_check_estimator_ids)_array_api_for_testsassert_allclose) check_array_api_input_and_values)CSC_CONTAINERSCSR_CONTAINERS)fullcovariance_eigharpack
randomizedauto)  i,  Hz>-q=c                 C   s   t | j|j||d t | j|j||d t | j|j||d t | j|j||d t | j|j||d | j|jks:J | j|jksBJ | j|jksJJ d S )Nrtolatol)	r   components_explained_variance_singular_values_Zmean_noise_variance_n_components_Z
n_samples_Zn_features_in_)pca1pca2r!   r"    r*   s/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/sklearn/decomposition/tests/test_pca.py_check_fitted_pca_close'   s   r,   
svd_solvern_components   c                 C   s   t j}t|| d}|||}|jd |ksJ ||}t|| ||}t|| | }|	 }tt
||t
|jd dd d S )Nr.   r-   r/   r   r"   )irisdatar	   fit	transformshapefit_transformr   get_covarianceget_precisionnpdoteye)r-   r.   XpcaZX_rZX_r2cov	precisionr*   r*   r+   test_pca5   s   



&rA   density){Gz?皙?g333333?)r/      
   sparse_containerr   r   scale)r/   rF   d   c                 C   s   d}d}t j| }|tjjtt||d}	||	jd | }
|	|
}	t	||| d}|
|	 |	 }t	||| d}|
| t|||d |tjjtt||d}| }t|||||d t|||||d dS )z?Check that the results are the same for sparse and dense input.r   绽|=random_staterB   r/   r.   r-   rL   r1   N)r:   randomdefault_rngspsparseSPARSE_MSPARSE_Nr6   multiplyr	   r4   Ztoarrayr,   r   r5   )global_random_seedr-   rG   r.   rB   rH   r"   Ztransform_atolrL   r=   Zscale_vectorr>   ZXdZpcadX2ZX2dr*   r*   r+   test_pca_sparseK   sL   	


rW   c                 C   s   t j| }|tjjtt|dd}|tjjtt|dd}tdd| d}tdd| d}|| |	|}t
|| t||| t||| t|||| d S )NrC   rK   rF   r   rM   )r:   rN   rO   rP   rQ   rR   rS   r	   r4   r7   r,   r   r5   )rU   rG   rL   r=   rV   Zpca_fitZpca_fit_transformtransformed_Xr*   r*   r+   test_pca_sparse_fit_transform   s6   	


rY   r   r   c                 C   sx   t j| }|tjjtt|d}td|d}d| d}tj	t
|d || W d    d S 1 s5w   Y  d S )NrL      r0   zWPCA only support sparse inputs with the "arpack" and "covariance_eigh" solvers, while "z" was passedmatch)r:   rN   RandomStaterP   rQ   rR   rS   r	   pytestraises	TypeErrorr4   )rU   r-   rG   rL   r=   r>   Zerror_msg_patternr*   r*   r+   test_sparse_pca_solver_error   s    "rb   c                 C   s\   t j| }|tjjtt|d}tddd|}tddd|}t	|j
|j
dd dS )	zHCheck that "auto" and "arpack" solvers are equivalent for sparse inputs.rZ   rF   r   r0   r   {Gzt?r!   N)r:   rN   r^   rP   rQ   rR   rS   r	   r4   r   r%   )rU   rG   rL   r=   
pca_arpackpca_autor*   r*   r+   7test_sparse_pca_auto_arpack_singluar_values_consistency   s   rg   c                  C   sp   d} | d }t jjdd| |fd}t| d}t  tdt || W d    d S 1 s1w   Y  d S )NrF   rE   r/   sizer.   error)	r:   rN   uniformr	   warningscatch_warningssimplefilterRuntimeWarningr4   )r.   
n_featuresr=   r>   r*   r*   r+   test_no_empty_slice_warning   s   

"rs   copyTFsolverc                 C   s  t jd}d}d}d}d}t |||t t t dd||||}|d d d df  d9  < |j||fks?J |jdd	 d
ksKJ |	 }t
|d|| ddd}	|	|	 }
|
j||fksiJ |	|}t|
|dd t|
jdddt | t|
jdd	t |dd |	 }t
|d|| d|	 }	|	|}|j||fksJ |jdd	 tjdddksJ d S )Nr   rI   P   r[   2   g      $@      ?   axisgfffffE@T   )r.   whitenrt   r-   rL   iterated_powergMb@?rd   r/   Zddofr{   r   r1   F)r.   r}   rt   r-   gfffffR@rD   )rel)r:   rN   r^   r;   randnZdiagZlinspacer6   stdrt   r	   r7   r5   r   onesmeanzerosr4   r_   approx)ru   rt   rng	n_samplesrr   r.   rankr=   ZX_r>   Z
X_whitenedZX_whitened2ZX_unwhitenedr*   r*   r+   test_whitening   sH   
"	


&r   other_svd_solverr   
data_shapetallZwiderank_deficientr}   c                 C   s  |dkr	d\}}nd\}}d}|r1t j|}	t||d }
|	j|| |
fd|	j|
|fd }nt|| |d|d}t||}
|j|d	d
}|d | ||d  }}|t jkrbtddd}d}ntddd}d}i }| dkrwd}ddi}n| dkrt 	||d }nd }t
|d|d}t
d|| ||d|}||}t | sJ |j|ksJ ||}t | sJ |j|ksJ |jdk sJ t|j|jfi | t|j|jfi | |j}t | sJ |j}t | sJ |j|k}| dksJ t|| || fi | t|d d |f |d d |f fi | ||}t | s9J |j|ksAJ ||}t | sPJ |j|ksXJ t|d d |f |d d |f fi | ||}t | s|J |j|ksJ ||}t | sJ |j|ksJ |jjd |jjd krt||fi | t||fi | d S |jjd |
k r|j |ksJ t||fi | d S t||d d |f ||d d |f fi | d S )Nr   )rI   r[   )r[   rI   rF   rE   ri         ?)r   rr   Ztail_strengthrL   Frt   gQ?h㈵>)r"   r!   rJ   r   r   r~   rw   r   r/   r   r.   r-   r}   )r.   r-   r}   rL   r   r*   )r:   rN   rO   minZstandard_normalr   astypefloat32dictminimumr	   r7   isfinitealldtyper$   r   explained_variance_ratio_r#   sumr5   inverse_transformr6   )r   r   r   r}   rU   Zglobal_dtyper   rr   Zn_samples_testr   r   r=   ZX_trainZX_testZtolsZvariance_thresholdZextra_other_kwargsr.   pca_full	pca_otherZX_trans_full_trainZX_trans_other_trainZreference_componentsZother_componentsZstableZX_trans_full_testZX_trans_other_testZX_recons_full_testZX_recons_other_testr*   r*   r+   test_pca_solver_equivalence  s   









*


r   r=   rI   rv   N   )n_informativerL   rF   )zrandom-tallzcorrelated-tallzrandom-wide)Zidsc                 C   sr   t d|dd}|| }t|jtj|ddd tjtj| ddd }t	|dd	d d }t|j|d
d d S )NrE   r   rM   r/   r   F)ZrowvarT)reverserc   rd   )
r	   r7   r   r$   r:   varlinalgZeigr?   sorted)r=   r-   r>   ZX_pcaZexpected_resultr*   r*   r+   %test_pca_explained_variance_empirical  s   
r   c                 C   sf   t jd}d\}}|||}tdd|d}td| |d}|| || t|j|jdd d S )Nr   rI   rv   rE   r   rM   rc   rd   )r:   rN   r^   r   r	   r4   r   r%   )r-   r   r   rr   r=   r   r   r*   r*   r+   $test_pca_singular_values_consistency  s   

r   c                 C   s   t jd}d\}}|||}td| |d}||}tt |jd t j	
|dd  t|jt t j|d 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 S )Nr   r   rE   rM   Zfrorz   )rI   n   ry   A`"	@r/   X9v@)r   r   rx   )r:   rN   r^   r   r	   r7   r   r   r%   r   Znormsqrtr;   r#   r4   )r-   r   r   rr   r=   r>   X_transZX_hatr*   r*   r+   test_pca_singular_values  s&   
 

r   c                 C   s   t jd}d\}}|||d }|d d  t g d7  < d|d| t g d }td| d||}|t |d 	  }t
t |d d d	d
d d S )Nr   rI   ry   rD   rF   ry         r/   rE   r0   rx   rc   rd   )r:   rN   r^   r   arrayr	   r4   r5   r   r   r   abs)r-   r   npr=   XtZYtr*   r*   r+   test_pca_check_projection  s    r   c                 C   s^   ddgddgg}t d| dd}||}|jsJ dt| ddd t| d	d
d d S )Nrx   g        r/   r   rM   )rE   r/   r   r1   gQ?rc   rd   )r	   r7   r6   r   r   r   )r-   r=   r>   r   r*   r*   r+   test_pca_check_projection_list  s   
r   )r   r   r   c           	      C   s~   t jd}d\}}|||}|d d df  d9  < |g d7 }td| |d|}||}||}t||dd	 d S )
Nr   )rw   ry   r/   r   )r   r   ry   rE   r   h㈵>rd   )	r:   rN   r^   r   r	   r4   r5   r   r   )	r-   r}   r   r   r   r=   r>   YZ	Y_inverser*   r*   r+   test_pca_inverse  s   

r   r3   )r   r/   r   )r/   r   r   z!svd_solver, n_components, err_msg))r   r   2must be between 1 and min\(n_samples, n_features\))r   r   r   )r   rE   zmust be strictly less than min)r   ry   zZn_components=3 must be between 0 and min\(n_samples, n_features\)=2 with svd_solver='full'c                 C   s   d}t || d}tjt|d || W d    n1 sw   Y  | dkrS|}d||}tjt|d t || d| W d    d S 1 sLw   Y  d S d S )NrE   r-   r\   r   zgn_components={}L? must be strictly less than min\(n_samples, n_features\)={}L? with svd_solver='arpack')r	   r_   r`   
ValueErrorr4   format)r-   r3   r.   err_msgZ
smallest_dZ
pca_fittedr*   r*   r+   test_pca_validation  s   "r   zsolver, n_components_c                 C   s&   t |d}||  |j|ksJ d S )Nr   )r	   r4   r'   )r3   ru   r'   r>   r*   r*   r+   test_n_components_none4  s   


r   c                 C   sH   t jd}d\}}|||}td| d}|| |jdks"J d S )Nr   iX  rF   mler0   r/   )r:   rN   r^   r   r	   r4   r'   )r-   r   r   rr   r=   r>   r*   r*   r+   test_n_components_mleC  s   
r   c                 C   st   t jd}d\}}|||}td| d}d| }tjt|d |	| W d    d S 1 s3w   Y  d S )Nr   r   r   r0   z:n_components='mle' cannot be a string with svd_solver='{}'r\   )
r:   rN   r^   r   r	   r   r_   r`   r   r4   )r-   r   r   rr   r=   r>   r   r*   r*   r+   test_n_components_mle_errorN  s   "r   c                  C   st   t jd} d\}}| ||d }|d d  t g d7  < tddd|}|jdks1J |jd	ks8J d S )
Nr   rI   r   rD   rF   ry   r   r   r/   rE   r   r   r0   r/   )	r:   rN   r^   r   r   r	   r4   r.   r'   )r   r   r   r=   r>   r*   r*   r+   test_pca_dim]  s   r   c                     s   d\ } t jd}| | d | dt g d  t g d }t| dd}|| |jt  fd	d
td| D }|d |	 d   ksRJ d S )Nr   r   r   rD   r/   r   )r/   r   r|   r      r   r0   c                    s   g | ]}t | qS r*   )r
   ).0kr   spectr*   r+   
<listcomp>u  s    z$test_infer_dim_1.<locals>.<listcomp>rC   )
r:   rN   r^   r   r   r	   r4   r$   rangemax)r   r   r=   r>   llr*   r   r+   test_infer_dim_1h  s   
  r   c                  C   s   d\} }t jd}|| |d }|d d  t g d7  < |dd  t g d7  < t|dd	}|| |j}t|| d
ksGJ d S )Nr   r   rD   rF   r      r   r   r|   rE   rh   r   r0   r/   	r:   rN   r^   r   r   r	   r4   r$   r   r   r   r   r=   r>   r   r*   r*   r+   test_infer_dim_2y  s   
r   c                  C   s   d\} }t jd}|| |d }|d d  t g d7  < |dd  t g d7  < |dd	  d
t g d 7  < t|dd}|| |j}t|| d
ksXJ d S )Nr   r   rD   rF   r   r   r   r[   (   rE   )rh   r/   rh   r/   rh   r   r0   r   r   r*   r*   r+   test_infer_dim_3  s   "
r   z'X, n_components, n_components_validatedgffffff?rE   rC   r   r   r   c                 C   s<   t |dd}||  |jt|ksJ |j|ksJ d S )Nr   r0   )r	   r4   r.   r_   r   r'   )r=   r.   Zn_components_validatedr>   r*   r*   r+   $test_infer_dim_by_explained_variance  s   	
r   c           	      C   s   d\}}t jd}|||d t g d }td| d}|| ||}dt dt j	 t 
d d	  | }t|| dd
d ||||d t g d }||ks]J tdd| d}|| ||}||kstJ d S )N)r   ry   r   rD   r   rE   r0   g      r/   g|Gz?g?rd   g?T)r.   r}   r-   )r:   rN   r^   r   r   r	   r4   scorelogpiexpr   )	r-   r   r   r   r=   r>   Zll1hZll2r*   r*   r+   test_pca_score  s   

&$

r   c                  C   s   d\} }t jd}|| ||| dt g d  t g d }|| ||| dt g d  t g d }t |}t|D ]}t|dd}|| |	|||< qG|
 dksdJ d S )N)   ry   r   r/   r   )r/   r   r|   r   r0   )r:   rN   r^   r   r   r   r   r	   r4   r   Zargmax)r   r   r   ZXlr   r   r   r>   r*   r*   r+   test_pca_score3  s   44

r   c                 C   sF   t jdd\}}td| dd}|| t|j|j dks!J d S )NTZ
return_X_yr[   r   rM   )r   load_digitsr	   r4   r:   r   r$   r&   )r-   r=   _r>   r*   r*   r+   test_pca_sanity_noise_variance  s   
r   c                 C   s^   t jdd\}}tdddd}td| dd}|| || t||||dd d S )	NTr   r[   r   r   rM   r   rd   )r   r   r	   r4   r   r   )r-   r=   r   r   r   r*   r*   r+   "test_pca_score_consistency_solvers  s   

r   c                 C   s   d\}}t jd}|||d t g d }t|| d}|| |jdks+J || ||j	 |jdks=J ||j	 d S )Nr   r   rD   r   r0   )
r:   rN   r^   r   r   r	   r4   r&   r   T)r-   r   r   r   r=   r>   r*   r*   r+   'test_pca_zero_noise_variance_edge_cases  s   

r   z4n_samples, n_features, n_components, expected_solver))rF   rw   r   r   )r   rw   rw   r   )r     i  r   )r   r   rF   r   )r   r   r   r   c                 C   sf   t jdj| |fd}t|dd}t||dd}|| |j|ks%J || t|j|j d S )Nr   ri   )r.   rL   rM   )	r:   rN   r^   rm   r	   r4   Z_fit_svd_solverr   r#   )r   rr   r.   Zexpected_solverr3   rf   Zpca_testr*   r*   r+   test_pca_svd_solver_auto  s   

r   c                 C   s   t jd}|dd}t d}tdD ]}td| |d}||d ||d d f< qt|t 	|dd d f d
dd d S )Nr   rF   )r   rE   r   rE   rM   )r:   rN   r^   randr   r   r	   r7   r   ZtileZreshape)r-   r   r=   rX   ir>   r*   r*   r+   test_pca_deterministic_output  s   
*r   c                 C   s   t | | t|  d S )N)"check_pca_float_dtype_preservation$check_pca_int_dtype_upcast_to_double)r-   rU   r*   r*   r+   test_pca_dtype_preservation  s   
r   c                 C   s   t j|dd}|jt jdd}|t j}td| |d|}td| |d|}|j	j
t jks5J |j	j
t jks>J ||j
t jksIJ ||j
t jksTJ t|j	|j	ddd d S )	Nr   r   Fr   ry   rM   gMbP?r    )r:   rN   r^   r   r   float64r   r	   r4   r#   r   r5   r   )r-   seedr=   Z	X_float64Z	X_float32pca_64pca_32r*   r*   r+   r   #  s   r   c                 C   s   t jdddd}|jt jdd}|jt jdd}td| dd|}td| dd|}|j	j
t jks8J |j	j
t jksAJ ||j
t jksLJ ||j
t jksWJ t|j	|j	dd	 d S )
Nr   r   )r   r   Fr   ry   rM   g-C6?rd   )r:   rN   r^   randintr   Zint64Zint32r	   r4   r#   r   r   r5   r   )r-   ZX_i64ZX_i32r   r   r*   r*   r+   r   ;  s   r   c                  C   sT   t dd\} }t | |}|j d }t|d| |}|j| jd ks(J d S )NTr   rk   r/   )r   r	   r4   r   Zcumsumr'   r6   )r=   yr(   r.   r)   r*   r*   r+   5test_pca_n_components_mostly_explained_variance_ratioL  s
   r   c               	   C   sZ   t g d} d}dD ]}tjtdd t| || W d    n1 s%w   Y  qd S )Nr/   KH9r   r   rF   )r   r   z"should be in \[1, n_features - 1\]r\   )r:   r   r_   r`   r   r
   )spectrumr   r   r*   r*   r+   test_assess_dimension_bad_rankX  s   r  c                  C   s`   t g d} t| dddt j ksJ dD ]}t| |dt j ks$J qt| ddks.J d S )Nr   r/   rF   r   r   )rE   ry   )r:   r   r
   infr   )r   r   r*   r*   r+   test_small_eigenvalues_mlea  s
   r  c                  C   s<   t jddddddd\} }tdd| }|jdksJ d S )Nr   r/      *   )rr   r   Z
n_repeatedZn_redundantZn_clusters_per_classrL   r   rk   )r   r   r	   r4   r'   r=   r   r>   r*   r*   r+   test_mle_redundant_datan  s   
r  c                  C   s^   t jdddd\} }tddd}tjtdd	 ||  W d    d S 1 s(w   Y  d S )
Nr      r  )r   rr   rL   r   r   r0   z?n_components='mle' is only supported if n_samples >= n_featuresr\   )r   r   r	   r_   r`   r   r4   r  r*   r*   r+   test_fit_mle_too_few_samples}  s   "r
  c                  C   sr   d\} }t jd| |}t j|d d d df dd|d d df< tddd}|| |j|d ks7J d S )	N)r   rF   r   rh   rz   r   r   r   r/   )r:   rN   r^   r   r   r	   r4   r'   )r   Zn_dimr=   Zpca_sklr*   r*   r+   test_mle_simple_case  s   *
r  c                  C   s   d\} }t | |f}t jj|dd\}}}t|dd  t |d dd t t|d| ds2J td|D ]}t||| t j	 ksEJ q7d S )	N)	   r   T)Zfull_matricesr/   r   r1   r  rE   )
r:   r   r   Zsvdr   r   r   r
   r   r  )r   rr   r=   r   sr   r*   r*   r+   test_assess_dimesion_rank_one  s    r  c                  C   s   t jd} d}| d|}tdd|dd|}tddd|}tdd	dd
|}tt |jt |j tt |jt |j dS )zCheck that exposing and setting `n_oversamples` will provide accurate results
    even when `X` as a large number of features.

    Non-regression test for:
    https://github.com/scikit-learn/scikit-learn/issues/20589
    r   rI   r   r/   r   )r.   r-   Zn_oversamplesrL   r   r0   r   rM   N)	r:   rN   r^   r   r	   r4   r   r   r#   )r   rr   r=   Zpca_randomizedr   re   r*   r*   r+   %test_pca_randomized_svd_n_oversamples  s   r  c                  C   s6   t ddtj} |  }tdd tdD | dS )z Check feature names out for PCA.rE   rk   c                 S   s   g | ]}d | qS )r>   r*   )r   r   r*   r*   r+   r     s    z*test_feature_names_out.<locals>.<listcomp>N)r	   r4   r2   r3   Zget_feature_names_outr   r   )r>   namesr*   r*   r+   test_feature_names_out  s   r  c                 C   sV   t jd}|dd}t |}|j|j }t j|ddd	 }t j
|| dS )z9Check the accuracy of PCA's internal variance calculationr   r   r   r/   r   N)r:   rN   r^   r   r	   r4   r$   r   r   r   testingr   )rt   r   r=   r>   Zpca_varZtrue_varr*   r*   r+   test_variance_correctness  s   r  c                 C   s  t ||}tj|}|j||d}|| | }| }	|jdkr&dnd}
t	ddR t
||}| }|jdks@J |j|jksHJ tt||d||
t|d	 | }|jdksaJ |j|jksiJ tt||d|	|
t|d	 W d    d S 1 sw   Y  d S )
Nr   r   g-C6*?gH׊>TZarray_api_dispatch)r   r   xpr    )r   r2   r3   r   asarrayr4   r9   r8   r   r   r   r6   r   r   r   )name	estimatorarray_namespacer   
dtype_namer  Ziris_npiris_xpZprecision_npZcovariance_npr!   Zestimator_xpZprecision_xpZcovariance_xpr*   r*   r+   check_array_api_get_precision  s8   



"r  z#array_namespace, device, dtype_namecheckr  r0   r   rD   ZQR)r.   r-   power_iteration_normalizerrL   c                 C   s   | j j}||| |||d d S )Nr   r  )	__class____name__)r  r  r  r   r  r  r*   r*   r+   test_pca_array_api_compliance  s   r#  r   c                 C   s  | j j}||| |||d t||}tdd\}}|j|dd}t|j}	t| }
|j||d}|j||d}|
	|| |
j
}|
j}t|
}tdd4 |	|| |j
}t|t|ks`J t||d	}|j}t|t|kssJ t||d	}W d    n1 sw   Y  |j|jksJ |jd
 |jd
 ksJ |j|jksJ t|jd |jd }t|d | |d | |	d |jd |jd kr|d }||d  }||d  }tt|| |	k sJ tt|| |	k sJ d S d S )Nr   r  rZ   Fr   r   Tr  r  r/   r   r1   rh   )r!  r"  r   r   r   r   r   r   r  r4   r#   r$   r   array_devicer   r6   r   r   r   r:   r   )r  r  r  r   r  r  r  r=   r   r"   ZestZX_xpZy_xpZcomponents_npZexplained_variance_npZest_xpZcomponents_xpZcomponents_xp_npZexplained_variance_xpZexplained_variance_xp_npZmin_componentsZreference_varianceZextra_variance_npZextra_variance_xp_npr*   r*   r+   !test_pca_mle_array_api_compliance  sN   




r%  ZSCIPY_ARRAY_API1zSCIPY_ARRAY_API not set to 1.)reasonc               	   C   s  t d} | tj}tdddd}td}t jt	|d" t
dd	 || W d    n1 s4w   Y  W d    n1 sCw   Y  |jd
dd td}t jt	|d" t
dd	 || W d    n1 sqw   Y  W d    n1 sw   Y  |jd
dd td}t jt|d+ t
dd	 || W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )NZarray_api_strictrE   r   r   rM   zCPCA with svd_solver='arpack' is not supported for Array API inputs.r\   Tr  r   ZLU)r-   r  z[Array API does not support LU factorization. Set `power_iteration_normalizer='QR'` instead.r   zArray API does not support LU factorization, falling back to QR instead. Set `power_iteration_normalizer='QR'` explicitly to silence this warning.)r_   Zimportorskipr  r2   r3   r	   reescaper`   r   r   r4   Z
set_paramsZwarnsUserWarning)r  r  r>   Zexpected_msgr*   r*   r+   7test_array_api_error_and_warnings_on_unsupported_paramsc  sB   
"r+  )r   r   )posr(  rn   numpyr:   r_   ZscipyrP   Znumpy.testingr   Zsklearnr   r   Zsklearn.baser   Zsklearn.datasetsr   r   r   Zsklearn.decompositionr	   Zsklearn.decomposition._pcar
   r   Zsklearn.utils._array_apir   r   r   r   r   r$  Z-sklearn.utils._test_common.instance_generatorr   Zsklearn.utils._testingr   r   Zsklearn.utils.estimator_checksr   Zsklearn.utils.fixesr   r   r2   ZPCA_SOLVERSrR   rS   r   ZSPARSE_MAX_COMPONENTSr,   markZparametrizer   r3   r6   rA   rW   rY   rb   rg   rs   r   r   listsetr   rN   r^   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r
  r  r  r  r  r  r  r#  r%  Zskipifenvirongetr+  r*   r*   r*   r+   <module>   sr   

8
!
5 	





.












	

"


: