o
    9i                     @   s   d dl mZ d dlmZmZ d dlZd dlm  mZ	 d dlmZ G dd dej
ZG dd deZd	ejd
edeejejf fddZdS )    )abstractmethod)AnyTupleN)nnc                       sL   e Zd Z fddZdejdeejef fddZe	de
fddZ  ZS )	AbstractRegularizerc                    s   t    d S N)super__init__self	__class__ T/data/cameron/vidgen/generative-models/sgm/modules/autoencoding/regularizers/base.pyr	   
   s   zAbstractRegularizer.__init__zreturnc                 C      t  r   NotImplementedErrorr   r   r   r   r   forward   s   zAbstractRegularizer.forwardc                 C   r   r   r   r
   r   r   r   get_trainable_parameters   s   z,AbstractRegularizer.get_trainable_parameters)__name__
__module____qualname__r	   torchTensorr   dictr   r   r   r   __classcell__r   r   r   r   r   	   s
    r   c                   @   s8   e Zd Zdejdeejef fddZdefddZ	dS )IdentityRegularizerr   r   c                 C   s
   |t  fS r   )r   r   r   r   r   r      s   
zIdentityRegularizer.forwardc                 c   s    dE d H  d S )Nr   r   r
   r   r   r   r      s   z,IdentityRegularizer.get_trainable_parametersN)
r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s    r   predicted_indicesnum_centroidsr   c                 C   sT   t | | d|}|d}|t|d     }t|dk}||fS )Nr   g|=)	Fone_hotfloatreshapemeanr   logsumexp)r    r!   	encodings	avg_probs
perplexitycluster_user   r   r   measure_perplexity   s   
r/   )abcr   typingr   r   r   torch.nn.functionalr   
functionalr#   Moduler   r   r   intr/   r   r   r   r   <module>   s    