class_docstr: A lazy execution plan for a Dataset.
class_docstr_tok: ["A","lazy","execution","plan","for","a","Dataset","."]
docstr: Return whether the LogicalPlan corresponding to `root_op`
  contains only a read of already in-memory data (e.g. `FromXXX`
  operators for `from_xxx` APIs, `InputData` operator for
  :class:`~ray.data.MaterializedDataset`). By default, the last operator of
  the LogicalPlan is used.
docstr_tok: ["Return","whether","the","LogicalPlan","corresponding","to","`","root_op","`","contains","only","a","read","of","already","in-memory","data","(","e.g",".","`","FromXXX","`","operators","for","`","from_xxx","`","APIs",",","`","InputData","`","operator","for",":","class",":","`","~ray.data.MaterializedDataset","`",")",".","By","default",",","the","last","operator","of","the","LogicalPlan","is","used","."]
code: def is_from_in_memory_only(
      self, root_op: Optional[LogicalOperator] = None
  ) -> bool:
      """Return whether the LogicalPlan corresponding to `root_op`
      contains only a read of already in-memory data (e.g. `FromXXX`
      operators for `from_xxx` APIs, `InputData` operator for
      :class:`~ray.data.MaterializedDataset`). By default, the last operator of
      the LogicalPlan is used."""
      if root_op is None:
          root_op = self._logical_plan.dag
      return (
          isinstance(root_op, (InputData, AbstractFrom))
          and len(root_op.input_dependencies) == 0
      )
  
imports: import copy
  import itertools
  from typing import TYPE_CHECKING, Any, Callable, Dict, Iterable, Iterator, List, Optional, Tuple, Union
  import ray
  from ray._private.internal_api import get_memory_info_reply, get_state_from_address
  from ray.data._internal.block_list import BlockList
  from ray.data._internal.compute import ActorPoolStrategy, BlockTransform, CallableClass, ComputeStrategy, TaskPoolStrategy, UserDefinedFunction, get_compute, is_task_compute
  from ray.data._internal.dataset_logger import DatasetLogger
  from ray.data._internal.execution.interfaces import TaskContext
  from ray.data._internal.lazy_block_list import LazyBlockList
  from ray.data._internal.logical.interfaces.logical_operator import LogicalOperator
  from ray.data._internal.logical.operators.from_operators import AbstractFrom
  from ray.data._internal.logical.operators.input_data_operator import InputData
  from ray.data._internal.logical.operators.read_operator import Read
  from ray.data._internal.logical.rules.operator_fusion import _are_remote_args_compatible
  from ray.data._internal.stats import DatasetStats, DatasetStatsSummary
  from ray.data._internal.util import create_dataset_tag, unify_block_metadata_schema
  from ray.data.block import Block, BlockMetadata
  from ray.data.context import DataContext
  from ray.types import ObjectRef
  from ray.util.debug import log_once
label_desc: Use image node_id 23 for calling the ExecutionPlan obj's underlying member method code with example usage: obj.is_from_in_memory_only(root_op) and returns: unknown