U
    FvfB                     @   s  d dl mZmZmZmZ d dlZd dlZd dlm	Z	m
Z
 G dd dZdd ZG dd	 d	Zejjd
ddgddgddejjddddgddejjdg dddddfdgdddddfdddgdddddfg dddddfg dddddfg dddddfg dddddfg ddddd fg d!ddddfg dddddfg ddd"ddfgd#d$d%d&d'd(d)d*d+d,d-gddG d.d/ d/Zd0d1 ZG d2d3 d3ZG d4d5 d5ZG d6d7 d7Zd8d9 Zd:d; ZdS )<    )assert_allcloseassert_almost_equalassert_array_equalassert_array_almost_equal_nulpN)mlab_apic                   @   s   e Zd Zdd Zejdddd Zd.dd	Zejj	d
ddgddgddd Z
ejj	dddddgddddgddd Zejj	dddgdd gdejj	dd!d"d#d$gd%d&d'd(gdd)d* Zejj	dddgdd gdd+d, Zd-S )/
TestStridec                 C   s   |}|j d k	r|j }q|S N)base)selfxy r   >/tmp/pip-unpacked-wheel-7vhvci0g/matplotlib/tests/test_mlab.pyget_base
   s    
zTestStride.get_baseT)autousec              	   c   s   t   d V  W 5 Q R X d S r	   )r   Z'suppress_matplotlib_deprecation_warningr   r   r   r   stride_is_deprecated   s    
zTestStride.stride_is_deprecatedr   c           
      C   s|   || }t dt|| d |}t|}t ||f}t|D ](}	|||	 ||	 |  |dd|	f< q@|dkrx|j}|S )z
        This is an adaptation of the original window extraction algorithm.
        This is here to test to make sure the new implementation has the same
        result.
        r      N)nparangelenzerosrangeT)
r   r   NFFTnoverlapaxisstepindnresultir   r   r   calc_window_target   s    &zTestStride.calc_window_targetshaper   )
   r   Z0DZ2D)idsc              	   C   s<   t t ||}tt t|d W 5 Q R X d S )N   )	r   r   prodZreshapepytestraises
ValueErrorr   stride_windows)r   r$   r   r   r   r   'test_stride_windows_invalid_input_shape'   s    z2TestStride.test_stride_windows_invalid_input_shapezn, noverlap)r   N)   N)   r/   )r/      zn less than 1zn greater than inputznoverlap greater than nznoverlap equal to nc              	   C   s2   t d}tt t||| W 5 Q R X d S )Nr%   )r   r   r)   r*   r+   r   r,   )r   r    r   r   r   r   r   "test_stride_windows_invalid_params-   s    
z-TestStride.test_stride_windows_invalid_paramsr   r   Zaxis0Zaxis1)r   r   )r'   r   )   r/   )   zn1-noverlap0zn5-noverlap0zn15-noverlap2zn13-noverlapn3c                 C   s   t d}tj||||d}ddg}|||< d||  |d| < | j||||d}|j|jksbtt|| t||jks~t| 	||kstd S )Nd   )r   r   r   r   )
r   r   r   r,   r#   r$   AssertionErrorr   tupler   )r   r    r   r   r   r   Zexpected_shapeZytr   r   r   test_stride_windows7   s    

zTestStride.test_stride_windowsc                 C   sd   d}t |t j }t |d}| }tj|||d}|dkrF|j}|j|jksVt	t
|| d S )N    )   r   r   r   )r   r   newaxistileflattenr   r,   r   r$   r6   r   )r   r   r    r   x1x2r   r   r   r   +test_stride_windows_n32_noverlap0_unflattenJ   s    z6TestStride.test_stride_windows_n32_noverlap0_unflattenN)r   r   )__name__
__module____qualname__r   r)   fixturer   r#   markparametrizer-   r1   r8   rA   r   r   r   r   r   	   s2   






 r   c                  C   s   t jd d} t j| d }t | }tt|| tt|| tt t	|| t
