U
    d»{j¬«  ã                   @   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   úY/var/www/html/bwave/python/venv/lib/python3.8/site-packages/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s�t‚d S )Néd   )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   Úsetupd   s    &ÿzTestDetrend.setupc                 G   s   t |ddiŽ d S )NÚatolç:Œ0âŽyE>)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  |¡|ƒ qÞt  |¡|ksÞt‚qÞd 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ej	 
d*d+d,d-d.g¡d/d0„ ƒZej	 
d1i ddiddidd,idd+idd-idd.ig¡d2d3„ ƒZd4d5„ Zd6d7„ Zej	 
dddg¡d8d9„ ƒZej	 
d:d,ej fd-ej!fd.d;d<„ fg¡d=d>„ ƒZ"d?d@„ Z#dAS )BÚ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 r¼td	t  t  |¡¡ ƒ}|}n|}|	d krÒt|
ƒ}n|	dk rèt|
ƒ }}	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	 �r°t 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�rät  |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 …< q‚d 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sœt‚|jd
 t | d|› �ƒjd	 ksÀt‚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¿   Ú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   sh  | 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|ƒ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)   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|ƒ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)   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   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Æ   Úscale_by_freqFr/   r^   r³   )r   rN   r   rL   r¯   rÉ   r   r    r”   r¡   r¢   rˆ   r   r   r×   )r   Úwinr¼   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s’t‚|jd | jjd ks¬t‚| 	d¡d	kröt
 | ¡ ¡dkröt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{®Gáz„?)rÁ   rÂ   )r®   r   rË   r   r¦   r”   r§   r¨   rˆ   Úgetr   r¶   rW   r   r©   r$   r6   ÚmaxÚ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>+  ó    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_equivalent'  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_equalA  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�   ü   sp   "
 	
ý

 ÿþ
#*/! 
ÿ
  ÿþ


ýÿ
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  
|¡¡s‚t‚d S )Nr‹   i!N,rÄ   g      4@Zsame)r¿   r�   r/   rŒ   )r   r”   r   gbX9´Èê?gü©ñÒMbP?r³   )r   rI   rJ   ÚrandnZrollZconvolverL   r   Zcoherer   rW   Zisrealr6   )ÚNr   r   ZcohsqÚfr   r   r   Útest_cohereU  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_inputj  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 )Néùÿÿÿéûÿÿÿr   rŠ   r'   )Zdtypeiöÿÿÿr%   r—   g>L\ž9™?gp4=¨?gùHŒ–êŸ«?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_cachingr  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s–t
‚d S )NéîÀ… é2   r!  ©Z	bw_methodr  r"  é3   )r   rI   rJ   r  r   r  Ú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&  r/  r   r   r   r   r  h  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.é*   Nr1  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'   r6  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"  r5  rÅ   r!  Nr7  r8  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)  Nr1  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   rC  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   rA  rB  rC  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)  rG  NrD  )r   rE  rH  r  r   rC  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(  r6  r)  g}ÇB8 ß?r"  N)r   rI   rJ   r  r   r  r   r;  )r   r.  rE  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   r2  r4  r9  r=  r>  r?  r@  rF  rI  rJ  rM  r   r   r   r   r0  •  s   	
r0  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.  rE  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/   rP  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/   r5  rP  rQ  r"  rR  rU  r   r   r   Ú"test_evaluate_equal_dim_and_num_lt  s    


z:TestGaussianKDEEvaluate.test_evaluate_equal_dim_and_num_ltN)rB   rC   rD   rS  rT  rV  rW  rX  r   r   r   r   rN  æ  s
   	rN  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_norm  s    $  ý
0rb  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   rY  Nr‰   rZ  rŠ   ru   )r   r›   r¶   r[  r\  r   rÉ   rM   re   r]  r   r×   r^  r   r   r   Útest_psd_oversampling(  s    $  ý
0rc  )Znumpy.testingr   r   r   r   Únumpyr   r)   Z
matplotlibr   r   r   rO   rP   rF   rG   r�   r  r  r0  rN  rb  rc  r   r   r   r   Ú<module>   sj   O  ÿÿõõä    <-Q6