
    9jI                         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     h/media/conek/DATA/Code/OCR/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+UVfUgghi  08884;;$7$?$?t{{$R"N  #**dkk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     dkk..01"
))1SD<V<V5V KK"
 "
 	&&( !9O 	<5"$5 5 58I 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 	GAt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++,0E0EE $$s4+?+?'@4CXCX'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   