U
    Ãmœd3  ã                	   @   s¨  d dl Z d dlmZ 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  m  mZ d dlm  mZ e j e j e¡¡Ze j edd¡Zejeedƒdd	d
�Ze j edd¡Zejeedƒdd	d
�Z e j e j e¡¡Ze j edd¡Zejeedƒdd	d
�Z!ej" #d¡ eddgde
j$e
j$ge%ddd�e%ddd�fd�Z&G dd„ dƒZ'G dd„ dƒZ(G dd„ de(ƒZ)G dd„ de)ƒZ*G dd„ de(ƒZ+G d d!„ d!e(ƒZ,G d"d#„ d#e(ƒZ-G d$d%„ d%e(ƒZ.G d&d'„ d'e(ƒZ/G d(d)„ d)ƒZ0G d*d+„ d+e0ƒZ1G d,d-„ d-e0ƒZ2G d.d/„ d/e0ƒZ3G d0d1„ d1e0ƒZ4G d2d3„ d3e0ƒZ5G d4d5„ d5e0ƒZ6G d6d7„ d7e0ƒZ7G d8d9„ d9e0ƒZ8G d:d;„ d;ƒZ9G d<d=„ d=ƒZ:d>d?„ Z;d@dA„ Z<G dBdC„ dCƒZ=dS )Dé    N)Ústats)Úmixture_rvs)ÚKDEUnivariateÚresultszresults_kde.csvÚrbú,T)Ú	delimiterÚnameszresults_kde_univ_weights.csvzresults_kcde.csvé90  g      Ð?g      è?éÈ   éÿÿÿÿg      à?)ÚlocÚscaleé   )ÚsizeÚdistÚkwargsc                   @   s8   e Zd Zedd„ ƒZdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestKDEExceptionsc                 C   s.   t tƒ| _t ddd¡| _t ddd¡| _d S ©Nr   éd   r   ©ÚKDEÚXiÚkdeÚnpÚlinspaceÚweights_200Úweights_100©Úcls© r    úa/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/statsmodels/nonparametric/tests/test_kde.pyÚsetup_class'   s    
zTestKDEExceptions.setup_classc              	   C   s&   t  t¡� | j d¡ W 5 Q R X d S )Nr   )ÚpytestÚraisesÚ
ValueErrorr   Úevaluate©Úselfr    r    r!   Útest_check_is_fit_exception-   s    z-TestKDEExceptions.test_check_is_fit_exceptionc              	   C   s2   t  t¡� | jjdd| jddd� W 5 Q R X d S )NÚgaué2   TÚ	silverman©ÚkernelÚgridsizeÚweightsÚfftÚbw)r#   r$   ÚNotImplementedErrorr   Úfitr   r'   r    r    r!   Útest_non_weighted_fft_exception1   s
     ÿz1TestKDEExceptions.test_non_weighted_fft_exceptionc              	   C   s2   t  t¡� | jjdd| jddd� W 5 Q R X d S )Nr*   r+   Fr,   r-   )r#   r$   r%   r   r4   r   r'   r    r    r!   Ú"test_wrong_weight_length_exception6   s
     ÿz4TestKDEExceptions.test_wrong_weight_length_exceptionc              	   C   s.   t  t¡� | jjddddd� W 5 Q R X d S )NÚepar+   Tr,   )r.   r/   r1   r2   )r#   r$   r3   r   r4   r'   r    r    r!   Útest_non_gaussian_fft_exception;   s    z1TestKDEExceptions.test_non_gaussian_fft_exceptionN)	Ú__name__Ú
__module__Ú__qualname__Úclassmethodr"   r)   r5   r6   r8   r    r    r    r!   r   %   s   
r   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚCheckKDEé   c                 C   s   t  | jj| j| j¡ d S ©N©ÚnptÚassert_almost_equalÚres1ÚdensityÚres_densityÚdecimal_densityr'   r    r    r!   Útest_densityC   s    ÿzCheckKDE.test_densityc                    sJ   ‡ fdd„ˆ j jD ƒ}t |¡}t |¡}d|| < t |ˆ jˆ j¡ d S )Nc                    s   g | ]}t  ˆ j |¡¡‘qS r    ©r   ÚsqueezerC   r&   ©Ú.0Úxir'   r    r!   Ú
<listcomp>M   s     z*CheckKDE.test_evaluate.<locals>.<listcomp>r   ©	rC   Úsupportr   rI   ÚisfiniterA   rB   rE   rF   ©r(   Úkde_valsÚ
mask_validr    r'   r!   Útest_evaluateG   s    



ÿzCheckKDE.test_evaluateN)r9   r:   r;   rF   rG   rT   r    r    r    r!   r=   @   s   r=   c                   @   s@   e Zd Zedd„ ƒZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dS )ÚTestKDEGaussc                 C   s,   t tƒ}|jdddd� || _td | _d S ©Nr*   Fr,   ©r.   r1   r2   Zgau_d©r   r   r4   rC   Ú
KDEResultsrE   ©r   rC   r    r    r!   r"   W   s    zTestKDEGauss.setup_classc                    sJ   ‡ fdd„ˆ j jD ƒ}t |¡}t |¡}d|| < t |ˆ jˆ j¡ d S )Nc                    s   g | ]}ˆ j  |¡‘qS r    ©rC   r&   rJ   r'   r    r!   rM   `   s     z.TestKDEGauss.test_evaluate.<locals>.<listcomp>r   rN   rQ   r    r'   r!   rT   ^   s    



