§
    �ŠtjÂ1  ã                   ó\  — d dl Z d dlmZmZmZmZ d dl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dS )é    N)ÚIterableÚIteratorÚSequenceÚSized)ÚGenericÚTypeVar)ÚBatchSamplerÚRandomSamplerÚSamplerÚSequentialSamplerÚSubsetRandomSamplerÚWeightedRandomSamplerÚ_T_coT)Ú	covariantc                   ó*   — e Zd ZdZdee         fd„ZdS )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                 ó   — t           ‚©N)ÚNotImplementedError©Úselfs    úV/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/utils/data/sampler.pyÚ__iter__zSampler.__iter__B   s   € Ý!Ð!ó    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   © r   r   r   r      s>   € € € € € ð#ð #ðJ"˜( 5œ/ð "ð "ð "ð "ð "ð "r   r   c                   óR   — 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
dS )r   z™Samples elements sequentially, always in the same order.

    Args:
        data_source (Sized): data source to sample from. Must implement __len__.
    Údata_sourcer   Nc                 ó   — || _         d S r   )r!   )r   r!   s     r   Ú__init__zSequentialSampler.__init__j   s   € Ø&ˆÔÐÐr   c                 ó^   — t          t          t          | j        ¦  «        ¦  «        ¦  «        S r   )ÚiterÚrangeÚlenr!   r   s    r   r   zSequentialSampler.__iter__m   s#   € Ý•E�#˜dÔ.Ñ/Ô/Ñ0Ô0Ñ1Ô1Ð1r   c                 ó*   — t          | j        ¦  «        S r   )r'   r!   r   s    r   Ú__len__zSequentialSampler.__len__p   s   € Ý�4Ô#Ñ$Ô$Ð$r   )r   r   r   r   r   Ú__annotations__r#   r   Úintr   r)   r   r   r   r   r   a   sŠ   € € € € € € ðð ð ÐÐÑð' Eð '¨dð 'ð 'ð 'ð 'ð2˜( 3œ-ð 2ð 2ð 2ð 2ð%˜ð %ð %ð %ð %ð %ð %r   r   c            	       óŽ   — e Zd ZU dZeed<   eed<   	 	 	 ddedededz  ddfd„Ze	defd	„¦   «         Z
dee         fd
„Zdefd„ZdS )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 (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!   ÚreplacementFNÚnum_samplesr   c                 ó  — || _         || _        || _        || _        t	          | j        t
          ¦  «        st          d| j        › �¦  «        ‚t	          | j        t          ¦  «        r| j        dk    rt          d| j        › �¦  «        ‚d S )Nú;replacement should be a boolean value, but got replacement=r   úDnum_samples should be a positive integer value, but got num_samples=)
r!   r-   Ú_num_samplesÚ	generatorÚ
isinstanceÚboolÚ	TypeErrorr.   r+   Ú
ValueError)r   r!   r-   r.   r3   s        r   r#   zRandomSampler.__init__ƒ   s¦   € ð 'ˆÔØ&ˆÔØ'ˆÔØ"ˆŒå˜$Ô*­DÑ1Ô1ð 	ÝØ`ÈdÔN^Ð`Ð`ñô ð õ ˜$Ô*­CÑ0Ô0ð 	°DÔ4DÈÒ4IÐ4IÝØiÐW[ÔWgÐiÐiñô ð ð 5JÐ4Ir   c                 óF   — | j         €t          | j        ¦  «        S | j         S r   )r2   r'   r!   r   s    r   r.   zRandomSampler.num_samples™   s'   € ð ÔÐ$Ý�tÔ'Ñ(Ô(Ð(ØÔ Ð r   c              #   óŽ  K  — t          | j        ¦  «        }| j        €zt          t	          j        dt          j        ¬¦  «                             ¦   «                              ¦   «         ¦  «        }t	          j	        ¦   «         }| 
                    |¦  «         n| j        }| j        r™t          | j        dz  ¦  «        D ]<}t	          j        |dt          j        |¬¦  «                             ¦   «         E d {V —† Œ=t	          j        || j        dz  ft          j        |¬¦  «                             ¦   «         E d {V —† d S t          | j        |z  ¦  «        D ]0}t	          j        ||¬¦  «                             ¦   «         E d {V —† Œ1t	          j        ||¬¦  «                             ¦   «         d | j        |z  …         E d {V —† d S )Nr   ©Údtypeé    )r<   )ÚhighÚsizer;   r3   ©r3   )r'   r!   r3   r+   ÚtorchÚemptyÚint64Úrandom_ÚitemÚ	GeneratorÚmanual_seedr-   r&   r.   ÚrandintÚtolistÚrandperm)r   ÚnÚseedr3   Ú_s        r   r   zRandomSampler.__iter__    s  è è € Ý�Ô Ñ!Ô!ˆØŒ>Ð!Ý•u”{ 2­U¬[Ð9Ñ9Ô9×AÒAÑCÔC×HÒHÑJÔJÑKÔKˆDÝœÑ)Ô)ˆIØ×!Ò! $Ñ'Ô'Ð'Ð'àœˆIàÔð 	Ý˜4Ô+¨rÑ1Ñ2Ô2ð ð �Ý œ=Ø ­e¬kÀYðñ ô ç’&‘(”(ðð ð ð ð ð ð ð õ ”}ØØÔ&¨Ñ+Ð-Ý”kØ#ð	ñ ô ÷
 Šf‰hŒhðð ð ð ð ð ð ð ð õ ˜4Ô+¨qÑ0Ñ1Ô1ð Kð K�Ý œ>¨!°yÐAÑAÔA×HÒHÑJÔJÐJÐJÐJÐJÐJÐJÐJÐJÝ”~ a°9Ð=Ñ=Ô=×DÒDÑFÔFØ&�$Ô" QÑ&Ð&ôð ð ð ð ð ð ð ð ð r   c                 ó   — | j         S r   ©r.   r   s    r   r)   zRandomSampler.__len__»   ó   € ØÔÐr   )FNN)r   r   r   r   r   r*   r5   r+   r#   Úpropertyr.   r   r   r)   r   r   r   r
   r
   t   sé   € € € € € € ð	ð 	ð ÐÐÑØÐÐÑð
 "Ø"&Øðð àðð ðð ˜4‘Zð	ð 
