code: def _extract_unary(self, tileable) -> EvalExtractRecord:
      op = tileable.op
      func_name = getattr(op, "_func_name") or getattr(
          op, "_bin_func_name"
      )
      if func_name not in _func_name_to_builder:  # pragma: no cover
          return EvalExtractRecord()
  
      in_tileable, expr, variables = self._extract_eval_expression(
          op.inputs[0]
      )
      if in_tileable is None:
          return EvalExtractRecord()
  
      self._add_collapsable_predecessor(tileable, op.inputs[0])
      return EvalExtractRecord(
          in_tileable, _func_name_to_builder[func_name](expr), variables
      )
  
imports: import weakref
  from typing import NamedTuple, Optional
  import numpy
  from pandas.api.types import is_scalar
  from ....None import dataframe
  from ....core import Tileable, get_output_types, ENTITY_TYPE
  from ....dataframe.arithmetic.core import DataFrameUnaryUfunc, DataFrameBinopUfunc
  from ....dataframe.base.eval import DataFrameEval
  from ....dataframe.indexing.getitem import DataFrameIndex
  from ....dataframe.indexing.setitem import DataFrameSetitem
  from ....typing import OperandType
  from ....utils import implements
  from ..core import OptimizationRecord, OptimizationRecordType
  from ..tileable.core import register_operand_based_optimization_rule
  from .core import OperandBasedOptimizationRule
label_desc: Use image node_id 6 for calling the SeriesArithmeticToEval obj's underlying member method code with example usage: obj._extract_unary(tileable) and returns: EvalExtractRecord, EvalExtractRecord, EvalExtractRecord