o
    b²“iˆ
  ã                   @   s`   d dl Z d dlmZmZmZ d dlmZ d dlmZ d dl	m
Z
mZmZmZ G dd„ deƒZdS )é    N)ÚAnyÚMappingÚOptional)ÚArrowBlockBuilder)ÚBlockBuilder)ÚBlockÚBlockAccessorÚ	BlockTypeÚ	DataBatchc                   @   s˜   e Zd Zdd„ Zedee fdd„ƒZdee	e
f ddfdd	„Zd
efdd„Zdefdd„Zdefdd„Zdefdd„Zdefdd„Zdefdd„ZdS )ÚDelegatingBlockBuilderc                 C   s   d | _ d | _d S ©N)Ú_builderÚ_empty_block©Úself© r   ú_/home/ubuntu/.local/lib/python3.10/site-packages/ray/data/_internal/delegating_block_builder.pyÚ__init__
   s   
zDelegatingBlockBuilder.__init__Úreturnc                 C   s   | j dur
| j  ¡ S dS )zAThe block type inferred from the first item added to the builder.N)r   Ú
block_typer   r   r   r   Ú_inferred_block_type   s   

z+DelegatingBlockBuilder._inferred_block_typeÚitemNc                 C   s8   t |tjjƒsJ |ƒ‚| jd u rtƒ | _| j |¡ d S r   )Ú
isinstanceÚcollectionsÚabcr   r   r   Úadd)r   r   r   r   r   r      s   
zDelegatingBlockBuilder.addÚbatchc                 C   s   t  || j¡}|  |¡S )z§Add a user-facing data batch to the builder.

        This data batch will be converted to an internal block and then added to the
        underlying builder.
        )r   Úbatch_to_blockr   Ú	add_block)r   r   Úblockr   r   r   Ú	add_batch   s   
z DelegatingBlockBuilder.add_batchr   c                 C   sj   t  |¡}| ¡ dkr|| _d S | jd u r| ¡ | _n| ¡ }|| jks+J || jfƒ‚| j | 	¡ ¡ d S ©Nr   )
r   Ú	for_blockÚnum_rowsr   r   Úbuilderr   r   r   Úto_block)r   r   Úaccessorr   r   r   r   r   &   s   

þz DelegatingBlockBuilder.add_blockc                 C   ó   | j d u rdS | j  ¡ S )NT)r   Úwill_build_yield_copyr   r   r   r   r(   8   ó   

z,DelegatingBlockBuilder.will_build_yield_copyc                 C   sH   | j d u r| jd urt | j¡ ¡ | _ | j  | j¡ ntƒ | _ | j  ¡ S r   )r   r   r   r"   r$   r   r   Úbuildr   r   r   r   r*   =   s   


zDelegatingBlockBuilder.buildc                 C   s   | j d ur
| j  ¡ S dS r!   )r   r#   r   r   r   r   r#   F   s   zDelegatingBlockBuilder.num_rowsc                 C   r'   r!   )r   Úget_estimated_memory_usager   r   r   r   r+   I   r)   z1DelegatingBlockBuilder.get_estimated_memory_usage)Ú__name__Ú
__module__Ú__qualname__r   Úpropertyr   r	   r   r   Ústrr   r   r
   r    r   r   Úboolr(   r*   Úintr#   r+   r   r   r   r   r   	   s    		r   )r   Útypingr   r   r   Úray.data._internal.arrow_blockr   Ú ray.data._internal.block_builderr   Úray.data.blockr   r   r	   r
   r   r   r   r   r   Ú<module>   s    