code: def cartesian_chunk(
      left, right, func, skip_infer=False, args=(), **kwargs
  ):
      output_type = kwargs.pop("output_type", None)
      output_types = kwargs.pop("output_types", None)
      object_type = kwargs.pop("object_type", None)
      output_types = validate_output_types(
          output_type=output_type,
          output_types=output_types,
          object_type=object_type,
      )
      output_type = output_types[0] if output_types else None
      if output_type:
          output_types = [output_type]
      elif skip_infer:
          output_types = [OutputType.df_or_series]
      index = kwargs.pop("index", None)
      dtypes = kwargs.pop("dtypes", None)
      memory_scale = kwargs.pop("memory_scale", None)
  
      op = DataFrameCartesianChunk(
          left=left,
          right=right,
          func=func,
          args=args,
          kwargs=kwargs,
          output_types=output_types,
          memory_scale=memory_scale,
      )
      return op(left, right, index=index, dtypes=dtypes)
  
imports: import numpy
  import pandas
  from ...None import opcodes
  from ...core import recursive_tile
  from ...core.custom_log import redirect_custom_log
  from ...serialization.serializables import KeyField, FunctionField, TupleField, DictField
  from ...utils import has_unknown_shape, enter_current_session, quiet_stdio
  from ..operands import DataFrameOperand, DataFrameOperandMixin, OutputType
  from ..utils import build_df, build_series, build_empty_df, parse_index, validate_output_types
label_desc: Use image node_id 1 for calling a global function with example usage: cartesian_chunk(left, right, func, skip_infer, args) and returns: op