Ë
    Q/æj 3  ã                   ó  — d dl mZmZmZmZmZmZmZmZm	Z	 d dl
Z
g d¢Z edd¬«      Z G d„ dee   «      Z G d	„ d
ee   «      Z G d„ dee   «      Z G d„ dee   «      Z G d„ dee   «      Z G d„ deee      «      Zy)é    )	ÚGenericÚIterableÚIteratorÚListÚOptionalÚSequenceÚSizedÚTypeVarÚUnionN)ÚBatchSamplerÚRandomSamplerÚSamplerÚSequentialSamplerÚSubsetRandomSamplerÚWeightedRandomSamplerÚ_T_coT)Ú	covariantc                   ó:   — e Zd ZdZddee   ddfd„Zdee   fd„Z	y)r   a;  Base class for all Samplers.

    Every Sampler subclass has to provide an :meth:`__iter__` method, providing a
    way to iterate over indices or lists of indices (batches) of dataset elements,
    and may provide a :meth:`__len__` method that returns the length of the returned iterators.

    Args:
        data_source (Dataset): This argument is not used and will be removed in 2.2.0.
            You may still have custom implementation that utilizes it.

    Example:
        >>> # xdoctest: +SKIP
        >>> class AccedingSequenceLengthSampler(Sampler[int]):
        >>>     def __init__(self, data: List[str]) -> None:
        >>>         self.data = data
        >>>
        >>>     def __len__(self) -> int:
        >>>         return len(self.data)
        >>>
        >>>     def __iter__(self) -> Iterator[int]:
        >>>         sizes = torch.tensor([len(x) for x in self.data])
        >>>         yield from torch.argsort(sizes).tolist()
        >>>
        >>> class AccedingSequenceLengthBatchSampler(Sampler[List[int]]):
        >>>     def __init__(self, data: List[str], batch_size: int) -> None:
        >>>         self.data = data
        >>>         self.batch_size = batch_size
        >>>
        >>>     def __len__(self) -> int:
        >>>         return (len(self.data) + self.batch_size - 1) // self.batch_size
        >>>
        >>>     def __iter__(self) -> Iterator[List[int]]:
        >>>         sizes = torch.tensor([len(x) for x in self.data])
        >>>         for batch in torch.chunk(torch.argsort(sizes), len(self)):
        >>>             yield batch.tolist()

    .. note:: The :meth:`__len__` method isn't strictly required by
              :class:`~torch.utils.data.DataLoader`, but is expected in any
              calculation involving the length of a :class:`~torch.utils.data.DataLoader`.
    NÚdata_sourceÚreturnc                 ó4   — |�dd l }|j                  d«       y y )Nr   zz`data_source` argument is not used and will be removed in 2.2.0.You may still have custom implementation that utilizes it.)ÚwarningsÚwarn)Úselfr   r   s      ú[/root/repos/pocs/video-evals/.venv/lib/python3.12/site-packages/torch/utils/data/sampler.pyÚ__init__zSampler.__init__H   s"   € ØÐ"Ûà�M‰MðMõð #ó    c                 ó   — t         ‚©N)ÚNotImplementedError©r   s    r   Ú__iter__zSampler.__iter__Q   s   € Ü!Ð!r   r   )
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r	   r   r   r   r"   © r   r   r   r      s/   „ ñ'ñR H¨U¡Oð ¸tó ð"˜( 5™/ô "r   r   c                   óJ   — e Zd ZU dZeed<   deddfd„Zdee   fd„Z	defd„Z
y)r   z~Samples elements sequentially, always in the same order.

    Args:
        data_source (Dataset): dataset to sample from
    r   r   Nc                 ó   — || _         y r   )r   )r   r   s     r   r   zSequentialSampler.__init__y   s
   € Ø&ˆÕr   c                 óP   — t        t        t        | j                  «      «      «      S r   )ÚiterÚrangeÚlenr   r!   s    r   r"   zSequentialSampler.__iter__|   s   € Ü”Eœ#˜d×.Ñ.Ó/Ó0Ó1Ð1r   c                 ó,   — t        | j                  «      S r   )r-   r   r!   s    r   Ú__len__zSequentialSampler.__len__   s   € Ü�4×#Ñ#Ó$Ð$r   )r#   r$   r%   r&   r	   Ú__annotations__r   r   Úintr"   r/   r'   r   r   r   r   p   s>   … ñð Óð' Eð '¨dó 'ð2˜( 3™-ó 2ð%˜ô %r   r   c            	       ó€   — e Zd ZU dZeed<   eed<   	 	 	 ddededee   ddfd„Z	e
defd„«       Zdee   fd	„Zdefd
„Zy)r   aÛ  Samples elements randomly. If without replacement, then sample from a shuffled dataset.

    If with replacement, then user can specify :attr:`num_samples` to draw.

    Args:
        data_source (Dataset): dataset to sample from
        replacement (bool): samples are drawn on-demand with replacement if ``True``, default=``False``
        num_samples (int): number of samples to draw, default=`len(dataset)`.
        generator (Generator): Generator used in sampling.
    r   ÚreplacementNÚnum_samplesr   c                 ó"  — || _         || _        || _        || _        t	        | j                  t
        «      st        d| j                  › �«      ‚t	        | j                  t        «      r| j                  dk  rt        d| j                  › �«      ‚y )Nú;replacement should be a boolean value, but got replacement=r   úDnum_samples should be a positive integer value, but got num_samples=)
