
    Pi                         d dl Z d dlmZmZ d dlmZ ddlmZmZ  ej	        e
          Z G d d          Zed             Zd	 Zd
 Zee j        defd                        ZdS )    N)PoolRLock)tqdm   )experimentalloggingc                       e Zd ZdZdS )ParallelBackendConfigN)__name__
__module____qualname__backend_name     n/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/datasets/parallel/parallel.pyr
   r
      s        LLLr   r
   c	                 v    t           j        t          | ||||||||	  	        S t          | ||||||||	  	        S )a  
    **Experimental.** Apply a function to iterable elements in parallel, where the implementation uses either
    multiprocessing.Pool or joblib for parallelization.

    Args:
        function (`Callable[[Any], Any]`): Function to be applied to `iterable`.
        iterable (`list`, `tuple` or `np.ndarray`): Iterable elements to apply function to.
        num_proc (`int`): Number of processes (if no backend specified) or jobs (using joblib).
        types (`tuple`): Additional types (besides `dict` values) to apply `function` recursively to their elements.
        disable_tqdm (`bool`): Whether to disable the tqdm progressbar.
        desc (`str`): Prefix for the tqdm progressbar.
        single_map_nested_func (`Callable`): Map function that applies `function` to an element from `iterable`.
            Takes a tuple of function, data_struct, types, rank, disable_tqdm, desc as input, where data_struct is an
            element of `iterable`, and `rank` is used for progress bar.
    )r
   r   _map_with_multiprocessing_pool_map_with_joblib)	functioniterablenum_procbatched
batch_sizetypesdisable_tqdmdescsingle_map_nested_funcs	            r   parallel_mapr      s]    " )1-h':ulTXZp
 
 	
 (Hgz5,PTVl  r   c	                    |t          |          k    r|nt          |          }g }	t          |          D ]q}
t          |          |z  }t          |          |z  }||
z  t          |
|          z   }||z   |
|k     rdndz   }|	                    | |||         ||||
||f           rt          |          t	          d |	D                       k    r9t          dt          |           dt	          d |	D                                  t                              d| dt          |           d	d
 |	D                         d\  }}|st                      ft          j
        }}t          |||          5 }|                    ||	          }d d d            n# 1 swxY w Y   t                              d| d           d |D             }t                              dt          |           d           |S )N   r   c              3   @   K   | ]}t          |d                    V  dS r    Nlen.0is     r   	<genexpr>z1_map_with_multiprocessing_pool.<locals>.<genexpr>7   s,      ::!C!II::::::r   zHError dividing inputs iterable among processes. Total number of objects z
, length: c              3   @   K   | ]}t          |d                    V  dS r"   r#   r%   s     r   r(   z1_map_with_multiprocessing_pool.<locals>.<genexpr>;   s,      993qt99999999r   z	Spawning z processes for z objects in slices of c                 8    g | ]}t          |d                    S )r    r#   r%   s     r   
<listcomp>z2_map_with_multiprocessing_pool.<locals>.<listcomp>?   s)    RqRqRqabSVWXYZW[S\S\RqRqRqr   )NN)initargsinitializerz	Finished z
 processesc                     g | ]	}|D ]}|
S r   r   )r&   proc_resobjs      r   r+   z2_map_with_multiprocessing_pool.<locals>.<listcomp>G   s%    ===hH==Sc====r   z	Unpacked z objects)r$   rangeminappendsum
ValueErrorloggerinfor   r   set_lockr   map)r   r   r   r   r   r   r   r   r   
split_kwdsindexdivmodstartendr,   r-   poolmappeds                      r   r   r   +   s|    $s8}}44xx#h--HJx r r(mmx'(mmh&ec%oo-ck%#++QQ158XeCi%8':uV[]ikopqqqq
8}}::z:::::::<'*8}}< <99j99999< <
 
 	
 KKsHssS]]ssRqRqfpRqRqRqss   'Hk :!&
DM+	h{	C	C	C >t0*==> > > > > > > > > > > > > > >
KK0H000111==&===F
KK1CKK111222Ms   9FF #F c	           	          	 dd l 		                    t          j        |          5   	                                 	fd|D                       cd d d            S # 1 swxY w Y   d S )Nr   )n_jobsc              3   d   K   | ]*}                                |d dd f          V  +d S )NT)delayed)r&   r0   r   r   r   joblibr   r   s     r   r(   z#_map_with_joblib.<locals>.<genexpr>U   sc       !
 !
 3FNN122Hc7JX]_ceiko3pqq!
 !
 !
 !
 !
 !
r   )rF   parallel_backendr
   r   Parallel)
r   r   r   r   r   r   r   r   r   rF   s
   `  ```  `@r   r   r   M   s    
 MMM		 	 !6!CH	 	U	U 
 
 v   !
 !
 !
 !
 !
 !
 !
 !
 !
!
 !
 !
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
s   .A''A+.A+r   c              #      K   | t           _        | dk    rddlm}  |             	 dV  dt           _        dS # dt           _        w xY w)a  
    **Experimental.**  Configures the parallel backend for parallelized dataset loading, which uses the parallelization
    implemented by joblib.

    Args:
        backend_name (str): Name of backend for parallelization implementation, has to be supported by joblib.

     Example usage:
     ```py
     with parallel_backend('spark'):
       dataset = load_dataset(..., num_proc=2)
     ```
    sparkr   )register_sparkN)r
   r   joblibsparkrK   )r   rK   s     r   rG   rG   [   sn        *6&w......
2-1***T*1111s	   8 A)
contextlibmultiprocessingr   r   	tqdm.autor   utilsr   r   
get_loggerr   r6   r
   r   r   r   contextmanagerstrrG   r   r   r   <module>rT      s       ' ' ' ' ' ' ' '       ) ) ) ) ) ) ) ) 
	H	%	%          4  D
 
 
 23 2 2 2  2 2 2r   