code: def _build_tiled_kw(
      cls, op: "DataFrameAlign", idx: int, chunks: list, nsplits: list
  ):
      in_tileable = op.inputs[idx]
      out_tileable = op.outputs[idx]
      kw = out_tileable.params.copy()
      kw.update(
          {
              "chunks": chunks,
              "nsplits": tuple(
                  cls._select_nsplits(op, in_tileable, nsplits)
              ),
          }
      )
      return kw
  
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 9 for calling the DataFrameAlign obj's underlying member method code with example usage: obj._build_tiled_kw(cls, op, idx, chunks, nsplits) and returns: kw