§
    æ˜ºhs%  ã                   óh   — d dl Z d dl mZ d dl mZ d dlmZ d dlZd dlZ G d„ dej        ¦  «        ZdS )é    N)ÚTensor)Únn)ÚDictc                   óª   ‡ — e Zd ZdZ	 	 	 	 	 	 	 ddedededed	ed
ededefˆ fd„Zd„ Zdefd„Z	de
eef         fd„Zd„ Zd„ Zd„ Zed„ ¦   «         Zˆ xZS )ÚPoolinga;  Performs pooling (max or mean) on the token embeddings.

    Using pooling, it generates from a variable sized sentence a fixed sized sentence embedding. This layer also allows to use the CLS token if it is returned by the underlying word embedding model.
    You can concatenate multiple poolings together.

    :param word_embedding_dimension: Dimensions for the word embeddings
    :param pooling_mode: Can be a string: mean/max/cls. If set, overwrites the other pooling_mode_* settings
    :param pooling_mode_cls_token: Use the first token (CLS token) as text representations
    :param pooling_mode_max_tokens: Use max in each dimension over all tokens.
    :param pooling_mode_mean_tokens: Perform mean-pooling
    :param pooling_mode_mean_sqrt_len_tokens: Perform mean-pooling, but divide by sqrt(input_length).
    :param pooling_mode_weightedmean_tokens: Perform (position) weighted mean pooling, see https://arxiv.org/abs/2202.08904
    :param pooling_mode_lasttoken: Perform last token pooling, see https://arxiv.org/abs/2202.08904 & https://arxiv.org/abs/2201.10005
    NFTÚword_embedding_dimensionÚpooling_modeÚpooling_mode_cls_tokenÚpooling_mode_max_tokensÚpooling_mode_mean_tokensÚ!pooling_mode_mean_sqrt_len_tokensÚ pooling_mode_weightedmean_tokensÚpooling_mode_lasttokenc	                 ó|  •— t          t          | ¦  «                             ¦   «          g d¢| _        |�8|                     ¦   «         }|dv sJ ‚|dk    }|dk    }|dk    }|dk    }|dk    }|| _        || _        || _        || _        || _	        || _
        || _        t          ||||||g¦  «        }	|	|z  | _        d S )N)r   r
   r   r   r   r   r   )ÚmeanÚmaxÚclsÚweightedmeanÚ	lasttokenr   r   r   r   r   )Úsuperr   Ú__init__Úconfig_keysÚlowerr   r
   r   r   r   r   r   ÚsumÚpooling_output_dimension)Úselfr   r	   r
   r   r   r   r   r   Úpooling_mode_multiplierÚ	__class__s             €úl/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/sentence_transformers/models/Pooling.pyr   zPooling.__init__   s  ø€ õ 	�g�tÑÔ×%Ò%Ñ'Ô'Ð'ð
ð 
ð 
ˆÔð Ð#Ø'×-Ò-Ñ/Ô/ˆLØÐ#VÐVÐVÐVÐVØ%1°UÒ%:Ð"Ø&2°eÒ&;Ð#Ø'3°vÒ'=Ð$Ø/;¸~Ò/MÐ,Ø%1°[Ò%@Ð"à(@ˆÔ%Ø&<ˆÔ#Ø(@ˆÔ%Ø'>ˆÔ$Ø1RˆÔ.Ø0PˆÔ-Ø&<ˆÔ#å"%à&Ø'Ø(Ø1Ø0Ø&ðñ	#
ô 	#
Ðð )@ÐBZÑ(ZˆÔ%Ð%Ð%ó    c                 óP   — d                      |                      ¦   «         ¦  «        S )NzPooling({}))ÚformatÚget_config_dict©r   s    r   Ú__repr__zPooling.__repr__M   s"   € Ø×#Ò# D×$8Ò$8Ñ$:Ô$:Ñ;Ô;Ð;r    Úreturnc                 ó€  — g }| j         r|                     d¦  «         | j        r|                     d¦  «         | j        r|                     d¦  «         | j        r|                     d¦  «         | j        r|                     d¦  «         | j        r|                     d¦  «         d                     |¦  «        S )z4
        Returns the pooling mode as string
        r   r   r   Úmean_sqrt_len_tokensr   r   ú+)r
   Úappendr   r   r   r   r   Újoin)r   Úmodess     r   Úget_pooling_mode_strzPooling.get_pooling_mode_strP   sÈ   € ð ˆØÔ&ð 	 Ø�LŠL˜ÑÔÐØÔ(ð 	!Ø�LŠL˜Ñ Ô Ð ØÔ'ð 	 Ø�LŠL˜ÑÔÐØÔ1ð 	1Ø�LŠLÐ/Ñ0Ô0Ð0ØÔ0ð 	)Ø�LŠL˜Ñ(Ô(Ð(ØÔ&ð 	&Ø�LŠL˜Ñ%Ô%Ð%à�xŠx˜‰ŒÐr    Úfeaturesc                 óT
  — |d         }|d         }g }| j         r5|                     d|d d …df         ¦  «        }|                     |¦  «         | j        r…|                     d¦  «                             |                     ¦   «         ¦  «                             ¦   «         }d||dk    <   t          j	        |d¦  «        d         }|                     |¦  «         | j
        s| j        �r$|                     d¦  «                             |                     ¦   «         ¦  «                             ¦   «         }t          j        ||z  d¦  «        }d|v rA|d                              d¦  «                             |                     ¦   «         ¦  «        }	n|                     d¦  «        }	t          j        |	d	¬
