U
    3‰d&  ã                	   @   s„  d dl Zd dl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lmZ d d	lmZ d dlZd
d„ Zdd„ Zej dddddddg¡ej ddddddg¡dd„ ƒƒZdAdd „Zej d!d"d#d$g¡ej d%d&d'd(d)d*g¡d+d,„ ƒƒZdBd-d.„Zd/d0„ Zd1d2„ Zd3d4„ Z ej d5ddd6d7gg¡d8d9„ ƒZ!ej d:d;d<g¡d=d>„ ƒZ"ej ddddg¡d?d@„ ƒZ#dS )Cé    N)Úassert_allclose)ÚKernelDensityÚKDTreeÚNearestNeighbors)Úkernel_norm)Úmake_pipeline)Ú
make_blobs)ÚGridSearchCV)ÚStandardScaler)ÚNotFittedErrorc                 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&   úD/tmp/pip-unpacked-wheel-zrfo1fqw/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_density3   s    r>   r6   r7   c              
   C   s  t j d¡}| | |¡}d}dD ]Œ}t||d |¡}| d¡}|j|jksPt‚t	dd |¡}|j
|dd	\}	}
|d
krŽt  |	|k ¡s¬t‚q |dkr t  |	d| k ¡s t‚q dD ]6}t||d |¡}t t¡ | d¡ W 5 Q R X q²| dd¡}tdd |¡}| ¡ jdkst‚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   ÚAssertionErrorr   Z
kneighborsÚallÚpytestÚraisesÚNotImplementedError)r;   r<   r=   r"   r)   r#   r1   ÚsampZnbrsÚdistÚindr&   r&   r'   Útest_kernel_density_samplingF   s(    
rK   Ú	algorithmÚautoÚ	ball_treeÚkd_treeÚmetricÚ	euclideanÚ	minkowskiÚ	manhattanÚ	chebyshevZ	haversinec              	   C   s˜   t j d¡}| dd¡}| dd¡}t| |d}| dkrh|tjkrhtjt	dd | 
|¡ W 5 Q R X n,| 
|¡ | |¡}|j|jd d… ks”t‚d S )	Nr   é
   r   ©rL   rP   rO   zinvalid metric)Úmatchr   )r   r8   r9   r:   r   r   Úvalid_metricsrE   rF   r    r,   r-   r   rC   )rL   rP   r=   r"   r!   r1   Zy_densr&   r&   r'   Ú test_kde_algorithm_metric_choicei   s    

rY   c                 C   s   d S )Nr&   )r;   r<   r&   r&   r'   Útest_kde_score~   s    rZ   c               	   C   st   t ƒ } t t¡$ | jtj d¡tj d¡d W 5 Q R X t t¡& | jtj d¡tj d¡ d W 5 Q R X d S )N)éÈ   rU   ©Úsample_weightr[   )r   rE   rF   r    r,   r   r8   )r1   r&   r&   r'   Útest_kde_sample_weights_error†   s
    (r^   c                  C   s|   t ddddgddgddggd\} }ttdddtddƒ}td	d
dddgd}t||d}| | ¡ |jd dksxt‚d S )Nr4   r   r   )Zcluster_stdÚrandom_stateZcentersF)Z	with_meanZwith_stdr   rA   çü©ñÒMbP?r3   rU   )Úkerneldensity__bandwidth)Z
param_gridra   )	r   r   r
   r   Údictr	   r,   Zbest_params_rC   )r"   Ú_Zpipe1ÚparamsÚsearchr&   r&   r'   Útest_kde_pipeline_gridsearchŽ   s    $
þ
rf   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
k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szt‚| ¡ }|j||| d | |	¡}t||ƒ q„qzqd S )Ni  é   ç      @)r   r   rU   r   r   rU   )Zaxis)rM   rN   rO   )rQ   rR   rS   rT   rO   rV   r\   iÒ  )r_   r`   )r   Úfullr8   r9   Zrandr   ZastypeZint8Úrepeatr   rX   r   r,   r-   rB   r   r.   ÚabsrC   )r;   Z	size_testZweights_neutralr%   r=   r"   ÚweightsZX_repetitionsZn_samples_testZtest_pointsrL   rP   r1   Zscores_const_weightZsample_const_weightZscores_no_weightZsample_no_weightZscores_weightr]   Zscores_ref_samplingZsample_ref_samplingZdiffZscale_factorZscores_scaled_weightr&   r&   r'   Útest_kde_sample_weights›   sH    













rm   r]   r?   g333333Ó?c                 C   s|   t ƒ }t dddgd¡}|j||d t ddgd¡}| |¡}t|  d¡ƒ}t ||¡ t 	|¡}| |¡}t
||ƒ d S )	Nr   g       @rh   )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   sF   t j d¡}| dd¡}tƒ }t t¡ t|| ƒ|ƒ W 5 Q R X d S )Nr   rU   r   )	r   r8   r9   r:   r   rE   rF   r   Úgetattr)rv   r=   r"   r1   r&   r&   r'   Útest_check_is_fittedß   s
    rx   c           	      C   sÞ   d\}}t j d¡}| ||¡}t| d |¡}| d¡}| |¡}|j|jksTt	‚|j|fksdt	‚| 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Út	‚d S )Nr5   r   )r)   r6   r   r   r   r   r   r   )r   r8   r9   r:   r   r,   rB   r-   r   rC   Z
bandwidth_rE   Zapprox)	r)   r;   r<   r=   r"   r1   rH   Zkde_scr$   r&   r&   r'   Útest_bandwidthë   s    

0ry   )r6   r7   )r6   r7   )$Znumpyr   rE   Zsklearn.utils._testingr   Zsklearn.neighborsr   r   r   Zsklearn.neighbors._ball_treer   Zsklearn.pipeliner   Zsklearn.datasetsr   Zsklearn.model_selectionr	   Zsklearn.preprocessingr
   Zsklearn.exceptionsr   rp   r(   r2   ÚmarkZparametrizer>   rK   rY   rZ   r^   rf   rm   ru   rx   ry   r&   r&   r&   r'   Ú<module>   sF   	 ÿ
# ÿ
/

