o
    }oi                     @   sh   d dl Z d dlmZmZ d dlmZmZ d dlmZ G dd deZ	G dd deZ
G d	d
 d
eZdS )    N)Loss	typecheck)LossTypeVoidType)
NeuralTypec                   @   6   e Zd ZdZedd Zedd Ze dd ZdS )	FeatureMatchingLosszFeature Matching Loss modulec                 C   s"   t t dggt t dggdS )Nelements_type)fmap_rfmap_gr   r   self r   ^/home/ubuntu/.local/lib/python3.10/site-packages/nemo/collections/tts/losses/hifigan_losses.pyinput_types3   s   zFeatureMatchingLoss.input_typesc                 C   s   dt t diS )Nlossr	   r   r   r   r   r   r   output_types:   s   z FeatureMatchingLoss.output_typesc              	   C   sL   d}t ||D ]\}}t ||D ]\}}|tt|| 7 }qq|d S )Nr      )ziptorchmeanabs)r   r   r   r   drdgrlglr   r   r   forward@   s   zFeatureMatchingLoss.forwardN	__name__
__module____qualname____doc__propertyr   r   r   r   r   r   r   r   r   0   s    

r   c                   @   r   )	DiscriminatorLosszDiscriminator Loss modulec                 C   s   t dt gt dt gdS )NBT)disc_real_outputsdisc_generated_outputsr   r   r   r   r   r   M   s   zDiscriminatorLoss.input_typesc                 C   s(   t t dt t dgt t dgdS )Nr	   )r   real_lossesfake_lossesr   r   r   r   r   r   T   s   
zDiscriminatorLoss.output_typesc           
      C   sr   d}g }g }t ||D ](\}}td| d }t|d }	|||	 7 }||  ||	  q|||fS Nr      r   )r   r   r   appenditem)
r   r*   r+   r   r_lossesg_lossesr   r   r_lossg_lossr   r   r   r   \   s   
zDiscriminatorLoss.forwardNr    r   r   r   r   r&   J   s    

r&   c                   @   r   )	GeneratorLosszGenerator Loss modulec                 C   s   dt dt giS )Ndisc_outputsr'   r   r   r   r   r   r   n   s   zGeneratorLoss.input_typesc                 C   s   t t dt t dgdS )Nr	   )r   r-   r   r   r   r   r   r   t   s   
zGeneratorLoss.output_typesc                 C   s>   d}g }|D ]}t d| d }|| ||7 }q||fS r.   )r   r   r0   )r   r7   r   
gen_lossesr   lr   r   r   r   {   s   

zGeneratorLoss.forwardNr    r   r   r   r   r6   k   s    

r6   )r   nemo.core.classesr   r   nemo.core.neural_types.elementsr   r   "nemo.core.neural_types.neural_typer   r   r&   r6   r   r   r   r   <module>   s   (!