class_docstr: This dataset can be used for some specific Triplet Losses like BATCH_HARD_TRIPLET_LOSS which requires
  multiple examples with the same label in a batch.
  
  It draws n consecutive, random and unique samples from one label at a time. This is repeated for each label.
  
  Labels with fewer than n unique samples are ignored.
  This also applied to drawing without replacement, once less than n samples remain for a label, it is skipped.
  
  This *DOES NOT* check if there are more labels than the batch is large or if the batch size is divisible
  by the samples drawn per label.
code: def __iter__(self):
      label_idx = 0
      count = 0
      already_seen = {}
      while count < len(self.grouped_inputs):
          label = self.label_range[label_idx]
          if label not in already_seen:
              already_seen[label] = set()
  
          left_border = (
              0 if label == 0 else self.groups_right_border[label - 1]
          )
          right_border = self.groups_right_border[label]
  
          if self.with_replacement:
              selection = np.arange(left_border, right_border)
          else:
              selection = [
                  i
                  for i in np.arange(left_border, right_border)
                  if i not in already_seen[label]
              ]
  
          if len(selection) >= self.samples_per_label:
              for element_idx in np.random.choice(
                  selection, self.samples_per_label, replace=False
              ):
                  count += 1
                  already_seen[label].add(element_idx)
                  yield self.grouped_inputs[element_idx]
  
          label_idx += 1
          if label_idx >= len(self.label_range):
              label_idx = 0
              already_seen = {}
              np.random.shuffle(self.label_range)
  
file_path: sentence-transformers/sentence_transformers/datasets/SentenceLabelDataset.py
imports: from torch.utils.data import IterableDataset
  import numpy
  from typing import List
  from ..readers import InputExample
  import logging
label_desc: Use image node_id 2 for calling the SentenceLabelDataset obj's underlying member method code with example usage: obj.__iter__() without return types