code: def make_aggregate_nullmask(df, columns=None, op="__and__"):
      out_mask = None
      for k in columns or df._data:
          col = cudf.core.dataframe.extract_col(df, k)
          if not col.nullable:
              continue
          nullmask = column.as_column(df[k]._column.nullmask)
  
          if out_mask is None:
              out_mask = column.as_column(
                  nullmask.copy(), dtype=utils.mask_dtype
              )
          else:
              out_mask = libcudf.binaryop.binaryop(
                  nullmask, out_mask, op, out_mask.dtype
              )
  
      return out_mask
  
imports: import functools
  from typing import Any, Dict
  import cupy
  from numba import cuda
  from numba.core.utils import pysignature
  import cudf
  from cudf import _lib
  from cudf.core.buffer import acquire_spill_lock
  from cudf.core.column import column
  from cudf.utils import utils
  from cudf.utils._numba import _CUDFNumbaConfig
  from cudf.utils.docutils import docfmt_partial
label_desc: Use image node_id 3 for calling a global function with example usage: make_aggregate_nullmask(df, columns, op) and returns: out_mask