Ë
    l^(hE  ã                  ó¦   — d dl mZ d dlZd dlZd dlZd dlmZ d dlZd dlmZm	Z	 ddl
mZ  ej                  e«      Z G d„ de	j                  «      Zy)	é    )ÚannotationsN)ÚLiteral)ÚTensorÚnné   )ÚWhitespaceTokenizerc                  ó‚   ‡ — e Zd ZdZi ddf	 	 	 	 	 	 	 dˆ fd„Zdd„Zdd„Zd„ Z	 d	 	 	 	 	 dd„Zd	„ Z	d
„ Z
ed„ «       Zˆ xZS )ÚBoWz¿Implements a Bag-of-Words (BoW) model to derive sentence embeddings.

    A weighting can be added to allow the generation of tf-idf vectors. The output vector has the size of the vocab.
    r   Tc                óú  •— t         ‰| �  «        t        t        |«      «      }g d¢| _        || _        || _        || _        || _        g | _	        d}|D ]T  }|}||v r||   }n+|j                  «       |v r||j                  «          }n|dz  }| j                  j                  |«       ŒV t        j                  |› dt        |«      › d|› �«       t        |t        «       d¬«      | _        t        |«      | _        y )N)ÚvocabÚword_weightsÚunknown_word_weightÚcumulative_term_frequencyr   r   z out of z0 words without a weighting value. Set weight to F)Ú
stop_wordsÚdo_lower_case)ÚsuperÚ__init__ÚlistÚsetÚconfig_keysr   r   r   r   ÚweightsÚlowerÚappendÚloggerÚinfoÚlenr   Ú	tokenizerÚsentence_embedding_dimension)	Úselfr   r   r   r   Únum_unknown_wordsÚwordÚweightÚ	__class__s	           €ú^/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/sentence_transformers/models/BoW.pyr   zBoW.__init__   s   ø€ ô 	‰ÑÔÜ”S˜“ZÓ ˆÚhˆÔØˆŒ
Ø(ˆÔØ#6ˆÔ Ø)BˆÔ&ð ˆŒØÐØò 	(ˆDØ(ˆFØ�|Ñ#Ø% dÑ+‘Ø—‘“ Ñ-Ø% d§j¡j£lÑ3‘à! QÑ&Ð!Ø�L‰L×Ñ Õ'ð	(ô 	�‰Ø Ð! ¬#¨e«*¨Ð5eÐfyÐezÐ{ô	
ô -¨U¼s»uÐTYÔZˆŒÜ,/°«JˆÕ)ó    c                ó   — |S ©N© )r   Úfeaturess     r$   ÚforwardzBoW.forward9   s   € àˆr%   c                ó‚   — |D �cg c]  } | j                   j                  |fi |¤Ž‘Œ! }}| j                  |«      S c c}w r'   )r   ÚtokenizeÚget_sentence_features)r   ÚtextsÚkwargsÚtextÚ	tokenizeds        r$   r,   zBoW.tokenize=   sC   € ØINÖOÀÐ,�T—^‘^×,Ñ,¨TÑ<°VÓ<ÐOˆ	ÐOØ×)Ñ)¨)Ó4Ð4ùò Ps   …$<c                ó   — | j                   S r'   )r   )r   s    r$   Ú get_sentence_embedding_dimensionz$BoW.get_sentence_embedding_dimensionA   s   € Ø×0Ñ0Ð0r%   c                óJ  — g }|D ]†  }t        j                  | j                  «       t         j                  ¬«      }|D ];  }| j                  r||xx   | j
                  |   z  cc<   Œ*| j
                  |   ||<   Œ= |j                  |«       Œˆ dt        j                  |«      iS )N)ÚdtypeÚsentence_embedding)ÚtorchÚzerosr3   Úfloat32r   r   r   Ústack)r   Útokenized_textsÚpad_seq_lengthÚvectorsÚtokensÚvectorÚtokens          r$   r-   zBoW.get_sentence_featuresD   s�   € ð ˆà%ò 	#ˆFÜ—[‘[ ×!FÑ!FÓ!HÔPU×P]ÑP]Ô^ˆFØò 8�Ø×1Ò1Ø˜5“M T§\¡\°%Ñ%8Ñ8”Mà$(§L¡L°Ñ$7�F˜5’Mð	8ð
 �N‰N˜6Õ"ð	#ð %¤e§k¡k°'Ó&:Ð;Ð;r%   c                ó\   — | j                   D �ci c]  }|| j                  |   “Œ c}S c c}w r'   )r   Ú__dict__)r   Úkeys     r$   Úget_config_dictzBoW.get_config_dictT   s*   € Ø37×3CÑ3CÖD¨C��T—]‘] 3Ñ'Ñ'ÒDÐDùÒDs   �)c                óÎ   — t        t        j                  j                  |d«      d«      5 }t	        j
                  | j                  «       |d¬«       d d d «       y # 1 sw Y   y xY w)Núconfig.jsonÚwé   )Úindent)ÚopenÚosÚpathÚjoinÚjsonÚdumprD   )r   Úoutput_pathÚfOuts      r$   ÚsavezBoW.saveW   sK   € Ü”"—'‘'—,‘,˜{¨MÓ:¸CÓ@ð 	>ÀDÜ�I‰I�d×*Ñ*Ó,¨d¸1Õ=÷	>÷ 	>ñ 	>ús   «'AÁA$c                ó¾   — t        t        j                  j                  | d«      «      5 }t	        j
                  |«      }d d d «       t        di ¤ŽS # 1 sw Y   ŒxY w)NrF   r(   )rJ   rK   rL   rM   rN   Úloadr
   )Ú
input_pathÚfInÚconfigs      r$   rT   zBoW.load[   sK   € ä”"—'‘'—,‘,˜z¨=Ó9Ó:ð 	$¸cÜ—Y‘Y˜s“^ˆF÷	$ô ‰}�V‰}Ð÷	$ð 	$ús   ªAÁA)r   ú	list[str]r   zdict[str, float]r   Úfloatr   Úbool)r)   zdict[str, Tensor])r.   rX   Úreturnz	list[int])r   )r;   zlist[list[int]]r<   Úintr[   z1dict[Literal['sentence_embedding'], torch.Tensor])Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r*   r,   r3   r-   rD   rR   ÚstaticmethodrT   Ú__classcell__)r#   s   @r$   r
   r
      s‘   ø„ ñð *,Ø%&Ø*.ð!7àð!7ð 'ð!7ð #ð	!7ð
 $(õ!7óFó5ò1ð GHð<Ø.ð<Ø@Cð<à	:ó<ò Eò>ð ñó ôr%   r
   )Ú
__future__r   rN   ÚloggingrK   Útypingr   r7   r   r   r   r   Ú	getLoggerr]   r   ÚModuler
   r(   r%   r$   ú<module>rh      sA   ðÝ "ã Û Û 	Ý ã ß å *à	ˆ×	Ñ	˜8Ó	$€ôPˆ"�)‰)õ Pr%   