o
    }oi@                     @   s.  d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	 e j
dd Ze j
dd	 Ze j
d
d Ze j
d ddZe jjd	e	fddZe jjd	e	fddZe jjd	e	fddZe jjd	e	fddZe jjd	e	fddZe jjd	e	fddZe jjd	e	fddZe jjd	e	fddZdS )!    N)	rearrange
DictConfig)mask_sequence_tensor)SpectrogramEnhancerModelc                  C   sv   d} d}d}d}d}| |||d|d| ||||dd| ||d	d
ddddd dddddgdddddgdd}t |S )NP            g?z;nemo.collections.tts.modules.spectrogram_enhancer.Generator)_target_n_bands
latent_dimnetwork_capacitystyle_depthfmap_maxz?nemo.collections.tts.modules.spectrogram_enhancer.Discriminator)r   r   r   r   g\(\*gQ@g      $@)r   r   r   r   
mixed_probr   	generatordiscriminatorspectrogram_min_valuespectrogram_max_valueconsistency_loss_weightgradient_penalty_loss_weight#gradient_penalty_loss_every_n_stepsspectrogram_predictor_pathztorch.optim.Adamg-C6*?g      ?)r   lrbetas)modelgenerator_optdiscriminator_optr   )r   r   r   r   r   config r    c/home/ubuntu/.local/lib/python3.10/site-packages/tests/collections/tts/test_spectrogram_enhancer.pyenhancer_config   sD   	!r"   c                 C      t | jdS N)cfgr   r   )r"   r    r    r!   enhancerD      r'   c                 C   r#   r$   r&   )enhancer_config_with_fastpitchr    r    r!   enhancer_with_fastpitchI   r(   r*        c                 C   sT   t  }|d t j|d |d | f|d}t j| ddf|d}t||}||fS )Nr   r	      )r   r   r,   )torch	Generatormanual_seedrandintrandnr   )
batch_size
max_lengthr   lengthsinput_spectrogramsr    r    r!   sample_inputN   s   

r7   c                 C   s.   |\}}|  |}|d|dksJ d S )N)pad_spectrogramssizer'   r7   r6   r5   outputr    r    r!   test_pad_spectrograms[   s   
r=   c                 C   4   |\}}|  | |||}tj||ddsJ d S Ngh㈵>)atol)unnormalize_spectrogramsnormalize_spectrogramsr.   allcloser'   r7   r6   r5   same_input_spectrogramsr    r    r!   test_spectrogram_norm_unnormc   
   rF   c                 C   r>   r?   )rB   rA   r.   rC   rD   r    r    r!   test_spectrogram_unnorm_norml   rG   rH   c                 C   n   |\}}|  | |||}t| D ] \}}tj||d d d |f ||d d d |f dds4J qd S r?   )rA   rB   	enumeratetolistr.   rC   r'   r7   r6   r5   rE   ilengthr    r    r!   1test_spectrogram_norm_unnorm_dont_look_at_paddingu      :rO   c                 C   rI   r?   )rB   rA   rJ   rK   r.   rC   rL   r    r    r!   1test_spectrogram_unnorm_norm_dont_look_at_padding   rP   rQ   c                 C   s*   |\}}| j ||d}|j|jksJ d S )N)r6   r5   )forwardshaper;   r    r    r!   test_generator_pass_keeps_size   s   rT   c                 C   s6   |\}}t |d}| j|||d}|j|jksJ d S )Nzb c l -> b 1 c l)x	conditionr5   )r   r   rS   )r'   r7   r6   r5   logitsr    r    r!   test_discriminator_pass   s   
rX   c                 C   s    |d }|  | t| d S )Nztest-enhancer-save-load.nemo)save_tor   restore_from)r'   tmp_pathpathr    r    r!   test_nemo_save_load   s   
r]   )r+   r,   )pytestr.   einopsr   	omegaconfr   #nemo.collections.common.parts.utilsr   nemo.collections.tts.modelsr   fixturer"   r'   r*   r7   markunitr=   rF   rH   rO   rQ   rT   rX   r]   r    r    r    r!   <module>   s<   
+

		