
    &`it                     J   d dl mZmZ d dlmZ d dlmZmZ d dlm	Z	m
Z
mZmZ d dlmZ dee         dedee         fd	Zd
edee         dedeeeef         fdZdee         deee                  dedeee         ee         ef         fdZdedee         dee         fdZdS )    )ListTuple)	RefBundle)_calculate_blocks_rows_split_at_indices)BlockBlockMetadataBlockPartition_take_first_non_empty_schema)	ObjectRefper_split_bundlesowned_by_consumerreturnc                    t          |           dk    r| S d | D             }d |D             }t          d |D                       }|t          |          z  }t          |||          \  }}}t          ||          D ]1\  }	}
t          d |	D                       }||k    sJ ||
z   |k    sJ 2t	          d | D                       }t          |||          }t          ||          }t          |          D ]G\  }}||                             |           t          d ||         D                       }||k    sJ Hg }|D ]'}|	                    t          |||                     (|S )	zEqualize split ref bundles into equal number of rows.

    Args:
        per_split_bundles: ref bundles to equalize.
    Returns:
        the equalized ref bundles.
    r   c                     g | ]	}|j         
S  )blocks.0bundles     o/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/ray/data/_internal/equalize.py
<listcomp>z_equalize.<locals>.<listcomp>   s    %T%T%Tfm%T%T%T    c                 ,    g | ]}t          |          S r   )r   )r   splits     r   r   z_equalize.<locals>.<listcomp>   s.     + + +*/u%%+ + +r   c                 ,    g | ]}t          |          S r   )sum)r   blocks_rowss     r   r   z_equalize.<locals>.<listcomp>   s     MMM;c+&&MMMr   c                 "    g | ]\  }}|j         S r   num_rowsr   _metas      r   r   z_equalize.<locals>.<listcomp>*   s    IIIDt}IIIr   c              3   $   K   | ]}|j         V  d S )N)schemar   s     r   	<genexpr>z_equalize.<locals>.<genexpr>0   s$      )X)XF&-)X)X)X)X)X)Xr   )owns_blocksr&   c                 "    g | ]\  }}|j         S r   r    r"   s      r   r   z_equalize.<locals>.<listcomp>9   s    MMMDt}MMMr   )
lenr   _shave_all_splitszipr   r   _split_leftovers	enumerateextendappend)r   r   per_split_blocks_with_metadataper_split_num_rows
total_rowstarget_split_sizeshaved_splitsper_split_needed_rows	leftoversshaved_splitsplit_needed_rownum_shaved_rowsr&   leftover_bundleleftover_splitsileftover_splitequalized_ref_bundlesr   s                      r   	_equalizer@      s    ""  %T%TBS%T%T%T"+ +3Q+ + + MM:LMMMNNJ"c*H&I&II 7H&(:<M7 73M()
 +.m=R*S*S G G&&IILIIIJJ"33333!115FFFFFF *)X)XFW)X)X)XXXF	7HQWXXXO&8MNNO '77 4 4>a/// MMM!<LMMMNN"333333 .0 
 
$$e):6JJJ	
 	
 	
 	
 ! r   r   num_rows_per_blocktarget_sizec                     g }g }d}t          | |          D ]>\  }}||z   |k    r|                    |           ||z  })|                    |           ?||z
  }|||fS )a  Shave a block list to the target size.

    Args:
        split: the block list to shave.
        num_rows_per_block: num rows for each block in the list.
        target_size: the upper bound target size of the shaved list.
    Returns:
        A tuple of:
            - shaved block list.
            - num of rows needed for the block list to meet the target size.
            - leftover blocks.

    r   )r,   r0   )	r   rA   rB   shavedr7   shaved_rowsblock_with_meta
block_rowsnum_rows_neededs	            r   _shave_one_splitrI   E   s    " FIK'*52D'E'E . .##{22MM/***:%KK_----!K/O?I--r   input_splitsr2   c                     g }g }g }t          | |          D ]Y\  }}t          |||          \  }}	}
|                    |           |                    |	           |                    |
           Z|||fS )a  Shave all block list to the target size.

    Args:
        input_splits: all block list to shave.
        input_splits: num rows (per block) for each block list.
        target_size: the upper bound target size of the shaved lists.
    Returns:
        A tuple of:
            - all shaved block list.
            - num of rows needed for the block list to meet the target size.
            - leftover blocks.
    )r,   rI   r0   r/   )rJ   r2   rB   r5   r6   r7   r   rA   rD   rH   
_leftoverss              r   r+   r+   c   s    " MI%(7I%J%J % %!!.>%{/
 /
+ 	V$$$$$_555$$$$/::r   r7   r6   c                     t          |          }g }d}t          |          D ]%\  }}|                    ||z              ||         }&t          | j        || j                  }d t          | D             d|         S )z0Split leftover blocks by the num of rows needed.r   c                 N    g | ]"\  }}t          t          ||                    #S r   )listr,   )r   
block_refsr$   s      r   r   z$_split_leftovers.<locals>.<listcomp>   s/    SSS,<JDZ&&''SSSr   N)r*   r.   r0   r   r   r(   r,   )r7   r6   
num_splitssplit_indicesprevr=   rH   split_results           r   r-   r-      s     *++JMD'(=>>    ?TO3444Q 		 	  TS\@RSSS r   N)typingr   r   'ray.data._internal.execution.interfacesr   ray.data._internal.splitr   r   ray.data.blockr   r	   r
   r   	ray.typesr   boolr@   intrI   r+   r-   r   r   r   <module>r\      s           = = = = = = N N N N N N N N                  4!I4!4! 
)_4! 4! 4! 4!n../3Cy.GJ.
>3./. . . .<;~&;T#Y; ; 4cN:;	; ; ; ;@15c	.     r   