U
    md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      ?)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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   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rtolg1\?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>gQ63E?)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
