a
    ¶À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é   ©Z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sfJ ‚tj	|	|	d t |	¡dks†J ‚t 
|	¡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   ÚkernelZps_transformÚX_transÚY_transÚkernel_approxÚerror© r3   úc/var/www/html/assistant/venv/lib/python3.9/site-packages/sklearn/tests/test_kernel_approximation.pyÚtest_polynomial_count_sketch(   s     û

r5   Ú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   r6   Zps_denseZXt_denseZYt_denseZ	ps_sparseZ	Xt_sparseZ	Yt_sparser3   r3   r4   Ú)test_polynomial_count_sketch_dense_sparseE   s    
ÿ


ÿ
r8   c                 C   s   t  | |j¡S )N)r(   r)   r*   )r$   r%   r3   r3   r4   Ú_linear_kernel]   s    r9   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   ƒ n1 s0    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   ZtoarrayÚpytestÚraisesÚ
ValueErrorÚfit)r6   ZX_ÚY_Zlarge_kernelr.   r'   r/   r0   r1   Z
X_sp_transZ
Y_sp_transÚY_negÚmsgr3   r3   r4   Útest_additive_chi2_samplera   s$    


rJ   Úmethod)rF   r&   r'   r;   é   c                 C   sH   t |d}t|| ƒtƒ d}t ||d}t|| ƒtƒ |j|ksDJ ‚dS )zsCheck that the input sample step doesn't raise an error
    and that sample interval doesn't change after fit.
    r:   g      à?)r;   Úsample_intervalN)r   Úgetattrr$   rM   )rK   r;   ÚtransformerrM   r3   r3   r4   Ú'test_additive_chi2_sampler_sample_steps†   s    
þrP   c                 C   sT   t dd}t d¡}tjt|d t|| ƒtƒ W d  ƒ n1 sF0    Y  dS )z8Check that we raise a ValueError on invalid sample_stepsrL   r:   zHIf sample_steps is not in [1, 2, 3], you need to provide sample_intervalr>   N)r   ÚreÚescaperC   rD   rE   rN   r$   )rK   rO   rI   r3   r3   r4   Ú-test_additive_chi2_sampler_wrong_sample_steps˜   s    
ÿrS   c                  C   sZ  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 |¡ ¡ sêJ d
ƒ‚t |	¡ ¡ sJ dƒ‚| ¡ }
|  d |
d< d}tjt|d | 
|
¡ W d   ƒ n1 sL0    Y  d S )Ng¸…ëQ¸ž?g       @r=   r   r   éè  r   )Z
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%   rA   r$   r(   r@   ÚlogÚexprB   r   r&   r'   r)   r*   r   ÚisfiniteÚallrC   rD   rE   )ÚcrG   ZX_cZY_cZ
log_kernelr.   r'   r/   r0   r1   rH   rI   r3   r3   r4   Útest_skewed_chi2_sampler£   s(    2ÿ

rZ   c                  C   s”   t ƒ } t ¡ }d|d< tjtdd |  |¡ W d  ƒ n1 sD0    Y  tjtdd$ |  t¡ |  |¡ W d  ƒ n1 s†0    Y  dS )zEnsures correct error messager<   r=   zX in AdditiveChi2Samplerr>   N)r   r$   rA   rC   rD   rE   rF   r'   )rO   ZX_negr3   r3   r4   Ú%test_additive_chi2_sampler_exceptionsÌ   s    (
r[   c                  C   s˜   d} t tt| d}t| ddd}| t¡}| t¡}t ||j¡}|| }t 	t 
|¡¡dksbJ ‚tj	||d t |¡dks‚J ‚t 
|¡d	ks”J ‚d S )
Ng      $@©r   rT   r   )r   r   r    g{®Gáz„?r"   r   r!   )r   r$   r%   r   r&   r'   r(   r)   r*   r+   r,   r-   )r   r.   Zrbf_transformr/   r0   r1   r2   r3   r3   r4   Útest_rbf_samplerØ   s    

r]   c                 C   sT   t ƒ }tjddgddgddgg| d}| |¡ |jj| ks@J ‚|jj| ksPJ ‚dS ©	zRCheck that the fitted attributes are stored accordingly to the
    data type of X.r   r   r   rL   é   é   ©ÚdtypeN)r   r(   ÚarrayrF   Úrandom_offset_rb   Úrandom_weights_)Úglobal_dtypeÚrbfr$   r3   r3   r4   Ú(test_rbf_sampler_fitted_attributes_dtypeë   s
     
rh   c                  C   sŒ   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   rL   r_   r`   ra   N)	r   r(   rc   Úfloat32rF   Úfloat64r   rd   re   )Zrbf32ZX32Zrbf64ZX64r3   r3   r4   Ú"test_rbf_sampler_dtype_equivalenceø   s    
"

"
rl   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        r7   r   r   Úscaler\   rL   N)r   rF   Z_gammarC   Zapprox)r$   Úyrg   r3   r3   r4   Útest_rbf_sampler_gamma_scale  s    
ro   c                 C   sT   t ƒ }tjddgddgddgg| d}| |¡ |jj| ks@J ‚|jj| ksPJ ‚dS r^   )r   r(   rc   rF   rd   rb   re   )rf   Zskewed_chi2_samplerr$   r3   r3   r4   Ú0test_skewed_chi2_sampler_fitted_attributes_dtype  s
     
rp   c                  C   sŒ   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 ri   )	r   r(   rc   rj   rF   rk   r   rd   re   )Zskewed_chi2_sampler_32ZX_32Zskewed_chi2_sampler_64ZX_64r3   r3   r4   Ú*test_skewed_chi2_sampler_dtype_equivalence  s    
"

"
ÿÿrq   c                 C   sj   ddgddgddgg}t ƒ  |¡ |¡ tƒ  |¡ |¡ tƒ  |¡ |¡ | |ƒ}tƒ  |¡ |¡ d S )Nr   r   r   rL   r_   r`   )r   rF   r'   r   r   )r6   r$   r3   r3   r4   Útest_input_validation-  s    rr   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s´J ‚tƒ }|D ]:}td|| d}| |¡ |¡}|j|jd dfks¾J ‚q¾d S )Nr   ©é
   rL   r   ©r   r   ©r   r    )r   r.   r    )r(   ÚrandomÚRandomStateÚuniformr   Úshaper&   r   r   r)   r*   rF   r'   r9   r	   )Úrndr$   ÚX_transformedÚKZtransZkernels_availableÚkernr3   r3   r4   Ú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   rs   r   rt   ru   r\   Zchi2©r.   r   r   )r(   rw   rx   ry   r   r&   r   r)   r*   r   r   )r{   r$   Únystroemr|   r}   ZK2r3   r3   r4   Ú 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¡¡s‚J ‚d S )Nr   rt   é   r   éd   )r   r   r\   )r(   rw   rx   ZrandZvstackr   rz   rF   r'   r   r   r)   r*   rX   rW   r%   )Úrngr$   r   ÚNr|   r}   r3   r3   r4   Ú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é%   rs   r   gÍÌÌÌÌÌ@r   ©r   r   Z
