U
    ¿9%eö@  ã                   @   sh  d dl Z d dlZd dlZd dlm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 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	dg¡ej  ddddg¡ej  dd dg¡dd„ ƒƒƒZ!ej  dddg¡ej  dd	ddg¡ej  dd dg¡dd„ ƒƒƒZ"dd„ Z#dd„ Z$ej  dd d!d"g¡ej  d#e%d	d$ƒ¡d%d&„ ƒƒZ&d'd(„ Z'ej  dd d!d"g¡d)d*„ ƒZ(d+d,„ Z)d-d.„ Z*d/d0„ Z+d1d2„ Z,d3d4„ Z-d5d6„ Z.d7d8„ Z/d9d:„ Z0d;d<„ Z1d=d>„ Z2d?d@„ Z3dAdB„ Z4dCdD„ Z5dEdF„ Z6dGdH„ Z7dIdJ„ Z8ej  dKeeee
g¡dLdM„ ƒZ9dNdO„ Z:dS )Pé    N)Ú
csr_matrix)Úmake_classification)ÚAdditiveChi2SamplerÚNystroemÚPolynomialCountSketchÚ
RBFSamplerÚSkewedChi2Sampler)Úchi2_kernelÚkernel_metricsÚpolynomial_kernelÚ
rbf_kernel)Úassert_allcloseÚassert_array_almost_equalÚassert_array_equal)é,  é2   ©Úsizeé   ©ZaxisÚgammaçš™™™™™¹?g      @zdegree, n_components)r   éô  )é   r   )é   iˆ  Úcoef0c           
      C   sœ   t tt| ||d}t|| ||dd}| t¡}| t¡}t ||j¡}|| }	t 	t 
|	¡¡dksft‚tj	|	|	d t |	¡dks†t‚t 
|	¡dks˜t‚d S )N)r   Údegreer   é*   )Ún_componentsr   r   r   Úrandom_stateçš™™™™™©?©Úoutr   )r   ÚXÚYr   Úfit_transformÚ	transformÚnpÚdotÚTÚabsÚmeanÚAssertionErrorÚmax)
r   r   r   r   ÚkernelZps_transformÚX_transÚY_transÚkernel_approxÚerror© r3   úf/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/sklearn/tests/test_kernel_approximation.pyÚtest_polynomial_count_sketch#   s     û

r5   ç      ð?r   r   r   c           	      C   sl   t d| ||dd}| t¡}| t¡}t d| ||dd}| ttƒ¡}| 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   Zps_denseZXt_denseZYt_denseZ	ps_sparseZ	Xt_sparseZ	Yt_sparser3   r3   r4   Ú)test_polynomial_count_sketch_dense_sparse@   s(        ÿ

    ÿ
r7   c                 C   s   t  | |j¡S )N)r'   r(   r)   )r#   r$   r3   r3   r4   Ú_linear_kernelW   s    r8   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|| ¡ ƒ t||	 ¡ ƒ t ¡ }
d|
d< d}tjt|d	 | |
¡ W 5 Q R X d S )
Nr   r   r   ©Úsample_stepsr   éÿÿÿÿ©r   r   z!Negative values in data passed to©Úmatch)r#   r'   Únewaxisr$   Úsumr   r%   r&   r(   r)   r   r   r   ZtoarrayÚcopyÚpytestÚraisesÚ
ValueErrorÚfit)ZX_ZY_Zlarge_kernelr.   r&   r/   r0   r1   Z
X_sp_transZ
Y_sp_transÚY_negÚmsgr3   r3   r4   Útest_additive_chi2_sampler[   s$    


rH   ÚmethodrE   r%   r&   r:   é   c                 C   sD   t |d}t|| ƒtƒ d}t ||d}t|| ƒtƒ |j|k dS )zsCheck that the input sample step doesn't raise an error
    and that sample interval doesn't change after fit.
    r9   g      à?)r:   Úsample_intervalN)r   Úgetattrr#   rK   )rI   r:   ÚtransformerrK   r3   r3   r4   Ú'test_additive_chi2_sampler_sample_steps   s    
