§
    æ˜ºh=U  ã                   óD  — d dl Z d dlZd dlmZmZ d dlmZmZ d dlm	Z	 d dl
Z
d dlZd dlZd dlZd dlZd dlZd dlZd dlmZmZmZ d dlmZmZ d dlZ ej        e¦  «        Zdeded	efd
„Zdeded	efd„Zdeded	efd„Zdeded	efd„Zdeded	efd„Zded	efd„Z 	 d:dee!         de"de#d	eeee$e#f                           fd„Z%ddddefdede#de#de#de#deeegef         d	eeee$e#f                           fd „Z&d	eeee!ee#e$f         f                           fd!„Z'ddd"efd#ed$ede#de#de#deeegef         d	eeee!ee#e$f         f                           fd%„Z(d;d&„Z)d'efd(„Z*d	e!fd)„Z+d*„ Z,	 d<d	eee#                  fd-„Z- G d.„ d/e	¦  «        Z.	 	 	 d=d0e!d1eee"e!f                  d2ee!         d3ee!         d	e"f
d4„Z/	 d>d0e!d5e!d1eee"e!f                  d2ee!         d3ee!         d	ee!         fd6„Z0	 d>d0e!d7e!d1eee"e!f                  d2ee!         d3ee!         d	ee!         fd8„Z1d9„ Z2dS )?é    N)ÚTensorÚdevice)ÚListÚCallable)Útqdm)ÚDictÚOptionalÚUnion)Úsnapshot_downloadÚhf_hub_downloadÚaÚbÚreturnc                 ó"   — t          | |¦  «        S )úˆ
    Computes the cosine similarity cos_sim(a[i], b[j]) for all i and j.

    :return: Matrix with res[i][j]  = cos_sim(a[i], b[j])
    )Úcos_sim©r   r   s     úb/var/www/html/services/rag-service/venv/lib/python3.11/site-packages/sentence_transformers/util.pyÚpytorch_cos_simr      s   € õ �1�a‰=Œ=Ðó    c                 ó\  — t          | t          j        ¦  «        st          j        | ¦  «        } t          |t          j        ¦  «        st          j        |¦  «        }t	          | j        ¦  «        dk    r|                      d¦  «        } t	          |j        ¦  «        dk    r|                     d¦  «        }t          j        j         	                    | dd¬¦  «        }t          j        j         	                    |dd¬¦  «        }t          j
        ||                     dd¦  «        ¦  «        S )r   é   r   é   ©ÚpÚdim)Ú
isinstanceÚtorchr   ÚtensorÚlenÚshapeÚ	unsqueezeÚnnÚ
functionalÚ	normalizeÚmmÚ	transpose)r   r   Úa_normÚb_norms       r   r   r      sê   € õ �a�œÑ&Ô&ð ÝŒL˜‰OŒOˆå�a�œÑ&Ô&ð ÝŒL˜‰OŒOˆå
ˆ1Œ7�|„|�qÒÐØ�KŠK˜‰NŒNˆå
ˆ1Œ7�|„|�qÒÐØ�KŠK˜‰NŒNˆåŒXÔ ×*Ò*¨1°°qÐ*Ñ9Ô9€FÝŒXÔ ×*Ò*¨1°°qÐ*Ñ9Ô9€FÝŒ8�F˜F×,Ò,¨Q°Ñ2Ô2Ñ3Ô3Ð3r   c                 óÀ  — t          | t          j        ¦  «        st          j        | ¦  «        } t          |t          j        ¦  «        st          j        |¦  «        }t	          | j        ¦  «        dk    r|                      d¦  «        } t	          |j        ¦  «        dk    r|                     d¦  «        }t          j        | |                     dd¦  «        ¦  «        S )z„
    Computes the dot-product dot_prod(a[i], b[j]) for all i and j.

    :return: Matrix with res[i][j]  = dot_prod(a[i], b[j])
    r   r   )	r   r   r   r   r    r!   r"   r&   r'   r   s     r   Ú	dot_scorer+   5   sª   € õ �a�œÑ&Ô&ð ÝŒL˜‰OŒOˆå�a�œÑ&Ô&ð ÝŒL˜‰OŒOˆå
