U
    ÂmœdB°  ã                   @   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   úS/home/sam/Atlas/atlas_env/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   Úsetup_methodd   s    &ÿzTestDetrend.setup_methodc                 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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 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   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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>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  
|¡¡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_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 )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_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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*  r3  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.é*   Nr5  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'   r:  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&  r9  rÅ   r%  Nr;  r<  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-  Nr5  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"   ©r2  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   rG  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   rE  rF  rG  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-  rK  NrH  )r   rI  rL  r   r   rG  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,  r:  r-  g}ÇB8 ß?r&  N)r   rI   rJ   r  r   r  r   r?  )r   r2  rI  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   r2  Údatar   r   r   Útest_wrong_bw_methodø  s
    z*TestGaussianKDECustom.test_wrong_bw_methodN)rB   rC   rD   r6  r8  r=  rA  rB  rC  rD  rJ  rM  rN  rQ  r   r   r   r   r4  °  s   	
r4  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  r0  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+   r0  )r   r2  rI  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/   rT  r&  N)r   r   r›   r   r  r0  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+   r0  )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/   r9  rT  rU  r&  rV  rY  r   r   r   Ú"test_evaluate_equal_dim_and_num_lt.  s    


z:TestGaussianKDEEvaluate.test_evaluate_equal_dim_and_num_ltN)rB   rC   rD   rW  rX  rZ  r[  r\  r   r   r   r   rR    s
   	rR  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rf  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   r]  Nr‰   r^  rŠ   ru   )r   r›   r¶   r_  r`  r   rÉ   rM   re   ra  r   r×   rb  r   r   r   Útest_psd_oversamplingC  s    $  ý
0rg  )Znumpy.testingr   r   r   r   Únumpyr   r)   Z
matplotlibr   r   r   rO   rP   rF   rG   r�   r  r  r4  rR  rf  rg  r   r   r   r   Ú<module>   sj   O  ÿÿõõä    W-Q6