| tt t	|t
| d S )Nr     r5   )r   randomseedstandard_normalonesr   r   window_noneZhanningr   window_hanning)r    ZrandrL   r   r   r   test_windowX   s    
rO   c                   @   sd   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )TestDetrendc                 C   s   t jd d}t dd|}t || _| jd | _t dd|| _||  | _	t j
|t |d t j |d   | _|  j| j 8  _d S )	Nr   rH           r5         Y@g      $g     V@r/   )r   rI   rJ   linspacer   	sig_zerossig_off	sig_slopemeansig_slope_meanrK   sinpisig_base)r   r    r   r   r   r   setup_methodd   s    &zTestDetrend.setup_methodc                 G   s   t |ddi d S )Natol:0yE>)r   )r   argsr   r   r   allcloses   s    zTestDetrend.allclosec                 C   s  t ddkstt jddddks(tt jddddks>tt jdt jddksVtd| j| j| j| j| j | j  t	| j| j| j | j| j | j| j | j gt	| j| j| j | j| j | j| j | j gj
fD ]6}t|tjrtt || qt ||kstqd S )NrQ   r   r;   nonekey      @)r   detrend_noner6   detrendrU   rV   r[   tolistr   vstackr   
isinstanceZndarrayr   r   sigr   r   r   test_detrend_nonev   s.       



zTestDetrend.test_detrend_nonec                 C   s   dD ]D}t |dkstt j|dddks0tt j|t jddkstq| t | j| j | t | j| j | t | j| j | j | t | j| j | j| j	  | t | j| j | j | j| j	  d S )N)rQ   rd   rQ   rW   rb   )
r   detrend_meanr6   rf   r`   rT   r[   rU   rV   rX   rj   r   r   r   test_detrend_mean   s     

zTestDetrend.test_detrend_meanc                 C   sh   | j | j | j }| j | j }| tj|dd| | t| | | tj| dd| d S Nr   r;   )r[   rV   rU   rX   r`   r   rm   rg   r   inputtargetr   r   r   4test_detrend_mean_1d_base_slope_off_list_andor_axis0   s
    z@TestDetrend.test_detrend_mean_1d_base_slope_off_list_andor_axis0c                 C   s  t | j| j| j g}t | j| jg}| t|| | tj|d d| | tj|jd dj| | t	|| | tj	|d d| | tj	|jdd d|j t | j| j| j | j| j
 | j| j | j
 g}t | j| j| j| j | j| j g}| tj|jdd|j | tj|dd| | tj|dd| | tj	|ddd| | tj	|jddd|j | tj	|jtjdd|j d S )	Nr;   Zconstantrc   r   r   r   defaultrW   )r   rh   rU   r[   rT   r`   r   rm   r   rf   rV   rX   rp   r   r   r   test_detrend_mean_2d   sD    
 



 z TestDetrend.test_detrend_mean_2dc              
   C   s   | j tj ddif| j tj ddifdddif| j ddif| j tj ddiffD ],\}}tt tj|f| W 5 Q R X qPd S )	Nrc   spamr'   rd   r   r   r   r/   )rV   r   r<   r)   r*   r+   r   rf   r   signalkwargsr   r   r   test_detrend_ValueError   s    
z#TestDetrend.test_detrend_ValueErrorc              
   C   s^   dddif| j ddif| j tj ddiffD ],\}}tt tj|f| W 5 Q R X q,d S )Nrd   r   r   r   r/   )rV   r   r<   r)   r*   r+   r   rm   ry   r   r   r   test_detrend_mean_ValueError   s    
z(TestDetrend.test_detrend_mean_ValueErrorc                 C   s   t ddkstt ddks$tt jddddks:tt jdt jddksRt| j| j| j| j fD ]}| t || j qhd S )NrQ   rd   linearrb   )r   detrend_linearr6   rf   rU   rV   r`   rT   rj   r   r   r   test_detrend_linear   s    
zTestDetrend.test_detrend_linearc                 C   sZ   | j | j }| j}| tj|dd| | tj|tjd| | t| | d S )Nr~   rb   )rV   rU   rT   r`   r   rf   r   rg   rp   r   r   r   test_detrend_str_linear_1d   s
    z&TestDetrend.test_detrend_str_linear_1dc              	   C   s   t | j| j| j| j g}t | j| j| jg}| tj|jddd|j | tj|jtj	dd|j | tj|ddd| | tj|tj	dd| t
t t	| jt j  W 5 Q R X d S )Nr~   r   rt   r   )r   rh   rU   rV   rT   r`   r   rf   r   r   r)   r*   r+   r<   rp   r   r   r   test_detrend_linear_2d   s4    
    z"TestDetrend.test_detrend_linear_2dN)rB   rC   rD   r\   r`   rl   rn   rs   rw   r|   r}   r   r   r   r   r   r   r   rP   c   s   	rP   	iscomplexFTrealcomplexclass)r&   scopesidesonesidedZtwosidedrv   )r   zFfstims,len_x,NFFT_density,nover_density,pad_to_density,pad_to_spectrumru      r'   r%      i         !   i     r9   ZnosigZFs4ZFsAllZnosig_noNFFTZnosig_nopad_toZnosig_noNFFT_no_pad_toZ
