
    rh
                    z    d dl mZ 	 d dlmZ d dlZd dlmZmZ d dl	m
Z
  G d de
      Zy# e$ r	 d dlmZ Y +w xY w)    )annotations)SelfN)Tensornn)Modulec                       e Zd ZU dZg dZded<   	 d	 	 	 d fdZddZd Zdd	dd
Z	e
	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 dd       Z xZS )WeightedLayerPoolingzRToken embeddings are weighted mean of their different hidden layer representations)word_embedding_dimensionlayer_startnum_hidden_layersz	list[str]config_keysc                    t         |           || _        || _        || _        ||| _
        y t        j                  t        j                  dg|dz   |z
  z  t        j                              | _
        y )N   )dtype)super__init__r
   r   r   r   	Parametertorchtensorfloatlayer_weights)selfr
   r   r   r   	__class__s        /var/www/html/ai-insurance-compliance-backend/venv/lib/python3.12/site-packages/sentence_transformers/models/WeightedLayerPooling.pyr   zWeightedLayerPooling.__init__   sw     	(@%&!2 (  	 ellA32Ca2G+2U+V^c^i^ijk 	    c                   |d   }t        j                  |      }|| j                  d d d d d d d f   }| j                  j	                  d      j	                  d      j	                  d      j                  |j                               }||z  j                  d      | j                  j                         z  }|j                  d|i       |S )Nall_layer_embeddingsr   )dimtoken_embeddings)	r   stackr   r   	unsqueezeexpandsizesumupdate)r   featuresft_all_layersall_layer_embeddingweight_factorweighted_averages         r   forwardzWeightedLayerPooling.forward    s     !78#kk-81$2B2B2DaA2MN**44R8BB2FPPQST[[\o\t\t\vw),??DDDKdN`N`NdNdNff+-=>?r   c                    | j                   S )N)r
   )r   s    r   get_word_embedding_dimensionz1WeightedLayerPooling.get_word_embedding_dimension,   s    ,,,r   Tsafe_serializationc               L    | j                  |       | j                  ||       y )Nr/   )save_configsave_torch_weights)r   output_pathr0   argskwargss        r   savezWeightedLayerPooling.save/   s$    %@RSr   c                x    |||||d} | j                   dd|i|}	 | di |	}
 | j                  d||
d|}
|
S )N)	subfoldertokencache_folderrevisionlocal_files_onlymodel_name_or_path)r>   model )load_configload_torch_weights)clsr>   r9   r:   r;   r<   r=   r6   
hub_kwargsconfigr?   s              r   loadzWeightedLayerPooling.load3   sd     #(  0

 !U4FU*Uf&&&h:LTYh]ghr   )      N)r   intr   rI   )r'   zdict[str, Tensor])r4   strr0   boolreturnNone) NNNF)r>   rJ   r9   rJ   r:   zbool | str | Noner;   
str | Noner<   rO   r=   rK   rL   r   )__name__
__module____qualname____doc__r   __annotations__r   r,   r.   r7   classmethodrF   __classcell__)r   s   @r   r	   r	      s    \]K] jn
;>
RU

- HL T  #'#'#!&  !	
 !   
 r   r	   )
__future__r   typingr   ImportErrortyping_extensionsr   r   r   #sentence_transformers.models.Moduler   r	   r@   r   r   <module>r\      s;    "'   6:6 :  '&'s   , ::