
    0Ph@                         d dl Z d dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
mZ d dlmZmZmZmZ d dlmZmZmZ d dlmZ ej                            d           Ze                    d          Ze                    d          Zee                    d	
          ddej        f         z  Zee                    d	
          ddej        f         z  Zdej        _         dej        _         ej!        "                    dg d          ej!        "                    dg d          ej!        "                    dd dg          d                                     Z#ej!        "                    de          ej!        "                    dddg          ej!        "                    dg d          ej!        "                    dd dg          d                                                 Z$d Z%ej!        "                    de          d             Z&ej!        "                    dg d          ej!        "                    d e'd	d                    d                         Z(ej!        "                    dg d          d              Z)d! Z*d" Z+d# Z,d$ Z-d% Z.d& Z/d' Z0d( Z1ej!        "                    de          d)             Z2d* Z3d+ Z4d, Z5d- Z6d. Z7d/ Z8d0 Z9ej!        "                    d1e	e
eeg          d2             Z:d3 Z;dS )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                    t          t          t          | ||          }t          || ||d          }|                    t                    }|                    t                    }t          j        ||j                  }||z
  }	t          j	        t          j
        |	                    dk    sJ t          j	        |	|	           t          j        |	          dk    sJ t          j
        |	          dk    sJ d S )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
             g/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sklearn/tests/test_kernel_approximation.pytest_polynomial_count_sketchr8   (   s     q!5uMMMF )!  L ((++G$$Q''GF7GI..M]"E6"'%..!!T))))F5e6%==C75>>T!!!!!!    csr_containerr         ?r    )r   r   r   c                    t          d| ||d          }|                    t                    }|                    t                    }t          d| ||d          }|                     |t                              }|                     |t                              }	t          ||           t          ||	           dS )zZCheck 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     %fEPR  H %%a((H!!!$$H%fEPR  I ''a(8(899I##MM!$4$455IHi(((Hi(((((r9   c                 6    t          j        | |j                  S )N)r+   r,   r-   )r'   r(   s     r7   _linear_kernelrE   ]   s    6!QS>>r9   c                    t           d d t          j        d d f                                         }t          t          j        d d d d f                                         }d|z  |z  ||z   z  }|                    d          }t          d          }|                    t                     }|                    t                    }t          j	        ||j
                  }t          ||d           |                     | t                               }	|                     | t                              }
t          ||	                                           t          ||
                                           t                                          }d|d<   d}t          j        t           |	          5  |                    |           d d d            d S # 1 swxY w Y   d S )
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    
111bj!!!		!	!	#	#B	
2:qqq!!!		!	!	#	#Br6B;"r'*L 1%%F $333I%%a((G!!!$$GF7GI..MfmQ777((q)9)9::J$$]]1%5%566Jw
 2 2 4 4555w
 2 2 4 4555 FFHHEE$K
