o
    `^h@                     @   s  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jddZejddZeejd	d
ddejf  Zeejd	d
ddejf  Zdej_ dej_ ej!"dg dej!"dg dej!"dd dgdd Z#ej!"deej!"dddgej!"dg dej!"dd dgdd Z$dd Z%ej!"dedd Z&ej!"dg d ej!"d!e'd	d"d#d$ Z(ej!"dg d d%d& Z)d'd( Z*d)d* Z+d+d, Z,d-d. Z-d/d0 Z.d1d2 Z/d3d4 Z0d5d6 Z1ej!"ded7d8 Z2d9d: Z3d;d< Z4d=d> Z5d?d@ Z6dAdB Z7dCdD Z8dEdF Z9ej!"dGe	e
eegdHdI Z:dJdK Z;dS )L    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           
      C   s   t tt| ||d}t|| ||dd}|t}|t}t||j}|| }	t	t
|	dks3J tj	|	|	d t|	dksCJ t
|	dksLJ 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error r5   e/home/air/shanriGPT/back/venv/lib/python3.10/site-packages/sklearn/tests/test_kernel_approximation.pytest_polynomial_count_sketch(   s    

r7   csr_containerr         ?r   )r   r   r   c           
      C   sl   t d| ||dd}|t}|t}t d| ||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   r8   ps_denseXt_denseYt_dense	ps_sparse	Xt_sparse	Yt_sparser5   r5   r6   )test_polynomial_count_sketch_dense_sparseE   s   




r@   c                 C   s   t | |jS )N)r)   r*   r+   )r%   r&   r5   r5   r6   _linear_kernel]   s   rA   c                 C   s  t d d tjd d f  }ttjd d d d f  }d| | ||  }|jdd}tdd}|t }|t}t	||j
}t||d || t }	|| t}
t||	  t||
  t }d|d< d}tjt|d	 || W d    d S 1 sw   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)r8   X_Y_large_kernelr/   r(   r1   r2   r3   
X_sp_trans
Y_sp_transY_negmsgr5   r5   r6   test_additive_chi2_samplera   s&   


"rW   method)rO   r'   r(   rC      c                 C   sH   t |d}t|| t d}t ||d}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.
    rB   g      ?)rC   sample_intervalN)r   getattrr%   rZ   )rX   rC   transformerrZ   r5   r5   r6   'test_additive_chi2_sampler_sample_steps   s   
r]   c                 C   sV   t dd}td}tjt|d t|| t W d   dS 1 s$w   Y  dS )z8Check that we raise a ValueError on invalid sample_stepsrY   rB   zHIf sample_steps is not in [1, 2, 3], you need to provide sample_intervalrF   N)r   reescaperL   rM   rN   r[   r%   )rX   r\   rV   r5   r5   r6   -test_additive_chi2_sampler_wrong_sample_steps   s   
"r`   c                  C   sX  d} t  }|  d |d< t|  d d tjd d f }||  tjd d d d f }t|d t|d  td t||  }t|jdd}t| ddd}|	t}|
|}t||j}	t||	d	 t| suJ d
t|	 sJ d| }
|  d |
d< d}tjt|d |
|
 W d    d S 1 sw   Y  d S )NgQ?g       @rE   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 -skewednessrF   )r&   rI   r%   r)   rH   logexprJ   r   r'   r(   r*   r+   r   isfiniteallrL   rM   rN   )crQ   X_cY_c
log_kernelr/   r(   r1   r2   r3   rU   rV   r5   r5   r6   test_skewed_chi2_sampler   s*   2

"rk   c                  C   s   t  } t }d|d< tjtdd | | W d   n1 s"w   Y  tjtdd | t | | W d   dS 1 sDw   Y  dS )zEnsures correct error messagerD   rE   zX in AdditiveChi2SamplerrF   N)r   r%   rI   rL   rM   rN   rO   r(   )r\   X_negr5   r5   r6   %test_additive_chi2_sampler_exceptions   s   
"rm   c                  C   s   d} t tt| d}t| ddd}|t}|t}t||j}|| }t	t
|dks1J tj	||d t|dksAJ t
|d	ksJJ d S )
Ng      $@r   ra   r   )r   r    r!   g{Gz?r#   r   r"   )r   r%   r&   r   r'   r(   r)   r*   r+   r,   r-   r.   )r   r/   rbf_transformr1   r2   r3   r4   r5   r5   r6   test_rbf_sampler   s   

rp   c                 C   T   t  }tjddgddgddgg| d}|| |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   rY         dtypeN)r   r)   arrayrO   random_offset_rv   random_weights_)global_dtyperbfr%   r5   r5   r6   (test_rbf_sampler_fitted_attributes_dtype   
    
r|   c                  C      t dd} tjddgddgddggtjd	}| | t dd}tjddgddgddggtjd	}|| 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   rY   rs   rt   ru   N)	r   r)   rw   float32rO   float64r   rx   ry   )rbf32X32rbf64X64r5   r5   r6   "test_rbf_sampler_dtype_equivalence   s   
"

