code: def crossproduct(d):
      
  
      from .. import SArray
      d = [list(zip(list(d.keys()), x)) for x in _itertools.product(*list(d.values()))]
      sa = [{k:v for (k,v) in x} for x in d]
      return SArray(sa).unpack(column_name_prefix='')
docs: Create an SFrame containing the crossproduct of all provided options.
  
      Parameters
      ----------
      d : dict
          Each key is the name of an option, and each value is a list
          of the possible values for that option.
  
      Returns
      -------
      out : SFrame
          There will be a column for each key in the provided dictionary,
          and a row for each unique combination of all values.
  
      Example
      -------
      settings = {'argument_1':[0, 1],
                  'argument_2':['a', 'b', 'c']}
      print crossproduct(settings)
      +------------+------------+
      | argument_2 | argument_1 |
      +------------+------------+
      |     a      |     0      |
      |     a      |     1      |
      |     b      |     0      |
      |     b      |     1      |
      |     c      |     0      |
      |     c      |     1      |
      +------------+------------+
      [6 rows x 2 columns]