
    -i@                        S SK r S SKrS SK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  S SKJr  \R.                  R1                  S 5      r\R5                  SS9r\R5                  SS9r\\R;                  S	S
9SS2\R<                  4   -  r\\R;                  S	S
9SS2\R<                  4   -  rS\R>                  l         S\R>                  l         \RB                  RE                  S/ SQ5      \RB                  RE                  S/ SQ5      \RB                  RE                  SS S/5      S 5       5       5       r#\RB                  RE                  S\5      \RB                  RE                  SSS/5      \RB                  RE                  S/ SQ5      \RB                  RE                  SS S/5      S 5       5       5       5       r$S r%\RB                  RE                  S\5      S 5       r&\RB                  RE                  S/ SQ5      \RB                  RE                  S\'" S	S5      5      S 5       5       r(\RB                  RE                  S/ SQ5      S  5       r)S! r*S" r+S# r,S$ r-S% r.S& r/S' r0S( r1\RB                  RE                  S\5      S) 5       r2S* r3S+ r4S, r5S- r6S. r7S/ r8S0 r9\RB                  RE                  S1\	\
\\/5      S2 5       r:S3 r;g)4    N)make_classification)AdditiveChi2SamplerNystroemPolynomialCountSketch
RBFSamplerSkewedChi2Sampler)chi2_kernelkernel_metricspolynomial_kernel
rbf_kernel)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
             Z/var/www/html/venv/lib/python3.13/site-packages/sklearn/tests/test_kernel_approximation.pytest_polynomial_count_sketchr8   (   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   r)   r'   r*   r(   r   )
r   r    r   r:   ps_denseXt_denseYt_dense	ps_sparse	Xt_sparse	Yt_sparses
             r7   )test_polynomial_count_sketch_dense_sparserC   E   s     %EPRH %%a(H!!!$H%EPRI ''a(89I##M!$45IH(H(r9   c                 B    [         R                  " XR                  5      $ )N)r+   r,   r-   )r'   r(   s     r7   _linear_kernelrE   ]   s    66!SS>r9   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'   r+   newaxiscopyr(   sumr   r)   r*   r,   r-   r   r   toarraypytestraises
ValueErrorfit)r:   X_Y_large_kernelr1   r*   r3   r4   r5   
X_sp_trans
Y_sp_transY_negmsgs                r7   test_additive_chi2_samplerr\   a   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)rT   r)   r*   rH      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.
rG   g      ?)rH   sample_intervalN)r   getattrr'   r`   )r]   rH   transformerr`   s       r7   'test_additive_chi2_sampler_sample_stepsrc      sS     &<@KK #O%!'K K #&&/999r9   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_stepsr^   rG   zHIf sample_steps is not in [1, 2, 3], you need to provide sample_intervalrK   N)r   reescaperQ   rR   rS   ra   r'   )r]   rb   r[   s      r7   -test_additive_chi2_sampler_wrong_sample_stepsrg      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       @rJ   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 -skewednessrK   )r(   rN   r'   r+   rM   logexprO   r   r)   r*   r,   r-   r   isfiniteallrQ   rR   rS   )crV   X_cY_c
log_kernelr1   r*   r3   r4   r5   rZ   r[   s               r7   test_skewed_chi2_samplerrs      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 messagerI   rJ   zX in AdditiveChi2SamplerrK   N)r   r'   rN   rQ   rR   rS   rT   r*   )rb   X_negs     r7   %test_additive_chi2_sampler_exceptionsrv      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   ri   r!   )r   r"   r#   g{Gz?r%   r   r$   )r   r'   r(   r   r)   r*   r+   r,   r-   r.   r/   r0   )r   r1   rbf_transformr3   r4   r5   r6   s          r7   test_rbf_samplerrz      s     E1E*F UBOM))!,G%%a(GFF7II.M"E66"''%.!T)))FF566%=C775>T!!!r9   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   r^         dtypeN)r   r+   arrayrT   random_offset_r   random_weights_)global_dtyperbfr'   s      r7   (test_rbf_sampler_fitted_attributes_dtyper      sm     ,C
1a&1a&1a&)>AGGAJ##|333$$444r9   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   r^   r}   r~   r   N)	r   r+   r   float32rT   float64r   r   r   )rbf32X32rbf64X64s       r7   "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+@+@Ar9   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        r;   r   r   scalerx   r^   N)r   rT   _gammarQ   approx)r'   yr   s      r7   test_rbf_sampler_gamma_scaler     sE    EC5>Aq6q
7
#CGGAM::q))))r9   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   r+   r   rT   r   r   r   )r   skewed_chi2_samplerr'   s      r7   0test_skewed_chi2_sampler_fitted_attributes_dtyper     sr     ,-
1a&1a&1a&)>AA--33|CCC..44DDDr9   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   r+   r   r   rT   r   r   r   r   )skewed_chi2_sampler_32X_32skewed_chi2_sampler_64X_64s       r7   *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r9   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   r^   r}   r~   )r   rT   r*   r   r   )r:   r'   s     r7   test_input_validationr   -  s     Q!Q!Q Aa **1-A((+LQ!!!$aALQ!!!$r9   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   
   r^   r   r"   r   r"   r#   )r"   r1   r#   )r+   randomRandomStateuniformr   shaper)   r   r   r,   r-   rT   r*   rE   r
   )rndr'   X_transformedKtranskernels_availablekerns          r7   test_nystroem_approximationr   :  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 "r9   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   rx   chi2r1   r"   r   )r+   r   r   r   r   r)   r   r,   r-   r   r	   )r   r'   nystroemr   r   K2s         r7    test_nystroem_default_parametersr   U  s    
))


