
    =y!d;6                        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 d dlmZ d d	lmZ d d
lmZ d dlmZ  e
d          r e
d          sd dlmZ  e
d          rd dlmZ nd dlmZ d dlmZ d dlmZ  G d de          ZdS )    N)sqrt)issparse   )dispatch)sklearn_check_version)stable_cumsum)_check_array)check_array)BaseEstimator)check_is_fitted1.11.2)check_scalar0.23)_infer_dimension)_infer_dimension_)PCAc            
           e Zd ZU  ed          ri ej        Zeed<   	 dddddddddd	d
Zd Z	ddZ
d Zd Zd ZddZddZd Zd ZddZd ZdS )r   r   _parameter_constraintsNTFauto        
   )copywhiten
svd_solvertoliterated_powern_oversamplespower_iteration_normalizerrandom_statec                    || _         || _        || _        || _        || _        || _        || _        || _        |	| _        d S N)	n_componentsr   r   r   r   r   r   r   r    )
selfr#   r   r   r   r   r   r   r   r    s
             Clib/python3.11/site-packages/sklearnex/preview/decomposition/pca.py__init__zPCA.__init__.   sN     )	$,**D'(    c           	      .   |dk    r||k     rt          d          d S d|cxk    r|k    s&n t          d|dt          ||          d          |dk    r<t          |t          j                  s$t          d|dt          |                    d S d S )	Nmlez?n_components='mle' is only supported if n_samples >= n_featuresr   zn_components=z2 must be between 0 and min(n_samples, n_features)=z with svd_solver='full'   zB must be of type int when greater than or equal to 1, was of type=)
ValueErrormin
isinstancenumbersIntegraltype)r$   r#   	n_samples
n_featuresn_sf_mins        r%   _validate_n_componentszPCA._validate_n_componentsE   s    5  :%% /   &%
 l....h....* (4||SJ5O5O5O5OQ  
 QlG,<== G j %1LL$|2D2D2D"F G G G G Gr'   c                     t          d          r|                                  n1t          d          r"t          | j        ddt          j                   |                     |           | S )Nr   r   r   r*   )min_valtarget_type)r   _validate_paramsr   r   r.   r/   _fit)r$   Xys      r%   fitzPCA.fitZ   sv     '' 	!!####"5)) 	"#,	    			!r'   c                    t          |          rt          d          t          d          r0|                     |t          j        t          j        gdd          }n)t          |t          j        t          j        gdd          }|j        \  }}t          ||          }| j
        | j        dk    r|dz
  }n
|}n| j
        }|                     ||||           | j        | _        |j        d         |j        d         z  d	k     }| j        d
