
    MpjG                        S SK r S SKrS SKrS SKJr  S SKJr  S SKJ	r	J
r
JrJrJr  S SKJrJrJrJr  S SKJrJrJrJr  S SKJr  S SKJrJrJrJr  S S	KJ r   \RB                  RE                  S 5      r#\#RI                  S
S9r%\#RI                  S
S9r&\%\%RO                  SS9SS2\RP                  4   -  r%\&\&RO                  SS9SS2\RP                  4   -  r&S\%RR                  l*        S\&RR                  l*        \RV                  RY                  S/ SQ5      \RV                  RY                  S/ SQ5      \RV                  RY                  SS S/5      S 5       5       5       r-\RV                  RY                  S\ 5      \RV                  RY                  SSS/5      \RV                  RY                  S/ SQ5      \RV                  RY                  SS S/5      S 5       5       5       5       r.S r/\RV                  RY                  S\ 5      S 5       r0\RV                  RY                  S/ SQ5      \RV                  RY                  S \1" SS!5      5      S" 5       5       r2\RV                  RY                  S/ SQ5      S# 5       r3S$ r4S% r5S& r6S' r7S( r8S) r9S* r:S+ r;\RV                  RY                  S\ 5      S, 5       r<S- r=\RV                  RY                  S.\" 5       5      \RV                  RY                  S/\>" \" 5       5      \/S0/-   5      \RV                  RY                  S1S2S3/5      S4 5       5       5       r?S5 r@S6 rAS7 rBS8 rCS9 rDS: rE\RV                  RY                  S;\\\\
/5      S< 5       rFS= rGg)>    N)config_context)make_classification)AdditiveChi2SamplerNystroemPolynomialCountSketch
RBFSamplerSkewedChi2Sampler)chi2_kernelkernel_metricspolynomial_kernel
rbf_kernel)_atol_for_typeget_namespace_and_devicemove_to)yield_namespace_device_dtype_combinationsdevice)_array_api_for_testsassert_allcloseassert_array_almost_equalassert_array_equal)CSR_CONTAINERS),  2   size   axisFgamma)皙?r         @zdegree, n_components))r     )   r#   )   i  coef0r"   c                    [        [        [        XUS9n[        UU UUSS9nUR	                  [        5      nUR                  [        5      n[        R                  " XgR                  5      nXH-
  n	[        R                  " [        R                  " U	5      5      S::  d   e[        R                  " XS9  [        R                  " U	5      S::  d   e[        R                  " U	5      S::  d   eg )N)r    degreer&   *   )n_componentsr    r&   r(   random_state皙?outr!   )r   XYr   fit_transform	transformnpdotTabsmeanmax)
r    r(   r&   r*   kernelps_transformX_transY_transkernel_approxerrors
             c/var/www/html/pdf-tiff/venv/lib/python3.13/site-packages/sklearn/tests/test_kernel_approximation.pytest_polynomial_count_sketchr@   3   s     q!5uMF )!L ((+G$$Q'GFF7II.M"E66"''%.!T)))FF566%=C775>T!!!    csr_containerr!         ?r(   )r   r$   r%   c                     [        SXUSS9nUR                  [        5      nUR                  [        5      n[        SXUSS9nUR                  U" [        5      5      nUR                  U" [        5      5      n	[        XX5        [        Xi5        g)zRCheck that PolynomialCountSketch results are the same for dense and sparse
input.
r#   r)   )r*   r    r(   r&   r+   N)r   r1   r/   r2   r0   r   )
r    r(   r&   rB   ps_denseXt_denseYt_dense	ps_sparse	Xt_sparse	Yt_sparses
             r?   )test_polynomial_count_sketch_dense_sparserK   P   s     %EPRH %%a(H!!!$H%EPRI ''a(89I##M!$45IH(H(rA   c                 
    X-  $ )N )xys     r?   _linear_kernelrP   h   s	    5LrA   c                 8   [         S S 2[        R                  S S 24   R                  5       n[        [        R                  S S 2S S 24   R                  5       nSU-  U-  X-   -  nUR                  SS9n[        SS9nUR                  [         5      nUR                  [        5      n[        R                  " XgR                  5      n[        XHS5        UR                  U " [         5      5      n	UR                  U " [        5      5      n
[        XiR                  5       5        [        XzR                  5       5        [        R                  5       nSUS'   Sn[        R                  " [         US	9   UR#                  U5        S S S 5        g ! , (       d  f       g = f)
Nr$   r   r%   sample_stepsr   r   r   z!Negative values in data passed tomatch)r/   r3   newaxiscopyr0   sumr   r1   r2   r4   r5   r   r   toarraypytestraises
ValueErrorfit)rB   X_Y_large_kernelr9   r2   r;   r<   r=   
X_sp_trans
Y_sp_transY_negmsgs                r?   test_additive_chi2_samplerrg   l   s>    
1bjj!		!	!	#B	
2::q!		!	!	#Br6B;"'*L 1%F $3I%%a(G!!!$GFF7II.MfQ7((q)9:J$$]1%56Jw 2 2 45w 2 2 45 FFHEE$K
-C	z	-e 
.	-	-s   0F
Fmethod)r_   r1   r2   rS      c                     [        US9n[        X 5      " [        5        Sn[        UUS9n[        X 5      " [        5        UR                  U:X  d   eg)zkCheck that the input sample step doesn't raise an error
and that sample interval doesn't change after fit.
rR   g      ?)rS   sample_intervalN)r   getattrr/   rk   )rh   rS   transformerrk   s       r?   'test_additive_chi2_sampler_sample_stepsrn      sS     &<@KK #O%!'K K #&&/999rA   c                     [        SS9n[        R                  " S5      n[        R                  " [
        US9   [        X5      " [        5        SSS5        g! , (       d  f       g= f)z8Check that we raise a ValueError on invalid sample_stepsri   rR   zHIf sample_steps is not in [1, 2, 3], you need to provide sample_intervalrV   N)r   reescaper\   r]   r^   rl   r/   )rh   rm   rf   s      r?   -test_additive_chi2_sampler_wrong_sample_stepsrr      sH     &15K
))RC 
z	-$Q' 
.	-	-s   A
A&c                      Sn [         R                  5       nU * S-  US'   [        U -   S S 2[        R                  S S 24   nX-   [        R                  S S 2S S 24   n[        R
                  " U5      S-  [        R
                  " U5      S-  -   [        R
                  " S5      -   [        R
                  " X#-   5      -
  n[        R                  " UR                  SS95      n[        U SSS9nUR                  [        5      nUR                  U5      n[        R                  " XxR                  5      n	[        XYS	5        [        R                  " U5      R                  5       (       d   S
5       e[        R                  " U	5      R                  5       (       d   S5       eUR                  5       n
U * S-  U
S'   Sn[         R"                  " [$        US9   UR                  U
5        S S S 5        g ! , (       d  f       g = f)NgQ?g       @rU   r$   r     r)   )
skewednessr*   r+   r   zNaNs found in the Gram matrixz)NaNs found in the approximate Gram matrixz2X may not contain entries smaller than -skewednessrV   )r0   rY   r/   r3   rX   logexprZ   r	   r1   r2   r4   r5   r   isfiniteallr\   r]   r^   )cra   X_cY_c
log_kernelr9   r2   r;   r<   r=   re   rf   s               r?   test_skewed_chi2_samplerr~      s    	A 
BrCxBtH q5!RZZ"
#C62::q!#
$C
 
s	rvvc{S01BFF3K?"&&BSS  VVJNNN*+F "QTPRSI%%a(G!!"%GFF7II.MfQ7;;v""$$E&EE$;;}%))++X-XX+ GGIE"s(E$K
>C	z	-E" 
.	-	-s   G//
G=c                     [        5       n [        R                  5       nSUS'   [        R                  " [
        SS9   U R                  U5        SSS5        [        R                  " [
        SS9   U R                  [        5        U R                  U5        SSS5        g! , (       d  f       NW= f! , (       d  f       g= f)zEnsures correct error messagerT   rU   zX in AdditiveChi2SamplerrV   N)r   r/   rY   r\   r]   r^   r_   r2   )rm   X_negs     r?   %test_additive_chi2_sampler_exceptionsr      s    %'KFFHEE$K	z)C	D 
E	z)C	De$ 
E	D 
E	D	D	Ds   B 0'B1 
B.1
B?c                     Sn [        [        [        U S9n[        U SSS9nUR	                  [        5      nUR                  [        5      n[        R                  " X4R                  5      nX-
  n[        R                  " [        R                  " U5      5      S::  d   e[        R                  " XfS9  [        R                  " U5      S::  d   e[        R                  " U5      S	::  d   eg )
Ng      $@r    rt   r)   )r    r*   r+   g{Gz?r-   r!   r,   )r   r/   r0   r   r1   r2   r3   r4   r5   r6   r7   r8   )r    r9   rbf_transformr;   r<   r=   r>   s          r?   test_rbf_samplerr      s     E1E*F UBOM))!,G%%a(GFF7II.M"E66"''%.!T)))FF566%=C775>T!!!rA   c                     [        5       n[        R                  " SS/SS/SS//U S9nUR                  U5        UR                  R
                  U :X  d   eUR                  R
                  U :X  d   eg	zNCheck that the fitted attributes are stored accordingly to the
data type of X.r   r$   r%   ri         dtypeN)r   r3   arrayr_   random_offset_r   random_weights_)global_dtyperbfr/   s      r?   (test_rbf_sampler_fitted_attributes_dtyper      sm     ,C
1a&1a&1a&)>AGGAJ##|333$$444rA   c                     [        SS9n [        R                  " SS/SS/SS//[        R                  S	9nU R	                  U5        [        SS9n[        R                  " SS/SS/SS//[        R
                  S	9nUR	                  U5        [        U R                  UR                  5        [        U R                  UR                  5        g
z?Check the equivalence of the results with 32 and 64 bits input.r)   )r+   r   r$   r%   ri   r   r   r   N)	r   r3   r   float32r_   float64r   r   r   )rbf32X32rbf64X64s       r?   "test_rbf_sampler_dtype_equivalencer     s    B'E
((QFQFQF+2::
>C	IIcNB'E
((QFQFQF+2::
>C	IIcNE((%*>*>?E))5+@+@ArA   c                      S/S//SS/p[        SS9nUR                  X5        UR                  [        R                  " S5      :X  d   eg)	z4Check the inner value computed when `gamma='scale'`.g        rC   r   r   scaler   ri   N)r   r_   _gammar\   approx)r/   rO   r   s      r?   test_rbf_sampler_gamma_scaler     sE    EC5>Aq6q
7
#CGGAM::q))))rA   c                     [        5       n[        R                  " SS/SS/SS//U S9nUR                  U5        UR                  R
                  U :X  d   eUR                  R
                  U :X  d   egr   )r	   r3   r   r_   r   r   r   )r   skewed_chi2_samplerr/   s      r?   0test_skewed_chi2_sampler_fitted_attributes_dtyper     sr     ,-
1a&1a&1a&)>AA--33|CCC..44DDDrA   c                     [        SS9n [        R                  " SS/SS/SS//[        R                  S	9nU R	                  U5        [        SS9n[        R                  " SS/SS/SS//[        R
                  S	9nUR	                  U5        [        U R                  UR                  5        [        U R                  UR                  5        g
r   )	r	   r3   r   r   r_   r   r   r   r   )skewed_chi2_sampler_32X_32skewed_chi2_sampler_64X_64s       r?   *test_skewed_chi2_sampler_dtype_equivalencer   &  s    .B?88aVaVaV,BJJ?Dt$.B?88aVaVaV,BJJ?Dt$--/E/T/T ..0F0V0VrA   c                 j   SS/SS/SS//n[        5       R                  U5      R                  U5        [        5       R                  U5      R                  U5        [	        5       R                  U5      R                  U5        U " U5      n[	        5       R                  U5      R                  U5        g )Nr   r$   r%   ri   r   r   )r   r_   r2   r	   r   )rB   r/   s     r?   test_input_validationr   8  s     Q!Q!Q Aa **1-A((+LQ!!!$aALQ!!!$rA   c                     [         R                  R                  S5      n U R                  SS9n[	        UR
                  S   S9R                  U5      n[        U5      n[        [         R                  " X"R                  5      U5        [	        SU S9nUR                  U5      R                  U5      nUR
                  UR
                  S   S4:X  d   e[	        S[        U S9nUR                  U5      R                  U5      nUR
                  UR
                  S   S4:X  d   e[        5       nU HN  n[	        SX`S9nUR                  U5      R                  U5      nUR
                  UR
                  S   S4:X  a  MN   e   g )Nr   
   ri   r   r*   r$   r*   r+   r*   r9   r+   )r3   randomRandomStateuniformr   shaper1   r   r   r4   r5   r_   r2   rP   r   )rndr/   X_transformedKtranskernels_availablekerns          r?   test_nystroem_approximationr   E  sJ   
))


"C!A !''!*5CCAFM1Abff]OODaH!#6EIIaL**1-M1771:q/111 !NMEIIaL**1-M1771:q/111 '(!aG		!..q1""qwwqz1o555 "rA   z(array_namespace, device_name, dtype_namer9   precomputedr*   r$   d   c                 L   [        XU5      u  pV[        R                  R                  S5      nSnSU-  n	UR	                  X4S9R                  U5      n
US:X  a  [        U
S U 5      n
UR                  XS9n[        XCSS9nUR                  U
5      n[        SS	9   UR                  U5      n[        U[        S
S9nS H4  n[        [        UU5      5      u  nnnUUL d   eU[        U5      :X  a  M4   e   S S S 5        [        U5      n[!        UWUS9  g ! , (       d  f       N%= f)Nr   r   r$   r   r   r   r   T)array_api_dispatchcpu)xpr   )components_normalization_)atol)r   r3   r   r   r   astyper   asarrayr   r1   r   r   r   rl   array_devicer   r   )array_namespacedevice_name
dtype_namer9   r*   r   r   r   	n_samples
n_featuresX_npX_xpnystroemX_np_transformedX_xp_transformedX_xp_transformed_npattribute_namexp_attr_device_attrr   s                        r?   %test_nystroem_approximation_array_apir   `  s2    &oJOJB
))


"CI YJ;;Y3;4;;JGD$}-.::d:*D\qQH--d3	4	0#11$7%&62eL?N&>.1'#GQ b= =,t"4444 @	 
1 *%D$&9E 
1	0s   AD2D
D#c                     [         R                  R                  S5      n U R                  SS9n[	        SS9nUR                  U5      n[        US S9n[         R                  " X3R                  5      n[        XE5        [	        SSS9nUR                  U5      n[        US	S9n[         R                  " X3R                  5      n[        XE5        g )
Nr)   r   r   r   r   r   chi2r9   r*   r   )r3   r   r   r   r   r1   r   r4   r5   r   r
   )r   r/   r   r   r   K2s         r?    test_nystroem_default_parametersr     s    
))


#C!A R(H**1-M1D!A		/Ba$ vB7H**1-MAQA		/Ba$rA   c                     [         R                  R                  S5      n U R                  SS5      n[         R                  " U/S-  5      nSn[        X!R                  S   S9R                  U5      nUR                  U5      n[        XS9n[        U[         R                  " XDR                  5      5        [         R                  " [         R                  " [        5      5      (       d   eg )Nr   r      r$   r   )r    r*   r   )r3   r   r   randvstackr   r   r_   r2   r   r   r4   r5   ry   rx   r0   )rngr/   r    Nr   r   s         r?   test_nystroem_singular_kernelr     s    
))


"CRA
		1#'AEu771:6::1=AKKNM1"Aa!GH66"++a.!!!!rA   c                     [         R                  R                  S5      n U R                  SS9n[	        USSS9n[        SUR                  S   SSS	9nUR                  U5      n[        [         R                  " XDR                  5      U5        g )
N%   r   r   g@r!   r(   r&   
polynomialr   )r9   r*   r(   r&   )r3   r   r   r   r   r   r   r1   r   r4   r5   )r   r/   r   r   r   s        r?    test_nystroem_poly_kernel_paramsr     sx    
))


#C!A!Cs3A!''!*SH **1-Mbff]OODaHrA   c                     [         R                  R                  S5      n SnU R                  US4S9nS n/ n[	        U5      n[        UUS-
  SU0S9R                  U5        [        U5      XS-
  -  S	-  :X  d   eS
nSS0SS0SS	04nU HK  n[        S[        US-
  S.UD6n[        R                  " [        US9   UR                  U5        S S S 5        MM     g ! , (       d  f       M_  = f)Nr)   r   ri   r   c                 l    UR                  S5        [        R                  " X5      R                  5       $ )z&Histogram kernel that writes to a log.r   )appendr3   minimumrZ   )rN   rO   rv   s      r?   logging_histogram_kernel8test_nystroem_callable.<locals>.logging_histogram_kernel  s%    

1zz!##%%rA   r   rv   )r9   r*   kernel_paramsr$   -Don't pass gamma, coef0 or degree to Nystroemr    r&   r(   r   rV   rM   )r3   r   r   r   listr   r_   lenrP   r\   r]   r^   )	r   r   r/   r   
kernel_logrf   paramsparamnys	            r?   test_nystroem_callabler     s    
))


#CI)Q(A&
 JQA'!mj) 
c!fz?iq=9A==== :ClWaL8Q-8FS^9q=SUS]]:S1FF1I 21 11s   ;C
C)	c                     [         R                  R                  S5      n U R                  SS9n[	        USSS9n[        SUR                  S   S	9nUR                  U5      n[        [         R                  " XDR                  5      U5        S
nSS0SS0SS04nU HQ  n[        SSUR                  S   S	.UD6n[        R                  " [        US9   UR                  U5        S S S 5        MS     g ! , (       d  f       Me  = f)N   r   r   r$   r!   r   r   r   r   r   r    r   r&   r(   rV   rM   )r3   r   r   r   r   r   r   r1   r   r4   r5   r\   r]   r^   r_   )	r   r/   r   r   r   rf   r   r   r   s	            r?    test_nystroem_precomputed_kernelr     s     ))


#C!A!AS1A}1771:FH**1-Mbff]OODaH :ClWaL8Q-8FM]MuM]]:S1FF1I 21 11s   C11
D 	c                      [        SSS9u  p[        SSS9nUR                  U 5        UR                  R                  S:X  d   eg)	zCheck that `component_indices_` corresponds to the subset of
training points used to construct the feature map.
Non-regression test for:
https://github.com/scikit-learn/scikit-learn/issues/20474
r   r   )r   r   r   r   r   )r   N)r   r   r_   component_indices_r   )r/   r   feature_map_nystroems      r?   test_nystroem_component_indicesr     sM     <DA# Q2288EAAArA   	Estimatorc                 ,   U " 5       R                  [        5      nUR                  [        5      nUR                  5       nU R                  R                  5       n[        UR                  S   5       Vs/ s H  oT U 3PM
     nn[        X65        gs  snf )zCheck get_feature_names_outr   N)	r_   r/   r2   get_feature_names_out__name__lowerranger   r   )r   estr;   	names_out
class_nameiexpected_namess          r?   test_get_feature_names_outr
    s}    
 +//!
CmmAG))+I##))+J27a8H2IJ2IQQC(2INJy1 Ks   4Bc                     [         R                  R                  S5      n U R                  SS9n[	        SS9R                  U5      n/ SQn/ SQnUR                  US9nU Vs/ s H  nS	U 3PM
     nn[        XW5        g
s  snf )z4Check get_feature_names_out for AdditiveChi2Sampler.r   )r   r%   r   r%   rR   )f0f1f2)f0_sqrtf1_sqrtf2_sqrtf0_cos1f1_cos1f2_cos1f0_sin1f1_sin1f2_sin1f0_cos2f1_cos2f2_cos2f0_sin2f1_sin2f2_sin2)input_featuresadditivechi2sampler_N)r3   r   r   random_sampler   r_   r  r   )r   r/   chi2_samplerinput_namessuffixesr  suffixr	  s           r?   .test_additivechi2sampler_get_feature_names_outr%    s    
))


"Cx(A&A6::1=L$KH$ 22+2NIDLMH&,VH5HNMy1 Ns   "A?)Hrp   numpyr3   r\   sklearn._configr   sklearn.datasetsr   sklearn.kernel_approximationr   r   r   r   r	   sklearn.metrics.pairwiser
   r   r   r   sklearn.utils._array_apir   r   r   r   r   r   sklearn.utils._testingr   r   r   r   sklearn.utils.fixesr   r   r   r   r   r/   r0   rZ   rX   flags	writeablemarkparametrizer@   rK   rP   rg   r  rn   rr   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
  r%  rM   rA   r?   <module>r2     sw   	   * 0     / 	iiA9%9% QUUU]1bjj=! ! QUUU]1bjj=! !    -0/1PQ1c(+" , R 1"4 .93*-9-1c(+) , . . :)( .9! :!H #HIq!5: 6 J:  #HI( J(&#R	%"&
5B*
E$ .9	% :	%66 .-/ d>#$'FF !S2F 3	FB%(" 
I:(B '5FQ222rA   