a
    Ad<
                     @   s\   d dl Zd dlZd dlmZmZ d dlmZ ejj	ZG dd dej
ZG dd dej
ZdS )    N)sd_hijack_clipdevices)optsc                       s4   e Zd Z fddZdd Zdd Zdd Z  ZS )	%FrozenOpenCLIPEmbedderWithCustomWordsc                    sJ   t  || dd tj D d | _tjd | _tjd | _d| _d S )Nc                 S   s   g | ]\}}|d kr|qS z,</w> .0kvr   r   C/var/www/html/stable-diffusion-webui/modules/sd_hijack_open_clip.py
<listcomp>       zBFrozenOpenCLIPEmbedderWithCustomWords.__init__.<locals>.<listcomp>r   <start_of_text><end_of_text>	super__init__	tokenizerencoderitemscomma_tokenid_startid_endid_padselfwrappedhijack	__class__r   r   r      s
    z.FrozenOpenCLIPEmbedderWithCustomWords.__init__c                 C   s    t jrJ ddd |D }|S )N7Old emphasis implementation not supported for Open Clipc                 S   s   g | ]}t |qS r   r   encoder	   textr   r   r   r      r   zBFrozenOpenCLIPEmbedderWithCustomWords.tokenize.<locals>.<listcomp>r   use_old_emphasis_implementationr   texts	tokenizedr   r   r   tokenize   s    z.FrozenOpenCLIPEmbedderWithCustomWords.tokenizec                 C   s   | j |}|S )N)r   encode_with_transformer)r   tokenszr   r   r   encode_with_transformers   s    z>FrozenOpenCLIPEmbedderWithCustomWords.encode_with_transformersc                 C   s:   t |}tj|gtjtjd}| jjj	|
d}|S N)devicedtyper   )r   r#   torchasarrayr   r1   intr   modeltoken_embeddingsqueezer   	init_textnvptidsembeddedr   r   r   encode_embedding_init_text    s    
z@FrozenOpenCLIPEmbedderWithCustomWords.encode_embedding_init_text__name__
__module____qualname__r   r+   r/   r>   __classcell__r   r   r   r   r   
   s   r   c                       s4   e Zd Z fddZdd Zdd Zdd Z  ZS )	&FrozenOpenCLIPEmbedder2WithCustomWordsc                    sJ   t  || dd tj D d | _tjd | _tjd | _d| _d S )Nc                 S   s   g | ]\}}|d kr|qS r   r   r   r   r   r   r   ,   r   zCFrozenOpenCLIPEmbedder2WithCustomWords.__init__.<locals>.<listcomp>r   r   r   r   r   r   r   r   r   )   s
    z/FrozenOpenCLIPEmbedder2WithCustomWords.__init__c                 C   s    t jrJ ddd |D }|S )Nr!   c                 S   s   g | ]}t |qS r   r"   r$   r   r   r   r   4   r   zCFrozenOpenCLIPEmbedder2WithCustomWords.tokenize.<locals>.<listcomp>r&   r(   r   r   r   r+   1   s    z/FrozenOpenCLIPEmbedder2WithCustomWords.tokenizec                 C   s4   | j |}|| j j }|d}|d ur0||_|S )Npooled)r   r,   layergetrE   )r   r-   dr.   rE   r   r   r   r/   8   s    
z?FrozenOpenCLIPEmbedder2WithCustomWords.encode_with_transformersc                 C   sL   t |}tj|gtjtjd}| jjj	|
| jjj	jjjd}|S r0   )r   r#   r3   r4   r   r1   r5   r   r6   r7   toweightr8   r9   r   r   r   r>   B   s    
(zAFrozenOpenCLIPEmbedder2WithCustomWords.encode_embedding_init_textr?   r   r   r   r   rD   (   s   
rD   )Zopen_clip.tokenizer	open_clipr3   modulesr   r   modules.sharedr   r   
_tokenizer%FrozenCLIPEmbedderWithCustomWordsBaser   rD   r   r   r   r   <module>   s   