nosig_trimZ	nosig_oddZnosig_oddlenZnosig_stretchZnosig_overlapc                   @   s  e Zd Zejddddd Zdd Zdd	 Zd
d Zej	
dddgdd Zej	
ddddgdd Zdd Zdd Zdd Zej	
dejejfejdfejejfejdfgd d! Zd"d# Zd$d% Zd&d' Zd(d) Zd*d+ Zej	
d,d-d.d/d0gd1d2 Zej	
d3i ddiddidd.idd-idd/idd0igd4d5 Zd6d7 Zd8d9 Zej	
dddgd:d; Z ej	
d<d.ej!fd/ej"fd0d=d> fgd?d@ Z#dAdB Z$dCS )DTestSpectralr   T)r   r   c
           $         s  d t ddd  }
|d k	r*|
d | }
 fdd|D }|d krJd}n|dk r\d }}n|}|d krnd}n|dk r|d	  }}n|}|d kr|}n*|dk rtd	t t | }|}n|}|	d krt|
}n|	dk rt|
 }}	n|	}|	d kr| }}nt|
 }}d}|}|}|}|}|}|d
ks<|dkr|s|d	 rht jd d	 |ddd d d	 }nt jd d	 |d	 d d}|d	 rt jd d	 |ddd d d	 }nt jd d	 |d	 d d}n|d	 rt j  d	  d	 d	| dddd d	 }nt j  d	  d	 |dd}|d	 rVt j  d	  d	 d	| dddd d	 }nt j  d	  d	 |dd}|}|d	 }t|
|d	  d }|| }|
||| }|d	 r|d  d	 7 }t|dkrt |d	   g}t |d	   g}|}t |
} t	|D ].\}!}"| t 
|"|
 t j d	 d|!  7 } q|rN| d} |j}# |#_||#_||#_||#_||#_||#_||#_||#_|	|#_||#_||#_||#_||#_||#_||#_| |#_||#_||#_||#_ ||#_!d S )NrR   r   r%   r   c                    s   g | ]} | qS r   r   ).0fstimFsr   r   
<listcomp>(  s     z%TestSpectral.stim.<locals>.<listcomp>r   r5   r/   r   rv   F)numZendpointr   r   )"r   r   intceillog2r   rS   array
zeros_like	enumeraterY   rZ   Zastypeclsr   r   fstimsNFFT_densitynover_densitypad_to_densityNFFT_spectrumnover_spectrumpad_to_spectrumNFFT_specgramnover_specgrampad_to_specgram
t_specgram	t_density
t_spectrumr   freqs_densityfreqs_spectrumfreqs_specgramNFFT_density_real)$r   requestr   r   r   Zlen_xr   r   r   r   r   r   Znover_density_realZpad_to_density_realZpad_to_spectrum_realZNFFT_spectrum_realr   r   r   r   r   ZNFFT_specgram_realZnover_specgram_realr   r   r   Zt_startZt_stopZt_stepr   r   r   r   r"   r   r   r   r   r   stim  s    