þrN   c               	   C   sF   t ƒ } |  t¡ t d¡}tjt|d | jdk	s8t	‚W 5 Q R X dS )zICheck that we raise a FutureWarning when accessing to `sample_interval_`.zYThe ``sample_interval_`` attribute was deprecated in version 1.3 and will be removed 1.5.r=   N)
r   rE   r#   ÚreÚescaperB   ZwarnsÚFutureWarningZsample_interval_r,   )rM   rG   r3   r3   r4   Ú*test_additive_chi2_sampler_future_warnings’   s    
ÿrR   c              	   C   s@   t dd}t d¡}tjt|d t|| ƒtƒ W 5 Q R X dS )z8Check that we raise a ValueError on invalid sample_stepsrJ   r9   zHIf sample_steps is not in [1, 2, 3], you need to provide sample_intervalr=   N)r   rO   rP   rB   rC   rD   rL   r#   )rI   rM   rG   r3   r3   r4   Ú-test_additive_chi2_sampler_wrong_sample_stepsž   s    
ÿrS   c               	   C   s:  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 |¡ ¡ sâtd
ƒ‚t |¡ ¡ søtdƒ‚t  ¡ }	|  d |	d< d}
tjt|
d | 	|	¡ W 5 Q R X 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$   r#   r'   r?   ÚlogÚexpr@   r   r%   r&   r(   r)   r   ÚisfiniteÚallr,   rA   rB   rC   rD   )ÚcZX_cZY_cZ
log_kernelr.   r&   r/   r0   r1   rF   rG   r3   r3   r4   Útest_skewed_chi2_sampler©   s&    2ÿ

rZ   c               	   C   sl   t ƒ } t ¡ }d|d< tjtdd |  |¡ W 5 Q R X tjtdd |  t¡ |  |¡ W 5 Q R X dS )zEnsures correct error messager;   r<   zX in AdditiveChi2Sampler.fitr=   z"X in AdditiveChi2Sampler.transformN)r   r#   rA   rB   rC   rD   rE   r&   )rM   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sbt‚tj	||d t |¡dks‚t‚t 
|¡d	ks”t‚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   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@t‚|jj| ksPt‚dS ©	zRCheck that the fitted attributes are stored accordingly to the
    data type of X.r   r   r   rJ   é   é   ©ÚdtypeN)r   r'   ÚarrayrE   Úrandom_offset_rb   r,   Ú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   rJ   r_   r`   ra   N)	r   r'   rc   Úfloat32rE   Ú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@t‚dS )	z4Check the inner value computed when `gamma='scale'`.g        r6   r   r   Úscaler\   rJ   N)r   rE   Z_gammarB   Zapproxr,   )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@t‚|jj| ksPt‚dS r^   )r   r'   rc   rE   rd   rb   r,   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   rE   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| ƒ} tƒ  | ¡ | ¡ d S )Nr   r   r   rJ   r_   r`   )r   rE   r&   r   r   r   )r#   r3   r3   r4   Útest_input_validation2  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~t‚tdt| d}| |¡ |¡}|j|jd dfks´t‚tƒ }|D ]:}td|| d}| |¡ |¡}|j|jd dfks¾t‚q¾d S )Nr   ©é
   rJ   r   ©r   r   ©r   r   )r   r.   r   )r'   ÚrandomÚRandomStateÚuniformr   Úshaper%   r   r   r(   r)   rE   r&   r,   r8   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_parametersY  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‚t‚d S )Nr   rt   é   r   éd   )r   r   r\   )r'   rw   rx   ZrandZvstackr   rz   rE   r&   r   r   r(   r)   rX   rW   r$   r,   )Úrngr#   r   ÚNr|   r}   r3   r3   r4   Útest_nystroem_singular_kernelm  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_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slt‚d}ddiddidd
if}|D ]@}tf t	|d dœ|—Ž}t
jt|d | |¡ W 5 Q R X qŠd S )Nr   rt   rJ   r   c                 S   s   |  d¡ t | |¡ ¡ S )z&Histogram kernel that writes to a log.r   )Úappendr'   Úminimumr@   )Ú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   rE   Úlenr,   r8   rB   rC   rD   )	r{   Ú	n_samplesr#   rŽ   Z
kernel_logrG   Ú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 ]B}tf d|jd d	œ|—Ž}tjt|d | |¡ W 5 Q R X 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)   rB   rC   rD   rE   )	r{   r#   r}   r   r|   rG   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s6t‚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   rE   Zcomponent_indices_rz   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)	rE   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 |¡}dddg}d	d
dddddddddddddg}|j|d}dd„ |D ƒ}t||ƒ dS )z4Check get_feature_names_out for AdditiveChi2Sampler.r   )r   r   r   r   r9   Zf0Úf1Úf2Z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'   rw   rx   Úrandom_sampler   rE   r¡   r   )r…   r#   Zchi2_samplerZinput_namesÚsuffixesr¥   r¦   r3   r3   r4   Ú.test_additivechi2sampler_get_feature_names_outØ  s.    
ñr­   );rO   Únumpyr'   rB   Zscipy.sparser   Zsklearn.datasetsr   Zsklearn.kernel_approximationr   r   r   r   r   Zsklearn.metrics.pairwiser	   r
   r   r   Zsklearn.utils._testingr   r   r   rw   rx   r…   r«   r#   r$   r@   r?   ÚmarkZparametrizer5   r7   r8   rH   r¤   rN   rR   rS   rZ   r[   r]   rh   rl   ro   rp   rq   rr   r   r‚   r‡   rŠ   r–   r˜   rš   r§   r­   r3   r3   r3   r4   Ú<module>   sd   $

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