ˆ1Œ7�|„|�qÒÐØ�KŠK˜‰NŒNˆå
ˆ1Œ7�|„|�qÒÐØ�KŠK˜‰NŒNˆåŒ8�A�q—{’{ 1 aÑ(Ô(Ñ)Ô)Ð)r   c                 óì   — t          | t          j        ¦  «        st          j        | ¦  «        } t          |t          j        ¦  «        st          j        |¦  «        }| |z                       d¬¦  «        S )zx
    Computes the pairwise dot-product dot_prod(a[i], b[i])

    :return: Vector with res[i] = dot_prod(a[i], b[i])
    éÿÿÿÿ)r   )r   r   r   r   Úsumr   s     r   Úpairwise_dot_scorer/   J   s^   € õ �a�œÑ&Ô&ð ÝŒL˜‰OŒOˆå�a�œÑ&Ô&ð ÝŒL˜‰OŒOˆà�‰E�;Š;˜2ˆ;ÑÔÐr   c                 ó  — t          | t          j        ¦  «        st          j        | ¦  «        } t          |t          j        ¦  «        st          j        |¦  «        }t	          t          | ¦  «        t          |¦  «        ¦  «        S )zq
    Computes the pairwise cossim cos_sim(a[i], b[i])

    :return: Vector with res[i] = cos_sim(a[i], b[i])
    )r   r   r   r   r/   Únormalize_embeddingsr   s     r   Úpairwise_cos_simr2   Y   sh   € õ �a�œÑ&Ô&ð ÝŒL˜‰OŒOˆå�a�œÑ&Ô&ð ÝŒL˜‰OŒOˆåÕ2°1Ñ5Ô5Õ7KÈAÑ7NÔ7NÑOÔOÐOr   Ú
embeddingsc                 óP   — t           j        j                             | dd¬¦  «        S )z[
    Normalizes the embeddings matrix, so that each sentence embedding has unit length
    r   r   r   )r   r#   r$   r%   )r3   s    r   r1   r1   h   s$   € õ Œ8Ô×(Ò(¨°q¸aÐ(Ñ@Ô@Ð@r   Fé    Ú	sentencesÚshow_progress_barÚ
batch_sizec                 óT   — |                       |||d¬¦  «        }t          |g|¢R i |¤ŽS )ab  
    Given a list of sentences / texts, this function performs paraphrase mining. It compares all sentences against all
    other sentences and returns a list with the pairs that have the highest cosine similarity score.

    :param model: SentenceTransformer model for embedding computation
    :param sentences: A list of strings (texts or sentences)
    :param show_progress_bar: Plotting of a progress bar
    :param batch_size: Number of texts that are encoded simultaneously by the model
    :param query_chunk_size: Search for most similar pairs for #query_chunk_size at the same time. Decrease, to lower memory footprint (increases run-time).
    :param corpus_chunk_size: Compare a sentence simultaneously against #corpus_chunk_size other sentences. Decrease, to lower memory footprint (increases run-time).
    :param max_pairs: Maximal number of text pairs returned.
    :param top_k: For each sentence, we retrieve up to top_k other sentences
    :param score_function: Function for computing scores. By default, cosine similarity.
    :return: Returns a list of triplets with the format [score, id1, id2]
    T)r7   r8   Úconvert_to_tensor)ÚencodeÚparaphrase_mining_embeddings)Úmodelr6   r7   r8   ÚargsÚkwargsr3   s          r   Úparaphrase_miningr@   o   sG   € ð( —’ØÐ%6À:Ðaeð ñ ô €Jõ (¨
ÐD°TÐDÐDÐD¸VÐDÐDÐDr   iˆ  i † i ¡ éd   Úquery_chunk_sizeÚcorpus_chunk_sizeÚ	max_pairsÚtop_kÚscore_functionc                 óÒ  — |dz  }t          j        ¦   «         }d}d}t          dt          | ¦  «        |¦  «        D �]x}	t          dt          | ¦  «        |¦  «        D �]U}
 || |
|
|z   …         | |	|	|z   …         ¦  «        }t	          j        |t          |t          |d         ¦  «        ¦  «        ddd¬¦  «        \  }}|                     ¦   «                              ¦   «         }|                     ¦   «                              ¦   «         }t          t          |¦  «        ¦  «        D ]Š}t          ||         ¦  «        D ]r\  }}|
|z   }|	|z   }||k    r]||         |         |k    rK| 
                    ||         |         ||f¦  «         |dz  }||k    r|                     ¦   «         }|d         }ŒsŒ‹�ŒW�Œzt          ¦   «         }g }|                     ¦   «         s{|                     ¦   «         \  }}}t          ||g¦  «        \  }}||k    r5||f|vr/|                     ||f¦  «         |                     |||g¦  «         |                     ¦   «         ¯{t          |d„ d¬¦  «        }|S )	a†  
    Given a list of sentences / texts, this function performs paraphrase mining. It compares all sentences against all
    other sentences and returns a list with the pairs that have the highest cosine similarity score.

    :param embeddings: A tensor with the embeddings
    :param query_chunk_size: Search for most similar pairs for #query_chunk_size at the same time. Decrease, to lower memory footprint (increases run-time).
    :param corpus_chunk_size: Compare a sentence simultaneously against #corpus_chunk_size other sentences. Decrease, to lower memory footprint (increases run-time).
    :param max_pairs: Maximal number of text pairs returned.
    :param top_k: For each sentence, we retrieve up to top_k other sentences
    :param score_function: Function for computing scores. By default, cosine similarity.
    :return: Returns a list of triplets with the format [score, id1, id2]
    r   r-   r   TF©r   ÚlargestÚsortedc                 ó   — | d         S )Nr   © ©Úxs    r   ú<lambda>z.paraphrase_mining_embeddings.<locals>.<lambda>Ì   s
   € °!°A´$€ r   ©ÚkeyÚreverse)ÚqueueÚPriorityQueueÚranger    r   ÚtopkÚminÚcpuÚtolistÚ	enumerateÚputÚgetÚsetÚemptyrJ   ÚaddÚappend)r3   rB   rC   rD   rE   rF   ÚpairsÚ	min_scoreÚ	num_addedÚcorpus_start_idxÚquery_start_idxÚscoresÚscores_top_k_valuesÚscores_top_k_idxÚ	query_itrÚ	top_k_idxÚ