"
r   c                  C   sD   dgdggddg} }t dd}|| | |jtdks J dS )	z4Check the inner value computed when `gamma='scale'`.g        r9   r   r   scalern   rY   N)r   rO   _gammarL   approx)r%   yr{   r5   r5   r6   test_rbf_sampler_gamma_scale  s   
r   c                 C   rq   rr   )r   r)   rw   rO   rx   rv   ry   )rz   skewed_chi2_samplerr%   r5   r5   r6   0test_skewed_chi2_sampler_fitted_attributes_dtype  r}   r   c                  C   r~   r   )	r   r)   rw   r   rO   r   r   rx   ry   )skewed_chi2_sampler_32X_32skewed_chi2_sampler_64X_64r5   r5   r6   *test_skewed_chi2_sampler_dtype_equivalence  s   
"

"
r   c                 C   sj   ddgddgddgg}t  || t || t || | |}t || d S )Nr   r   r   rY   rs   rt   )r   rO   r(   r   r   )r8   r%   r5   r5   r6   test_input_validation-  s   r   c                  C   s   t jd} | jdd}t|jd d|}t|}tt 	||j
| td| d}|||}|j|jd dfks?J tdt| d}|||}|j|jd dfksZJ t }|D ]}td|| d}|||}|j|jd dfks|J q_d S )Nr   
   rY   r   r    r   r    r!   )r    r/   r!   )r)   randomRandomStateuniformr   shaper'   r   r   r*   r+   rO   r(   rA   r	   )rndr%   X_transformedKtranskernels_availablekernr5   r5   r6   test_nystroem_approximation:  s"   r   c                  C   s   t jd} | jdd}tdd}||}t|d d}t ||j}t	|| tddd}||}t
|d	d}t ||j}t	|| d S )
Nr   r   r   r   r   rn   chi2r/   r    r   )r)   r   r   r   r   r'   r   r*   r+   r   r   )r   r%   nystroemr   r   K2r5   r5   r6    test_nystroem_default_parametersU  s   



r   c                  C   s   t jd} | dd}t |gd }d}t||jd d|}||}t	||d}t
|t ||j t t tsAJ d S )Nr   r      r   d   )r   r    rn   )r)   r   r   randvstackr   r   rO   r(   r   r   r*   r+   rf   re   r&   )rngr%   r   Nr   r   r5   r5   r6   test_nystroem_singular_kerneli  s   
r   c                  C   s^   t jd} | jdd}t|ddd}td|jd ddd	}||}tt 	||j
| d S )
N%   r   r   g@r   r   r   
polynomialr   )r/   r    r   r   )r)   r   r   r   r
   r   r   r'   r   r*   r+   )r   r%   r   r   r   r5   r5   r6    test_nystroem_poly_kernel_paramsy  s   
r   c            	   	   C   s   t jd} d}| j|dfd}dd }g }t|}t||d d|id	| t|||d  d
 ks6J d}ddiddidd
if}|D ]*}tdt|d d|}t	j
t|d || W d    n1 sjw   Y  qEd S )Nr   r   rY   r   c                 S   s   | d t| | S )z&Histogram kernel that writes to a log.r   )appendr)   minimumrJ   )xr   rc   r5   r5   r6   logging_histogram_kernel  s   
z8test_nystroem_callable.<locals>.logging_histogram_kernelr   rc   )r/   r    kernel_paramsr   -Don't pass gamma, coef0 or degree to Nystroemr   r   r   r   rF   r5   )r)   r   r   r   listr   rO   lenrA   rL   rM   rN   )	r   	n_samplesr%   r   
kernel_logrV   paramsparamnyr5   r5   r6   test_nystroem_callable  s,   r   c            	   	   C   s   t jd} | jdd}t|ddd}td|jd d	}||}tt 	||j
| d
}ddiddiddif}|D ]+}tdd|jd d	|}tjt|d || W d    n1 s`w   Y  q:d S )N   r   r   r   r   r   precomputedr   r   r   r   r   r   r   rF   r5   )r)   r   r   r   r
   r   r   r'   r   r*   r+   rL   rM   rN   rO   )	r   r%   r   r   r   rV   r   r   r   r5   r5   r6    test_nystroem_precomputed_kernel  s   
r   c                  C   s:   t ddd\} }td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   rO   component_indices_r   )r%   _feature_map_nystroemr5   r5   r6   test_nystroem_component_indices  s   
r   	Estimatorc                    sR   |   t}|t}| }| j   fddt|jd D }t|| dS )zCheck get_feature_names_outc                    s   g | ]}  | qS r5   r5   ).0i
class_namer5   r6   
<listcomp>  s    z.test_get_feature_names_out.<locals>.<listcomp>r   N)	rO   r%   r(   get_feature_names_out__name__lowerranger   r   )r   estr1   	names_outexpected_namesr5   r   r6   test_get_feature_names_out  s   

r   c                  C   s`   t jd} | jdd}tdd|}g d}g d}|j|d}d	d
 |D }t|| dS )z4Check get_feature_names_out for AdditiveChi2Sampler.r   )r   r   r   r   rB   )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                 S   s   g | ]}d | qS )additivechi2sampler_r5   )r   suffixr5   r5   r6   r     s    zBtest_additivechi2sampler_get_feature_names_out.<locals>.<listcomp>N)r)   r   r   random_sampler   rO   r   r   )r   r%   chi2_samplerinput_namessuffixesr   r   r5   r5   r6   .test_additivechi2sampler_get_feature_names_out  s   r   )<r^   numpyr)   rL   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&   rJ   rH   flags	writeablemarkparametrizer7   r@   rA   rW   r   r]   r`   rk   rm   rp   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r5   r5   r5   r6   <module>   sl    
$

)

