ó
    "EñiI  ã                   ó    • S SK Jr  S SKJr  S SKJr  S SKJr  S SKJ	r	  SS/r
 " S S\5      r " S	 S
\	5      r\" S5       " S S\5      5       rg)é    )ÚSized)ÚIntEnum)ÚNoReturn)Úfunctional_datapipe)ÚIterDataPipeÚSHARDING_PRIORITIESÚShardingFilterIterDataPipec                   ó    • \ rS rSrSrSrSrSrg)r   é   é   é   é   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚDEFAULTÚDISTRIBUTEDÚMULTIPROCESSINGÚ__static_attributes__r   ó    Úe/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/utils/data/datapipes/iter/sharding.pyr   r      s   † Ø€GØ€KØƒOr   c                   ó.   • \ rS rSrS\S\S\S\4S jrSrg)	Ú_ShardingIterDataPipeé   Únum_of_instancesÚinstance_idÚsharding_groupÚreturnc                 ó   • [         e©N)ÚNotImplementedError©Úselfr   r   r   s       r   Úapply_shardingÚ$_ShardingIterDataPipe.apply_sharding   s
   € ô "Ð!r   r   N)	r   r   r   r   Úintr   r   r&   r   r   r   r   r   r      s-   † ð"àð"ð ð"ð ,ð	"ð
 
÷"r   r   Úsharding_filterc                   ó|   ^ • \ rS rSrSr SS\SS4U 4S jjjr\R                  4S jr	SS jr
S	 rS\4S
 jrSrU =r$ )r	   é    aW  
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U ]  5         Xl        X l        0 U l        SU l        SU l        U R                  5         g ©Nr   r   )ÚsuperÚ__init__r,   Úsharding_group_filterÚgroupsr   r   Ú_update_num_of_instances)r%   r,   r1   Ú	__class__s      €r   r0   Ú#ShardingFilterIterDataPipe.__init__,   s?   ø€ ô 	‰ÑÔØ.ÔØ%:Ô"Ø24ˆŒØ !ˆÔØˆÔØ×%Ñ%Õ'r   c                 ót  • X!:¼  a  [        SU SU S35      eU[        R                  :X  aD  [        U R                  5      (       a)  [        R                  U R                  ;  a  [        S5      eO)[        R                  U R                  ;   a  [        S5      eX4U R                  U'   U R                  5         g )Nzinstance_id(z*) should be smaller than num_of_instances(Ú)z8ShardingFilter cannot mix DEFAULT and non DEFAULT groups)Ú
ValueErrorr   r   Úlenr2   ÚRuntimeErrorr3   r$   s       r   r&   Ú)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                 óŠ  • [        U R                  R                  5       5       Vs/ s H0  nU R                  b  XR                  :X  d  M!  U R                  U   PM2     nnUR	                  5         SU l        SU l        U H<  u  p4U =R                  U R
                  U-  -  sl        U =R
                  U-  sl        M>     g s  snf r.   )Úsortedr2   Úkeysr1   Úreverser   r   )r%   ÚkeyÚsorted_sharding_groupsÚgroup_num_of_instancesÚgroup_instance_ids        r   r3   Ú3ShardingFilterIterDataPipe._update_num_of_instancesK   s¹   € ô ˜dŸk™k×.Ñ.Ó0Ô1ó"
â1�Ø×)Ñ)Ñ1°S×<VÑ<VÑ5Vó ˆD�K‰K˜ÔÙ1ð 	ð "
ð 	×&Ñ&Ô(à !ˆÔØˆÔã9OÑ5Ð"Ø×Ò × 5Ñ 5Ð8IÑ IÑIÕØ×!Ò!Ð%;Ñ;×!ò :Pùò"
s   ¦ C Á
C c              #   óŒ   #   • [        U R                  5       H'  u  pXR                  -  U R                  :X  d  M#  Uv •  M)     g 7fr"   )Ú	enumerater,   r   r   )r%   ÚiÚitems      r   Ú__iter__Ú#ShardingFilterIterDataPipe.__iter__[   s8   é € Ü  ×!5Ñ!5Ö6‰GˆAØ×(Ñ(Ñ(¨D×,<Ñ,<Õ<Ø”
ò 7ùs
   ‚5A»	Ac                 ó4  • [        U R                  [        5      (       aY  [        U R                  5      U R                  -  U R
                  [        U R                  5      U R                  -  :  a  S-   $ S-   $ [        [        U 5      R                   S35      e)Nr   r   z# instance doesn't have valid length)	Ú
isinstancer,   r   r9   r   r   Ú	TypeErrorÚtyper   )r%   s    r   Ú__len__Ú"ShardingFilterIterDataPipe.__len__`   s’   € ä�d×*Ñ*¬E×2Ñ2Ü�t×+Ñ+Ó,°×0EÑ0EÑEð ×$Ñ$¤s¨4×+?Ñ+?Ó'@À4×CXÑCXÑ'XÓXð ñð ð
 ñð ô œ4 ›:×.Ñ.Ð/Ð/RÐSÓTÐTr   )r2   r   r   r1   r,   r"   )r    N)r   r   r   r   Ú__doc__r   r0   r   r   r&   r3   rI   r(   rO   r   Ú__classcell__)r4   s   @r   r	   r	       sX   ø† ñð DHñ	(Ø+ð	(à	÷	(ð 	(ð =P×<WÑ<Wô(ô(<ò ð

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>rY      sc   ðå !Ý Ý å EÝ <ð Ø ð€ô˜'ô ô"˜Lô "ñ Ð&Ó'ôIUÐ!6ó IUó (ñIUr   