o
    iv	                     @   sB   d dl Z d dlmZ ddlmZ ddlmZ G dd dejZdS )    N   )load_vae)load_stft_vaec                       sD   e Zd Zd fdd	Ze dddZddd	Zdd
dZ  Z	S )Autoencoder
stable_vaeTc                    sr   t t|   || _| jdkrt||}n| jdkr t||}ntd| j | | _|| _	t
d|  d S )Nr   stft_vaeModel type not implemented: z%Autoencoder quantization first mode: )superr   __init__
model_typer   r   NotImplementedErrorevalaequantization_firstprint)self	ckpt_pathconfig_filer   r   model	__class__ ^/home/ubuntu/.local/lib/python3.10/site-packages/solospeech/vae_modules/autoencoder_wrapper.pyr
      s   


zAutoencoder.__init__Nc                 C   s>   | j dkr| ||S | j dkr| |||S td| j  )Nr   r   r   )r   process_stable_vaeprocess_stft_vaer   )r   audio	embeddingstdr   r   r   forward   s
   

zAutoencoder.forwardc                 C   st   |d ur| j |}| jr| j j|}|S |d ur6|}| jr'| j |}|S | j j|}| j |}|S tdNz+Either audio or embedding must be provided.r   encoderr   
bottleneckencodedecoder
ValueError)r   r   r   zr   r   r   r      s   zAutoencoder.process_stable_vaec                 C   s   |d ur| j |\}}| jr| j j|}||fS |d ur<|}| jr,| j ||}|S | j j|}| j ||}|S tdr   r    )r   r   r   r   r&   r   r   r   r   /   s   zAutoencoder.process_stft_vae)r   T)NNN)NN)
__name__
__module____qualname__r
   torchno_gradr   r   r   __classcell__r   r   r   r   r      s    
r   )	r*   torch.nnnnr   r   r   r   Moduler   r   r   r   r   <module>   s
    