§
    X�’j³  ã                   óÀ   — 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dS )é    )ÚSized)ÚIntEnum)ÚNoReturn)Úfunctional_datapipe)ÚIterDataPipeÚSHARDING_PRIORITIESÚShardingFilterIterDataPipec                   ó   — e Zd ZdZdZdZdS )r   é   é   é   N)Ú__name__Ú
__module__Ú__qualname__ÚDEFAULTÚDISTRIBUTEDÚMULTIPROCESSING© ó    úVC:\Projects\DSCons\.venv\Lib\site-packages\torch\utils\data\datapipes\iter\sharding.pyr   r      s   € € € € € Ø€GØ€KØ€O€O€Or   c                   ó&   — e Zd Zdedededefd„ZdS )Ú_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      sN   € € € € € ð"àð"ð ð"ð ,ð	"ð
 
ð"ð "ð "ð "ð "ð "r   r   Úsharding_filterc                   ó^   ‡ — 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| _        |                      ¦   «          d S )Nr   r   )ÚsuperÚ__init__r&   Úsharding_group_filterÚgroupsr   r   Ú_update_num_of_instances)r!   r&   r*   Ú	__class__s      €r   r)   z#ShardingFilterIterDataPipe.__init__,   sZ   ø€ õ 	‰Œ×ÒÑÔÐØ.ˆÔØ%:ˆÔ"Ø24ˆŒØ !ˆÔØˆÔØ×%Ò%Ñ'Ô'Ð'Ð'Ð'r   c                 óP  — ||k    rt          d|› d|› d�¦  «        ‚|t          j        k    r7t          | j        ¦  «        r"t          j        | j        vrt          d¦  «        ‚n"t          j        | j        v rt          d¦  «        ‚||f| j        |<   |                      ¦   «          d S )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Ô   € ð Ð*Ò*Ð*ÝØi˜{ÐiÐiÐVfÐiÐiÐiñô ð ð Õ0Ô8Ò8Ð8Ý�4”;ÑÔð Õ$7Ô$?ÀtÄ{Ð$RÐ$RÝ"ØNñô ð øõ #Ô*¨d¬kÐ9Ð9Ý"ØNñô ð ð (8¸Ð&EˆŒ�NÑ#Ø×%Ò%Ñ'Ô'Ð'Ð'Ð'r   c                 ó  ‡ — ˆ fd„t          ‰ j                             ¦   «         ¦  «        D ¦   «         }|                     ¦   «          d‰ _        d‰ _        |D ]-\  }}‰ xj        ‰ j        |z  z  c_        ‰ xj        |z  c_        Œ.d S )Nc                 óN   •— g | ]!}‰j         �|‰j         k    ¯‰j        |         ‘Œ"S r   )r*   r+   )Ú.0Úkeyr!   s     €r   ú
<listcomp>zGShardingFilterIterDataPipe._update_num_of_instances.<locals>.<listcomp>L   s@   ø€ ð "
ð "
ð "
àØÔ)Ð1°S¸DÔ<VÒ5VÐ5Vð ŒK˜Ôà5VÐ5VÐ5Vr   r   r   )Úsortedr+   ÚkeysÚreverser   r   )r!   Úsorted_sharding_groupsÚgroup_num_of_instancesÚgroup_instance_ids   `   r   r,   z3ShardingFilterIterDataPipe._update_num_of_instancesK   s»   ø€ ð"
ð "
ð "
ð "
å˜dœk×.Ò.Ñ0Ô0Ñ1Ô1ð"
ñ "
ô "
Ðð 	×&Ò&Ñ(Ô(Ð(à !ˆÔØˆÔà9Oð 	<ð 	<Ñ5Ð"Ð$5ØÐÔ Ô 5Ð8IÑ IÑIÐÔØÐ!Ô!Ð%;Ñ;Ð!Ô!Ð!ð	<ð 	<r   c              #   ól   K  — t          | j        ¦  «        D ]\  }}|| j        z  | j        k    r|V — Œd S r   )Ú	enumerater&   r   r   )r!   ÚiÚitems      r   Ú__iter__z#ShardingFilterIterDataPipe.__iter__[   sN   è è € Ý  Ô!5Ñ6Ô6ð 	ð 	‰GˆAˆtØ�4Ô(Ñ(¨DÔ,<Ò<Ð<Ø�
�
�
øð	ð 	r   c                 ó
  — t          | j        t          ¦  «        rFt          | j        ¦  «        | j        z  | j        t          | j        ¦  «        | j        z  k     rdndz   S t          t          | ¦  «        j        › d�¦  «        ‚)Nr   r   z# instance doesn't have valid length)	Ú
isinstancer&   r   r1   r   r   Ú	TypeErrorÚtyper   )r!   s    r   Ú__len__z"ShardingFilterIterDataPipe.__len__`   sˆ   € å�dÔ*­EÑ2Ô2ð 	Ý�tÔ+Ñ,Ô,°Ô0EÑEð Ô$¥s¨4Ô+?Ñ'@Ô'@À4ÔCXÑ'XÒXÐXð �ð ñð õ �4 ™:œ:Ô.ÐSÐSÐSÑTÔTÐTr   r   )r   N)r   r   r   Ú__doc__r   r)   r   r   r"   r,   rB   r#   rG   Ú__classcell__)r-   s   @r   r	   r	       sÇ   ø€ € € € € ðð ð DHð	(ð 	(Ø+ð	(à	ð	(ð 	(ð 	(ð 	(ð 	(ð 	(ð =PÔ<Wð(ð (ð (ð (ð(<ð <ð <ð <ð ð ð ð

U˜ð 
Uð 
Uð 
Uð 
Uð 
Uð 
Uð 
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>rP      s$  ðà !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à EÐ EÐ EÐ EÐ EÐ EØ <Ð <Ð <Ð <Ð <Ð <ð Ø ð€ðð ð ð ð ˜'ñ ô ð ð"ð "ð "ð "ð "˜Lñ "ô "ð "ð ÐÐ&Ñ'Ô'ðIUð IUð IUð IUð IUÐ!6ñ IUô IUñ (Ô'ðIUð IUð IUr   