o
    ZÆ&i²B  ã                   @   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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   ÚkernelZps_transformÚX_transÚY_transÚkernel_approxÚerror© r3   úRC:\wamp64\www\opt\env\Lib\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   ƒ d S 1 s†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   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s"J ‚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   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_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   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 |	¡ ¡ s€J dƒ‚| ¡ }
|  d |
d< d}tjt|d | 
|
¡ W d   ƒ d S 1 s¥w   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 s"w   Y  tjtdd |  t¡ |  |¡ W d  ƒ dS 1 sDw   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s1J ‚tj	||d t |¡dksAJ ‚t 
|¡d	ksJJ ‚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   ó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   rL   é   é   ©ÚdtypeN)r   r(   ÚarrayrF   Úrandom_offset_rc   Úrandom_weights_)Úglobal_dtypeÚrbfr$   r3   r3   r4   Ú(test_rbf_sampler_fitted_attributes_dtypeë   ó
    
ri   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   rL   r`   ra   rb   N)	r   r(   rd   Úfloat32rF   Úfloat64r   re   rf   )Zrbf32ZX32Zrbf64ZX64r3   r3   r4   Ú"test_rbf_sampler_dtype_equivalenceø   s   
"

"
ro   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$   Úyrh   r3   r3   r4   Útest_rbf_sampler_gamma_scale  s   
rr   c                 C   r^   r_   )r   r(   rd   rF   re   rc   rf   )rg   Zskewed_chi2_samplerr$   r3   r3   r4   Ú0test_skewed_chi2_sampler_fitted_attributes_dtype  rj   rs   c                  C   rk   rl   )	r   r(   rd   rm   rF   rn   r   re   rf   )Zskewed_chi2_sampler_32ZX_32Zskewed_chi2_sampler_64ZX_64r3   r3   r4   Ú*test_skewed_chi2_sampler_dtype_equivalence  s   
"

"
ÿÿrt   c                 C   sj   ddgddgddgg}t ƒ  |¡ |¡ tƒ  |¡ |¡ tƒ  |¡ |¡ | |ƒ}tƒ  |¡ |¡ d S )Nr   r   r   rL   r`   ra   )r   rF   r'   r   r   )r6   r$   r3   r3   r4   Útest_input_validation-  s   ru   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   ©é
   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ÚKÚ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   rv   r   rw   rx   r\   Zchi2©r.   r   r   )r(   rz   r{   r|   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¡¡sAJ ‚d S )Nr   rw   é   r   éd   )r   r   r\   )r(   rz   r{   ZrandZvstackr   r}   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é%   rv   r   gÍÌÌÌÌÌ@r   ©r   r   Z
polynomialr   )r.   r   r   r   )r(   rz   r{   r|   r
   r   r}   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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   rw   rL   r   c                 S   s   |  d¡ t | |¡ ¡ S )z&Histogram kernel that writes to a log.r   )Úappendr(   ÚminimumrB   )Úxrq   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>   r3   )r(   rz   r{   r|   Ú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 ]+}tdd|jd d	œ|¤Ž}tjt|d | |¡ W d   ƒ n1 s`w   Y  q:d S )Né   rv   r   r   r   r   Zprecomputedr   r„   r“   r   r   r   r   r>   r3   )r(   rz   r{   r|   r
   r   r}   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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–   Z
n_featuresrw   r   ry   )rw   N)r   r   rF   Zcomponent_indices_r}   )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>Ð  s    z.test_get_feature_names_out.<locals>.<listcomp>r   N)	rF   r$   r'   Úget_feature_names_outÚ__name__ÚlowerÚranger}   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¤   î  s    zBtest_additivechi2sampler_get_feature_names_out.<locals>.<listcomp>N)r(   rz   r{   Ú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   rz   r{   r‰   r¯   r$   r%   rB   r@   ÚflagsZ	writeableÚmarkZparametrizer5   r8   r9   rJ   r¨   rP   rS   rZ   r[   r]   ri   ro   rr   rs   rt   ru   rƒ   r†   r‹   rŽ   rš   rœ   rž   r«   r±   r3   r3   r3   r4   Ú<module>   sl    
$

)
ÿ
