from typing import Generic from ray.data.block import Block, BlockAccessor, BlockType, T class BlockBuilder(Generic[T]): """A builder class for blocks.""" @staticmethod def for_block(block: Block) -> "BlockBuilder": return BlockAccessor.for_block(block).builder() def add(self, item: T) -> None: """Append a single row to the block being built.""" raise NotImplementedError def add_block(self, block: Block) -> None: """Append an entire block to the block being built.""" raise NotImplementedError def will_build_yield_copy(self) -> bool: """Whether building this block will yield a new block copy.""" raise NotImplementedError def build(self) -> Block: """Build the block.""" raise NotImplementedError def num_rows(self) -> int: """Return the number of rows added in the block.""" raise NotImplementedError def get_estimated_memory_usage(self) -> int: """Return the estimated memory usage so far in bytes.""" raise NotImplementedError def block_type(self) -> BlockType: """Return the block type.""" raise NotImplementedError