corpus_itrÚiÚjÚentryÚadded_pairsÚ
pairs_listÚscoreÚsorted_iÚsorted_js                            r   r<   r<   Š   sµ  € ð* 
ˆQ�J€Eõ ÔÑ!Ô!€EØ€IØ€Iå! !¥S¨¡_¤_Ð6GÑHÔHð 1ñ 1ÐÝ$ Q­¨J©¬Ð9IÑJÔJð 	1ñ 	1ˆOØ#�^Ø˜?¨_Ð?OÑ-OÐOÔPØÐ+Ð.>ÐARÑ.RÐRÔSñô ˆFõ
 5:´JØ�˜E¥3 v¨a¤y¡>¤>Ñ2Ô2¸À4ÐPUð5ñ 5ô 5Ñ1ÐÐ!1ð #6×"9Ò"9Ñ";Ô";×"BÒ"BÑ"DÔ"DÐØ/×3Ò3Ñ5Ô5×<Ò<Ñ>Ô>Ðå"¥3 v¡;¤;Ñ/Ô/ð 1ð 1�	Ý-6Ð7GÈ	Ô7RÑ-SÔ-Sð 
1ð 
1Ñ)�I˜zØ'¨)Ñ3�AØ(¨:Ñ5�Aà˜A’v�vÐ"5°iÔ"@ÀÔ"KÈiÒ"WÐ"WØŸ	š	Ð#6°yÔ#AÀ)Ô#LÈaÐQRÐ"SÑTÔTÐTØ! Q™˜	à$¨	Ò1Ð1Ø$)§I¢I¡K¤K˜EØ(-¨a¬˜Iøð
1ñ1ñ	1õ4 ‘%”%€KØ€JØ�kŠk‰mŒmð ;Ø—i’i‘k”k‰ˆˆq�!Ý# Q¨ F™^œ^Ñˆ�(à�xÒÐ X¨xÐ$8ÀÐ$KÐ$KØ�OŠO˜X xÐ0Ñ1Ô1Ð1Ø×Ò˜u h°Ð9Ñ:Ô:Ð:ð �kŠk‰mŒmð ;õ ˜
¨¨ÀÐEÑEÔE€JØÐr   c                  ó   — t          | i |¤ŽS )z8This function is deprecated. Use semantic_search instead)Úsemantic_search)r>   r?   s     r   Úinformation_retrievalrv   Ð   s   € å˜DÐ+ FÐ+Ð+Ð+r   é
   Úquery_embeddingsÚcorpus_embeddingsc                 ó®  — t          | t          j        t          j        f¦  «        rt	          j        | ¦  «        } n)t          | t          ¦  «        rt	          j        | ¦  «        } t          | j	        ¦  «        dk    r|  
                    d¦  «        } t          |t          j        t          j        f¦  «        rt	          j        |¦  «        }n)t          |t          ¦  «        rt	          j        |¦  «        }|j        | j        k    r|                      |j        ¦  «        } d„ t          t          | ¦  «        ¦  «        D ¦   «         }t          dt          | ¦  «        |¦  «        D �]p}t          dt          |¦  «        |¦  «        D �]M} || |||z   …         ||||z   …         ¦  «        }	t	          j        |	t          |t          |	d         ¦  «        ¦  «        ddd¬¦  «        \  }
}|
                     ¦   «                              ¦   «         }
