ó
    Äö‘j¤  ã                   óX   • S SK r S SKrS SKJr  S SKJr   " S S\5      r " S S\5      rg)é    N)ÚSamplerc                   ó.   • \ rS rSrSrSS jrS rS rSrg)	ÚOrderedDistributedSampleré   aP  Sampler that restricts data loading to a subset of the dataset.
It is especially useful in conjunction with
:class:`torch.nn.parallel.DistributedDataParallel`. In such case, each
process can pass a DistributedSampler instance as a DataLoader sampler,
and load a subset of the original dataset that is exclusive to it.
.. note::
    Dataset is assumed to be of constant size.
Arguments:
    dataset: Dataset used for sampling.
    num_replicas (optional): Number of processes participating in
        distributed training.
    rank (optional): Rank of the current process within num_replicas.
Nc                 óæ  • Uc:  [         R                  " 5       (       d  [        S5      e[         R                  " 5       nUc:  [         R                  " 5       (       d  [        S5      e[         R                  " 5       nXl        X l        X0l        [        [        R                  " [        U R
                  5      S-  U R                  -  5      5      U l        U R                  U R                  -  U l        g )Nú,Requires distributed package to be availableg      ð?)ÚdistÚis_availableÚRuntimeErrorÚget_world_sizeÚget_rankÚdatasetÚnum_replicasÚrankÚintÚmathÚceilÚlenÚnum_samplesÚ
total_size)Úselfr   r   r   s       Ú«C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\timm/data/distributed_sampler.pyÚ__init__Ú"OrderedDistributedSampler.__init__   s³   € ØÑÜ×$Ò$×&Ñ&Ü"Ð#QÓRÐRÜ×.Ò.Ó0ˆLØ‰<Ü×$Ò$×&Ñ&Ü"Ð#QÓRÐRÜ—=’=“?ˆDØŒØ(ÔØŒ	ÜœtŸyšy¬¨T¯\©\Ó):¸SÑ)@À4×CTÑCTÑ)TÓUÓVˆÔØ×*Ñ*¨T×->Ñ->Ñ>ˆ�ó    c                 óV  • [        [        [        U R                  5      5      5      nXS U R                  [        U5      -
   -  n[        U5      U R                  :X  d   eXR
                  U R                  U R                  2   n[        U5      U R                  :X  d   e[        U5      $ ©N)	ÚlistÚranger   r   r   r   r   r   Úiter)r   Úindicess     r   Ú__iter__Ú"OrderedDistributedSampler.__iter__%   s�   € Ü”uœS §¡Ó.Ó/Ó0ˆð 	Ð<˜TŸ_™_¬s°7«|Ñ;Ð=Ñ=ˆÜ�7‹|˜tŸ™Ó.Ð.Ð.ð Ÿ)™) D§O¡O°D×4EÑ4EÐEÑFˆÜ�7‹|˜t×/Ñ/Ó/Ð/Ð/ä�G‹}Ðr   c                 ó   • U R                   $ r   )r   ©r   s    r   Ú__len__Ú!OrderedDistributedSampler.__len__2   s   € Ø×ÑÐr   )r   r   r   r   r   )NN)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r"   r&   Ú__static_attributes__© r   r   r   r      s   † ñô?òõ r   r   c                   ó@   • \ rS rSrSr      S	S jrS rS rS rSr	g)
ÚRepeatAugSampleré6   aŸ  Sampler that restricts data loading to a subset of the dataset for distributed,
with repeated augmentation.
It ensures that different each augmented version of a sample will be visible to a
different process (GPU). Heavily based on torch.utils.data.DistributedSampler

This sampler was taken from https://github.com/facebookresearch/deit/blob/0c4b8f60/samplers.py
Used in
Copyright (c) 2015-present, Facebook, Inc.
Nc                 ó&  • Uc:  [         R                  " 5       (       d  [        S5      e[         R                  " 5       nUc:  [         R                  " 5       (       d  [        S5      e[         R                  " 5       nXl        X l        X0l        X@l        XPl	        SU l
        [        [        R                  " [        U R
                  5      U-  U R                  -  5      5      U l        U R                  U R                  -  U l        U=(       d    UnU(       aA  [        [        R"                  " [        U R
                  5      U-  U-  U-  5      5      U l        g [        [        R                  " [        U R
                  5      U-  5      5      U l        g )Nr   r   )r	   r
   r   r   r   r   r   r   ÚshuffleÚnum_repeatsÚepochr   r   r   r   r   r   ÚfloorÚnum_selected_samples)r   r   r   r   r3   r4   Úselected_roundÚselected_ratios           r   r   ÚRepeatAugSampler.__init__A   s1  € ð ÑÜ×$Ò$×&Ñ&Ü"Ð#QÓRÐRÜ×.Ò.Ó0ˆLØ‰<Ü×$Ò$×&Ñ&Ü"Ð#QÓRÐRÜ—=’=“?ˆDØŒØ(ÔØŒ	ØŒØ&ÔØˆŒ
ÜœtŸyšy¬¨T¯\©\Ó):¸[Ñ)HÈ4×K\ÑK\Ñ)\Ó]Ó^ˆÔØ×*Ñ*¨T×->Ñ->Ñ>ˆŒð (×7¨<ˆÞÜ(+¬D¯JªJÜ�T—\‘\Ó" nÑ4°~ÑEÈÑVó-Xó )YˆDÕ%ô ),¬D¯IªI´c¸$¿,¹,Ó6GÈ.Ñ6XÓ,YÓ(ZˆDÕ%r   c           
      óL  • [         R                  " 5       nUR                  U R                  5        U R                  (       a)  [         R
                  " [        U R                  5      US9nO([         R                  " S[        U R                  5      S9n[        U R                  [        5      (       až  U R                  R                  5       (       d  [        R                  " U R                  [        U R                  5      -  5      nU[         R                  " [!        U5       Vs/ s H  n[#        X@R                  -  5      PM     sn5         nO)[         R$                  " U[#        U R                  5      SS9nUR'                  5       nU R(                  [        U5      -
  nUS:”  a  X"S U -  n[        U5      U R(                  :X  d   eX R*                  U R(                  U R,                  2   n[        U5      U R.                  :X  d   e[1        US U R2                   5      $ s  snf )N)Ú	generatorr   )ÚstartÚend)ÚrepeatsÚdim)ÚtorchÚ	GeneratorÚmanual_seedr5   r3   Úrandpermr   r   ÚarangeÚ
isinstancer4   ÚfloatÚ
is_integerr   r   Útensorr   r   Úrepeat_interleaveÚtolistr   r   r   r   r    r7   )r   Úgr!   Úrepeat_sizeÚiÚpadding_sizes         r   r"   ÚRepeatAugSampler.__iter__e   sž  € ä�OŠOÓˆØ	�‰�d—j‘jÔ!Ø�<�<Ü—n’n¤S¨¯©Ó%6À!ÑD‰Gä—l’l¨´°D·L±LÓ0AÑBˆGô �d×&Ñ&¬×.Ñ.°t×7GÑ7G×7RÑ7R×7TÑ7TäŸ)š) D×$4Ñ$4´s¸4¿<¹<Ó7HÑ$HÓIˆKØœeŸlšlÔPUÐVaÔPbÓ+cÒPbÈ1¬C°×5EÑ5EÑ0EÖ,FÑPbÑ+cÓdÑe‰Gä×-Ò-¨g¼sÀ4×CSÑCSÓ?TÐZ[Ñ\ˆGØ—.‘.Ó"ˆà—‘¬¨W«Ñ5ˆØ˜!ÓØ˜} Ð-Ñ-ˆGÜ�7‹|˜tŸ™Ó.Ð.Ð.ð Ÿ)™) D§O¡O°D×4EÑ4EÐEÑFˆÜ�7‹|˜t×/Ñ/Ó/Ð/Ð/ô �GÐ6˜T×6Ñ6Ð7Ó8Ð8ùò ,ds   Ä%!H!
c                 ó   • U R                   $ r   )r7   r%   s    r   r&   ÚRepeatAugSampler.__len__ƒ   s   € Ø×(Ñ(Ð(r   c                 ó   • Xl         g r   )r5   )r   r5   s     r   Ú	set_epochÚRepeatAugSampler.set_epoch†   s   € Ø�
r   )	r   r5   r4   r   r   r7   r   r3   r   )NNTé   é   r   )
r(   r)   r*   r+   r,   r   r"   r&   rT   r-   r.   r   r   r0   r0   6   s1   † ñð ØØØØØô"[òH9ò<)õr   r0   )	r   rA   Útorch.utils.datar   Útorch.distributedÚdistributedr	   r   r0   r.   r   r   Ú<module>r[      s,   ðÛ Û Ý $Ý  ô,  ô , ô^Q�wõ Qr   