¦  «        }	| j
        r|                     ||	z  ¦  «         | j        r*|                     |t          j        |	¦  «        z  ¦  «         | j        �rª|                     d¦  «                             |                     ¦   «         ¦  «                             ¦   «         }t          j        d|j        d         dz   ¬¦  «                             d¦  «                             d¦  «                             |                     ¦   «         ¦  «                             ¦   «                              |j        ¦  «        }
|
j        |j        cxk    r|j        k    sn J ‚||
z  }t          j        ||z  d¦  «        }d|v rA|d                              d¦  «                             |                     ¦   «         ¦  «        }	n|                     d¦  «        }	t          j        |	d	¬
¦  «        }	|                     ||	z  ¦  «         | j        �r4|j        \  }}}t          j        |dd¬¦  «        \  }}t          j        |dk    ||¦  «        dz
  }t          j        |d¬
¦  «        }|                     d¦  «                             d|¦  «        }|                     d¦  «        }|j        |d|fk    sJ ‚|                     d¦  «                             |                     ¦   «         ¦  «                             ¦   «         }t          j        ||z  d|¦  «                             d¬¦  «        }|                     |¦  «         t          j        |d¦  «        }|                     d|i¦  «         |S )NÚtoken_embeddingsÚattention_maskÚcls_token_embeddingsr   éÿÿÿÿg    eÍÍÁé   Útoken_weights_sumg•Ö&è.>)Úmin)ÚstartÚendF)Úkeepdim)ÚdimÚsentence_embedding)r
   Úgetr*   r   Ú	unsqueezeÚexpandÚsizeÚfloatÚtorchr   r   r   r   ÚclampÚsqrtr   ÚarangeÚshapeÚtoÚdevicer   r6   ÚwhereÚrepeatÚgatherÚsqueezeÚcatÚupdate)r   r.   r0   r1   Úoutput_vectorsÚ	cls_tokenÚinput_mask_expandedÚmax_over_timeÚsum_embeddingsÚsum_maskÚweightsÚbsÚseq_lenÚ
hidden_dimÚvaluesÚindicesÚgather_indicesÚ	embeddingÚoutput_vectors                      r   ÚforwardzPooling.forwardd   sÿ  € Ø#Ð$6Ô7ÐØ!Ð"2Ô3ˆð ˆØÔ&ð 	-Ø ŸšÐ%;Ð=MÈaÈaÈaÐQRÈdÔ=SÑTÔTˆIØ×!Ò! )Ñ,Ô,Ð,ØÔ'ð 	1Ø"0×":Ò":¸2Ñ">Ô">×"EÒ"EÐFV×F[ÒF[ÑF]ÔF]Ñ"^Ô"^×"dÒ"dÑ"fÔ"fÐØ9=ÐÐ0°AÒ5Ñ6Ý!œIÐ&6¸Ñ:Ô:¸1Ô=ˆMØ×!Ò! -Ñ0Ô0Ð0ØÔ(ð 	M¨DÔ,Rñ 	MØ"0×":Ò":¸2Ñ">Ô">×"EÒ"EÐFV×F[ÒF[ÑF]ÔF]Ñ"^Ô"^×"dÒ"dÑ"fÔ"fÐÝ"œYÐ'7Ð:MÑ'MÈqÑQÔQˆNð # hÐ.Ð.Ø#Ð$7Ô8×BÒBÀ2ÑFÔF×MÒMÈn×NaÒNaÑNcÔNcÑdÔd��à.×2Ò2°1Ñ5Ô5�å”{ 8°Ð6Ñ6Ô6ˆHàÔ,ð AØ×%Ò% n°xÑ&?Ñ@Ô@Ð@ØÔ5ð MØ×%Ò% nµu´zÀ(Ñ7KÔ7KÑ&KÑLÔLÐLØÔ0ñ 	=Ø"0×":Ò":¸2Ñ">Ô">×"EÒ"EÐFV×F[ÒF[ÑF]ÔF]Ñ"^Ô"^×"dÒ"dÑ"fÔ"fÐõ ” 1Ð*:Ô*@ÀÔ*CÀaÑ*GÐHÑHÔHß’˜1‘”ß’˜2‘”ß’Ð(×-Ò-Ñ/Ô/Ñ0Ô0ß’‘”ß’Ð$Ô+Ñ,Ô,ð ð ”=Ð$4Ô$:ÐWÐWÒWÐWÐ>QÔ>WÒWÐWÐWÐWÐWÐWØ"5¸Ñ"?Ðå"œYÐ'7Ð:MÑ'MÈqÑQÔQˆNð # hÐ.Ð.Ø#Ð$7Ô8×BÒBÀ2ÑFÔF×MÒMÈn×NaÒNaÑNcÔNcÑdÔd��à.×2Ò2°1Ñ5Ô5�å”{ 8°Ð6Ñ6Ô6ˆHØ×!Ò! .°8Ñ";Ñ<Ô<Ð<ØÔ&ñ 	-Ø&6Ô&<Ñ#ˆB�˜õ
 $œi¨¸À5ÐIÑIÔI‰OˆF�GÝ"œ[¨°1ª°g¸wÑGÔGÈ!ÑKˆNõ #œ[¨¸QÐ?Ñ?Ô?ˆNð ,×5Ò5°bÑ9Ô9×@Ò@ÀÀJÑOÔOˆNØ+×5Ò5°aÑ8Ô8ˆNØ!Ô'¨B°°:Ð+>Ò>Ð>Ð>Ð>ð #1×":Ò":¸2Ñ">Ô">×"EÒ"EÐFV×F[ÒF[ÑF]ÔF]Ñ"^Ô"^×"dÒ"dÑ"fÔ"fÐÝœÐ%5Ð8KÑ%KÈQÐP^Ñ_Ô_×gÒgÐlmÐgÑnÔnˆIØ×!Ò! )Ñ,Ô,Ð,åœ	 .°!Ñ4Ô4ˆØ�ŠÐ-¨}Ð=Ñ>Ô>Ð>Øˆr    c                 ó   — | j         S )N)r   r$   s    r   Ú get_sentence_embedding_dimensionz(Pooling.get_sentence_embedding_dimension·   s   € ØÔ,Ð,r    c                 ó*   ‡ — ˆ fd„‰ j         D ¦   «         S )Nc                 ó,   •— i | ]}|‰j         |         “ŒS © )Ú__dict__)Ú.0Úkeyr   s     €r   ú