ÿzTestKDEGauss.test_evaluatec                 C   s    | j }td }t ||j¡ d S )NZgau_support)rC   ÚKCDEResultsrA   Úassert_allcloserO   )r(   r   rO   r    r    r!   Útest_support_griddedj   s    z!TestKDEGauss.test_support_griddedc                 C   s    | j }td }t ||j¡ d S )NZgau_cdf)rC   r\   rA   r]   Úcdf)r(   r   r_   r    r    r!   Útest_cdf_griddedo   s    zTestKDEGauss.test_cdf_griddedc                 C   s    | j }td }t ||j¡ d S )NZgau_sf)rC   r\   rA   r]   Úsf)r(   r   ra   r    r    r!   Útest_sf_griddedt   s    zTestKDEGauss.test_sf_griddedc                 C   s    | j }td }t ||j¡ d S )NZgau_icdf)rC   r\   rA   r]   Úicdf)r(   r   rc   r    r    r!   Útest_icdf_griddedy   s    zTestKDEGauss.test_icdf_griddedN)
r9   r:   r;   r<   r"   rT   r^   r`   rb   rd   r    r    r    r!   rU   V   s   
rU   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestKDEGaussPandasc                 C   s2   t t t¡ƒ}|jdddd� || _td | _d S rV   )r   ÚpdZSeriesr   r4   rC   rY   rE   rZ   r    r    r!   r"   €   s    zTestKDEGaussPandas.setup_classN©r9   r:   r;   r<   r"   r    r    r    r!   re      s   re   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestKDEEpanechnikovc                 C   s,   t tƒ}|jdddd� || _td | _d S )Nr7   Fr,   rW   Zepa2_drX   rZ   r    r    r!   r"   ‰   s    zTestKDEEpanechnikov.setup_classNrg   r    r    r    r!   rh   ˆ   s   rh   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestKDETriangularc                 C   s,   t tƒ}|jdddd� || _td | _d S )NÚtriFr,   rW   Ztri_drX   rZ   r    r    r!   r"   ’   s    zTestKDETriangular.setup_classNrg   r    r    r    r!   ri   ‘   s   ri   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestKDEBiweightc                 C   s,   t tƒ}|jdddd� || _td | _d S )NÚbiwFr,   rW   Zbiw_drX   rZ   r    r    r!   r"   ›   s    zTestKDEBiweight.setup_classNrg   r    r    r    r!   rk   š   s   rk   c                   @   s    e Zd Zedd„ ƒZdd„ ZdS )ÚTestKdeWeightsc                 C   sZ   t tƒ}t ddd¡}|jdd|ddd� || _tj t	d	d
¡}tj
t|dƒdd�| _d S )Nr   r   r   r*   r+   Fr,   r-   r   zresults_kde_weights.csvr   )Zskip_header)r   r   r   r   r4   rC   ÚosÚpathÚjoinÚcurdirÚ
genfromtxtÚopenrE   )r   rC   r0   Úfnamer    r    r!   r"   ±   s    ÿzTestKdeWeights.setup_classc                    sJ   ‡ fdd„ˆ j jD ƒ}t |¡}t |¡}d|| < t |ˆ jˆ j¡ d S )Nc                    s   g | ]}ˆ j  |¡‘qS r    r[   rJ   r'   r    r!   rM   ½   s     z0TestKdeWeights.test_evaluate.<locals>.<listcomp>r   rN   rQ   r    r'   r!   rT   »   s    



ÿzTestKdeWeights.test_evaluateN)r9   r:   r;   r<   r"   rT   r    r    r    r!   rm   ¯   s   
	rm   c                   @   s   e Zd Zedd„ ƒZdS )ÚTestKDEGaussFFTc                 C   sJ   d| _ ttƒ}|jdddd� || _tj tdd¡}t	 
