class_docstr: A list of blocks that may be computed or pending computation.
  
  In the basic version of BlockList, all blocks are known ahead of time. In
  LazyBlockList, blocks are not yet computed, so the number of blocks may
  change after execution due to block splitting.
class_docstr_tok: ["A","list","of","blocks","that","may","be","computed","or","pending","computation",".","In","the","basic","version","of","BlockList",",","all","blocks","are","known","ahead","of","time",".","In","LazyBlockList",",","blocks","are","not","yet","computed",",","so","the","number","of","blocks","may","change","after","execution","due","to","block","splitting","."]
docstr: Divide into two BlockLists by the given block index.
  
  Args:
      block_idx: The block index to divide at.
docstr_tok: ["Divide","into","two","BlockLists","by","the","given","block","index",".","Args",":","block_idx",":","The","block","index","to","divide","at","."]
code: def divide(self, block_idx: int) -> ("BlockList", "BlockList"):
      """Divide into two BlockLists by the given block index.
  
      Args:
          block_idx: The block index to divide at.
      """
      self._check_if_cleared()
      return (
          BlockList(
              self._blocks[:block_idx],
              self._metadata[:block_idx],
              owned_by_consumer=self._owned_by_consumer,
          ),
          BlockList(
              self._blocks[block_idx:],
              self._metadata[block_idx:],
              owned_by_consumer=self._owned_by_consumer,
          ),
      )
  
imports: import math
  from typing import Iterator, List, Optional, Tuple
  import numpy
  from ray.data._internal.memory_tracing import trace_allocation
  from ray.data.block import Block, BlockMetadata
  from ray.types import ObjectRef
label_desc: Use image node_id 12 for calling the BlockList obj's underlying member method code with example usage: obj.divide(block_idx) and returns: BlockList,  BlockList