o
    ÖtBh¿4  ã                	   @   s  d dl Z d dlZd dlm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 d dl	mZmZ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ej ddd g¡dd„ ƒZ ej deeeƒg¡ej deeeƒg¡ej dg d¢¡ej dg d¢¡ej dg d¢¡dd„ ƒƒƒƒƒZ!dd„ Z"d d!„ Z#d"d#„ Z$d$d%„ Z%d&d'„ Z&d(d)„ Z'd*d+„ Z(d,d-„ Z)d.d/„ Z*d0d1„ Z+d2d3„ Z,d4d5„ Z-d6d7„ Z.ej d8eeeeg¡d9d:„ ƒZ/d;d<„ Z0dS )=é    N)Ú
csr_matrix)Úassert_array_equal)Úassert_array_almost_equal)Úkernel_metrics)Ú
RBFSampler)ÚAdditiveChi2Sampler)ÚSkewedChi2Sampler)ÚNystroem)ÚPolynomialCountSketch)Úmake_classification)Úpolynomial_kernelÚ
rbf_kernelÚchi2_kernel)é,  é2   ©Úsizeé   ©ÚaxisÚdegreeéÿÿÿÿc                 C   sR   t jtd| › dd t| d}| tt¡ W d   ƒ d S 1 s"w   Y  d S )Nzdegree=z should be >=1.©Úmatch)r   )ÚpytestÚraisesÚ
ValueErrorr
   ÚfitÚXÚY)r   Úps_transform© r!   ú~/var/www/html/riverr-enterprise-integrations-main/venv/lib/python3.10/site-packages/sklearn/tests/test_kernel_approximation.pyÚ<test_polynomial_count_sketch_raises_if_degree_lower_than_one   s   
"þr#   r   r   Úgamma)çš™™™™™¹?r   ç      @©r   é   é   Úcoef0)r   r   r&   c                 C   sœ   t | ||||d}td|||dd}| | ¡}| |¡}t ||j¡}	||	 }
t t |
¡¡dks3J ‚tj|
|
d t 	|
¡dksCJ ‚t |
¡dksLJ ‚d S )N)r$   r   r*   iˆ  é*   )Ún_componentsr$   r*   r   Úrandom_stateçš™™™™™©?©Úoutr%   )
r   r
   Úfit_transformÚ	transformÚnpÚdotÚTÚabsÚmeanÚmax)r   r   r$   r   r*   Úkernelr    ÚX_transÚY_transÚkernel_approxÚerrorr!   r!   r"   Útest_polynomial_count_sketch"   s   

ÿ

r>   c                 C   s   t  | |j¡S )N)r3   r4   r5   )r   r   r!   r!   r"   Ú_linear_kernel=   s   r?   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||jƒ t||	jƒ t ¡ }
d|
d< d}tjt|d	 | |
¡ W d   ƒ n1 sw   Y  td
d}t d¡}tjt|d	 | t ¡ W d   ƒ n1 s¥w   Y  g d¢}|D ]}t|d}|jd u s¾J ‚| t ¡ |jd usÊJ ‚q°d}td
|d}|j|ksÚJ ‚| t ¡ |j|ksæJ ‚d S )Nr(   r   r)   ©Úsample_stepsr   r   ©r   r   z!Negative values in data passed tor   é   zHIf sample_steps is not in [1, 2, 3], you need to provide sample_intervalr'   g333333Ó?)rA   Úsample_interval)r   r3   Únewaxisr   Úsumr   r1   r2   r4   r5   r   r   r   ÚAÚcopyr   r   r   ÚreÚescaper   rD   Úsample_interval_)ÚX_ÚY_Úlarge_kernelr9   r2   r:   r;   r<   Ú
X_sp_transÚ
Y_sp_transÚY_negÚmsgÚsample_steps_availablerA   rD   r!   r!   r"   Útest_additive_chi2_samplerA   sJ   


ÿ
ÿÿ


rT   c                  C   sP  d} |  d t d< t|  d d …tjd d …f }t |  tjd d …d d …f }t |¡d t |¡d  t d¡ t || ¡ }t |jdd¡}t| ddd}| t¡}| 	t ¡}t 
||j¡}t||d	ƒ t |¡ ¡ sqJ d
ƒ‚t |¡ ¡ s|J dƒ‚t  ¡ }	|  d |	d< d}
tjt|
d | 	|	¡ W d   ƒ d S 1 s¡w   Y  d S )Ng¸…ëQ¸ž?g       @rB   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 -skewednessr   )r   r   r3   rE   ÚlogÚexprF   r   r1   r2   r4   r5   r   ÚisfiniteÚallrH   r   r   r   )ÚcÚX_cÚY_cÚ
log_kernelr9   r2   r:   r;   r<   rQ   rR   r!   r!   r"   Útest_skewed_chi2_sampler€   s(   2ÿ