t|dƒ¡| _d S )	Né   r*   Tr,   rW   r   zresults_kde_fft.csvr   )rF   r   r   r4   rC   rn   ro   rp   rq   r   rr   rs   rE   )r   rC   Zrfname2r    r    r!   r"   Ç   s    zTestKDEGaussFFT.setup_classNrg   r    r    r    r!   ru   Æ   s   ru   c                   @   sN   e Zd Zedd„ ƒZdZejjde	dd�dd„ ƒZ
d	d
„ Zdd„ Zdd„ ZdS )ÚCheckKDEWeightsc                 C   sH   t d  | _}t d }t|ƒ}|j| j|ddd� || _t | j | _d S )NÚxr0   FZscott)r.   r0   r1   r2   )ÚKDEWResultsrx   r   r4   Úkernel_namerC   Úres_kernel_namerE   )r   rx   r0   rC   r    r    r!   r"   Ó   s    zCheckKDEWeights.setup_classr>   zNot almost equal to 7 decimalsT)Úreasonr$   Ústrictc                 C   s   t  | jj| j| j¡ d S r?   r@   r'   r    r    r!   rG   ß   s    ÿzCheckKDEWeights.test_densityc                    sH   ˆ j dkrt d¡ ‡ fdd„ˆ jD ƒ}t |¡}t |ˆ jˆ j	¡ d S )NÚcosz!Cosine kernel fails against Statac                    s   g | ]}ˆ j  |¡‘qS r    r[   rJ   r'   r    r!   rM   è   s     z1CheckKDEWeights.test_evaluate.<locals>.<listcomp>)
rz   r#   Úskiprx   r   rI   rA   rB   rE   rF   )r(   rR   r    r'   r!   rT   å   s    



ÿzCheckKDEWeights.test_evaluatec                    s   ˆ j j}‡ fdd„|D ƒ}t |¡}t |¡}d|| < t ˆ j j|ˆ j¡ t	ˆ j j
ƒ}ˆ j j}| ||¡}||j |j | }tj||dd� | ||¡}d}	||d d …df  }
tj|
|	t |¡ dd� |d d …df | }
tj|
|	t |¡ dd� d S )Nc                    s   g | ]}t  ˆ j |¡¡‘qS r    rH   rJ   r'   r    r!   rM   ï   s     z0CheckKDEWeights.test_compare.<locals>.<listcomp>r   ç»½×Ùß|Û=©Zrtolg†ÿî1\ÿ?r   )rC   rO   r   rI   rP   rA   rB   rD   rF   ÚlenZendogr.   Zdensity_varÚL2NormÚhr]   Zdensity_confintÚsqrt)r(   ZxxrR   rS   ZnobsÚkernÚvZv_directÚciÚcritZhwr    r'   r!   Útest_compareí   s&    


ÿzCheckKDEWeights.test_comparec                 C   sr   | j j}|j}d |_|j}tj||dd� |j}d |_|j}tj||dd� |j}d |_	|j}tj||dd� d S )Nr€   r�   )
rC   r.   Ú
norm_constZ_norm_constrA   r]   rƒ   Z_L2NormZ
kernel_varZ_kernel_var)r(   r†   ÚncZnc2Zl2nZl2n2r‡   Zv2r    r    r!   Útest_kernel_constants  s    z%CheckKDEWeights.test_kernel_constantsN)r9   r:   r;   r<   r"   rF   r#   ÚmarkZxfailÚAssertionErrorrG   rT   rŠ   r�   r    r    r    r!   rw   Ñ   s   
	 ÿ