ðð ð ð ð, ð!˜Sð !ð !ð !ñ „Xð!ð˜( 3œ-ð ð ð ð ð6 ˜ð  ð  ð  ð  ð  ð  r   r
   c                   ól   — 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
dS )	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                 ó"   — || _         || _        d S r   )rR   r3   )r   rR   r3   s      r   r#   zSubsetRandomSampler.__init__É   s   € ØˆŒØ"ˆŒˆˆr   c              #   ó¬   K  — t          j        t          | j        ¦  «        | j        ¬¦  «                             ¦   «         D ]}| j        |         V — Œd S ©Nr?   )r@   rI   r'   rR   r3   rH   )r   Úis     r   r   zSubsetRandomSampler.__iter__Í   s[   è è € Ý”¥ D¤LÑ 1Ô 1¸T¼^ÐLÑLÔL×SÒSÑUÔUð 	"ð 	"ˆAØ”,˜q”/Ð!Ð!Ð!Ð!ð	"ð 	"r   c                 ó*   — t          | j        ¦  «        S r   )r'   rR   r   s    r   r)   zSubsetRandomSampler.__len__Ñ   s   € Ý�4”<Ñ Ô Ð r   r   )r   r   r   r   r   r+   r*   r#   r   r   r)   r   r   r   r   r   ¿   s—   € € € € € € ðð ð �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dS )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]
    Úweightsr.   r-   TNr   c                 óÈ  — t          |t          ¦  «        rt          |t          ¦  «        s|dk    rt          d|› �¦  «        ‚t          |t          ¦  «        st          d|› �¦  «        ‚t	          j        |t          j        ¬¦  «        }t          |j        ¦  «        dk    r$t          dt          |j        ¦  «        › �¦  «        ‚|| _
        || _        || _        || _        d S )Nr   r1   r0   r:   é   z=weights should be a 1d sequence but given weights have shape )r4   r+   r5   r7   r@   Ú	as_tensorÚdoubler'   ÚshapeÚtuplerY   r.   r-   r3   )r   rY   r.   r-   r3   Úweights_tensors         r   r#   zWeightedRandomSampler.__init__ô   s  € õ ˜;­Ñ,Ô,ð	å˜+¥tÑ,Ô,ð	ð ˜aÒÐåØdÐWbÐdÐdñô ð õ ˜+¥tÑ,Ô,ð 	ÝØ[ÈkÐ[Ð[ñô ð õ œ¨½¼ÐEÑEÔEˆÝˆ~Ô#Ñ$Ô$¨Ò)Ð)ÝðDÝ&+¨NÔ,@Ñ&AÔ&AðDð Dñô ð ð
 &ˆŒØ&ˆÔØ&ˆÔØ"ˆŒˆˆr   c              #   ó°   K  — t          j        | j        | j        | j        | j        ¬¦  «        }t          |                     ¦   «         ¦  «        E d {V —† d S rU   )r@   ÚmultinomialrY   r.   r-   r3   r%   rH   )r   Úrand_tensors     r   r   zWeightedRandomSampler.__iter__  sd   è è € ÝÔ'ØŒL˜$Ô*¨DÔ,<ÈÌð
