U
    -e                     @   sP   d dl mZ ddlmZmZ ddlmZmZ edeeZee	e	edddZ
d	S )
    )TypeVar   )Dataset _split_by_node_map_style_dataset)IterableDataset_split_by_node_iterable_datasetDatasetType)datasetrank
world_sizereturnc                 C   s*   t | trt| ||dS t| ||dS dS )a  
    Split a dataset for the node at rank `rank` in a pool of nodes of size `world_size`.

    For map-style datasets:

    Each node is assigned a chunk of data, e.g. rank 0 is given the first chunk of the dataset.
    To maximize data loading throughput, chunks are made of contiguous data on disk if possible.

    For iterable datasets:

    If the dataset has a number of shards that is a factor of `world_size` (i.e. if `dataset.n_shards % world_size == 0`),
    then the shards are evenly assigned across the nodes, which is the most optimized.
    Otherwise, each node keeps 1 example out of `world_size`, skipping the other examples.

    Args:
        dataset ([`Dataset`] or [`IterableDataset`]):
            The dataset to split by node.
        rank (`int`):
            Rank of the current node.
        world_size (`int`):
            Total number of nodes.

    Returns:
        [`Dataset`] or [`IterableDataset`]: The dataset to be used on the node at rank `rank`.
    )r
   r   N)
isinstancer   r   r   )r	   r
   r    r   U/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/datasets/distributed.pysplit_dataset_by_node
   s    
r   N)typingr   Zarrow_datasetr   r   Ziterable_datasetr   r   r   intr   r   r   r   r   <module>   s   