rw   c                   @   s   e Zd ZdZdZdS )ÚTestKDEWGaussr*   Zx_gau_wdN©r9   r:   r;   rz   r{   r    r    r    r!   r�     s   r�   c                   @   s   e Zd ZdZdZdS )ÚTestKDEWEpar7   Z
x_epan2_wdNr‘   r    r    r    r!   r’      s   r’   c                   @   s   e Zd ZdZde d ZdS )ÚTestKDEWTrirj   Zx_Z_wdNr‘   r    r    r    r!   r“   %  s   r“   c                   @   s   e Zd ZdZdZdS )ÚTestKDEWBiwrl   Zx_bi_wdNr‘   r    r    r    r!   r”   *  s   r”   c                   @   s   e Zd ZdZdZdS )ÚTestKDEWCosr~   Úx_cos_wdNr‘   r    r    r    r!   r•   /  s   r•   c                   @   s   e Zd ZdZdZdS )ÚTestKDEWCos2Zcos2r–   Nr‘   r    r    r    r!   r—   4  s   r—   c                   @   s   e Zd ZdZdZdS )Ú_TestKDEWRectÚrectZx_rec_wdNr‘   r    r    r    r!   r˜   9  s   r˜   c                   @   s   e Zd ZdZdZdS )Ú_TestKDEWParÚparZx_par_wdNr‘   r    r    r    r!   rš   ?  s   rš   c                	   @   s’   e Zd Zej d¡ ej d¡d ZeeƒZ	e	 
¡  ej d¡d ZeeƒZe 
¡  dD ]4Ze e ee	eƒdd… eeeƒdd… ¡ ¡ qXdS )ÚTestKdeRefitr
   r   )rc   r_   ra   Né
   )r9   r:   r;   r   ÚrandomÚseedZrandnZdata1r   Zpdfr4   Zdata2Zpdf2ÚattrrA   Zassert_ZallcloseÚgetattrr    r    r    r!   rœ   E  s   ÿrœ   c                   @   s   e Zd Zdd„ ZdS )ÚTestNormConstantc                 C   s$   t  dd„ ¡}d}t ||j¡ d S )Nc                 S   s   t  | d  d ¡S )Nrv   g       @)r   Úexp)rx   r    r    r!   Ú<lambda>V  ó    zATestNormConstant.test_norm_constant_calculation.<locals>.<lambda>gQ6Ô3EˆÙ?)ÚkernelsZCustomKernelrA   rB   r‹   )r(   Zcustom_gaussZgauss_true_constr    r    r!   Útest_norm_constant_calculationU  s    z/TestNormConstant.test_norm_constant_calculationN)r9   r:   r;   r§   r    r    r    r!   r¢   T  s   r¢   c                  C   sF   t  dddddddddddddg¡} t| ƒ}| ¡  |jdksBt‚d S )Ng<Íga@g£$Á§{±@gchm>Ë@g:àAº@r   )r   Úarrayr   r4   r2   r�   )rx   r   r    r    r!   Útest_kde_bw_positive[  s          þr©   c                 C   s8   t j d¡}t|ƒ}t|tƒs"t‚t| ¡ tƒs4t‚d S )Nr   )r   rž   Zstandard_normalr   Ú
isinstancer�   r4   )Zreset_randomstaterx   r   r    r    r!   Útest_fit_selfe  s    r«   c                   @   sF   e Zd ZdZedd„ ƒZdd„ Zdd„ Zej	 
dd	d
g¡dd„ ƒZdS )ÚTestKDECustomBandwidthr>   c                 C   s.   t tƒ| _t ddd¡| _t ddd¡| _d S r   r   r   r    r    r!   r"   o  s    
z"TestKDECustomBandwidth.setup_classc                 C   s(   dd„ }| j j|d�}t|tƒs$t‚d S )Nc                 S   s   t  | ¡t| ƒ S r?   )r   Zstdr‚   )ÚXr†   r    r    r!   Ú	custom_bwv  s    zTTestKDECustomBandwidth.test_check_is_fit_ok_with_custom_bandwidth.<locals>.custom_bw©r2   )r   r4   rª   r   r�   )r(   r®   r   r    r    r!   Ú*test_check_is_fit_ok_with_custom_bandwidthu  s    zATestKDECustomBandwidth.test_check_is_fit_ok_with_custom_bandwidthc                 C   sZ   | j jtjd�}|j ¡ }|j ¡ }| j jdd�}t ||j| j	¡ t ||j| j	¡ d S )Nr¯   r,   )
r   r4   Ú
bandwidthsÚbw_silvermanrO   ÚcopyrD   rA   rB   rF   )r(   r   Ús1Úd1r    r    r!   Ú3test_check_is_fit_ok_with_standard_custom_bandwidth{  s    

zJTestKDECustomBandwidth.test_check_is_fit_ok_with_standard_custom_bandwidthr1   TFc                 C   s`   | j jtj|d�}|j ¡ }|j ¡ }| j j|j|d�}t 	||j| j
¡ t 	||j| j
¡ d S )N)r2   r1   )r   r4   r±   r²   rO   r³   rD   r2   rA   rB   rF   )r(   r1   r   r´   rµ   r    r    r!   Ú)test_check_is_fit_ok_with_float_bandwidth†  s    

z@TestKDECustomBandwidth.test_check_is_fit_ok_with_float_bandwidthN)r9   r:   r;   rF   r<   r"   r°   r¶   r#   rŽ   Zparametrizer·   r    r    r    r!   r¬   l  s   
r¬   )>rn   Znumpy.testingÚtestingrA   Únumpyr   Zpandasrf   r#   Zscipyr   Z%statsmodels.distributions.mixture_rvsr   Zstatsmodels.nonparametric.kder   r   Z)statsmodels.sandbox.nonparametric.kernelsZsandboxZnonparametricr¦   Z$statsmodels.nonparametric.bandwidthsr±   ro   ÚdirnameÚabspathÚ__file__rq   rp   Zrfnamerr   rs   rY   ry   r\   rž   rŸ   ZnormÚdictr   r   r=   rU   re   rh   ri   rk   rm   ru   rw   r�   r’   r“   r”   r•   r—   r˜   rš   rœ   r¢   r©   r«   r¬   r    r    r    r!   Ú<module>   sX   ÿ)			J