(
zTestSpectral.stimc                 C   s   |  dkst| t|d ks(tt||dd |D ]F}t||   }|| ||d  ksht|| ||d  ks:tq:d S )Nr   r   ư>r]   r/   )argminr6   argmaxr   r   r   abs)r   valsZ	targfreqsZresfreqsr   r   r"   r   r   r   check_freqs  s    zTestSpectral.check_freqsc           
      C   s   t |dkrd S | dk rnt|}| }| |d | |d | | | ||d  ||d  | d S |d d  }| }|r| }|| }	t|	|d  |d= d||d |d < qd S )Nr   ru   r'   )	r   minr   r   r   check_maxfreqcopyr   r   )
r   specfspr   fspaZzeroindZfstimstZspectZmaxindZmaxfreqr   r   r   r     s     
zTestSpectral.check_maxfreqc                 C   s   | j d dd| j d dd| j d dd| j d ddddi| j d	d
| j dddddd| j dtddf	D ]0}tt tjf d| j i| W 5 Q R X qrd S )Nr   r   )r   mode	magnitudeanglephaser   rx   eggs)r   r   r%      )r   r   r   )r   r   	   )r   r   windowr   )r   r   rL   r)   r*   r+   r   _spectral_helper)r   r{   r   r   r   test_spectral_helper_raises  s    
z(TestSpectral.test_spectral_helper_raisesr   rv   psdc              	   C   s*   t t tj| j|d W 5 Q R X d S )N)r   r   )r)   r*   r+   r   Z_single_spectrum_helperr   )r   r   r   r   r   -test_single_spectrum_helper_unsupported_modes  s    z:TestSpectral.test_single_spectrum_helper_unsupported_modesz
mode, case)r   Zdensity)r   specgram)r   Zspectrumc              
   C   s   t | d| }tj| j| jt | d| | jt | d| t | d| | j|d\}}}t||dd t|t | d| dd |jd	 |jd	 kst|jd
 t | d| jd	 kstd S )NZfreqs_ZNFFT_Znover_Zpad_to_)r   r   r   r   r   pad_tor   r   r   r   Zt_r   r   )	getattrr   r   r   r   r   r   r$   r6   )r   r   Zcasefreqsr   r   tr   r   r   test_spectral_helper_psd  s     	z%TestSpectral.test_spectral_helper_psdc              	   C   sV   | j }tj| j| jd | j| j| j| j| jd\}}t	||dd |j
|j
ksRtd S )Nr   r   r   r   r   r   r   r   r   r   )r   r   csdr   r   r   r   r   r   r   r$   r6   r   r   r   r   r   r   r   test_csd  s    
zTestSpectral.test_csdc                 C   s   | j dkrdS t| j| jd | jtj| jd}tjf d| j i|\}}tjf d| j d i|\}}tt	
t	|| jt	
t	|d | d j dS )zTest zero padding of csd().Nr   )r   r   r   r   r   r   r/   )r   dictr   r   r   rM   r   r   r   r   sum	conjugater   )r   ZsargsZspec0_Zspec1r   r   r   test_csd_padding
  s    
zTestSpectral.test_csd_paddingc                 C   sR   | j }tj| j| j| j| j| j| jd\}}|j	|j	ks<t
| |||| j d S )Nr   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r$   r6   r   r   r   r   r   r   test_psd  s    
zTestSpectral.test_psdzmake_data, detrendrW   r~   c              	   C   s  | j d krd S || j }|d }|d }t||g}t|d}|j }| }t|}tj|| j | j	d| j
|d\}}	tj|| j | j	d| j
|d\}
}tj|| j | j	d| j
d\}}t|	| t|| t||dd tt t|
|dd W 5 Q R X d S )	Nr'   ffffff
@r   r   r   )r   r   r   r   r   rf   )r   r   r   r   r   r^   r   )r   r   rh   r=   r   r>   r   r   r   r   r   r   r   r)   r*   r6   )r   Z	make_datarf   ydataydata1ydata2ydatabycontrolspec_gfsp_gspec_bfsp_bspec_cfsp_cr   r   r   test_psd_detrend!  sF    