#C!A R(H**1-M1D!A		/Ba$ vB7H**1-MAQA		/Ba$r9   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   d   )r   r"   rx   )r+   r   r   randvstackr   r   rT   r*   r   r   r,   r-   rn   rm   r(   )rngr'   r   Nr   r   s         r7   test_nystroem_singular_kernelr   i  s    
))


"CRA
		1#'AEu771:6::1=AKKNM1"Aa!GH66"++a.!!!!r9   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   )r1   r"   r    r   )r+   r   r   r   r   r   r   r)   r   r,   r-   )r   r'   r   r   r   s        r7    test_nystroem_poly_kernel_paramsr   y  sx    
))


#C!A!Cs3A!''!*SH **1-Mbff]OODaHr9   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   r^   r   c                 l    UR                  S5        [        R                  " X5      R                  5       $ )z&Histogram kernel that writes to a log.r   )appendr+   minimumrO   )xr   rk   s      r7   logging_histogram_kernel8test_nystroem_callable.<locals>.logging_histogram_kernel  s%    

1zz!##%%r9   r   rk   )r1   r"   kernel_paramsr   -Don't pass gamma, coef0 or degree to Nystroemr   r   r    r   rK    )r+   r   r   r   listr   rT   lenrE   rQ   rR   rS   )	r   	n_samplesr'   r   
kernel_logr[   paramsparamnys	            r7   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   precomputedr   r   r   r   r   r   r    rK   r   )r+   r   r   r   r   r   r   r)   r   r,   r-   rQ   rR   rS   rT   )	r   r'   r   r   r   r[   r   r   r   s	            r7    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   
n_featuresr   r   r   )r   N)r   r   rT   component_indices_r   )r'   _feature_map_nystroems      r7   test_nystroem_component_indicesr     sM     <DA# Q2288EAAAr9   	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)	rT   r'   r*   get_feature_names_out__name__lowerranger   r   )r   estr3   	names_out
class_nameiexpected_namess          r7   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   rG   )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)r+   r   r   random_sampler   rT   r   r   )r   r'   chi2_samplerinput_namessuffixesr   suffixr   s           r7   .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?)<re   numpyr+   rQ   sklearn.datasetsr   sklearn.kernel_approximationr   r   r   r   r   sklearn.metrics.pairwiser	   r
   r   r   sklearn.utils._testingr   r   r   sklearn.utils.fixesr   r   r   r   r  r'   r(   rO   rM   flags	writeablemarkparametrizer8   rC   rE   r\   r   rc   rg   rs   rv   rz   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r9   r7   <module>r     s   	   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%(" 
I:(B '5FQ222r9   