
    QVji                         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)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     b/root/voice-cloning/.venv/lib/python3.11/site-packages/torch/utils/data/datapipes/iter/sharding.pyr   r      s        GKOOOr   c                   "    e Zd ZdededefdZdS )_ShardingIterDataPipenum_of_instancesinstance_idsharding_groupc                     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      sD        "" " ,	" " " " " "r   r   sharding_filterc                   F    e Zd ZdZd	defdZej        fdZd Z	d Z
d Zd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_datapipec                 t    || _         || _        i | _        d| _        d| _        |                                  d S )Nr
   r   )r$   sharding_group_filtergroupsr   r   _update_num_of_instances)r   r$   r&   s      r   __init__z#ShardingFilterIterDataPipe.__init__+   sA    .%:"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_sharding3   s     ***i{iiVfiii   08884; $7$?t{$R$R"N   #*dk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>H   s@     "
 "
 "
)1SD<V5V5V K5V5V5Vr   r
   r   )sortedr'   keysreverser   r   )r   sorted_sharding_groupsgroup_num_of_instancesgroup_instance_ids   `   r   r(   z3ShardingFilterIterDataPipe._update_num_of_instancesG   s    "
 "
 "
 "
dk..0011"
 "
 "
 	&&((( !9O 	< 	<5"$5 58I 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__W   sN       !566 	 	GAt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   r-   r   r   	TypeErrortyper   )r   s    r   __len__z"ShardingFilterIterDataPipe.__len__\   s    d*E22 	t+,,0EE $s4+?'@'@4CX'XXX    4::.SSSTTTr   r   )r   r   r   __doc__r   r)   r   r   r    r(   r>   rC   r   r   r   r   r      s         ( ( ( ( ( ( =P<W( ( ( ((< < <   
	U 	U 	U 	U 	Ur   N)collections.abcr   enumr   %torch.utils.data.datapipes._decoratorr   #torch.utils.data.datapipes.datapiper   __all__r   r   r   r   r   r   <module>rJ      s   ! ! ! ! ! !       E E E E E E < < < < < <      '   " " " " "L " " " &''EU EU EU EU EU!6 EU EU ('EU EU EUr   