-C	z	-	-	-  e                 s   9GG #G method)rT   r)   r*   rH      c                     t          |          } t          ||           t                     d}t          ||          } t          ||           t                     |j        |k    sJ dS )zsCheck 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      s     &<@@@K GK  ###O%!'  K !GK  ###&/999999r9   c                     t          d          }t          j        d          }t          j        t
          |          5   t          ||           t                     ddd           dS # 1 swxY w Y   dS )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      s     &1555K
)R C 
z	-	-	- ( ($V$$Q'''( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (s    A,,A03A0c                  8   d} t                                           }|  dz  |d<   t          | z   d d t          j        d d f         }|| z   t          j        d d d d f         }t          j        |          dz  t          j        |          dz  z   t          j        d          z   t          j        ||z             z
  }t          j        |                    d                    }t          | dd          }|	                    t                    }|
                    |          }t          j        ||j                  }	t          ||	d	           t          j        |                                          s
J d
            t          j        |	                                          s
J d            |                                }
|  dz  |
d<   d}t!          j        t$          |          5  |
                    |
           d d d            d S # 1 swxY w Y   d S )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      s7    	A 
BrCxBtH q5!!!RZ"
#C62:qqq!!!#
$C
 
s	rvc{{S01BF3KK?"&sBSBSS  VJNNN**++F "QTPRSSSI%%a((G!!"%%GF7GI..MfmQ777;v""$$EE&EEEE;}%%))++XX-XXXX GGIIE"s(E$K
>C	z	-	-	- # #E"""# # # # # # # # # # # # # # # # # #s   ,HHHc                     t                      } t                                          }d|d<   t          j        t
          d          5  |                     |           ddd           n# 1 swxY w Y   t          j        t
          d          5  |                     t                     |                     |           ddd           dS # 1 swxY w Y   dS )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FFHHEE$K	z)C	D	D	D                	z)C	D	D	D % %e$$$% % % % % % % % % % % % % % % % % %s$   A**A.1A.0CCCc                     d} t          t          t          |           }t          | dd          }|                    t                    }|                    t                    }t          j        ||j                  }||z
  }t          j	        t          j
        |                    dk    sJ t          j	        ||           t          j        |          dk    sJ t          j
        |          d	k    sJ d S )
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OOOM))!,,G%%a((GF7GI..M]"E6"'%..!!T))))F5e6%==C75>>T!!!!!!r9   c                     t                      }t          j        ddgddgddgg|           }|                    |           |j        j        | k    sJ |j        j        | k    sJ dS 	zRCheck 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      sw     ,,C
1a&1a&1a&)>>>AGGAJJJ#|3333$444444r9   c                     t          d          } t          j        ddgddgddggt          j        	          }|                     |           t          d          }t          j        ddgddgddggt          j        	          }|                    |           t          | j        |j                   t          | j        |j                   d
S 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	IIcNNNB'''E
(QFQFQF+2:
>
>
>C	IIcNNNE(%*>???E)5+@AAAAAr9   c                      dgdggddg}} t          d          }|                    | |           |j        t          j        d          k    sJ dS )	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     s[    EC5>Aq6qA
7
#
#
#CGGAqMMM:q))))))))r9   c                     t                      }t          j        ddgddgddgg|           }|                    |           |j        j        | k    sJ |j        j        | k    sJ dS r|   )r   r+   r   rT   r   r   r   )r   skewed_chi2_samplerr'   s      r7   0test_skewed_chi2_sampler_fitted_attributes_dtyper     s     ,--
1a&1a&1a&)>>>AA-3|CCCC.4DDDDDDr9   c                     t          d          } t          j        ddgddgddggt          j        	          }|                     |           t          d          }t          j        ddgddgddggt          j        	          }|                    |           t          | j        |j                   t          | j        |j                   d
S 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???8aVaVaV,BJ???Dt$$$.B???8aVaVaV,BJ???Dt$$$-/E/T   .0F0V    r9   c                    ddgddgddgg}t                                          |                              |           t                                          |                              |           t	                                          |                              |            | |          }t	                                          |                              |           d S )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((+++LLQ!!!$$$aALLQ!!!$$$$$r9   c                  `   t           j                            d          } |                     d          }t	          |j        d                                       |          }t          |          }t          t          j	        ||j
                  |           t	          d|           }|                    |                              |          }|j        |j        d         dfk    sJ t	          dt          |           }|                    |                              |          }|j        |j        d         dfk    sJ t                      }|D ]V}t	          d||           }|                    |                              |          }|j        |j        d         dfk    sJ Wd S )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   :  s   
)


"
"C!!A !'!*555CCAFFM1Abf]MODDaHHH!#666EIIaLL**1--M171:q/1111 !NMMMEIIaLL**1--M171:q/1111 '((! 6 6a3GGG		!..q11"qwqz1o555556 6r9   c                     t           j                            d          } |                     d          }t	          d          }|                    |          }t          |d           }t          j        ||j                  }t          ||           t	          dd          }|                    |          }t          |d	          }t          j        ||j                  }t          ||           d S )
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777H**1--MAQA	}	/	/Ba$$$$$r9   c                     t           j                            d          } |                     dd          }t          j        |gdz            }d}t          ||j        d                                       |          }|                    |          }t          ||          }t          |t          j        ||j                             t          j        t          j        t                              sJ d S )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u171:666::1==AKKNNM1E"""Aa}!G!GHHH6"+a..!!!!!!!r9   c                  J   t           j                            d          } |                     d          }t	          |dd          }t          d|j        d         dd	          }|                    |          }t          t          j	        ||j
                  |           d S )
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  s    
)


#
#C!!A!Cs333A!'!*S  H **1--Mbf]MODDaHHHHHr9   c                     t           j                            d          } d}|                     |df          }d }g }t	          |          }t          ||dz
  d|i                              |           t          |          ||dz
  z  d	z  k    sJ d
}ddiddidd	if}|D ]a}t          dt          |dz
  d|}t          j
        t          |          5  |                    |           d d d            n# 1 swxY w Y   bd S )Nr!   r   r^   r   c                 z    |                     d           t          j        | |                                          S )z&Histogram kernel that writes to a log.r   )appendr+   minimumrO   )xr   rk   s      r7   logging_histogram_kernelz8test_nystroem_callable.<locals>.logging_histogram_kernel  s/    

1z!Q##%%%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!fffz??i9q=9A===== :ClWaL8Q-8F  S^9q=SSUSS]:S111 	 	FF1III	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 s   C;;C?	C?	c                  .   t           j                            d          } |                     d          }t	          |dd          }t          d|j        d         	          }|                    |          }t          t          j	        ||j
                  |           d
}ddiddiddif}|D ]d}t          dd|j        d         d	|}t          j        t          |          5  |                    |           d d d            n# 1 swxY w Y   ed S )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111A}171:FFFH**1--Mbf]MODDaHHH :ClWaL8Q-8F  M]MMuMM]:S111 	 	FF1III	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 s   'D		D	D	c                      t          dd          \  } }t          dd          }|                    |            |j        j        dk    sJ dS )	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     sh     <<<DAq#   Q28EAAAAAAr9   	Estimatorc                 F    |                                  t                    }|                    t                    }|                                }| j                                        fdt          |j        d                   D             }t          ||           dS )zCheck get_feature_names_outc                     g | ]} | 	S r   r   ).0i
class_names     r7   
<listcomp>z.test_get_feature_names_out.<locals>.<listcomp>  s$    JJJQ(Q((JJJr9   r   N)	rT   r'   r*   get_feature_names_out__name__lowerranger   r   )r   estr3   	names_outexpected_namesr   s        @r7   test_get_feature_names_outr     s    
 )++//!

CmmAG))++I#))++JJJJJ%a8H2I2IJJJNy.11111r9   c                  *   t           j                            d          } |                     d          }t	          d                              |          }g d}g d}|                    |          }d	 |D             }t          ||           d
S )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_featuresc                     g | ]}d | S )additivechi2sampler_r   )r   suffixs     r7   r   zBtest_additivechi2sampler_get_feature_names_out.<locals>.<listcomp>  s!    MMM&5V55MMMr9   N)r+   r   r   random_sampler   rT   r   r   )r   r'   chi2_samplerinput_namessuffixesr   r   s          r7   .test_additivechi2sampler_get_feature_names_outr	    s    
)


"
"Cx((A&A666::1==L$$$K  H$ 22+2NNIMMHMMMNy.11111r9   )<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 0 0 0 0 0                                 
 / . . . . . 	iA9%%9%% QUUU]]111bj=! ! QUUU]]111bj=! !    ---00/1P1P1PQQ1c(++" " ,+ RQ 10"4 .993*--999--1c(++) ) ,+ .- .- :9)(   .99! ! :9!H #H#H#HIIq!55: : 65 JI:  #H#H#HII( ( JI(&# &# &#R	% 	% 	%" " "&
5 
5 
5B B B* * *
E 
E 
E  $ .99	% 	% :9	%6 6 66% % %(" " " 
I 
I 
I  :  (B B B '5FQ 2 2 22 2 2 2 2r9   