o
    ϯiU                     @   sd   d Z ddlmZ ddlmZ ddlZddlmZ ddlm  mZ	 ddl
mZ G dd dejZdS )zVector quantizer.    )List)UnionN)
NormConv1dc                	       sR   e Zd Z			ddededeeef f fddZdd	efd
dZdd Z  Z	S )VAEBottleneck   r   	input_dimcodebook_sizecodebook_dimc                    sJ   t    || _|| _t||d dd| _t||dd| _td| _	d S )N      )kernel_sizeg        )
super__init__r   r	   r   in_projout_projtorchtensordummy_codebook_loss)selfr   r   r	   	__class__ H/home/ubuntu/.local/lib/python3.10/site-packages/dacvae/nn/bottleneck.pyr      s   
zVAEBottleneck.__init__Nn_quantizersc                 C   sL   |  |jddd\}}| ||\}}| |}|t| ||| jfS )Nr
   r   )dim)r   chunk_vae_sampler   r   zerossizer   )r   zr   meanscalez_qklr   r   r   forward   s   
zVAEBottleneck.forwardc                 C   sZ   t j|d }|| }t|}t|| | }|| | | d d }||fS )Ng-C6?r   )nn
functionalsoftplusr   log
randn_likesumr    )r   r    r!   stdevvarlogvarlatentsr#   r   r   r   r   $   s   
zVAEBottleneck._vae_sample)r   r   r   )N)
__name__
__module____qualname__intr   listr   r$   r   __classcell__r   r   r   r   r      s    
r   )__doc__typingr   r   r   torch.nnr%   torch.nn.functionalr&   Fdacvae.nn.layersr   Moduler   r   r   r   r   <module>   s   