zTestSpectral.test_psd_detrendc              	   C   sb  | j d krd S t| j }|d }|d }tt|}|| }t|}t||g}t||g}t|d}t|d}|j	 }|	 }	|	 }tj
|	| j | jd| jtjd\}
}tj
|| j | jd| jtjd\}}tj
|| j | jd| jtjd\}}|t||d   9 }t|| t|| t|
|dd tt t||dd W 5 Q R X d S )	Nr'   r   r   r   r   r   r   r   r   r   r/   r^   r   )r   r   r   r   rN   	ones_likerh   r=   r   r>   r   r   r   rM   r   r   r   r   r)   r*   r6   )r   r   r   r   
windowVals	ycontrol1	ycontrol2r   r   ydatafr   r   r   r   r   r   r   r   r   test_psd_window_hanningH  sT    







z$TestSpectral.test_psd_window_hanningc              	   C   s~  | j d krd S t| j }t| j }|d }|d }|}|}tt|}|| }t|}t||g}t||g}t|d}t|d}|j	
 }|
 }	|
 }tj|	| j | jd| jtjtjd\}
}tj|| j | jd| jtjtjd\}}tj|| j | jd| jtjd\}}|t||d   9 }t|| t|| t|
|dd	 tt t||dd	 W 5 Q R X d S )
Nr'   r   r   r   )r   r   r   r   r   rf   r   r   r/   r^   r   )r   r   r   r   r   rN   r   rh   r=   r   r>   r   r   r   r   rM   r   r   r   r   r)   r*   r6   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   &test_psd_window_hanning_detrend_linearr  s^    







z3TestSpectral.test_psd_window_hanning_detrend_linearc           	   	   C   s   dddddg}t t j t j| j}t | j}tt|D ]}||| t ||  7 }q<tj	| j
| j| jd| j|dd\}}tj	| j
| j| jd| j|d	\}}t|| d
  || j |d
   dd d S )Ng^M?g+?g<?g'ne?gt|?r   F)r   r   r   r   r   r   scale_by_freqr   r/   r^   r   )r   rS   rZ   r   r   r   r   cosr   r   r   r   r   r   r   r   )	r   aZfacwinkr   r   Zspec_aZfsp_ar   r   r   test_psd_window_flattop  s0    

z$TestSpectral.test_psd_window_flattopc              
   C   sX   | j }tj| j| j| j| j| j| jt	
| jd\}}t||dd |j|jksTtd S )Nr   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   rL   r   r   r$   r6   r   r   r   r   test_psd_windowarray  s    

z!TestSpectral.test_psd_windowarrayc              
   C   s   t t| j}t j| j| j| j| j	| j
| jt jd\}}t j| j| j| j| j	| j
| jt jdd\}}t j| j| j| j| j	| j
| jt jdd\}}t|| t|| t|| t||d   || j | d  dd d S )Nr   T)r   r   r   r   r   r   r   r   Fr/   r^   r   )r   rN   r   rL   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   Zspec_sZfsp_sZspec_nZfsp_nr   r   r   "test_psd_windowarray_scale_by_freq  sD    





z/TestSpectral.test_psd_windowarray_scale_by_freqkindr   r   r   r   c                 C   sz   | j }tt| d| j| j| j| jd\}}t||dd |j|jksLt	|dkrv| 
||| j | |||| j d S )NZ	_spectrum)r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   r$   r6   r   r   r   )r   r   r   r   r   r   r   r   test_spectrum  s      
zTestSpectral.test_spectrumr{   c              	   C   s  | j }tjf | j| j| j| j| j| jd|\}}}|	ddkrNt
|}t
j|dd}t||dd t|| jdd |jd |jd kst|jd | jjd kst|	dd	krt
| dkrtt
j|dd t
|  dd
d |	ddkr| |||| j d S )Nr   r   r   r   r;   r   r   r   )r   r   r   g{Gz?)r   r   )r   r   r   r   r   r   r   r   r   getr   r   rW   r   r   r$   r6   maxZdiffr   r   )r   r{   r   r   r   r   specmr   r   r   test_specgram  s4    

 zTestSpectral.test_specgramc              	   C   s8   t jtdd  tj| jt| j| jd W 5 Q R X dS )z+Warning should be raised if len(x) <= NFFT.zOnly one segment is calculated)match)r   r   r   N)r)   ZwarnsUserWarningr   r   r   r   r   r   r   r   r   test_specgram_warn_only1seg  s    z(TestSpectral.test_specgram_warn_only1segc              	   C   sh   t j| j| j| j| j| j| jd\}}t j| j| j| j| j| j| j| jd\}}t	|| t
