a
    ¶Àh&  ã                   @   sj  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	 d dl
mZmZmZ d dlmZ d dlmZ d dlmZ d d	lmZ d
d„ Zdd„ Zej dg d¢¡ej dg d¢¡dd„ ƒƒZd2dd„Zej dg d¢¡ej dg d¢¡dd„ ƒƒZd3dd„Zd d!„ Zd"d#„ Zd$d%„ Z ej d&dg d'¢g¡d(d)„ ƒZ!ej d*d+d,g¡d-d.„ ƒZ"ej dg d/¢¡d0d1„ ƒZ#dS )4é    N)Ú
make_blobs)ÚNotFittedError)ÚGridSearchCV)ÚKDTreeÚKernelDensityÚNearestNeighbors)Úkernel_norm)Úmake_pipeline)ÚStandardScaler)Úassert_allclosec                 C   s¤  |dkr&|j d d|j d d   }n6|dkr\|j d |j d d  d d|j d d   }t | d d …d d d …f | d  d¡¡}t||j d |ƒ|j d  }|dkrÎ|t d	||  ||  ¡ d¡ S |d
krè|||k  d¡ S |dkr|d|| ||   ||k   d¡ S |dkr<|t | | ¡ d¡ S |dkrd|d||  ||k   d¡ S |dkr˜|t dtj | | ¡||k   d¡ S tdƒ‚d S )NÚscottr   éÿÿÿÿé   é   Ú	silvermané   Úgaussiang      à¿ÚtophatÚepanechnikovç      ð?ÚexponentialÚlinearÚcosineg      à?zkernel not recognized)	ÚshapeÚnpÚsqrtÚsumr   ÚexpÚcosÚpiÚ
ValueError)ÚYÚXÚkernelÚhÚdZnorm© r&   ú\/var/www/html/assistant/venv/lib/python3.9/site-packages/sklearn/neighbors/tests/test_kde.pyÚcompute_kernel_slow   s&    .*$
&


*r(   c           	      C   sh   t | |||d}| |¡ |¡}tt |¡||td|ƒd tt | |¡¡t |¡|td|ƒd d S )N)r#   Ú	bandwidthÚatolÚrtolgH¯¼šò×z>)r*   r+   )	r   ÚfitÚscore_samplesr   r   r   ÚmaxZscoreÚprod)	r#   r)   r*   r+   r"   r!   Ú	dens_trueÚkdeZlog_densr&   r&   r'   Úcheck_results)   s     ÿr2   r#   )r   r   r   r   r   r   r)   )ç{®Gáz„?çš™™™™™¹?r   r   r   c                 C   sp   d\}}t j d¡}| ||¡}| ||¡}t||| |ƒ}dD ],}dD ]"}	dD ]}
t| ||	||||ƒ qNqFq>d S )N©éd   é   r   )r   gñhãˆµøä>)gíµ ÷Æ°>r3   )TF)r   ÚrandomÚRandomStateÚrandnr(   r2   )r#   r)   Ú	n_samplesÚ
n_featuresÚrngr"   r!   r0   r+   r*   Zbreadth_firstr&   r&   r'   Útest_kernel_density2   s    r>   r6   r7   c              	   C   s2  t j d¡}| | |¡}d}dD ]Œ}t||d |¡}| d¡}|j|jksPJ ‚tdd |¡}|j	|dd	\}	}
|d
krŽt  
|	|k ¡s¬J ‚q |dkr t  
|	d| k ¡s J ‚q dD ]J}t||d |¡}t t¡ | d¡ W d   ƒ q²1 sò0    Y  q²| dd¡}tdd |¡}| ¡ jdks.J ‚d S )Nr   çš™™™™™É?)r   r   )r)   r#   r6   r   )Zn_neighborsT)Zreturn_distancer   r   é   )r   r   r   r   r   ©r#   )r   r   )r   r8   r9   r:   r   r,   Úsampler   r   Z
kneighborsÚallÚpytestÚraisesÚNotImplementedError)r;   r<   r=   r"   r)   r#   r1   ÚsampZnbrsÚdistÚindr&   r&   r'   Útest_kernel_density_samplingE   s(    
*rJ   Ú	algorithm©ÚautoZ	ball_treeÚkd_treeÚmetric)Ú	euclideanÚ	minkowskiÚ	manhattanÚ	chebyshevZ	haversinec                 C   s¬   t j d¡}| dd¡}| dd¡}t| |d}| dkr||tjvr|tjt	dd | 
|¡ W d   ƒ q¨1 sp0    Y  n,| 
|¡ | |¡}|j|jd d… ks¨J ‚d S )	Nr   é
   r   ©rK   rO   rN   zinvalid metric)Úmatchr   )r   r8   r9   r:   r   r   Úvalid_metricsrD   rE   r    r,   r-   r   )rK   rO   r=   r"   r!   r1   Zy_densr&   r&   r'   Ú test_kde_algorithm_metric_choiceh   s    *