|                     ¦   «                              ¦   «         }t          t          |	¦  «        ¦  «        D ]‚}t%          ||         |
|         ¦  «        D ]c\  }}||z   }||z   }t          ||         ¦  «        |k     rt'          j        ||         ||f¦  «         ŒFt'          j        ||         ||f¦  «         ŒdŒƒ�ŒO�Œrt          t          |¦  «        ¦  «        D ]b}t          t          ||         ¦  «        ¦  «        D ]!}||         |         \  }}||dœ||         |<   Œ"t-          ||         d„ d¬	¦  «        ||<   Œc|S )
aß  
    This function performs a cosine similarity search between a list of query embeddings  and a list of corpus embeddings.
    It can be used for Information Retrieval / Semantic Search for corpora up to about 1 Million entries.

    :param query_embeddings: A 2 dimensional tensor with the query embeddings.
    :param corpus_embeddings: A 2 dimensional tensor with the corpus embeddings.
    :param query_chunk_size: Process 100 queries simultaneously. Increasing that value increases the speed, but requires more memory.
    :param corpus_chunk_size: Scans the corpus 100k entries at a time. Increasing that value increases the speed, but requires more memory.
    :param top_k: Retrieve top k matching entries.
    :param score_function: Function for computing scores. By default, cosine similarity.
    :return: Returns a list with one entry for each query. Each entry is a list of dictionaries with the keys 'corpus_id' and 'score', sorted by decreasing cosine similarity scores.
    r   r   c                 ó   — g | ]}g ‘ŒS rL   rL   )Ú.0Ú_s     r   ú
<listcomp>z#semantic_search.<locals>.<listcomp>û   s   € ÐDÐDÐD !˜2ÐDÐDÐDr   TFrH   )Ú	corpus_idrq   c                 ó   — | d         S )Nrq   rL   rM   s    r   rO   z!semantic_search.<locals>.<lambda>  s   € Ð\]Ð^eÔ\f€ r   rP   )r   ÚnpÚndarrayÚgenericr   Ú
from_numpyÚlistÚstackr    r!   r"   r   ÚtorU   rV   rW   rX   rY   ÚzipÚheapqÚheappushÚheappushpoprJ   )rx   ry   rB   rC   rE   rF   Úqueries_result_listre   rd   Ú
cos_scoresÚcos_scores_top_k_valuesÚcos_scores_top_k_idxri   Úsub_corpus_idrq   r   Úquery_idÚdoc_itrs                     r   ru   ru   Õ   s²  € õ* Ð"¥R¤Zµ´Ð$<Ñ=Ô=ð 9Ý Ô+Ð,<Ñ=Ô=ÐÐÝ	Ð$¥dÑ	+Ô	+ð 9Ý œ;Ð'7Ñ8Ô8Ðå
ÐÔ!Ñ"Ô" aÒ'Ð'Ø+×5Ò5°aÑ8Ô8ÐåÐ#¥b¤jµ"´*Ð%=Ñ>Ô>ð ;Ý!Ô,Ð->Ñ?Ô?ÐÐÝ	Ð%¥tÑ	,Ô	,ð ;Ý!œKÐ(9Ñ:Ô:Ðð ÔÐ#3Ô#:Ò:Ð:Ø+×.Ò.Ð/@Ô/GÑHÔHÐàDÐD¥u­SÐ1AÑ-BÔ-BÑ'CÔ'CÐDÑDÔDÐå  ¥CÐ(8Ñ$9Ô$9Ð;KÑLÔLð ]ñ ]ˆå % a­Ð->Ñ)?Ô)?ÐARÑ SÔ Sð 	]ñ 	]Ðà'˜Ø  °?ÐEUÑ3UÐ!UÔVØ!Ð"2Ð5EÐHYÑ5YÐ"YÔZñô ˆJõ =B¼JØ�C ¥s¨:°a¬=Ñ'9Ô'9Ñ:Ô:ÀÈ4ÐX]ð=ñ =ô =Ñ9Ð#Ð%9ð '>×&AÒ&AÑ&CÔ&C×&JÒ&JÑ&LÔ&LÐ#Ø#7×#;Ò#;Ñ#=Ô#=×#DÒ#DÑ#FÔ#FÐ å"¥3 z¡?¤?Ñ3Ô3ð 	]ð 	]�	Ý,/Ð0DÀYÔ0OÐQhÐirÔQsÑ,tÔ,tð ]ð ]Ñ(�M 5Ø 0°=Ñ @�IØ.°Ñ:�HÝÐ.¨xÔ8Ñ9Ô9¸EÒAÐAÝœØ/°Ô9¸EÀ9Ð;Mñô ð ð õ Ô)Ð*=¸hÔ*GÈ%ÐQZÐI[Ñ\Ô\Ð\Ð\ð]ñ	]ñ	]õ4 �#Ð1Ñ2Ô2Ñ3Ô3ð vð vˆÝ�SÐ!4°XÔ!>Ñ?Ô?Ñ@Ô@ð 	^ð 	^ˆGØ2°8Ô<¸WÔEÑˆE�9ØCLÐW\Ð5]Ð5]Ð Ô)¨'Ñ2Ð2Ý(.Ð/BÀ8Ô/LÐRfÐRfÐptÐ(uÑ(uÔ(uÐ˜HÑ%Ð%àÐr   c                 óX  — t           j                             |¦  «        dk    r3t          j        t           j                             |¦  «        d¬¦  «         t	          j        | d¬¦  «        }|j        dk    rJt          d                     | |j        ¦  «        t          j
        ¬¦  «         |                     ¦   «          dS |d	z   }t          |d
