U
    Kvf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.csv90  g      ?g      ?   g      ?)locZ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   L/tmp/pip-unpacked-wheel-2v6byqio/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gau2   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   r3   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.   r0   r1   )r"   r#   r2   r   r3   r&   r   r   r    test_non_gaussian_fft_exception;   s    z1TestKDEExceptions.test_non_gaussian_fft_exceptionN)	__name__
__module____qualname__classmethodr!   r(   r4   r5   r7   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   squeezerB   r%   .0xir&   r   r    
<listcomp>M   s     z*CheckKDE.test_evaluate.<locals>.<listcomp>r   	rB   supportr   rH   isfiniter@   rA   rD   rE   r'   kde_vals
mask_validr   r&   r    test_evaluateG   s    



zCheckKDE.test_evaluateN)r8   r9   r:   rE   rF   rS   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-   r0   r1   Zgau_dr   r   r3   rB   
KDEResultsrD   r   rB   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   rB   r%   rI   r&   r   r    rL   `   s     z.TestKDEGauss.test_evaluate.<locals>.<listcomp>r   rM   rP   r   r&   r    rS   ^   s    



zTestKDEGauss.test_evaluatec                 C   s    | j }td }t||j d S )NZgau_support)rB   KCDEResultsr@   assert_allcloserN   )r'   r   rN   r   r   r    test_support_griddedj   s    z!TestKDEGauss.test_support_griddedc                 C   s    | j }td }t||j d S )NZgau_cdf)rB   r[   r@   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)rB   r[   r@   r\   sf)r'   r   r`   r   r   r    test_sf_griddedt   s    zTestKDEGauss.test_sf_griddedc                 C   s    | j }td }t||j d S )NZgau_icdf)rB   r[   r@   r\   icdf)r'   r   rb   r   r   r    test_icdf_griddedy   s    zTestKDEGauss.test_icdf_griddedN)
r8   r9   r:   r;   r!   rS   r]   r_   ra   rc   r   r   r   r    rT   V   s   
rT   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 rU   )r   pdZSeriesr   r3   rB   rX   rD   rY   r   r   r    r!      s    zTestKDEGaussPandas.setup_classNr8   r9   r:   r;   r!   r   r   r   r    rd      s   rd   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 )Nr6   Fr+   rV   Zepa2_drW   rY   r   r   r    r!      s    zTestKDEEpanechnikov.setup_classNrf   r   r   r   r    rg      s   rg   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+   rV   Ztri_drW   rY   r   r   r    r!      s    zTestKDETriangular.setup_classNrf   r   r   r   r    rh      s   rh   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+   rV   Zbiw_drW   rY   r   r   r    r!      s    zTestKDEBiweight.setup_classNrf   r   r   r   r    rj      s   rj   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   r3   rB   ospathjoincurdir
genfromtxtopenrD   )r   rB   r/   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   rZ   rI   r&   r   r    rL      s     z0TestKdeWeights.test_evaluate.<locals>.<listcomp>r   rM   rP   r   r&   r    rS      s    



zTestKdeWeights.test_evaluateN)r8   r9   r:   r;   r!   rS   r   r   r   r    rl      s   
	rl   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+   rV   r   zresults_kde_fft.csvr   )rE   r   r   r3   rB   rm   rn   ro   rp   r   rq   rr   rD   )r   rB   Zrfname2r   r   r    r!      s    zTestKDEGaussFFT.setup_classNrf   r   r   r   r    rt      s   rt   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xr/   FZscott)r-   r/   r0   r1   )KDEWResultsrw   r   r3   kernel_namerB   res_kernel_namerD   )r   rw   r/   rB   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    rF      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   rZ   rI   r&   r   r    rL      s     z1CheckKDEWeights.test_evaluate.<locals>.<listcomp>)
ry   r"   skiprw   r   rH   r@   rA   rD   rE   )r'   rQ   r   r&   r    rS      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   rG   rI   r&   r   r    rL      s     z0CheckKDEWeights.test_compare.<locals>.<listcomp>r   绽|=Zrtolg1\?r   )rB   rN   r   rH   rO   r@   rA   rC   rE   lenZendogr-   Zdensity_varL2Normhr\   Zdensity_confintsqrt)r'   ZxxrQ   rR   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   )
rB   r-   
norm_constZ_norm_constr@   r\   r   Z_L2NormZ
kernel_varZ_kernel_var)r'   r   ZncZnc2Zl2nZl2n2r   Zv2r   r   r    test_kernel_constants  s    z%CheckKDEWeights.test_kernel_constantsN)r8   r9   r:   r;   r!   rE   r"   markZxfailAssertionErrorrF   rS   r   r   r   r   r   r    rv      s   
	 
rv   c                   @   s   e Zd ZdZdZdS )TestKDEWGaussr)   Zx_gau_wdNr8   r9   r:   ry   rz   r   r   r   r    r     s   r   c                   @   s   e Zd ZdZdZdS )TestKDEWEpar6   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 )TestKDEWTriri   Zx_Z_wdNr   r   r   r   r    r   %  s   r   c                   @   s   e Zd ZdZdZdS )TestKDEWBiwrk   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 )_TestKDEWRectZ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   )rb   r^   r`   N
   )r8   r9   r:   r   randomseedZrandnZdata1r   Zpdfr3   Zdata2Zpdf2attrr@   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 )Nru   g       @)r   exp)rw   r   r   r    <lambda>V      zATestNormConstant.test_norm_constant_calculation.<locals>.<lambda>gQ63E?)kernelsZCustomKernelr@   rA   r   )r'   Zcustom_gaussZgauss_true_constr   r   r    test_norm_constant_calculationU  s    z/TestNormConstant.test_norm_constant_calculationN)r8   r9   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   r3   r1   r   )rw   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   r3   )Zreset_randomstaterw   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r1   )r   r3   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   r3   
bandwidthsbw_silvermanrN   copyrC   r@   rA   rE   )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_bandwidthr0   TFc                 C   s`   | j jtj|d}|j }|j }| j j|j|d}t	||j| j
 t	||j| j
 d S )N)r1   r0   )r   r3   r   r   rN   r   rC   r1   r@   rA   rE   )r'   r0   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)r8   r9   r:   rE   r;   r!   r   r   r"   r   Zparametrizer   r   r   r   r    r   l  s   
r   )>rm   Znumpy.testingZtestingr@   Znumpyr   Zpandasre   r"   Zscipyr   Z%statsmodels.distributions.mixture_rvsr   Zstatsmodels.nonparametric.kder   r   Z)statsmodels.sandbox.nonparametric.kernelsZsandboxZnonparametricr   Z$statsmodels.nonparametric.bandwidthsr   rn   dirnameabspath__file__rp   ro   Zrfnamerq   rr   rX   rx   r[   r   r   Znormdictr   r   r<   rT   rd   rg   rh   rj   rl   rt   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    <module>   sX   )			J
