code: def cast_dtypes(self, ddf):
      logging.info("Converting dtypes")
      args = self.args
      columns = set(ddf.columns)
      if args.to_int32:
          to_int32_cols = list(set(args.to_int32).intersection(columns))
          ddf[to_int32_cols] = ddf[to_int32_cols].astype("int32")
      if args.to_int16:
          to_int16_cols = list(set(args.to_int16).intersection(columns))
          ddf[to_int16_cols] = ddf[to_int16_cols].astype("int16")
      if args.to_int8:
          to_int8_cols = list(set(args.to_int8).intersection(columns))
          ddf[to_int8_cols] = ddf[to_int8_cols].astype("int8")
      if args.to_float32:
          to_float32_cols = list(
              set(args.to_float32).intersection(columns)
          )
          ddf[to_float32_cols] = ddf[to_float32_cols].astype("float32")
      return ddf
  
imports: import gc
  import logging
  import os
  import shutil
  from functools import reduce
  from typing import Optional
  import nvtabular
  from merlin.core.dispatch import HAS_GPU
  from merlin.schema import Tags
  from nvtabular import ops
  from .args_parsing import parse_arguments
label_desc: Use image node_id 4 for calling the PreprocessingRunner obj's underlying member method code with example usage: obj.cast_dtypes(ddf) and returns: ddf