¦  «        5 }|j                             d¦  «        }|�t          |¦  «        nd}t          d|d¬¦  «        }|                     d¬¦  «        D ];}|r7|                     t%          |¦  «        ¦  «         |                     |¦  «         Œ<	 ddd¦  «         n# 1 swxY w Y   t          j        ||¦  «         |                     ¦   «          dS )z1
    Downloads a URL to a given path on disc
    Ú T)Úexist_ok)ÚstreaméÈ   z1Exception when trying to download {}. Response {})ÚfileNÚ_partÚwbzContent-LengthÚB)ÚunitÚtotalÚ
unit_scaleé   )Ú
chunk_size)ÚosÚpathÚdirnameÚmakedirsÚrequestsr\   Ústatus_codeÚprintÚformatÚsysÚstderrÚraise_for_statusÚopenÚheadersÚintr   Úiter_contentÚupdater    ÚwriteÚrenameÚclose)	Úurlr¢   ÚreqÚdownload_filepathÚfile_binaryÚcontent_lengthr�   ÚprogressÚchunks	            r   Úhttp_getr»   "  sÓ  € õ 
„w‡‚�tÑÔ Ò"Ð"Ý
Œ•B”G—O’O DÑ)Ô)°DÐ9Ñ9Ô9Ð9å
Œ,�s 4Ð
(Ñ
(Ô
(€CØ
„˜#ÒÐÝÐA×HÒHÈÈcÌoÑ^Ô^ÕehÔeoÐpÑpÔpÐpØ×ÒÑÔÐØˆà˜w™ÐÝ	Ð Ñ	&Ô	&ð )¨+ØœŸšÐ)9Ñ:Ô:ˆØ'5Ð'A•�NÑ#Ô#Ð#ÀtˆÝ˜S¨¸$Ð?Ñ?Ô?ˆØ×%Ò%°Ð%Ñ6Ô6ð 	)ð 	)ˆEØð )Ø—’¥ E¡
¤
Ñ+Ô+Ð+Ø×!Ò! %Ñ(Ô(Ð(øð	)ð	)ð )ð )ñ )ô )ð )ð )ð )ð )ð )ð )øøøð )ð )ð )ð )õ „IÐ Ñ&Ô&Ð&Ø‡N‚NÑÔÐÐÐs   ÃBE6Å6E:Å=E:Útarget_devicec                 ó‚   — | D ];}t          | |         t          ¦  «        r| |                              |¦  «        | |<   Œ<| S )z4
    send a pytorch batch to a device (CPU/GPU)
    )r   r   r‡   )Úbatchr¼   rQ   s      r   Úbatch_to_devicer¿   =  sH   € ð ð 6ð 6ˆÝ�e˜C”j¥&Ñ)Ô)ð 	6Ø˜sœŸš }Ñ5Ô5ˆE�#‰JøØ€Lr   c                 ó„   — | j         j        }|�|t          j         j        k    r| j         j        S |dz   | j         j        z   S )z’
    Gives a full name (package_name.class_name) for a class / object in Python. Will
    be used to load the correct classes from JSON files
    Nú.)Ú	__class__Ú
__module__ÚstrÚ__name__)ÚoÚmodules     r   ÚfullnamerÈ   G  sA   € ð Œ[Ô#€FØ€~˜¥3¤=Ô#;Ò;Ð;ØŒ{Ô#Ð#à˜‰|˜aœkÔ2Ñ2Ð2r   c                 ó^  — 	 |                       dd¦  «        \  }}n"# t          $ r d| z  }t          |¦  «        ‚w xY w	 t          j        | ¦  «        }n$# t
          $ r t          j        |¦  «        }Y nw xY w	 t          ||¦  «        S # t          $ r d|›d|›d�}t          |¦  «        ‚w xY w)z™
    Import a dotted module path and return the attribute/class designated by the
    last name in the path. Raise ImportError if the import failed.
    rÁ   r   z"%s doesn't look like a module pathzModule "z" does not define a "z" attribute/class)ÚrsplitÚ
