o
    i@                     @   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   v/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/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 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   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|	 sJ d| }
|  d |
d< d}tjt|d |
|
 W d    d S 1 sw   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{Gz?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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   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 )	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   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    
$

)

