code: def _bundles_to_block_list(bundles: Iterator[RefBundle]) -> BlockList:
      blocks, metadata = [], []
      owns_blocks = True
      for ref_bundle in bundles:
          if not ref_bundle.owns_blocks:
              owns_blocks = False
          for block, meta in ref_bundle.blocks:
              blocks.append(block)
              metadata.append(meta)
      return BlockList(blocks, metadata, owned_by_consumer=owns_blocks)
  
imports: from typing import Iterator, Tuple
  from ray.data._internal.block_list import BlockList
  from ray.data._internal.execution.interfaces import Executor, PhysicalOperator, RefBundle
  from ray.data._internal.lazy_block_list import LazyBlockList
  from ray.data._internal.logical.interfaces.logical_plan import LogicalPlan
  from ray.data._internal.logical.operators.read_operator import Read
  from ray.data._internal.logical.optimizers import get_execution_plan
  from ray.data._internal.logical.rules.set_read_parallelism import compute_additional_split_factor
  from ray.data._internal.logical.util import record_operators_usage
  from ray.data._internal.plan import ExecutionPlan
  from ray.data._internal.planner.plan_read_op import apply_output_blocks_handling_to_read_task
  from ray.data._internal.stats import DatasetStats
  from ray.data.block import Block, BlockMetadata, List
  from ray.data.context import DataContext
  from ray.types import ObjectRef
label_desc: Use image node_id 7 for calling a global function with example usage: _bundles_to_block_list(bundles) and returns: BlockList