Ë
    ÌÓ^jI  ã                   ó    — d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 ddgZ
 G d„ de«      Z G d	„ d
e	«      Z ed«       G d„ de«      «       Zy)é    )ÚSized)ÚIntEnum)ÚNoReturn)Úfunctional_datapipe)ÚIterDataPipeÚSHARDING_PRIORITIESÚShardingFilterIterDataPipec                   ó   — e Zd ZdZdZdZy)r   é   é   é   N)Ú__name__Ú
__module__Ú__qualname__ÚDEFAULTÚDISTRIBUTEDÚMULTIPROCESSING© ó    ús/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/utils/data/datapipes/iter/sharding.pyr   r      s   „ Ø€GØ€KØ�Or   c                   ó$   — e Zd Zdedededefd„Zy)Ú_ShardingIterDataPipeÚnum_of_instancesÚinstance_idÚsharding_groupÚreturnc                 ó   — t         ‚©N)ÚNotImplementedError©Úselfr   r   r   s       r   Úapply_shardingz$_ShardingIterDataPipe.apply_sharding   s
   € ô "Ð!r   N)r   r   r   Úintr   r   r"   r   r   r   r   r      s-   „ ð"àð"ð ð"ð ,ð	"ð
 
ô"r   r   Úsharding_filterc                   óh   ‡ — e Zd ZdZ	 d
deddfˆ fd„Zej                  fd„Zdd„Z	d„ Z
defd	„Zˆ xZS )r	   ao  
    Wrapper that allows DataPipe to be sharded (functional name: ``sharding_filter``).

    After ``apply_sharding`` is called, each instance of the DataPipe (on different workers) will have every `n`-th element of the
    original DataPipe, where `n` equals to the number of instances.

    Args:
        source_datapipe: Iterable DataPipe that will be sharded
    NÚsource_datapiper   c                 óˆ   •— t         ‰| �  «        || _        || _        i | _        d| _        d| _        | j                  «        y ©Nr   r   )ÚsuperÚ__init__r&   Úsharding_group_filterÚgroupsr   r   Ú_update_num_of_instances)r!   r&   r+   Ú	__class__s      €r   r*   z#ShardingFilterIterDataPipe.__init__,   sC   ø€ ô 	‰ÑÔØ.ˆÔØ%:ˆÔ"Ø24ˆŒØ !ˆÔØˆÔØ×%Ñ%Õ'r   c                 ó`  — ||k\  rt        d|› d|› d�«      ‚|t        j                  k(  r<t        | j                  «      rNt        j                  | j                  vr2t        d«      ‚t        j                  | j                  v rt        d«      ‚||f| j                  |<   | j                  «        y )Nzinstance_id(z*) should be smaller than num_of_instances(ú)z8ShardingFilter cannot mix DEFAULT and non DEFAULT groups)Ú
ValueErrorr   r   Úlenr,   ÚRuntimeErrorr-   r    s       r   r"   z)ShardingFilterIterDataPipe.apply_sharding7   s´   € ð Ð*Ò*ÜØ˜{˜mÐ+UÐVfÐUgÐghÐióð ð Ô0×8Ñ8Ò8Ü�4—;‘;ÔÔ$7×$?Ñ$?ÀtÇ{Á{Ñ$RÜ"ØNóð ô #×*Ñ*¨d¯k©kÑ9Ü"ØNóð ð (8¸Ð&Eˆ�‰�NÑ#Ø×%Ñ%Õ'r   c                 ó|  — t        | j                  j                  «       «      D �cg c],  }| j                  �|| j                  k(  r| j                  |   ‘Œ. }}|j	                  «        d| _        d| _        |D ]<  \  }}| xj                  | j
                  |z  z  c_        | xj
                  |z  c_        Œ> y c c}w r(   )Úsortedr,   Úkeysr+   Úreverser   r   )r!   ÚkeyÚsorted_sharding_groupsÚgroup_num_of_instancesÚgroup_instance_ids        r   r-   z3ShardingFilterIterDataPipe._update_num_of_instancesK   s¾   € ô ˜dŸk™k×.Ñ.Ó0Ó1ö"
àØ×)Ñ)Ð1°S¸D×<VÑ<VÒ5Vð �K‰K˜Óð"
Ðð "
ð 	×&Ñ&Ô(à !ˆÔØˆÔà9Oò 	<Ñ5Ð"Ð$5Ø×Ò × 5Ñ 5Ð8IÑ IÑIÕØ×!Ò!Ð%;Ñ;Ö!ñ	<ùò"
s   ¦1B9c              #   óˆ   K  — t        | j                  «      D ]&  \  }}|| j                  z  | j                  k(  sŒ#|–— Œ( y ­wr   )Ú	enumerater&   r   r   )r!   ÚiÚitems      r   Ú__iter__z#ShardingFilterIterDataPipe.__iter__[   sB   è ø€ Ü  ×!5Ñ!5Ó6ò 	‰GˆAˆtØ�4×(Ñ(Ñ(¨D×,<Ñ,<Ó<Ø“
ñ	ùs
   ‚8A»Ac                 ó(  — t        | j                  t        «      rXt        | j                  «      | j                  z  | j
                  t        | j                  «      | j                  z  k  rdz   S dz   S t        t        | «      j                  › d�«      ‚)Nr   r   z# instance doesn't have valid length)	Ú
isinstancer&   r   r2   r   r   Ú	TypeErrorÚtyper   )r!   s    r   Ú__len__z"ShardingFilterIterDataPipe.__len__`   s�   € ä�d×*Ñ*¬EÔ2Ü�t×+Ñ+Ó,°×0EÑ0EÑEð ×$Ñ$¤s¨4×+?Ñ+?Ó'@À4×CXÑCXÑ'XÒXð ñð ð
 ñð ô œ4 ›:×.Ñ.Ð/Ð/RÐSÓTÐTr   r   )r   N)r   r   r   Ú__doc__r   r*   r   r   r"   r-   r@   r#   rE   Ú__classcell__)r.   s   @r   r	   r	       sM   ø„ ñð DHñ	(Ø+ð	(à	õ	(ð =P×<WÑ<Wó(ó(<ò ð

U˜÷ 
Ur   N)Úcollections.abcr   Úenumr   Útypingr   Ú%torch.utils.data.datapipes._decoratorr   Ú#torch.utils.data.datapipes.datapiper   Ú__all__r   r   r	   r   r   r   ú<module>rN      sc   ðå !Ý Ý å EÝ <ð Ø ð€ô˜'ô ô"˜Lô "ñ Ð&Ó'ôIUÐ!6ó IUó (ñIUr   