r   r3   Ú_num_samplesÚ	generatorÚ
isinstanceÚboolÚ	TypeErrorr4   r1   Ú
ValueError)r   r   r3   r4   r9   s        r   r   zRandomSampler.__init__’   s•   € ð 'ˆÔØ&ˆÔØ'ˆÔØ"ˆŒä˜$×*Ñ*¬DÔ1ÜØMÈd×N^ÑN^ÐM_Ð`óð ô ˜$×*Ñ*¬CÔ0°D×4DÑ4DÈÒ4IÜØVÐW[×WgÑWgÐVhÐióð ð 5Jr   c                 ó\   — | j                   €t        | j                  «      S | j                   S r   )r8   r-   r   r!   s    r   r4   zRandomSampler.num_samples¨   s-   € ð ×ÑÐ$Ü�t×'Ñ'Ó(Ð(Ø× Ñ Ð r   c              #   óÈ  K  — t        | j                  «      }| j                  €pt        t	        j
                  dt        j                  ¬«      j                  «       j                  «       «      }t	        j                  «       }|j                  |«       n| j                  }| j                  r¦t        | j                  dz  «      D ]?  }t	        j                  |dt        j                  |¬«      j                  «       E d {  –—†  ŒA t	        j                  || j                  dz  ft        j                  |¬«      j                  «       E d {  –—†  y t        | j                  |z  «      D ]/  }t	        j                   ||¬«      j                  «       E d {  –—†  Œ1 t	        j                   ||¬«      j                  «       d | j                  |z   E d {  –—†  y 7 ŒÚ7 Œ�7 ŒH7 Œ­w)Nr'   ©Údtypeé    )rB   )ÚhighÚsizerA   r9   ©r9   )r-   r   r9   r1   ÚtorchÚemptyÚint64Úrandom_ÚitemÚ	GeneratorÚmanual_seedr3   r,   r4   ÚrandintÚtolistÚrandperm)r   ÚnÚseedr9   Ú_s        r   r"   zRandomSampler.__iter__¯   s�  è ø€ Ü�× Ñ Ó!ˆØ�>‰>Ð!Ü”u—{‘{ 2¬U¯[©[Ô9×AÑAÓC×HÑHÓJÓKˆDÜŸ™Ó)ˆIØ×!Ñ! $Õ'àŸ™ˆIà×ÒÜ˜4×+Ñ+¨rÑ1Ó2ò �Ü Ÿ=™=Ø ¬e¯k©kÀYôç‘&“(÷ñ ðô —}‘}ØØ×&Ñ&¨Ñ+Ð-Ü—k‘kØ#ô	÷
 ‰f‹h÷ñ ô ˜4×+Ñ+¨qÑ0Ó1ò K�Ü Ÿ>™>¨!°yÔA×HÑHÓJ×JÑJðKä—~‘~ a°9Ô=×DÑDÓFØ&�$×"Ñ" QÑ&ð÷ ñ ðøðøð KøðúsJ   ‚C=G"Ã?GÄ AG"ÅGÅAG"ÆGÆ>G"ÇG ÇG"ÇG"ÇG"Ç G"c                 ó   — | j                   S r   ©r4   r!   s    r   r/   zRandomSampler.__len__Ê   ó   € Ø×ÑÐr   )FNN)r#   r$   r%   r&   r	   r0   r;   r   r1   r   Úpropertyr4   r   r"   r/   r'   r   r   r   r   ƒ   s†   … ñ	ð ÓØÓð
 "Ø%)Øñàðð ðð ˜c‘]ð	ð 