|| d S )Nr   r   )r   r   r   r   r   r   r   r   r   r   r   )r   ZPxxZfreqsxxZPxyZfreqsxyr   r   r   test_psd_csd_equal  s     


zTestSpectral.test_psd_csd_equalc              	   C   st   t j| j| j| j| j| j| jd\}}}t j| j| j| j| j| j| j|d\}}}t|| t|| t|| dS )zr
        Test that mlab.specgram without mode and with mode 'default' and 'psd'
        are all the same.
        r   r   r   r   r   r   r   r   N)	r   r   r   r   r   r   r   r   r   )r   r   specaZ	freqspecataspecbZ	freqspecbtbr   r   r   $test_specgram_auto_default_psd_equal+  s$    

z1TestSpectral.test_specgram_auto_default_psd_equalz
mode, convc                 C   s   t jt | ddS ro   )r   unwrapr   r   r   r   r   <lambda>F      zTestSpectral.<lambda>c           	   	   C   s~   t j| j| j| j| j| j| jdd\}}}t j| j| j| j| j| j| j|d\}}}t|| t|| t	|||dd d S )Nr   r  r   r   )
r   r   r   r   r   r   r   r   r   r   )	r   r   convZspeccZ	freqspeccZtcr   Z	freqspecmtmr   r   r    test_specgram_complex_equivalentB  s&    

z-TestSpectral.test_specgram_complex_equivalentc              	   C   s|   t t| j}t j| j| j| j| j	| j
| j|d\}}t j| j| j| j| j	| j
| jd\}}t|| t||dd d S )Nr   r   r^   r   )r   rN   r   rL   r   r   r   r   r   r   r   r   r   r   )r   r   r  r   r  Zfspbr   r   r   test_psd_windowarray_equal\  s$    


z'TestSpectral.test_psd_windowarray_equalN)%rB   rC   rD   r)   rE   r   r   r   r   rF   rG   r   r   r   r   r   r   r   r   rm   r   r   r   r   r   r   r   r   r   r   r  r  r
  r   r   r  r  r   r   r   r   r      sr   "
 	


 
#*/! 

  



r   c                  C   s   d} t jd t j| }t |d}t j|t dd dd}tj||ddd	d
\}}t	t 
|ddd t t 
|std S )Nr   i!N,r   g      4@Zsame)r   r   r/   r   )r   r   r   gbX9?gMbP?r   )r   rI   rJ   randnZrollZconvolverL   r   Zcoherer   rW   Zisrealr6   )Nr   r   Zcohsqfr   r   r   test_coherep  s    r  c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestGaussianKDEc                 C   s<   t d}t|}dddddg}t jj|||dd dS )zRegression test for #1181.r'   gB\A?gES?g
f?   decimalN)r   r   r   GaussianKDEtestingassert_array_almost_equal)r   r?   kde
y_expectedr   r   r   test_kde_integer_input  s    

