Ë
    éÓ^j¤  ã                   óX   — d dl Z d dlZd dlmZ d dlmZ  G d„ de«      Z G d„ de«      Zy)é    N)ÚSamplerc                   ó$   — e Zd ZdZdd„Zd„ Zd„ Zy)ÚOrderedDistributedSamplera€  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                 óÊ  — |€3t        j                  «       st        d«      ‚t        j                  «       }|€3t        j                  «       st        d«      ‚t        j                  «       }|| _        || _        || _        t        t        j                  t        | j
                  «      dz  | j                  z  «      «      | _        | j                  | j                  z  | _        y )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       úh/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/data/distributed_sampler.pyÚ__init__z"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  — t        t        t        | j                  «      «      «      }||d | j                  t        |«      z
   z  }t        |«      | j                  k(  sJ ‚|| j
                  | j                  | j                  …   }t        |«      | j                  k(  sJ ‚t        |«      S ©N)	ÚlistÚranger   r   r   r   r   r   Úiter)r   Úindicess     r   Ú__iter__z"OrderedDistributedSampler.__iter__%   s”   € Ü”uœS §¡Ó.Ó/Ó0ˆð 	�7Ð<˜TŸ_™_¬s°7«|Ñ;Ð=Ñ=ˆÜ�7‹|˜tŸ™Ò.Ð.Ð.ð ˜$Ÿ)™) D§O¡O°D×4EÑ4EÐEÑFˆÜ�7‹|˜t×/Ñ/Ò/Ð/Ð/ä�G‹}Ðr   c                 ó   — | j                   S r   )r   ©r   s    r   Ú__len__z!OrderedDistributedSampler.__len__2   s   € Ø×ÑÐr   )NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r    r#   © r   r   r   r      s   „ ñó?òó r   r   c                   ó6   — e Zd ZdZ	 	 	 	 	 	 dd„Zd„ Zd„ Zd„ Zy)ÚRepeatAugSamplera»  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                 óö  — |€3t        j                  «       st        d«      ‚t        j                  «       }|€3t        j                  «       st        d«      ‚t        j                  «       }|| _        || _        || _        || _        || _	        d| _
        t        t        j                  t        | j
                  «      |z  | j                  z  «      «      | _        | j                  | j                  z  | _        |xs |}|r@t        t        j"                  t        | j
                  «      |z  |z  |z  «      «      | _        y t        t        j                  t        | j
                  «      |z  «      «      | _        y )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   r,   r-   Úselected_roundÚselected_ratios           r   r   zRepeatAugSampler.__init__A   s5  € ð ÐÜ×$Ñ$Ô&Ü"Ð#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           
      ó.  — t        j                  «       }|j                  | j                  «       | j                  r+t        j
                  t        | j                  «      |¬«      }n*t        j                  dt        | j                  «      ¬«      }t        | j                  t        «      r•| j                  j                  «       s{t        j                  | j                  t        | j                  «      z  «      }|t        j                  t!        |«      D �cg c]  }t#        || j                  z  «      ‘Œ c}«         }n+t        j$                  |t#        | j                  «      d¬«      }|j'                  «       }| j(                  t        |«      z
  }|dkD  r||d | z  }t        |«      | j(                  k(  sJ ‚|| j*                  | j(                  | j,                  …   }t        |«      | j.                  k(  sJ ‚t1        |d | j2                   «      S c c}w )N)Ú	generatorr   )ÚstartÚend)ÚrepeatsÚdim)ÚtorchÚ	GeneratorÚmanual_seedr.   r,   Úrandpermr   r   ÚarangeÚ
isinstancer-   ÚfloatÚ
is_integerr   r   Útensorr   r   Úrepeat_interleaveÚtolistr   r   r   r   r   r0   )r   Úgr   Úrepeat_sizeÚiÚpadding_sizes         r   r    z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äŸ)™) D×$4Ñ$4´s¸4¿<¹<Ó7HÑ$HÓIˆKØœeŸl™lÔPUÐVaÓPbÖ+cÈ1¬C°°T×5EÑ5EÑ0EÕ,FÒ+cÓdÑe‰Gä×-Ñ-¨g¼sÀ4×CSÑCSÓ?TÐZ[Ô\ˆGØ—.‘.Ó"ˆà—‘¬¨W«Ñ5ˆØ˜!ÒØ�w˜} Ð-Ñ-ˆ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                 ó   — | j                   S r   )r0   r"   s    r   r#   zRepeatAugSampler.__len__ƒ   s   € Ø×(Ñ(Ð(r   c                 ó   — || _         y r   )r.   )r   r.   s     r   Ú	set_epochzRepeatAugSampler.set_epoch†   s	   € Øˆ�
r   )NNTé   é   r   )r$   r%   r&   r'   r   r    r#   rJ   r(   r   r   r*   r*   6   s1   „ ñð ØØØØØó"[òH9ò<)ór   r*   )	r   r9   Útorch.utils.datar   Útorch.distributedÚdistributedr   r   r*   r(   r   r   ú<module>rP      s,   ðÛ Û Ý $Ý  ô,  ô , ô^Q�wõ Qr   