
    biS	                    @    d Z ddlmZ ddlZddlZ G d d          ZdS )a@  
This file contains deprecated code that can only be used with the old `model.fit`-style Sentence Transformers v2.X training.
It exists for backwards compatibility with the `model.old_fit` method, but will be removed in a future version.

Nowadays, with Sentence Transformers v3+, it is recommended to use the `SentenceTransformerTrainer` class to train models.
See https://www.sbert.net/docs/sentence_transformer/training_overview.html for more information.

In particular, you can pass "no_duplicates" to `batch_sampler` in the `SentenceTransformerTrainingArguments` class.
    )annotationsNc                       e Zd Zd Zd Zd ZdS )NoDuplicatesDataLoaderc                p    || _         d| _        d| _        || _        t	          j        | j                   dS )z
        A special data loader to be used with MultipleNegativesRankingLoss.
        The data loader ensures that there are no duplicate sentences within the same batch
        r   N)
batch_sizedata_pointer
collate_fntrain_examplesrandomshuffle)selfr
   r   s      p/root/projects/butler/venv/lib/python3.11/site-packages/sentence_transformers/datasets/NoDuplicatesDataLoader.py__init__zNoDuplicatesDataLoader.__init__   s;    
 %,t*+++++    c              #    K   t          |                                           D ]}g }t                      }t          |          | j        k     rR| j        | j                 }d}|j        D ]R}t          |t                    st          |          }|
                                                                |v rd} nS|r||                    |           |j        D ]_}t          |t                    st          |          }|                    |
                                                                           `| xj        dz  c_        | j        t          | j                  k    r d| _        t          j        | j                   t          |          | j        k     R| j        |                     |          n|V  d S )NTF   r   )range__len__setlenr   r
   r   texts
isinstancestrstriplowerappendaddr   r   r	   )r   _batchtexts_in_batchexamplevalid_exampletexts          r   __iter__zNoDuplicatesDataLoader.__iter__   s     t||~~&& 	S 	SAE UUNe**t..-d.?@ $#M  D%dC00 )"4yyzz||))++~==(- > ! ALL))) ' A A)$44 -#&t99D&**4::<<+=+=+?+?@@@@!!Q&!!$D,?(@(@@@()D%N4#6777+ e**t... -1O,G$//%(((URRRR7	S 	Sr   c                ^    t          j        t          | j                  | j        z            S )N)mathfloorr   r
   r   )r   s    r   r   zNoDuplicatesDataLoader.__len__;   s$    z#d122T_DEEEr   N)__name__
__module____qualname__r   r$   r    r   r   r   r      sI        	, 	, 	,S S S<F F F F Fr   r   )__doc__
__future__r   r&   r   r   r+   r   r   <module>r.      sq     # " " " " "  +F +F +F +F +F +F +F +F +F +Fr   