ValueErrorÚImportErrorÚ	importlibÚimport_moduleÚ	ExceptionÚgetattrÚAttributeError)Údotted_pathÚmodule_pathÚ
class_nameÚmsgrÇ   s        r   Úimport_from_stringrÖ   T  sô   € ð
Ø"-×"4Ò"4°S¸!Ñ"<Ô"<Ñˆ�Z�ZøÝð ð ð Ø2°[Ñ@ˆÝ˜#ÑÔÐðøøøð6ÝÔ(¨Ñ5Ô5ˆˆøÝð 6ð 6ð 6ÝÔ(¨Ñ5Ô5ˆˆˆð6øøøðÝ�v˜zÑ*Ô*Ð*øÝð ð ð ð ØFQÀkÀkÐS]ÐS]ÐS]Ð^ˆÝ˜#ÑÔÐðøøøs%   ‚ œ;¿A ÁA5Á4A5Á9B	 Â	#B,ç      è?rŸ   c                 óú  — t          | t          j        ¦  «        st          j        | ¦  «        } t          j        || j        ¬¦  «        }t          | ¦  «        } g }t          |t          | ¦  «        ¦  «        }t          t          d|z  d¦  «        t          | ¦  «        ¦  «        }t          t          dt          | ¦  «        |¦  «        d| ¬¦  «        D �]ü}| |||z   …         | j        z  }| j        j        dk    rº||k    }	|	                     d¦  «        }
|
|k    }|                     ¦   «         sŒ^|
|         }
||         }|
                     ¦   «         }|                     |d	¬
¦  «        \  }}t!          |
|¦  «        D ]4\  }}|                     |d|…                              ¦   «         ¦  «         Œ5Œâ|                     |d	¬
¦  «        \  }}t          t          |¦  «        ¦  «        D ]ã}||         d         |k    rÏ||                              |d	¬
¦  «        \  }}|d         |k    rr|t          | ¦  «        k     r_t          d|z  t          | ¦  «        ¦  «        }||                              |d	¬
¦  «        \  }}|d         |k    r|t          | ¦  «        k     °_|                     |||k                                  ¦   «         ¦  «         Œä�Œþt'          |d„ d	¬¦  «        }g }t)          ¦   «         }t+          |¦  «        D ]b\  }}g }|D ]}||vr|                     |¦  «         Œt          |¦  «        |k    r*|                     |¦  «         |                     |¦  «         Œct'          |d„ d	¬¦  «        }|S )aV  
    Function for Fast Community Detection
    Finds in the embeddings all communities, i.e. embeddings that are close (closer than threshold).
    Returns only communities that are larger than min_community_size. The communities are returned
    in decreasing order. The first element in each list is the central point in the community.
    )r   r   é2   r   zFinding clusters)ÚdescÚdisableÚcudar   T)ÚkrI   Nr-   c                 ó    — t          | ¦  «        S ©N©r    rM   s    r   rO   z%community_detection.<locals>.<lambda>­  s   € ÍÈAÉÌ€ r   rP   c                 ó    — t          | ¦  «        S rß   rà   rM   s    r   rO   z%community_detection.<locals>.<lambda>½  s   € Å#ÀaÁ&Ä&€ r   )r   r   r   r   r   r1   rW   r    Úmaxr   rU   ÚTÚtyper.   ÚanyrV   rˆ   r`   rY   rJ   r]   rZ   r°   )r3   Ú	thresholdÚmin_community_sizer8   r7   Úextracted_communitiesÚsort_max_sizeÚ	start_idxr�   Úthreshold_maskÚrow_wise_countÚlarge_enough_maskrÝ   r}   Útop_k_indicesÚcountÚindicesÚtop_k_valuesrl   Útop_val_largeÚtop_idx_largeÚunique_communitiesÚextracted_idsÚ
