ó
    "EñiÂ1  ã                   ó   • S SK r S SKJrJrJrJr  S SKJrJr  S SK	r	/ SQr
\" SSS9r " S S	\\   5      r " S
 S\\   5      r " S S\\   5      r " S S\\   5      r " S S\\   5      r " S S\\\      5      rg)é    N)ÚIterableÚIteratorÚSequenceÚSized)ÚGenericÚTypeVar)ÚBatchSamplerÚRandomSamplerÚSamplerÚSequentialSamplerÚSubsetRandomSamplerÚWeightedRandomSamplerÚ_T_coT)Ú	covariantc                   ó,   • \ rS rSrSrS\\   4S jrSrg)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.

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`.
Úreturnc                 ó   • [         e©N)ÚNotImplementedError©Úselfs    ÚU/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/utils/data/sampler.pyÚ__iter__ÚSampler.__iter__B   s   € Ü!Ð!ó    © N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   r   Ú__static_attributes__r   r   r   r   r      s   † ñ#ðJ"˜( 5™/÷ "r   r   c                   óX   • \ rS rSr% Sr\\S'   S\SS4S jrS\\	   4S jr
S\	4S jrS	rg)
r   éa   z�Samples elements sequentially, always in the same order.

Args:
    data_source (Sized): data source to sample from. Must implement __len__.
Údata_sourcer   Nc                 ó   • Xl         g r   ©r&   )r   r&   s     r   Ú__init__ÚSequentialSampler.__init__j   s   € Ø&Õr   c                 óP   • [        [        [        U R                  5      5      5      $ r   )ÚiterÚrangeÚlenr&   r   s    r   r   ÚSequentialSampler.__iter__m   s   € Ü”Eœ#˜d×.Ñ.Ó/Ó0Ó1Ð1r   c                 ó,   • [        U R                  5      $ r   )r.   r&   r   s    r   Ú__len__ÚSequentialSampler.__len__p   s   € Ü�4×#Ñ#Ó$Ð$r   r(   )r   r   r    r!   r"   r   Ú__annotations__r)   r   Úintr   r1   r#   r   r   r   r   r   a   s>   ‡ ñð Óð' Eð '¨dô 'ð2˜( 3™-ô 2ð%˜÷ %r   r   c            	       ó’   • \ rS rSr% Sr\\S'   \\S'      SS\S\S\S-  SS4S jjr	\
S\4S	 j5       rS\\   4S
 jrS\4S jrSrg)r
   ét   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 (Sized): data source to sample from. Must implement __len__.
    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                 ó0  • Xl         X l        X0l        X@l        [	        U R                  [
        5      (       d  [        SU R                   35      e[	        U R                  [        5      (       a  U R                  S::  a  [        SU R                   35      eg )Nú;replacement should be a boolean value, but got replacement=r   úDnum_samples should be a positive integer value, but got num_samples=)
r&   r7   Ú_num_samplesÚ	generatorÚ
isinstanceÚboolÚ	TypeErrorr8   r4   Ú
ValueError)r   r&   r7   r8   r=   s        r   r)   ÚRandomSampler.__init__ƒ   s“   € ð 'ÔØ&ÔØ'ÔØ"Œä˜$×*Ñ*¬D×1Ñ1ÜØMÈd×N^ÑN^ÐM_Ð`óð ô ˜$×*Ñ*¬C×0Ñ0°D×4DÑ4DÈÓ4IÜØVÐW[×WgÑWgÐVhÐióð ð 5Jr   c                 ó^   • U R                   c  [        U R                  5      $ U R                   $ r   )r<   r.   r&   r   s    r   r8   ÚRandomSampler.num_samples™   s-   € ð ×ÑÑ$Ü�t×'Ñ'Ó(Ð(Ø× Ñ Ð r   c              #   óÆ  #   • [        U R                  5      nU R                  co  [        [        R
                  " S[        R                  S9R                  5       R                  5       5      n[        R                  " 5       nUR                  U5        OU R                  nU R                  (       a¤  [        U R                  S-  5       H>  n[        R                  " US[        R                  US9R                  5        S h  v•N   M@     [        R                  " UU R                  S-  4[        R                  US9R                  5        S h  v•N   g [        U R                  U-  5       H-  n[        R                   " XS9R                  5        S h  v•N   M/     [        R                   " XS9R                  5       S U R                  U-    S h  v•N   g  NÖ N‹ NG N7f)Nr   ©Údtypeé    )rH   )ÚhighÚsizerG   r=   ©r=   )r.   r&   r=   r4   ÚtorchÚemptyÚint64Úrandom_ÚitemÚ	GeneratorÚmanual_seedr7   r-   r8   ÚrandintÚtolistÚrandperm)r   ÚnÚseedr=   Ú_s        r   r   ÚRandomSampler.__iter__    sy  é € Ü�× Ñ Ó!ˆØ�>‰>Ñ!Ü”u—{’{ 2¬U¯[©[Ñ9×AÑAÓC×HÑHÓJÓKˆDÜŸšÓ)ˆIØ×!Ñ! $Õ'àŸ™ˆIà××Ü˜4×+Ñ+¨rÑ1Ö2�Ü Ÿ=š=Ø ¬e¯k©kÀYñç‘&“(÷ò ñ 3ô —}’}ØØ×&Ñ&¨Ñ+Ð-Ü—k‘kØ#ñ	÷
 ‰f‹h÷ñ ô ˜4×+Ñ+¨qÑ0Ö1�Ü Ÿ>š>¨!ÑA×HÑHÓJ×JÒJñ 2ä—~’~ aÑ=×DÑDÓFØ&�$×"Ñ" QÑ&ð÷ ñ ñññ KñùsJ   ‚D G!ÄGÄAG!ÅGÅAG!ÆGÆ=G!ÇGÇG!ÇG!ÇG!ÇG!c                 ó   • U R                   $ r   ©r8   r   s    r   r1   ÚRandomSampler.__len__»   ó   € Ø×ÑÐr   )r<   r&   r=   r7   )FNN)r   r   r    r!   r"   r   r3   r?   r4   r)   Úpropertyr8   r   r   r1   r#   r   r   r   r
   r
   t   s†   ‡ ñ	ð ÓØÓð
 "Ø"&Øñàðð ðð ˜4‘Zð	ð 
õð, ð!˜Só !ó ð!ð˜( 3™-ô ð6 ˜÷  r   r
   c                   óh   • \ rS rSr% Sr\\   \S'   S
S\\   SS4S jjrS\	\   4S jr
S\4S jrS	rg)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                 ó   • Xl         X l        g r   )ra   r=   )r   ra   r=   s      r   r)   ÚSubsetRandomSampler.__init__É   s   € ØŒØ"�r   c              #   ó¼   #   • [         R                  " [        U R                  5      U R                  S9R                  5        H  nU R                  U   v •  M     g 7f©NrK   )rL   rU   r.   ra   r=   rT   )r   Úis     r   r   ÚSubsetRandomSampler.__iter__Í   s?   é € Ü—’¤ D§L¡LÓ 1¸T¿^¹^ÑL×SÑSÖUˆAØ—,‘,˜q‘/Ô!ò Vùs   ‚AAc                 ó,   • [        U R                  5      $ r   )r.   ra   r   s    r   r1   ÚSubsetRandomSampler.__len__Ñ   s   € Ü�4—<‘<Ó Ð r   )r=   ra   r   )r   r   r    r!   r"   r   r4   r3   r)   r   r   r1   r#   r   r   r   r   r   ¿   sF   ‡ ñð �c‰]Óñ# ¨¡ð #À$õ #ð"˜( 3™-ô "ð!˜÷ !r   r   c            	       ó–   • \ rS rSr% Sr\R                  \S'   \\S'   \	\S'     SS\
\   S\S\	SS4S jjrS\\   4S	 jrS\4S
 jrSrg)r   éÕ   a~  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]
