o
    ۷i                     @   sF   d dl Z d dl mZ ddlmZmZ ddlmZ G dd deeZdS )    N)nn   )ConfigMixinregister_to_config)
ModelMixinc                       sB   e Zd ZdZeddddededef fdd	Zd
d Z  ZS )UnCLIPTextProjModelz
    Utility class for CLIP embeddings. Used to combine the image and text embeddings into a format usable by the
    decoder.

    For more details, see the original paper: https://huggingface.co/papers/2204.06125 section 2.1
       i   )clip_extra_context_tokensclip_embeddings_dimr	   r
   time_embed_dimc                   sp   t    tt|| _t||| _t||| _	|| _
t|| j
| | _t||| _t|| _d S )N)super__init__r   	Parametertorchzeros+learned_classifier_free_guidance_embeddingsLinearembedding_proj0clip_image_embeddings_project_to_time_embeddingsr	   clip_extra_context_tokens_projencoder_hidden_states_proj	LayerNormtext_encoder_hidden_states_norm)selfr	   r
   r   cross_attention_dim	__class__ Z/home/ubuntu/vllm_env/lib/python3.10/site-packages/diffusers/pipelines/unclip/text_proj.pyr      s   
	
zUnCLIPTextProjModel.__init__c                C   s   |r|j d }| jd}||d}tj||gdd}|j d |j d ks(J |j d }| |}| |}	|	| }
| |}|	|d| j
}|ddd}| |}| |}tj||gdd}||
fS )Nr   )dim      )shaper   	unsqueezeexpandr   catr   r   r   reshaper	   permuter   r   )r   image_embeddingsprompt_embedstext_encoder_hidden_statesdo_classifier_free_guidanceimage_embeddings_batch_size#classifier_free_guidance_embeddings
batch_sizetime_projected_prompt_embedstime_projected_image_embeddingsadditive_clip_time_embeddingsr	   r   r   r   forward7   s&   






zUnCLIPTextProjModel.forward)	__name__
__module____qualname____doc__r   intr   r3   __classcell__r   r   r   r   r      s    r   )r   r   configuration_utilsr   r   modelsr   r   r   r   r   r   <module>   s
   