óð, ð!˜Sò !ó ð!ð˜( 3™-ó ð6 ˜ô  r   r   c                   óX   — e Zd ZU dZee   ed<   ddee   ddfd„Zdee   fd„Z	defd„Z
y)	r   zÉSamples elements randomly from a given list of indices, without replacement.

    Args:
        indices (sequence): a sequence of indices
        generator (Generator): Generator used in sampling.
    ÚindicesNr   c                 ó    — || _         || _        y r   )rX   r9   )r   rX   r9   s      r   r   zSubsetRandomSampler.__init__Ø   s   € ØˆŒØ"ˆ�r   c              #   ó    K  — t        j                  t        | j                  «      | j                  ¬«      D ]  }| j                  |   –— Œ y ­w©NrE   )rF   rO   r-   rX   r9   )r   Úis     r   r"   zSubsetRandomSampler.__iter__Ü   s;   è ø€ Ü—‘¤ D§L¡LÓ 1¸T¿^¹^ÔLò 	"ˆAØ—,‘,˜q‘/Ó!ñ	"ùs   ‚AAc                 ó,   — t        | j                  «      S r   )r-   rX   r!   s    r   r/   zSubsetRandomSampler.__len__à   s   € Ü�4—<‘<Ó Ð r   r   )r#   r$   r%   r&   r   r1   r0   r   r   r"   r/   r'   r   r   r   r   Î   sF   … ñð �c‰]Óñ# ¨¡ð #À$ó #ð"˜( 3™-ó "ð!˜ô !r   r   c            	       ó†   — e Zd ZU dZej
                  ed<   eed<   eed<   	 	 d
de	e
   dededdfd„Zdee   fd„Zdefd	„Zy)r   aN  Samples elements from ``[0,..,len(weights)-1]`` with given probabilities (weights).

    Args:
        weights (sequence)   : a sequence of weights, not necessary summing up to one
        num_samples (int): number of samples to draw
        replacement (bool): if ``True``, samples are drawn with replacement.
            If not, they are drawn without replacement, which means that when a
            sample index is drawn for a row, it cannot be drawn again for that row.
        generator (Generator): Generator used in sampling.

    Example:
        >>> # xdoctest: +IGNORE_WANT("non-deterministic")
        >>> list(WeightedRandomSampler([0.1, 0.9, 0.4, 0.7, 3.0, 0.6], 5, replacement=True))
        [4, 4, 1, 4, 5]
        >>> list(WeightedRandomSampler([0.9, 0.4, 0.05, 0.2, 0.3, 0.1], 5, replacement=False))
        [0, 1, 4, 3, 2]
    Úweightsr4   r3   Nr   c                 óš  — t        |t        «      rt        |t        «      s|dk  rt        d|› �«      ‚t        |t        «      st        d|› �«      ‚t	        j
                  |t        j                  ¬«      }t        |j                  «      dk7  r!t        dt        |j                  «      › �«      ‚|| _
        || _        || _        || _        y )Nr   r7   r6   r@   é   z=weights should be a 1d sequence but given weights have shape )r:   r1   r;   r=   rF   Ú	as_tensorÚdoubler-   ÚshapeÚtupler_   r4   r3   r9   )r   r_   r4   r3   r9   Úweights_tensors         r   r   zWeightedRandomSampler.__init__û   sÎ   € ô ˜;¬Ô,Ü˜+¤tÔ,Ø˜aÒäØVÐWbÐVcÐdóð ô ˜+¤tÔ,ÜØMÈkÈ]Ð[óð ô Ÿ™¨¼¿¹ÔEˆÜˆ~×#Ñ#Ó$¨Ò)Üð&Ü&+¨N×,@Ñ,@Ó&AÐ%BðDóð ð
 &ˆŒØ&ˆÔØ&ˆÔØ"ˆ�r   c              #   óÔ   K  — t        j                  | j                  | j                  | j                  | j
                  ¬«      }t        |j                  «       «      E d {  –—†  y 7 Œ­wr[   )rF   Úmultinomialr_   r4   r3   r9   r+   rN   )r   Úrand_tensors     r   r"   zWeightedRandomSampler.__iter__  sL   è ø€ Ü×'Ñ'Ø�L‰L˜$×*Ñ*¨D×,<Ñ,<ÈÏÉô