rX   c                 C   s   d S )Nr&   )r;   r<   r&   r&   r'   Útest_kde_score}   s    rY   c                  C   sœ   t ƒ } t t¡. | jtj d¡tj d¡d W d   ƒ n1 sD0    Y  t t¡0 | jtj d¡tj d¡ d W d   ƒ n1 sŽ0    Y  d S )N)éÈ   rT   ©Úsample_weightrZ   )r   rD   rE   r    r,   r   r8   )r1   r&   r&   r'   Útest_kde_sample_weights_error…   s
    <r]   c                  C   sv   t ddddgddgddggd\} }ttdddtddƒ}tg d	¢d
}t||d}| | ¡ |jd dksrJ ‚d S )Nr4   r   r   )Zcluster_stdÚrandom_stateZcentersF)Z	with_meanZwith_stdr   rA   )çü©ñÒMbP?r3   r4   r   rT   )Úkerneldensity__bandwidth)Z
param_gridr`   )r   r	   r
   r   Údictr   r,   Zbest_params_)r"   Ú_Zpipe1ÚparamsÚsearchr&   r&   r'   Útest_kde_pipeline_gridsearch   s    $
þ
re   c               	   C   s²  d} d}t  | d¡}dD ]’}t j d¡}| | |¡}dd|jdd  t j¡ }t j||dd}|| }| ||¡}	d	D ].}
d
D ]"}|
dksœ|t	j
v r„t|
|d}|j||d | |	¡}|jdd}| |¡ | |	¡}|jdd}t||ƒ t||ƒ |j||d | |	¡}|jdd}| |¡ | |	¡}|jdd}t||ƒ t||ƒ t  t  || ¡¡}|dkszJ ‚| ¡ }|j||| d | |	¡}t||ƒ q„qzqd S )Ni  é   ç      @)r   r   rT   r   r   rT   )ZaxisrL   )rP   rQ   rR   rS   rN   rU   r[   iÒ  )r^   r_   )r   Úfullr8   r9   Zrandr   ZastypeZint8Úrepeatr   rW   r   r,   r-   rB   r   r.   Úabs)r;   Z	size_testZweights_neutralr%   r=   r"   ÚweightsZX_repetitionsZn_samples_testZtest_pointsrK   rO   r1   Zscores_const_weightZsample_const_weightZscores_no_weightZsample_no_weightZscores_weightr\   Zscores_ref_samplingZsample_ref_samplingÚdiffZscale_factorZscores_scaled_weightr&   r&   r'   Útest_kde_sample_weightsš   sH    













rm   r\   )r4   r?   g333333Ó?c                 C   sz   t ƒ }t g d¢d¡}|j||d t ddgd¡}| |¡}t|  d¡ƒ}t ||¡ t 	|¡}| |¡}t
||ƒ d S )N)r   g       @rg   )r   r   r[   gš™™™™™ñ?gÍÌÌÌÌÌ @zdump.pkl)r   r   Zreshaper,   r-   ÚstrÚjoinÚjoblibÚdumpÚloadr   )Ztmpdirr\   r1   Údatar"   ZscoresÚ	file_pathZscores_pickledr&   r&   r'   Útest_picklingÉ   s    


ru   Úmethodr-   rB   c                 C   sZ   t j d¡}| dd¡}tƒ }t t¡ t|| ƒ|ƒ W d   ƒ n1 sL0    Y  d S )Nr   rT   r   )	r   r8   r9   r:   r   rD   rE   r   Úgetattr)rv   r=   r"   r1   r&   r&   r'   Útest_check_is_fittedÞ   s
    rx   )r   r   r4   c           	      C   sÞ   d\}}t j d¡}| ||¡}t| d |¡}| d¡}| |¡}|j|jksTJ ‚|j|fksdJ ‚| dkrŠ|jd d|jd d   }n<| d	krÂ|jd |jd d
  d d|jd d   }n| }|j	t
 |¡ksÚJ ‚d S )Nr5   r   )r)   r6   r   r   r   r   r   r   )r   r8   r9   r:   r   r,   rB   r-   r   Z
bandwidth_rD   Zapprox)	r)   r;   r<   r=   r"   r1   rG   Zkde_scr$   r&   r&   r'   Útest_bandwidthê   s    

0ry   )r6   r7   )r6   r7   )$rp   Únumpyr   rD   Zsklearn.datasetsr   Zsklearn.exceptionsr   Zsklearn.model_selectionr   Zsklearn.neighborsr   r   r   Zsklearn.neighbors._ball_treer   Zsklearn.pipeliner	   Zsklearn.preprocessingr
   Zsklearn.utils._testingr   r(   r2   ÚmarkZparametrizer>   rJ   rX   rY   r]   re   rm   ru   rx   ry   r&   r&   r&   r'   Ú<module>   sB   	ÿ
#ÿ
/