ñ 
ô 
ˆõ ˜×*Ò*Ñ,Ô,Ñ-Ô-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-Ð-r   c                 ó   — | j         S r   rN   r   s    r   r)   zWeightedRandomSampler.__len__  rO   r   )TN)r   r   r   r   r@   ÚTensorr*   r+   r5   r   Úfloatr#   r   r   r)   r   r   r   r   r   Õ   sÎ   € € € € € € ðð ð4 Œ\ÐÐÑØÐÐÑØÐÐÑð !Øð#ð #à˜%”ð#ð ð#ð ð	#ð 
ð#ð #ð #ð #ð@.˜( 3œ-ð .ð .ð .ð .ð ˜ð  ð  ð  ð  ð  ð  r   r   c                   óx   — e Zd ZdZdee         ee         z  dededdfd„Zde	e
e                  fd„Zdefd	„ZdS )
r	   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                 ó  — t          |t          ¦  «        rt          |t          ¦  «        s|dk    rt          d|› �¦  «        ‚t          |t          ¦  «        st          d|› �¦  «        ‚|| _        || _        || _        d S )Nr   zBbatch_size should be a positive integer value, but got batch_size=z7drop_last should be a boolean value, but got drop_last=)r4   r+   r5   r7   rh   ri   rj   )r   rh   ri   rj   s       r   r#   zBatchSampler.__init__4  s�   € õ ˜:¥sÑ+Ô+ð	å˜*¥dÑ+Ô+ð	ð ˜QŠˆåØaÐU_ÐaÐañô ð õ ˜)¥TÑ*Ô*ð 	ÝØUÈ)ÐUÐUñô ð ð ˆŒØ$ˆŒØ"ˆŒˆˆr   c              #   ó  K  — t          | j        ¦  «        }| j        r"|g| j        z  }t	          |ddiŽD ]}g |¢V — Œ	d S g t          j        || j        ¦  «        ¢}|r$|V — g t          j        || j        ¦  «        ¢}|°"d S d S )NÚstrictF)r%   rh   rj   ri   ÚzipÚ	itertoolsÚislice)r   Úsampler_iterÚargsÚbatch_droplastÚbatchs        r   r   zBatchSampler.__iter__M  sÒ   è è € Ý˜DœLÑ)Ô)ˆØŒ>ð 		Kà �> D¤OÑ3ˆDÝ"% tÐ":°EÐ":Ð":ð (ð (�Ø'˜Ð'Ð'Ð'Ð'Ð'ð(ð (ð G•iÔ& |°T´_ÑEÔEÐFˆEØð KØ���ØJ�)Ô*¨<¸¼ÑIÔIÐJ�ð ð Kð Kð Kð Kð Kr   c                 ó–   — | j         rt          | j        ¦  «        | j        z  S t          | j        ¦  «        | j        z   dz
  | j        z  S )Nr[   )rj   r'   rh   ri   r   s    r   r)   zBatchSampler.__len__Z  sI   € ð
 Œ>ð 	PÝ�t”|Ñ$Ô$¨¬Ñ7Ð7å˜œÑ%Ô%¨¬Ñ7¸!Ñ;ÀÄÑOÐOr   )r   r   r   r   r   r+   r   r5   r#   r   Úlistr   r)   r   r   r   r	   r	     s°   € € € € € ðð ð*#à˜” ¨¤Ñ-ð#ð ð#ð ð	#ð
 
ð#ð #ð #ð #ð2K˜( 4¨¤9Ô-ð Kð Kð Kð KðP˜ð Pð Pð Pð Pð Pð Pr   r	   )ro   Úcollections.abcr   r   r   r   Útypingr   r   r@   Ú__all__r   r   r+   r   r
   r   r   rv   r	   r   r   r   ú<module>rz      sÇ  ðà Ð Ð Ð Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #à €€€ðð ð €ð 	ˆ� 4Ð(Ñ(Ô(€ð'"ð '"ð '"ð '"ð '"ˆg�eŒnñ '"ô '"ð '"ðJ%ð %ð %ð %ð %˜ œñ %ô %ð %ð&H ð H ð H ð H ð H �G˜C”Lñ H ô H ð H ðV!ð !ð !ð !ð !˜' #œ,ñ !ô !ð !ð,F ð F ð F ð F ð F ˜G CœLñ F ô F ð F ðRDPð DPð DPð DPð DP�7˜4 œ9Ô%ñ DPô DPð DPð DPð DPr   