ˆô ˜×*Ñ*Ó,Ó-×-Ò-ús   ‚AA(Á A&Á!A(c                 ó   — | j                   S r   rT   r!   s    r   r/   zWeightedRandomSampler.__len__!  rU   r   )TN)r#   r$   r%   r&   rF   ÚTensorr0   r1   r;   r   Úfloatr   r   r"   r/   r'   r   r   r   r   ä   ss   … ñð$ �\‰\ÓØÓØÓð !Øñ#à˜%‘ð#ð ð#ð ð	#ð 
ó#ð@.˜( 3™-ó .ð ˜ô  r   r   c                   ób   — e Zd ZdZdeee   ee   f   dededdfd„Z	de
ee      fd„Zdefd	„Zy)
r   ai  Wraps another sampler to yield a mini-batch of indices.

    Args:
        sampler (Sampler or Iterable): Base sampler. Can be any iterable object
        batch_size (int): Size of mini-batch.
        drop_last (bool): If ``True``, the sampler will drop the last batch if
            its size would be less than ``batch_size``

    Example:
        >>> list(BatchSampler(SequentialSampler(range(10)), batch_size=3, drop_last=False))
        [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]
        >>> list(BatchSampler(SequentialSampler(range(10)), batch_size=3, drop_last=True))
        [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
    ÚsamplerÚ
batch_sizeÚ	drop_lastr   Nc                 óÐ   — t        |t        «      rt        |t        «      s|dk  rt        d|› �«      ‚t        |t        «      st        d|› �«      ‚|| _        || _        || _        y )Nr   zBbatch_size should be a positive integer value, but got batch_size=z7drop_last should be a boolean value, but got drop_last=)r:   r1   r;   r=   rn   ro   rp   )r   rn   ro   rp   s       r   r   zBatchSampler.__init__5  sr   € ô ˜:¤sÔ+Ü˜*¤dÔ+Ø˜QŠäØTÐU_ÐT`Ðaóð ô ˜)¤TÔ*ÜØIÈ)ÈÐUóð ð ˆŒØ$ˆŒØ"ˆ�r   c              #   óš  K  — | j                   rGt        | j                  «      }	 	 t        | j                  «      D �cg c]  }t        |«      ‘Œ }}|–— Œ1dg| j                  z  }d}| j                  D ]2  }|||<   |dz  }|| j                  k(  sŒ|–— d}dg| j                  z  }Œ4 |dkD  r|d | –— y y c c}w # t        $ r Y y w xY w­w)Nr   ra   )rp   r+   rn   r,   ro   ÚnextÚStopIteration)r   Úsampler_iterrR   ÚbatchÚidx_in_batchÚidxs         r   r"   zBatchSampler.__iter__N  så   è ø€ à�>Š>Ü §¡Ó-ˆLØðÜ9>¸t¿¹Ó9OÖP°AœT ,Õ/ÐP�EÐPØ’Kð ð �C˜$Ÿ/™/Ñ)ˆEØˆLØ—|‘|ò 2�Ø&)��lÑ#Ø Ñ!�Ø 4§?¡?Ó2Ø’KØ#$�LØ˜C $§/¡/Ñ1‘Eð2ð ˜aÒØ˜M˜\Ð*Ó*ð  ùò Qøä$ò Ùðüs?   ‚#C¦B< ½B7ÁB< Á;CÂ&CÂ7B< Â<	CÃCÃCÃCc                 óÂ   — | j                   r"t        | j                  «      | j                  z  S t        | j                  «      | j                  z   dz
  | j                  z  S )Nra   )rp   r-   rn   ro   r!   s    r   r/   zBatchSampler.__len__e  sI   € ð
 �>Š>Ü�t—|‘|Ó$¨¯©Ñ7Ð7ä˜Ÿ™Ó%¨¯©Ñ7¸!Ñ;ÀÇÁÑOÐOr   )r#   r$   r%   r&   r   r   r1   r   r;   r   r   r   r"   r/   r'   r   r   r   r   %  sg   „ ñð#à�w˜s‘| X¨c¡]Ð2Ñ3ð#ð ð#ð ð	#ð
 
ó#ð2+˜( 4¨¡9Ñ-ó +ð.P˜ô Pr   r   )Útypingr   r   r   r   r   r   r	   r
   r   rF   Ú__all__r   r   r1   r   r   r   r   r   r'   r   r   ú<module>r|      sœ   ð÷
÷ 
õ 
ó ò€ñ 	� 4Ô(€ô4"ˆg�e‰nô 4"ôd%˜ ™ô %ô&H �G˜C‘Lô H ôV!˜' #™,ô !ô,> ˜G C™Lô > ôBHP�7˜4 ™9Ñ%õ HPr   