z&TestGaussianKDE.test_kde_integer_inputc                 C   s`   t jdddddgtd}t jdddd	}d
ddddg}t|d}||}t jj||dd d S )Nr   r   r'   )Zdtypeir%   r   g>L\9?gp4=?gH꟫?g8(H	MT?gĲCR?scott   r  )r   r   floatrS   r   r  r  r  )r   r?   xsr  Zkde2y2r   r   r   $test_gaussian_kde_covariance_caching  s    z4TestGaussianKDE.test_gaussian_kde_covariance_cachingc           
      C   s   t jd d}t j|}t|}t|d}tj||jd}t ddd}||}||}|	 |	 ksxt
||}	|	 |		 kst
d S )N 2   r#  Z	bw_methodr!  r$  3   )r   rI   rJ   r  r   r  ZfactorrS   evaluateallr6   )
r   n_basesampleZxnZgkdeZgkde2Zgkde3r&  ZkdepdfZkdepdf2Zkdepdf3r   r   r   test_kde_bandwidth_method  s    



z)TestGaussianKDE.test_kde_bandwidth_methodN)rB   rC   rD   r   r(  r0  r   r   r   r   r    s   r  c                   @   sd   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd ZdS )TestGaussianKDECustomc              	   C   s$   t t tg  W 5 Q R X dS )z(Pass no data into the GaussianKDE class.Nr)   r*   r+   r   r  r   r   r   r   test_no_data  s    z"TestGaussianKDECustom.test_no_datac              	   C   s&   t t tdg W 5 Q R X dS )z9Pass a single dataset element into the GaussianKDE class.*   Nr2  r   r   r   r   test_single_dataset_element  s    z1TestGaussianKDECustom.test_single_dataset_elementc              	   C   sL   t dddgdddgddd	gg}tt jj t|d
 W 5 Q R X dS )z/Test silverman's for a multi-dimensional array.r   r/   r0   r   r'   r  r$     r   	silvermanNr   r   r)   r*   ZlinalgZLinAlgErrorr   r  r   r?   r   r   r   test_silverman_multidim_dataset  s    "z5TestGaussianKDECustom.test_silverman_multidim_datasetc                 C   s8   t dddddg}t|d}d}t| |d d	S )
z4Test silverman's output for a single dimension list.r!  r"  r   r   r'   r7  g/?r$  Nr   r   r   r  r   covariance_factorr   r?   Zmygaussr  r   r   r    test_silverman_singledim_dataset  s    z6TestGaussianKDECustom.test_silverman_singledim_datasetc              	   C   sL   t dddgdddgddd	gg}tt jj t|d
 W 5 Q R X dS )z2Test scott's output for a multi-dimensional array.r   r/   r0   r   r'   r  r$  r6  r   r#  Nr8  r9  r   r   r   test_scott_multidim_dataset  s    "z1TestGaussianKDECustom.test_scott_multidim_datasetc                 C   s8   t dddddg}t|d}d}t| |d d	S )
z/Test scott's output a single-dimensional array.r!  r"  r   r   r'   r#  g	e1?r$  Nr;  r=  r   r   r   test_scott_singledim_dataset  s    z2TestGaussianKDECustom.test_scott_singledim_datasetc              	   C   s(   t t tjg dd W 5 Q R X dS )z0Test the scalar's cov factor for an empty array.r'   r+  Nr2  r   r   r   r   test_scalar_empty_dataset  s    z/TestGaussianKDECustom.test_scalar_empty_datasetc                    sH   t jd d  fddtdD }tj|dd}| dksDtdS )	zTest a scalar's cov factor.r)  r*  c                    s   g | ]}t j qS r   r   rI   r  r   r"   r/  r   r   r     s     zHTestGaussianKDECustom.test_scalar_covariance_dataset.<locals>.<listcomp>r'   g      ?r+  Nr   rI   rJ   r   r   r  r<  r6   )r   multidim_datar  r   rD  r   test_scalar_covariance_dataset  s
    z4TestGaussianKDECustom.test_scalar_covariance_datasetc                    sP   t jd d  fddtdD }dd }tj||d}| d	ksLtd
S )z=Test the callable's cov factor for a multi-dimensional array.r)  r*  c                    s   g | ]}t j qS r   rB  rC  rD  r   r   r     s     zJTestGaussianKDECustom.test_callable_covariance_dataset.<locals>.<listcomp>r'   c                 S   s   dS )N皙?r   r  r   r   r   callable_fun  s    zLTestGaussianKDECustom.test_callable_covariance_dataset.<locals>.callable_funr+  rH  NrE  )r   rF  rI  r  r   rD  r    test_callable_covariance_dataset  s    z6TestGaussianKDECustom.test_callable_covariance_datasetc                 C   sB   t jd d}t j|}tj|dd}d}t| |d dS )z>Test the callable's cov factor for a single-dimensional array.r)  r*  r7  r+  g}B8 ?r$  N)r   rI   rJ   r  r   r  r   r<  )r   r/  rF  r  r  r   r   r   test_callable_singledim_dataset  s    z5TestGaussianKDECustom.test_callable_singledim_datasetc              	   C   sD   t jd d}t j|}tt tj|dd W 5 Q R X dS )z@Test the error message that should be called when bw is invalid.r)  r*  invalidr+  N)	r   rI   rJ   r  r)   r*   r+   r   r  )r   r/  datar   r   r   test_wrong_bw_method  s
    z*TestGaussianKDECustom.test_wrong_bw_methodN)rB   rC   rD   r3  r5  r:  r>  r?  r@  rA  rG  rJ  rK  rN  r   r   r   r   r1    s   	
r1  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestGaussianKDEEvaluatec                 C   sR   t ddd}t|}t ddd}dddddg}||}t j||d d	S )
zr
        Test the evaluate method when the dim's of dataset and points have
        different dimensions.
        r0   r%   r/      X]?AG$?g;]?r$  Nr   r   r   r  r-  r  r  )r   r?   r  r@   r  r   r   r   r   test_evaluate_diff_dim  s    
    
z.TestGaussianKDEEvaluate.test_evaluate_diff_dimc              	   C   sZ   t jd d}t j|}t|}dgdgdgg}tt |	| W 5 Q R X dS )z
        Invert the dimensions; i.e., for a dataset of dimension 1 [3, 2, 4],
        the points should have a dimension of 3 [[3], [2], [4]].
        r)  r*  r   r/   r0   N)
r   rI   rJ   r  r   r  r)   r*   r+   r-  )r   r/  rF  r  r@   r   r   r   test_evaluate_inv_dim  s    
z-TestGaussianKDEEvaluate.test_evaluate_inv_dimc                 C   sH   t ddd}t dg}t|}dg}||}t j||d dS )z-Tests if evaluated against a one by one arrayr0   r%   r/   rQ  r$  N)r   r   r   r   r  r-  r  r  r   r?   r@   r  r  r   r   r   r   test_evaluate_dim_and_num  s    

z1TestGaussianKDEEvaluate.test_evaluate_dim_and_numc              	   C   sX   t ddd}t dddt dddg}t|}tt || W 5 Q R X d S )Nr0   r%   r/   )r   r   r   r  r)   r*   r+   r-  )r   r?   r@   r  r   r   r   test_evaluate_point_dim_not_one'  s
    
z7TestGaussianKDEEvaluate.test_evaluate_point_dim_not_onec                 C   sN   t ddd}t ddd}t|}dddg}||}t j||d d S )Nr0   r%   r/   r6  rQ  rR  r$  rS  rV  r   r   r   "test_evaluate_equal_dim_and_num_lt.  s    


z:TestGaussianKDEEvaluate.test_evaluate_equal_dim_and_num_ltN)rB   rC   rD   rT  rU  rW  rX  rY  r   r   r   r   rO    s
   	rO  c                  C   s   t dddddddg} d}t t j| | d || j  }tj| | jd| tjtjdd d dd	\}}t 	|d g|dd |dd  d d d	  }t
||d
d d S )Nr   r   r/   r0         ?r   r   r   r   rf   r   r   r   r   r   ru   r   r   )r   r   r   fftsizer   r   rM   re   appendr   udtZSuPr  ZSu_1sider   r   r   test_psd_onesided_norm7  s    $  
0rc  c                  C   s   t dddddddg} d}t t j| | d || j  }tj| | jd d| tjtjddddd	\}}t 	|d g|dd	 |d	d ddd
  }t
t |t | dS )z&Test the case len(x) < NFFT for psd().r   r   r/   r0   rZ  Nr   r[  r   ru   )r   r   r   r\  r]  r   r   rM   re   r^  r   r   r_  r   r   r   test_psd_oversamplingC  s    $  
0rd  )Znumpy.testingr   r   r   r   Znumpyr   r)   Z
matplotlibr   r   r   rO   rP   rF   rG   r   r  r  r1  rO  rc  rd  r   r   r   r   <module>   sj   O      W-Q6