code: def _align(cls, lhs, rhs):
      if isinstance(rhs, TENSOR_TYPE):
          # no need to align when rhs is a tensor
          return lhs, rhs
  
      is_lhs_range_index = False
      if isinstance(lhs, DATAFRAME_TYPE) and isinstance(
          lhs.columns_value.value, IndexValue.RangeIndex
      ):
          is_lhs_range_index = True
      if isinstance(lhs, SERIES_TYPE) and isinstance(
          lhs.index_value.value, IndexValue.RangeIndex
      ):
          is_lhs_range_index = True
  
      is_rhs_range_index = False
      if isinstance(rhs.index_value.value, IndexValue.RangeIndex):
          is_rhs_range_index = True
  
      if not is_lhs_range_index or not is_rhs_range_index:
          # TODO: e.g. use rhs.loc[lhs.columns_value.to_pandas()]
          # when lhs is a DataFrame and lhs.columns is not a RangeIndex,
          # so does Series
          raise NotImplementedError
  
      return lhs, rhs
  
imports: import numpy
  import pandas
  from ...None import opcodes
  from ...core import recursive_tile
  from ...serialization.serializables import KeyField, AnyField
  from ...tensor import tensor
  from ...tensor.core import TENSOR_TYPE
  from ...tensor.utils import decide_unify_split, validate_axis
  from ..core import DATAFRAME_TYPE, SERIES_TYPE, IndexValue
  from ..operands import DataFrameOperand, DataFrameOperandMixin
  from ..utils import parse_index
label_desc: Use image node_id 4 for calling the DataFrameDot obj's underlying member method code with example usage: obj._align(cls, lhs, rhs) and returns: lhs,  rhs, lhs,  rhs