o
    bi                     @   sN   d dl mZ d dlmZmZmZ d dlmZ d dlm	Z	 de	defddZ
d	S )
    )List)AllToAllTransformFn	RefBundleTaskContext)AllToAllTransformFnResult)RandomizeBlocksopreturnc                    s"   dt t dtdtf fdd}|S )z/Generate function to randomize order of blocks.refscontextr	   c                    s   dd l }g }d gt|  }t| D ]\ }|j| < | fdd|jD  qt|dkr5| jg ifS jd ur@|j t	dd | D }|
| g }g }|D ]\}	}
 ||
  |t|	|
fg||  d qT|j|ifS )Nr   c                 3   s    | ]
\}}|| fV  qd S N ).0blockmetair   _/home/ubuntu/.local/lib/python3.10/site-packages/ray/data/_internal/planner/randomize_blocks.py	<genexpr>   s    
z;generate_randomize_blocks_fn.<locals>.fn.<locals>.<genexpr>c                 s   s    | ]}|j V  qd S r   )owns_blocks)r   br   r   r   r   '   s    )r   schema)randomlen	enumerater   extendblocks_name_seedseedallshuffleappendto_statsr   )r
   r   r   blocks_with_metadataindex_to_schema
ref_bundleinput_ownedoutput
stats_listr   r   r   r   r   fn   s:   



z(generate_randomize_blocks_fn.<locals>.fn)r   r   r   r   )r   r+   r   r*   r   generate_randomize_blocks_fn   s   (r,   N)typingr   'ray.data._internal.execution.interfacesr   r   r   4ray.data._internal.execution.interfaces.transform_fnr   8ray.data._internal.logical.operators.all_to_all_operatorr   r,   r   r   r   r   <module>   s    