cluster_idÚ	communityÚnon_overlapped_communityÚidxs                              r   Úcommunity_detectionrú   k  sà  € õ �j¥%¤,Ñ/Ô/ð .Ý”\ *Ñ-Ô-ˆ
å”˜Y¨zÔ/@ÐAÑAÔA€IÝ% jÑ1Ô1€JàÐõ Ð/µ°Z±´ÑAÔAÐÝ�˜AÐ 2Ñ2°BÑ7Ô7½¸Z¹¼ÑIÔI€MåÝˆa•�Z‘” *Ñ-Ô-Ð4FÐTeÐPeðñ ô ð *eñ *eˆ	ð   	¨I¸
Ñ,BÐ BÔCÀjÄlÑRˆ
ð ÔÔ! VÒ+Ð+à'¨9Ò4ˆNØ+×/Ò/°Ñ2Ô2ˆNð !/Ð2DÒ DÐØ$×(Ò(Ñ*Ô*ð Øà+Ð,=Ô>ˆNØ#Ð$5Ô6ˆJð ×"Ò"Ñ$Ô$ˆAØ)Ÿš°¸D˜ÑAÔAÑˆAˆ}õ #& n°mÑ"DÔ"Dð Gð G‘��wØ%×,Ò,¨W°V°e°V¬_×-CÒ-CÑ-EÔ-EÑFÔFÐFÐFðGð )ŸošoÐ0BÈD˜oÑQÔQ‰OˆL˜!õ �3˜|Ñ,Ô,Ñ-Ô-ð 
eð 
e�Ø ”? 2Ô&¨)Ò3Ð3à3=¸a´=×3EÒ3EÈÐ_cÐ3EÑ3dÔ3dÑ0�M =ð (¨Ô+¨iÒ7Ð7¸MÍCÐPZÉOÌOÒ<[Ð<[Ý(+¨A°Ñ,=½sÀ:¹¼Ñ(OÔ(O˜Ø7AÀ!´}×7IÒ7IÈMÐcgÐ7IÑ7hÔ7hÑ4˜ }ð (¨Ô+¨iÒ7Ð7¸MÍCÐPZÉOÌOÒ<[Ð<[ð *×0Ò0°¸}ÐPYÒ?YÔ1Z×1aÒ1aÑ1cÔ1cÑdÔdÐdøñ
eõ #Ð#8Ð>NÐ>NÐX\Ð]Ñ]Ô]Ðð ÐÝ‘E”E€Må!*Ð+@Ñ!AÔ!Að ;ð ;Ñˆ
�IØ#%Ð Øð 	5ð 	5ˆCØ˜-Ð'Ð'Ø(×/Ò/°Ñ4Ô4Ð4øåÐ'Ñ(Ô(Ð,>Ò>Ð>Ø×%Ò%Ð&>Ñ?Ô?Ð?Ø× Ò Ð!9Ñ:Ô:Ð:øåÐ 2Ð8HÐ8HÐRVÐWÑWÔWÐàÐr   c                   ó6   ‡ — e Zd ZdZˆ fd„Zdeddfˆ fd„Zˆ xZS )Údisabled_tqdmz«
    Class to override `disable` argument in case progress bars are globally disabled.

    Taken from https://github.com/tqdm/tqdm/issues/619#issuecomment-619639324.
    c                 óD   •— d|d<    t          ¦   «         j        |i |¤Ž d S )NTrÛ   )ÚsuperÚ__init__)Úselfr>   r?   rÂ   s      €r   rÿ   zdisabled_tqdm.__init__Î  s/   ø€ Ø ˆˆyÑØ�‰ŒÔ˜$Ð) &Ð)Ð)Ð)Ð)Ð)r   Úattrr   Nc                 ó|   •— 	 t          ¦   «                              |¦  «         dS # t          $ r |dk    r‚ Y dS w xY w)zBFix for https://github.com/huggingface/huggingface_hub/issues/1603Ú_lockN)rþ   Ú__delattr__rÑ   )r   r  rÂ   s     €r   r  zdisabled_tqdm.__delattr__Ò  sV   ø€ ð	Ý‰GŒG×Ò Ñ%Ô%Ð%Ð%Ð%øÝð 	ð 	ð 	Ø�wŠˆØð ˆˆð	øøøs   ƒ!& ¦;º;)rÅ   rÃ   Ú__qualname__Ú__doc__rÿ   rÄ   r  Ú__classcell__)rÂ   s   @r   rü   rü   Ç  sn   ø€ € € € € ðð ð*ð *ð *ð *ð *ð ð ¨ð ð ð ð ð ð ð ð ð ð r   rü   Úmodel_name_or_pathÚtokenÚcache_folderÚrevisionc           	      óD   — t          t          | d|||¬¦  «        ¦  «        S )Nzmodules.json)r  )ÚboolÚload_file_path)r  r	  r
  r  s       r   Úis_sentence_transformer_modelr  Û  s'   € õ •Ð1°>À5È,ÐaiÐjÑjÔjÑkÔkÐkr   Úfilenamec                 óÒ   — t           j                             | |¦  «        }t           j                             |¦  «        r|S 	 t	          | ||d||¬¦  «        S # t
          $ r Y d S w xY w)Núsentence-transformers)r  r  Úlibrary_namer	  Ú	cache_dir)r¡   r¢   ÚjoinÚexistsr   rÏ   )r  r  r	  r
  r  Ú	file_paths         r   r  r  ä  sˆ   € õ ”—’Ð/°Ñ:Ô:€IÝ	„w‡~‚~�iÑ Ô ð ØÐð