k    rt          d          rIt          |j                  dk    s|dk    rd| _        nd|cxk    r	d|z  k     rn nd| _        nd| _        n|dk    rd| _        n|j        d         |j        d         |}	}}t	          j        d||z  |	z  gd||z  |z  gd|d	z  gg          }
|dk    r5t	          j        |
d d df         |
d d df                   dk    rd| _        nd| _        |r| j        dk    rBt          d          r|                     || j                  }nt%          || j                  }|r4| j        dk    r)t'          | d| j        j        t,          j        d|          S |s!| j        dk    rt-          j        | ||          S | j        dv rt-          j        | ||| j                  S t3          d                    | j                            )NzOPCA does not support sparse input. See TruncatedSVD for a possible alternative.r   TFdtype	ensure_2dr   arpackr*   r      r   r   i  r)   fullg?
randomizedgK=g¥gYi"`>)r   decomposition.PCA.fitonedalsklearn)rA   rD   zUnrecognized svd_solver='{0}')r   	TypeErrorr   _validate_datanpfloat64float32r	   shaper,   r#   r   r4   _fit_svd_solvermaxarraydotr   r
   r   	__class___onedal_fitsklearn_PCA	_fit_full_fit_truncatedr+   format)r$   r:   r1   r2   r3   r#   shape_good_for_daalnpkregression_coefss              r%   r9   zPCA._fitg   s   A;; 	;  
 !(( 	9##Abj"*-E.2 $ @ @AA Qrz2:&>'+%9 9 9A !"	:y*--$(**'!|',L##L)Z$,	. 	. 	.  $gaj171:596))$U++ 6qw<<3&&,%*?*?+1D((,7777x77777+7D((+1D((5((+1D((gaj!'!*l!qA (*x%q1uqy1&A	2%qAv.1 ( ($ $q((RV,QQQT2,QQQT2.4 .478.9 .9 0<,,/5," 	3d&:f&D&D$V,, 3''	'::	222  	4#76#A#AD"9.4&0< <    % 		)=)G)G(q,???!%===-at';   /66t7KLL  r'   c                     |dk    r| j         dk    S |dk    rt          | d          S t          d| d| j        j                   NrE   rC   decomposition.PCA.transform_onedal_estimatorzUnknown method z in rO   hasattrRuntimeErrorrS   __name__r$   method_namedatas      r%   _onedal_gpu_supportedzPCA._onedal_gpu_supported   c    111'6119994!4555HkHHt~/FHH
 
 	
r'   c                     |dk    r| j         dk    S |dk    rt          | d          S t          d| d| j        j                   r_   rb   rf   s      r%   _onedal_cpu_supportedzPCA._onedal_cpu_supported   rj   r'   c                 j   | j         dk    s| j         t          |j                  }n1d| j         cxk     rdk     rn nt          |j                  }n| j         }|ddd}t          di || _        | j                            ||           |                                  d }| j        }| j        }|||fS )	Nr)   r   r*   Tprecomputed)r#   is_deterministicmethod)queue )	r#   r,   rN   
onedal_PCAra   r<   _save_attributessingular_values_components_)	r$   r:   r;   rq   onedal_n_componentsonedal_paramsUSVs	            r%   rT   zPCA._onedal_fit   s    %%):)B"%ag,,"&&&&Q&&&&&"%ag,,"&"3 0 $#
 

 ",!<!<m!<!<""1E"222!!Qwr'   c                 8    | j                             ||          S r"   )ra   predict)r$   r:   rq   s      r%   _onedal_predictzPCA._onedal_predict   s    %--a777r'   c           	          t          |t          j        t          j        gdd          }t	          | d          rJ| j        |j        d         k    r3t          d|j        d          d| j        j	         d| j         d	          nYt	          | d
          rI| j
        |j        d         k    r3t          d|j        d          d| j        j	         d| j
         d	          || j        z
  }t          | d| j        j        t          j        d|          S )NTFr>   n_features_in_r*   zX has z features, but z is expecting z features as inputn_features_r`   rF   )r	   rK   rL   rM   rc   r   rN   r+   rS   re   r   mean_r   r~   rU   	transform)r$   r:   
X_centereds      r%   _onedal_transformzPCA._onedal_transform   sb   :rz*	
 
 
 4)** 	"agaj00 ?QWQZ ? ?>2? ?*? ? ?   1 T=)) 	171:-- <QWQZ < <>2< <'< < <   ^
;n4",>
 >
   	r'   c                    t          |            t          | d          rJ|                     |          d d d | j        f         }| j        r|t          j        | j                  z  }nt          j	        | |          S |S )Nra   )
r   rc   r   n_components_r   rK   r   explained_variance_rU   r   )r$   r:   X_news      r%   r   zPCA.transform  s    4,-- 	2**1--aaa1E43E1E.EFE{ ;!9:::(q111r'   c                 H   | j         dv rt          j        | |          S |                     |           t	          | d          rK|                     |          ddd| j        f         }| j        r|t          j	        | j
                  z  }|S t          j        | |          S )a  Fit the model with X and apply the dimensionality reduction on X.
        Parameters
        ----------
        X : array-like of shape (n_samples, n_features)
            Training data, where `n_samples` is the number of samples
            and `n_features` is the number of features.
        y : Ignored.

        Returns
        -------
        X_new : ndarray of shape (n_samples, n_components)
            Transformed values of X.
        )rD   rA   ra   N)r   rU   fit_transformr<   rc   r   r   r   rK   r   r   r   )r$   r:   r;   r   s       r%   r   zPCA.fit_transform  s     ?666,T1555HHQKKKt011 6..q11!!!5It7I5I2IJ; ?RWT%=>>>E",T1555r'   c                    | j         j        | _        t          d          r| j         j        | _        | j        }nQt          d          r*| j         j        | _        | j         j        | _        | j        }n| j         j        | _        | j        }t          | j        |          }| j         j        | _        | j         j        | _        | j         j        | _        | j         j	        | _	        | j
        | j         j        | _        n| j
        dk    rPt          d          r t          | j        | j                  | _        nt          | j        | j        |          | _        n_d| j
        cxk     rdk     r<n n9t          | j	                  }t          j        || j
        d          d	z   | _        n| j         j        | _        | j        |k     rT| j        j        d         |k    r,| j        | j        d                                          | _        n| j         j        | _        nd
| _        | j        d | j                 | _        | j	        d | j                 | _	        | j         j        d | j                 | _        | j        d | j                 | _        d S )Nr   z0.24r)   r   r   g      ?right)sider*   r   )ra   
n_samples_r   r   r   r,   r   ru   r   explained_variance_ratio_r#   r   r   r   r   rK   searchsortedrN   meannoise_variance_rv   )r$   r2   r3   ratio_cumsums       r%   rt   zPCA._save_attributes'  s   0; '' 		*"&"8"GD,JJ"6** 	*#5AD"&"8"GD,JJ#5AD)Jt
33+1
 $ 6 G#'#9#M "< 	& $!%!7!ED%''$V,, %5,do& &"" &7,doz& &"" "((((S(((((()GHHL!#d/g"? "? "?AB"CD "&!7!ED(('-a0H<<,T-?-@-@AFFHH $$ (,'='M$$#%D #'#;<OT=O<O#P *+>D,>+>? 	& "./B0B/BC 	 $ 56It7I6I Jr'   r"   )NN)re   
__module____qualname__r   rU   r   dict__annotations__r&   r4   r<   r9   ri   rl   rT   r~   r   r   r   rt   rr   r'   r%   r   r   *   sE        U## N'M+*L'MMMM ) #)) ) ) ) ).G G G*   O O Ob
 
 

 
 
   08 8 8 8  <  6 6 6 645K 5K 5K 5K 5Kr'   r   )numpyrK   r.   mathr   scipy.sparser   _device_offloadr   daal4py.sklearn._utilsr   sklearn.utils.extmathr   onedal.datatypesr	   sklearn.utils.validationr
   sklearn.baser   r   sklearn.utilsr   sklearn.decomposition._pcar   r   onedal.decompositionr   rs   sklearn.decompositionrU   rr   r'   r%   <module>r      s  $            ! ! ! ! ! ! ' ' ' ' ' ' 8 8 8 8 8 8 / / / / / / ) ) ) ) ) ) 0 0 0 0 0 0 & & & & & & 4 4 4 4 4 4 +(=(=e(D(D +******   =;;;;;;;<<<<<< 2 2 2 2 2 2 4 4 4 4 4 4rK rK rK rK rK+ rK rK rK rK rKr'   