<dictcomp>z+Pooling.get_config_dict.<locals>.<dictcomp>»   s"   ø€ ÐDÐDÐD¨C��T”] 3Ô'ÐDÐDÐDr    )r   r$   s   `r   r#   zPooling.get_config_dictº   s    ø€ ØDÐDÐDÐD°4Ô3CÐDÑDÔDÐDr    c                 óæ   — t          t          j                             |d¦  «        d¦  «        5 }t	          j        |                      ¦   «         |d¬¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Núconfig.jsonÚwé   )Úindent)ÚopenÚosÚpathr+   ÚjsonÚdumpr#   )r   Úoutput_pathÚfOuts      r   ÚsavezPooling.save½   s¦   € Ý•"”'—,’,˜{¨MÑ:Ô:¸CÑ@Ô@ð 	>ÀDÝŒI�d×*Ò*Ñ,Ô,¨d¸1Ð=Ñ=Ô=Ð=ð	>ð 	>ð 	>ñ 	>ô 	>ð 	>ð 	>ð 	>ð 	>ð 	>ð 	>ð 	>øøøð 	>ð 	>ð 	>ð 	>ð 	>ð 	>s   ¯*A&Á&A*Á-A*c                 óÌ   — t          t          j                             | d¦  «        ¦  «        5 }t	          j        |¦  «        }d d d ¦  «         n# 1 swxY w Y   t          di |¤ŽS )Nrh   rb   )rl   rm   rn   r+   ro   Úloadr   )Ú
input_pathÚfInÚconfigs      r   ru   zPooling.loadÁ   s•   € å•"”'—,’,˜z¨=Ñ9Ô9Ñ:Ô:ð 	$¸cÝ”Y˜s‘^”^ˆFð	$ð 	$ð 	$ñ 	$ô 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$øøøð 	$ð 	$ð 	$ð 	$õ Ð Ð ˜Ð Ð Ð s   ®AÁAÁA)NFFTFFF)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚintÚstrÚboolr   r%   r-   r   r   r]   r_   r#   rs   Ústaticmethodru   Ú__classcell__)r   s   @r   r   r   	   s`  ø€ € € € € ðð ð$ !Ø',Ø(-Ø)-Ø27Ø16Ø',ð2[ð 2[à"%ð2[ð ð2[ð !%ð	2[ð
 "&ð2[ð #'ð2[ð ,0ð2[ð +/ð2[ð !%ð2[ð 2[ð 2[ð 2[ð 2[ð 2[ðh<ð <ð <ð cð ð ð ð ð(Q  S¨& [Ô 1ð Qð Qð Qð Qðf-ð -ð -ðEð Eð Eð>ð >ð >ð ð!ð !ñ „\ð!ð !ð !ð !ð !r    r   )	rA   r   r   Útypingr   rm   ro   ÚModuler   rb   r    r   ú<module>r„      s–   ðØ €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø 	€	€	€	Ø €€€ð}!ð }!ð }!ð }!ð }!ˆbŒiñ }!ô }!ð }!ð }!ð }!r    