code: def _make_direct_output_kws(
      cls, left: TileableType, right: TileableType
  ):
      kws = [left.params, right.params]
      kws[0].update(dict(chunks=left.chunks, nsplits=left.nsplits))
      kws[1].update(dict(chunks=right.chunks, nsplits=right.nsplits))
      return kws
  
imports: from typing import Any, Optional, Union
  import numpy
  from ...None import opcodes
  from ...core import get_output_types, recursive_tile, OutputType
  from ...serialization.serializables import AnyField, KeyField, StringField, Int16Field, Int64Field
  from ...typing import TileableType
  from ..operands import DataFrameOperand, DataFrameOperandMixin
  from ..align import align_dataframe_dataframe, align_dataframe_series, align_series_series
  from ..core import IndexValue
  from ..utils import validate_axis, parse_index, build_empty_df
label_desc: Use image node_id 15 for calling the DataFrameAlign obj's underlying member method code with example usage: obj._make_direct_output_kws(cls, left, right) and returns: kws