code: def test_dataframe_multi_column_nulls(
      num_cols, num_rows, dtype, nulls, ascending, na_position
  ):
      np.random.seed(0)
      by = list(string.ascii_lowercase[:num_cols])
      pdf = pd.DataFrame()
  
      for i in range(3):
          colname = string.ascii_lowercase[i]
          data = np.random.randint(0, 26, num_rows).astype(dtype)
          if nulls == "some":
              idx = np.array([], dtype="int64")
              if num_rows > 0:
                  idx = np.random.choice(
                      num_rows, size=int(num_rows / 4), replace=False
                  )
              data[idx] = np.nan
          elif nulls == "all":
              data[:] = np.nan
          pdf[colname] = data
  
      gdf = DataFrame.from_pandas(pdf)
  
      got = gdf.sort_values(
          by, ascending=ascending, na_position=na_position
      )
      expect = pdf.sort_values(
          by, ascending=ascending, na_position=na_position
      )
  
      assert_eq(
          got[by].reset_index(drop=True),
          expect[by].reset_index(drop=True),
      )
  
imports: import string
  from itertools import product
  import numpy
  import pandas
  import pytest
  from cudf import DataFrame, Series
  from cudf.core.column import NumericalColumn
  from cudf.testing._utils import DATETIME_TYPES, NUMERIC_TYPES, assert_eq, assert_exceptions_equal, expect_warning_if
label_desc: Use image node_id 13 for calling a global function with example usage: test_dataframe_multi_column_nulls(num_cols, num_rows, dtype, nulls, ascending, na_position) without return types