o
    oi                      @   s`  d dl Z d dlZd dlmZ d dlmZmZmZmZm	Z	 d dl
Zd dlZd dlmZ d dlmZ d dlZd dlmZmZmZ d dlmZmZmZmZ d dlmZmZ d	Zd	Z	
	
d(deejejgejf dedede de de!fddZ"g ddddg ddddg dddddZ#de de$fd d!Z%d"e fd#d$Z&G d%d& d&ej'Z(e)d'kre*  dS dS ))    N)partial)CallableDictListOptionalUnion)logger)Tensor)DFenhanceinit_df)
HAS_OCTAVE	compositesi_sdr_speechmetricsstoi)
load_audio
save_audiog-C6? fcleanenhancedprefixmetric_namereturnc           	      C   s   t |d| d  t|}t| |d |d }|tj}t |d|   t |d|   tj||t	t
d }|sUt |d||    |S )Nz
Computing z metricsr   z	Expected z	Got      )atolrtolz	Diff     )r   infotorch	as_tensorsqueezenumpytofloat32isclose__a_tol__r_tolallerror)	r   r   r   m_targetr   r   m_tm_eis_close r,   P/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/df/scripts/test_df.pyeval_metric   s   
r.   )gRu@g'@g?@g߯o@g!g(۶?g   2@r   r   sdr)g@g  Я@g
  @g @g(  4gW?g   j3@)g_`@g  @g  (*@g   @g  ?g   `,?g   4@)DeepFilterNetDeepFilterNet2DeepFilterNet3namesrc                 C   s6   t t|dt t|ddgt t|dgtgd}||  S )Nr5   T)r5   
use_octaver/   )r   r   r   r   )r4   r5   METRICSr,   r,   r-   _get_metricQ   s
   r9   model_nc                 K   s:   | dd t| fi |\}}}td|   ||fS )Nconfig_allow_defaultsTzLoaded model )
setdefaultr   r   r   )r:   kwargsmodeldf_state_r,   r,   r-   _load_modelZ   s   rA   c                   @   sj   e Zd Zedd Z	ddejjdede	e
eeee f f dee
 fdd	Zd
d Zdd Zdd ZdS )TestDfModelsc                 C   sX   t jddd tjddd tjtjtjtj	tj
| _dd t D | _| S )	N   x   )	precision	linewidthoutT)exist_okc                 S   s   i | ]}|t |qS r,   )rA   ).0mr,   r,   r-   
<dictcomp>g   s    z+TestDfModels.setUpClass.<locals>.<dictcomp>)r   set_printoptionsosmakedirspathabspathjoindirnamedf__file__pardirdf_dirTARGET_METRICSkeysmodels)clsr,   r,   r-   
setUpClassb   s
   $zTestDfModels.setUpClassNr>   r?   target_metricsr   c              
   C   s   d| d}|d ur|d nd}|  }t|d  ttj| jtjjdd|\}}ttj| jtjjdd|\}	}t	|||d	d
}
t
||
| d	}| D ]'}t||dD ]}t|trgd|jvsgtrwt||	|
|| ||d}|ov|}qYqQ|s}J d S )Nzout/enhanced_z.wavz | r   zLoading audiosassetsznoisy_snr0.wavzclean_freesound_33711.wavT)padr6   r7   )r(   r   r   )r5   r   r   r   rM   rO   rQ   rV   rU   r   r   rX   r9   
isinstancer   keywordsr   r.   )selfr>   r?   r\   r   out_nr5   noisyr@   r   r   r+   nrJ   cur_is_closer,   r,   r-   _test_modelj   s.   zTestDfModels._test_modelc                 C   $   d}| j | j| t| |d d S )Nr1   r\   r   rf   rY   rW   ra   r>   r,   r,   r-   test_deepfilternet       zTestDfModels.test_deepfilternetc                 C   rg   )Nr2   rh   ri   rj   r,   r,   r-   test_deepfilternet2   rl   z TestDfModels.test_deepfilternet2c                 C   rg   )Nr3   rh   ri   rj   r,   r,   r-   test_deepfilternet3   rl   z TestDfModels.test_deepfilternet3)N)__name__
__module____qualname__classmethodr[   r   nnModuler
   r   strr   floatr   r   rf   rk   rm   rn   r,   r,   r,   r-   rB   a   s     

rB   __main__)r   r   )+rM   unittest	functoolsr   typingr   r   r   r   r   r    npr   logurur   r	   rS   
df.enhancer
   r   r   df.evaluation_utilsr   r   r   r   df.ior   r   r$   r%   ndarrayru   boolr.   rW   intr9   rA   TestCaserB   ro   mainr,   r,   r,   r-   <module>   s`   
%	3