ÝØØØØ0ØØ"ð
ñ 
ô 
ð 	
øõ ð ð ð Øˆˆðøøøs   ÁA Á
A&Á%A&Ú	directoryc                 óF  — t           j                             | |¦  «        }t           j                             |¦  «        r|S | ||› d�d||t          dœ}	 t          di |¤Ž}n!# t          $ r d|d<   t          di |¤Ž}Y nw xY wt           j                             ||¦  «        S )Nz/**r  )Úrepo_idr  Úallow_patternsr  r	  r  Ú
tqdm_classTÚlocal_files_onlyrL   )r¡   r¢   r  r  rü   r   rÏ   )r  r  r	  r
  r  Údir_pathÚdownload_kwargsÚ	repo_paths           r   Úload_dir_pathr!  þ  sÐ   € õ Œw�|Š|Ð.°	Ñ:Ô:€HÝ	„w‡~‚~�hÑÔð Øˆð &ØØ&Ð+Ð+Ð+Ø/ØØ!Ý#ðð €Oð9Ý%Ð8Ð8¨Ð8Ð8ˆ	ˆ	øÝð 9ð 9ð 9à.2ˆÐ*Ñ+Ý%Ð8Ð8¨Ð8Ð8ˆ	ˆ	ˆ	ð9øøøõ Œ7�<Š<˜	 9Ñ-Ô-Ð-s   ÁA" Á"B Á?B c                 óF   ‡ — t          j        ‰ ¦  «        ˆ fd„¦   «         }|S )Nc                 óê   •— |                      dd ¦  «        }|r#d|vrt                               d¦  «         ||d<   t          |¦  «        dk    rg |d d…         ¢d ‘|dd …         ¢R } ‰| g|¢R i |¤ŽS )NÚ	repo_namer  zfProviding a `repo_name` keyword argument to `save_to_hub` is deprecated, please use `repo_id` instead.r   )ÚpopÚloggerÚwarningr    )r   r>   r?   r$  Úfuncs       €r   Úwrapperz+save_to_hub_args_decorator.<locals>.wrapper  s§   ø€ ð —J’J˜{¨DÑ1Ô1ˆ	Øð 	*˜¨&Ð0Ð0Ý�NŠNØxñô ð ð !*ˆF�9Ñõ ˆt‰9Œ9˜Š>ˆ>Ø/�T˜"˜1˜"”XÐ/˜tÐ/ d¨1¨2¨2¤hÐ/Ð/ˆDàˆt�DÐ*˜4Ð*Ð*Ð* 6Ð*Ð*Ð*r   )Ú	functoolsÚwraps)r(  r)  s   ` r   Úsave_to_hub_args_decoratorr,    s8   ø€ Ý„_�TÑÔð+ð +ð +ð +ñ Ôð+ð €Nr   )Fr5   )r   N)r×   rw   rŸ   F)NNNrß   )3r*  r¥   r   r   r   Útypingr   r   Útqdm.autonotebookr   r©   rÍ   r¡   Únumpyr�   rS   Úloggingr   r	   r
   Úhuggingface_hubr   r   r‰   Ú	getLoggerrÅ   r&  r   r   r+   r/   r2   r1   rÄ   r  r®   Úfloatr@   r<   rv   ru   r»   r¿   rÈ   rÖ   rú   rü   r  r  r!  r,  rL   r   r   ú<module>r4     sè  ðØ Ð Ð Ð Ø €€€Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ø !Ð !Ð !Ð !Ð !Ð !Ð !Ð !Ø "Ð "Ð "Ð "Ð "Ð "Ø 
€
€
€
Ø Ð Ð Ð Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ð (Ð (à >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø €€€à	ˆÔ	˜8Ñ	$Ô	$€ð�vð  &ð ¨Vð ð ð ð ð4ˆvð 4˜&ð 4 Vð 4ð 4ð 4ð 4ð.*�ð *˜Fð * vð *ð *ð *ð *ð*˜&ð  Vð °ð ð ð ð ðP˜ð P 6ð P¨fð Pð Pð Pð PðA Vð A°ð Að Að Að Að UWðEð EØ˜3”iðEØ48ðEØNQðEà	ˆ$ˆu�U˜C�ZÔ Ô
!Ô"ðEð Eð Eð Eð: !Ø#ØØØ9@ðCð CØðCàðCð ðCð ð	Cð
 ðCð ˜f fÐ-¨vÐ5Ô6ðCð 
ˆ$ˆu�U˜C�ZÔ Ô
!Ô"ðCð Cð Cð CðL,¨d°4¸¸SÀ%ÈÈUÈ
ÔBSÐ=SÔ8TÔ3UÔ.Vð ,ð ,ð ,ð ,ð  Ø#ØØ9@ðJð JØðJàðJð ðJð ð	Jð
 ðJð ˜f fÐ-¨vÐ5Ô6ðJð 
ˆ$ˆt�C˜˜s E˜zÔ*Ð*Ô+Ô
,Ô-ðJð Jð Jð JðZð ð ð ð6¨&ð ð ð ð ð
3�3ð 
3ð 
3ð 
3ð 
3ðð ð ð0 [`ðTð Tà	ˆ$ˆsŒ)„_ðTð Tð Tð Tðxð ð ð ð �Dñ ô ð ð, )-Ø"&Ø"ð	lð lØðlà�E˜$ ˜)Ô$Ô%ðlð ˜3”-ðlð �sŒmð	lð
 
ðlð lð lð lð #ðð Øðàðð �E˜$ ˜)Ô$Ô%ðð ˜3”-ð	ð
 �sŒmðð ˆc„]ðð ð ð ð> #ð.ð .Øð.àð.ð �E˜$ ˜)Ô$Ô%ð.ð ˜3”-ð	.ð
 �sŒmð.ð ˆc„]ð.ð .ð .ð .ð>ð ð ð ð r   