code: def random_sample_cts_dscr(
      obj, cts_bounds, dscr_vals, max_evals, vectorised=True
  ):
      """Sample from a joint continuous and discrete space."""
      dim = len(cts_bounds)
      cts_rand_pts = map_to_bounds(
          np.random.random((int(max_evals), dim)), cts_bounds
      )
      dscr_rand_pts = random_sample_from_discrete_domain(
          dscr_vals, max_evals
      )
      if vectorised:
          obj_vals = obj(cts_rand_pts, dscr_rand_pts)
      else:
          obj_vals = np.array(
              [
                  obj(cx, dx)
                  for (cx, dx) in zip(cts_rand_pts, dscr_rand_pts)
              ]
          )
      return cts_rand_pts, dscr_rand_pts, obj_vals
  
imports: from __future__ import print_function
  from __future__ import division
  from argparse import Namespace
  from datetime import datetime
  from warnings import warn
  import os
  import numpy
  from .general_utils import map_to_bounds
  from .doo import DOOFunction, pdoo_wrap
label_desc: Use image node_id 18 for calling a global function with example usage: random_sample_cts_dscr(obj, cts_bounds, dscr_vals, max_evals, vectorised) and returns: cts_rand_pts,  dscr_rand_pts,  obj_vals