"ÿr_   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 messager   rB   zX in AdditiveChi2Sampler.fitr   Nz"X in AdditiveChi2Sampler.transform)r   r   rH   r   r   r   r   r2   )ÚtransformerÚX_negr!   r!   r"   Ú%test_additive_chi2_sampler_exceptions¨   s   ÿ
"þrb   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$   rU   r+   )r$   r,   r-   g{®Gáz„?r/   r%   r.   )r   r   r   r   r1   r2   r3   r4   r5   r6   r7   r8   )r$   r9   Úrbf_transformr:   r;   r<   r=   r!   r!   r"   Útest_rbf_sampler´   s   

re   c                  C   sj   ddgddgddgg} t ƒ  | ¡ | ¡ tƒ  | ¡ | ¡ tƒ  | ¡ | ¡ t| ƒ} tƒ  | ¡ | ¡ d S )Nr   r(   r)   rC   é   é   )r   r   r2   r   r   r   )r   r!   r!   r"   Útest_input_validationÇ   s   rh   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   ©é
   rC   r   ©r,   r(   ©r,   r-   )r,   r9   r-   )r3   ÚrandomÚRandomStateÚuniformr	   Úshaper1   r   r   r4   r5   r   r2   r?   r   )Úrndr   ÚX_transformedÚKÚtransÚkernels_availableÚkernr!   r!   r"   Útest_nystroem_approximationÓ   s"   ýrw   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+   ri   r   rj   rk   rc   Úchi2©r9   r,   r   )r3   rm   rn   ro   r	   r1   r   r4   r5   r   r   )rq   r   Únystroemrr   rs   ÚK2r!   r!   r"   Ú test_nystroem_default_parametersî   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   rj   é   r(   éd   )r$   r,   rc   )r3   rm   rn   ÚrandÚvstackr	   rp   r   r2   r   r   r4   r5   rZ   rY   r   )Úrngr   r$   ÚNrr   rs   r!   r!   r"   Útest_nystroem_singular_kernel  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é%   ri   r   gÍÌÌÌÌÌ@r%   ©r   r*   Ú
polynomialr   )r9   r,   r   r*   )r3   rm   rn   ro   r   r	   rp   r1   r   r4   r5   )rq   r   rs   rz   rr   r!   r!   r"   Ú test_nystroem_poly_kernel_params  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+   rj   rC   r   c                 S   s   |  d¡ t | |¡ ¡ S )z&Histogram kernel that writes to a log.r   )Úappendr3   ÚminimumrF   )ÚxÚyrW   r!   r!   r"   Úlogging_histogram_kernel%  s   
z8test_nystroem_callable.<locals>.logging_histogram_kernelr   rW   )r9   r,   Úkernel_paramsr(   ú-Don't pass gamma, coef0 or degree to Nystroemr$   r*   r   ry   r   r!   )r3   rm   rn   ro   Úlistr	   r   Úlenr?   r   r   r   )	rq   Ú	n_samplesr   rŒ   Ú
kernel_logrR   ÚparamsÚparamÚnyr!   r!   r"   Ú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é   ri   r   r(   r%   r…   Úprecomputedr   ry   rŽ   r$   r   r*   r   r   r!   )r3   rm   rn   ro   r   r	   rp   r1   r   r4   r5   r   r   r   r   )	rq   r   rs   rz   rr   rR   r“   r”   r•   r!   r!   r"   Ú 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 )	zÓCheck 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_featuresrj   r   rl   )rj   N)r   r	   r   Úcomponent_indices_rp   )r   Ú_Úfeature_map_nystroemr!   r!   r"   Útest_nystroem_component_indicesP  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 r!   r!   )Ú.0Úi©Ú
class_namer!   r"   Ú
<listcomp>i  s    z.test_get_feature_names_out.<locals>.<listcomp>r   N)	r   r   r2   Úget_feature_names_outÚ__name__ÚlowerÚrangerp   r   )rŸ   Úestr:   Ú	names_outÚexpected_namesr!   r¢   r"   Ú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)   r@   )Ú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_r!   )r    Úsuffixr!   r!   r"   r¤   ‡  s    zBtest_additivechi2sampler_get_feature_names_out.<locals>.<listcomp>N)r3   rm   rn   Úrandom_sampler   r   r¥   r   )r   r   Úchi2_samplerÚinput_namesÚsuffixesrª   r«   r!   r!   r"   Ú.test_additivechi2sampler_get_feature_names_outm  s   rÆ   )1rI   Únumpyr3   Úscipy.sparser   r   Úsklearn.utils._testingr   r   Úsklearn.metrics.pairwiser   Úsklearn.kernel_approximationr   r   r   r	   r
   Úsklearn.datasetsr   r   r   r   rm   rn   r   rÂ   r   r   rF   rE   ÚmarkÚparametrizer#   r>   r?   rT   r_   rb   re   rh   rw   r|   rƒ   r‡   r–   r™   rž   r¬   rÆ   r!   r!   r!   r"   Ú<module>   sZ    
?(ÿ
