
    ChR                    v    S SK Jr  S SKrS SKrS SKJrJr  S SKJr  \R                  " \	5      r
 " S S\5      rg)    )annotationsN)Tensornn)Modulec                  d   ^  \ rS rSr% Sr/ SQrS\S'   SSU 4S jjjrSS jrSS	.SS
 jjr	Sr
U =r$ )WordWeights   zDThis model can weight word embeddings, for example, with idf-values.)vocabword_weightsunknown_word_weight	list[str]config_keysc                  > [         TU ]  5         Xl        X l        X0l        / nSnU HL  nUnXb;   a  X&   nO,UR                  5       U;   a  X&R                  5          nOUS-  nUR                  U5        MN     [        R                  U S[        U5       SU 35        [        R                  " [        U5      S5      U l        U R                  R                  S[        R                  " U5      R!                  S5      05        g)a  
Initializes the WordWeights class.

Args:
    vocab (List[str]): Vocabulary of the tokenizer.
    word_weights (Dict[str, float]): Mapping of tokens to a float weight value. Word embeddings are multiplied
        by this float value. Tokens in word_weights must not be equal to the vocab (can contain more or less values).
    unknown_word_weight (float, optional): Weight for words in vocab that do not appear in the word_weights lookup.
        These can be, for example, rare words in the vocab where no weight exists. Defaults to 1.
r      z of z0 words without a weighting value. Set weight to weightN)super__init__r
   r   r   lowerappendloggerinfolenr   	Embedding	emb_layerload_state_dicttorchFloatTensor	unsqueeze)	selfr
   r   r   weightsnum_unknown_wordswordr   	__class__s	           `/var/www/html/shao/venv/lib/python3.13/site-packages/sentence_transformers/models/WordWeights.pyr   WordWeights.__init__   s     	
(#6 D(F#%+-%jjl3!Q&!NN6"  	 !c%j\1abuavw	
 c%j!4&&%2C2CG2L2V2VWX2Y'Z[    c                <   US   nUS   nU R                  US   5      R                  S5      nXBR                  5       -  n[        R                  " US5      nUR                  S5      R                  UR                  5       5      nX7-  nUR                  X6S.5        U$ )Nattention_masktoken_embeddings	input_idsr   )r)   token_weights_sum)	r   squeezefloatr   sumr   expandsizeupdate)r   featuresr(   r)   token_weights_rawtoken_weightsr,   token_weights_expandeds           r$   forwardWordWeights.forward5   s    !"23#$67 !NN8K+@AII"M),@,@,BB!IImQ7 "/!8!8!<!C!CDTDYDYD[!\+D-=fgr&   T)safe_serializationc               &    U R                  U5        g )N)save_config)r   output_pathr9   argskwargss        r$   saveWordWeights.saveE   s    %r&   )r   r   r
   r   )r   )r
   r   r   zdict[str, float]r   r.   )r3   zdict[str, Tensor])r<   strr9   boolreturnNone)__name__
__module____qualname____firstlineno____doc__r   __annotations__r   r7   r?   __static_attributes____classcell__)r#   s   @r$   r   r      s3    NMKM!\ !\F  HL & &r&   r   )
__future__r   loggingr   r   r   #sentence_transformers.models.Moduler   	getLoggerrE   r   r    r&   r$   <module>rR      s0    "    6			8	$9&& 9&r&   