Úweightsr8   r7   Nr   c                 ó°  • [        U[        5      (       a  [        U[        5      (       d  US::  a  [        SU 35      e[        U[        5      (       d  [        SU 35      e[        R
                  " U[        R                  S9n[        UR                  5      S:w  a!  [        S[        UR                  5       35      eXPl
        X l        X0l        X@l        g )Nr   r;   r:   rF   é   z=weights should be a 1d sequence but given weights have shape )r>   r4   r?   rA   rL   Ú	as_tensorÚdoubler.   ÚshapeÚtuplerl   r8   r7   r=   )r   rl   r8   r7   r=   Úweights_tensors         r   r)   ÚWeightedRandomSampler.__init__ô   sÏ   € ô ˜;¬×,Ñ,Ü˜+¤t×,Ñ,Ø˜aÓäØVÐWbÐVcÐdóð ô ˜+¤t×,Ñ,ÜØMÈkÈ]Ð[óð ô Ÿš¨¼¿¹ÑEˆÜˆ~×#Ñ#Ó$¨Ó)Üð&Ü&+¨N×,@Ñ,@Ó&AÐ%BðDóð ð
 &ŒØ&ÔØ&ÔØ"�r   c              #   óÐ   #   • [         R                  " U R                  U R                  U R                  U R
                  S9n[        UR                  5       5       S h  v•N   g  N7fre   )rL   Úmultinomialrl   r8   r7   r=   r,   rT   )r   Úrand_tensors     r   r   ÚWeightedRandomSampler.__iter__  sK   é € Ü×'Ò'Ø�L‰L˜$×*Ñ*¨D×,<Ñ,<ÈÏÉñ
ˆô ˜×*Ñ*Ó,Ó-×-Ó-ùs   ‚AA&ÁA$ÁA&c                 ó   • U R                   $ r   r[   r   s    r   r1   ÚWeightedRandomSampler.__len__  r]   r   )r=   r8   r7   rl   )TN)r   r   r    r!   r"   rL   ÚTensorr3   r4   r?   r   Úfloatr)   r   r   r1   r#   r   r   r   r   r   Õ   ss   ‡ ñð4 �\‰\ÓØÓØÓð !Øñ#à˜%‘ð#ð ð#ð ð	#ð 
õ#ð@.˜( 3™-ô .ð ˜÷  r   r   c                   ól   • \ rS rSrSrS\\   \\   -  S\S\SS4S jr	S\
\\      4S	 jrS\4S
 jrSrg)r	   i  a‡  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                 óê   • [        U[        5      (       a  [        U[        5      (       d  US::  a  [        SU 35      e[        U[        5      (       d  [        SU 35      eXl        X l        X0l        g )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>   r4   r?   rA   r~   r   r€   )r   r~   r   r€   s       r   r)   ÚBatchSampler.__init__4  su   € ô ˜:¤s×+Ñ+Ü˜*¤d×+Ñ+Ø˜Q‹äØTÐU_ÐT`Ðaóð ô ˜)¤T×*Ñ*ÜØIÈ)ÈÐUóð ð ŒØ$ŒØ"�r   c              #   ó\  #   • [        U R                  5      nU R                  (       a)  U/U R                  -  n[	        USS06 H	  n/ UQv •  M     g / [
        R                  " XR                  5      QnU(       a0  Uv •  / [
        R                  " XR                  5      QnU(       a  M/  g g 7f)NÚstrictF)r,   r~   r€   r   ÚzipÚ	itertoolsÚislice)r   Úsampler_iterÚargsÚbatch_droplastÚbatchs        r   r   ÚBatchSampler.__iter__M  s�   é € Ü˜DŸL™LÓ)ˆØ�>�>à �> D§O¡OÑ3ˆDÜ"% tÐ":°EÔ":�Ø'˜Ð'Ô'ò #;ð G”i×&Ò& |·_±_ÓEÐFˆEÞØ’ØJœ)×*Ò*¨<¿¹ÓIÐJ�÷ ’%ùs   ‚B&B,Â*B,c                 óÌ   • U R                   (       a"  [        U R                  5      U R                  -  $ [        U R                  5      U R                  -   S-
  U R                  -  $ )Nrn   )r€   r.   r~   r   r   s    r   r1   ÚBatchSampler.__len__Z  sI   € ð
 �>�>Ü�t—|‘|Ó$¨¯©Ñ7Ð7ä˜Ÿ™Ó%¨¯©Ñ7¸!Ñ;ÀÇÁÑOÐOr   )r   r€   r~   )r   r   r    r!   r"   r   r4   r   r?   r)   r   Úlistr   r1   r#   r   r   r   r	   r	     sd   † ñð*#à˜‘ ¨¡Ñ-ð#ð ð#ð ð	#ð
 
ô#ð2K˜( 4¨¡9Ñ-ô KðP˜÷ Pr   r	   )r†   Úcollections.abcr   r   r   r   Útypingr   r   rL   Ú__all__r   r   r4   r   r
   r   r   r�   r	   r   r   r   Ú<module>r“      s™   ðã ß ?Ó ?ß #ã ò€ñ 	� 4Ñ(€ô'"ˆg�e‰nô '"ôJ%˜ ™ô %ô&H �G˜C‘Lô H ôV!˜' #™,ô !ô,F ˜G C™Lô F ôRDP�7˜4 ™9Ñ%õ DPr   