polynomialr   )r.   r   r   r   )r(   rw   rx   ry   r
   r   rz   r&   r   r)   r*   )r{   r$   r}   r   r|   r3   r3   r4   Ú 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slJ ‚d}ddiddidd
if}|D ]T}tf t|d dœ|¤Ž}t	j
t|d | |¡ W d   ƒ qŠ1 sÔ0    Y  qŠd S )Nr   rt   rL   r   c                 S   s   |  d¡ t | |¡ ¡ S )z&Histogram kernel that writes to a log.r   )Úappendr(   ÚminimumrB   )Úxrn   rU   r3   r3   r4   Úlogging_histogram_kernelŒ  s    
z8test_nystroem_callable.<locals>.logging_histogram_kernelr   rU   )r.   r   Zkernel_paramsr   ú-Don't pass gamma, coef0 or degree to Nystroemr   r   r   r€   r>   )r(   rw   rx   ry   Úlistr   rF   Úlenr9   rC   rD   rE   )	r{   Ú	n_samplesr$   rŽ   Z
kernel_logrI   ÚparamsÚparamÚnyr3   r3   r4   Ú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 ]V}tf d|jd d	œ|¤Ž}tjt|d | |¡ W d   ƒ qt1 sÀ0    Y  qtd S )Né   rs   r   r   r   r‰   Zprecomputedr   r€   r   r   r   r   r   r>   )r(   rw   rx   ry   r
   r   rz   r&   r   r)   r*   rC   rD   rE   rF   )	r{   r$   r}   r   r|   rI   r“   r”   r•   r3   r3   r4   Ú test_nystroem_precomputed_kernel£  s    
r˜   c                  C   s:   t ddd\} }tddd}| | ¡ |jjdks6J ‚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’   Z
n_featuresrt   r   rv   )rt   N)r   r   rF   Zcomponent_indices_rz   )r$   Ú_Zfeature_map_nystroemr3   r3   r4   Ú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 r3   r3   )Ú.0Úi©Ú
class_namer3   r4   Ú
<listcomp>Ð  ó    z.test_get_feature_names_out.<locals>.<listcomp>r   N)	rF   r$   r'   Úget_feature_names_outÚ__name__ÚlowerÚrangerz   r   )r›   Zestr/   Ú	names_outÚexpected_namesr3   rž   r4   Ú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:   )Zf0Úf1Úf2)Zf0_sqrtZf1_sqrtZf2_sqrtZf0_cos1Zf1_cos1Zf2_cos1Zf0_sin1Zf1_sin1Zf2_sin1Zf0_cos2Zf1_cos2Zf2_cos2Zf0_sin2Zf1_sin2Zf2_sin2)Zinput_featuresc                 S   s   g | ]}d |› ‘qS )Zadditivechi2sampler_r3   )rœ   Úsuffixr3   r3   r4   r    î  r¡   zBtest_additivechi2sampler_get_feature_names_out.<locals>.<listcomp>N)r(   rw   rx   Úrandom_sampler   rF   r¢   r   )r…   r$   Zchi2_samplerZinput_namesÚsuffixesr¦   r§   r3   r3   r4   Ú.test_additivechi2sampler_get_feature_names_outÔ  s    r®   )<rQ   Únumpyr(   rC   Zsklearn.datasetsr   Zsklearn.kernel_approximationr   r   r   r   r   Zsklearn.metrics.pairwiser   r	   r
   r   Zsklearn.utils._testingr   r   r   Zsklearn.utils.fixesr   rw   rx   r…   r¬   r$   r%   rB   r@   ÚflagsZ	writeableÚmarkZparametrizer5   r8   r9   rJ   r¥   rP   rS   rZ   r[   r]   rh   rl   ro   rp   rq   rr   r   r‚   r‡   rŠ   r–   r˜   rš   r¨   r®   r3   r3   r3   r4   Ú<module>   sj   
$

)
ÿ
