a
    h
                     @  st   d dl mZ zd dlmZ W n ey:   d dlmZ Y n0 d dlZd dlmZmZ d dl	m
Z
 G dd de
ZdS )    )annotations)SelfN)Tensornn)Modulec                
      s   e Zd ZU dZg dZded< d"ddd	 fd
dZddddZdd ZddddddddZ	e
d#ddddddddd d!Z  ZS )$WeightedLayerPoolingzRToken embeddings are weighted mean of their different hidden layer representations)word_embedding_dimensionlayer_startnum_hidden_layersz	list[str]config_keys      Nint)r
   r	   c                   sR   t    || _|| _|| _|d ur(|n"ttjdg|d |  tj	d| _
d S )N   )Zdtype)super__init__r   r	   r
   r   	ParametertorchZtensorfloatlayer_weights)selfr   r
   r	   r   	__class__ m/var/www/html/assistant/venv/lib/python3.9/site-packages/sentence_transformers/models/WeightedLayerPooling.pyr      s    
"zWeightedLayerPooling.__init__zdict[str, Tensor])featuresc                 C  s   |d }t |}|| jd d d d d d d f }| jddd| }|| jdd| j  }|d|i |S )NZall_layer_embeddingsr   )dimZtoken_embeddings)	r   stackr	   r   Z	unsqueezeexpandsizesumupdate)r   r   Zft_all_layersZall_layer_embeddingZweight_factorZweighted_averager   r   r   forward    s    
""zWeightedLayerPooling.forwardc                 C  s   | j S )N)r   )r   r   r   r   get_word_embedding_dimension,   s    z1WeightedLayerPooling.get_word_embedding_dimensionTsafe_serializationstrboolNone)output_pathr&   returnc                O  s   |  | | j||d d S )Nr%   )Zsave_configZsave_torch_weights)r   r*   r&   argskwargsr   r   r   save/   s    
zWeightedLayerPooling.save Fzbool | str | Nonez
str | Noner   )model_name_or_path	subfoldertokencache_folderrevisionlocal_files_onlyr+   c                 K  sL   |||||d}| j f d|i|}	| f i |	}
| jf ||
d|}
|
S )N)r1   r2   r3   r4   r5   r0   )r0   model)Zload_configZload_torch_weights)clsr0   r1   r2   r3   r4   r5   r-   Z
hub_kwargsconfigr6   r   r   r   load3   s    zWeightedLayerPooling.load)r   r   N)r/   NNNF)__name__
__module____qualname____doc__r   __annotations__r   r#   r$   r.   classmethodr9   __classcell__r   r   r   r   r      s   
      r   )
__future__r   typingr   ImportErrorZtyping_extensionsr   r   r   Z#sentence_transformers.models.Moduler   r   r   r   r   r   <module>   s   