class_docstr: Abstract logical operator for `from_*`.
class_docstr_tok: ["Abstract","logical","operator","for","`","from_","*","`","."]
code: def __init__(
      self,
      input_blocks: List[ObjectRef[Block]],
      input_metadata: List[BlockMetadata],
  ):
      super().__init__(self.__class__.__name__, [], len(input_blocks))
      assert len(input_blocks) == len(input_metadata), (
          len(input_blocks),
          len(input_metadata),
      )
      # `owns_blocks` is False because this op may be shared by multiple Datasets.
      self._input_data = [
          RefBundle(
              [(input_blocks[i], input_metadata[i])], owns_blocks=False
          )
          for i in range(len(input_blocks))
      ]
  
file_path: ray/python/ray/data/_internal/logical/operators/from_operators.py
imports: import abc
  from typing import TYPE_CHECKING, List, Union
  from ray.data._internal.execution.interfaces import RefBundle
  from ray.data._internal.logical.interfaces import LogicalOperator
  from ray.data.block import Block, BlockMetadata
  from ray.types import ObjectRef
label_desc: Use image node_id 1 to create a new AbstractFrom object from inherited base classes: LogicalOperator with example: obj = AbstractFrom(input_blocks, input_metadata)