code: def _gridmake2(x1, x2):
      
      if x1.ndim == 1 and x2.ndim == 1:
          return np.column_stack([np.tile(x1, x2.shape[0]),
                                 np.repeat(x2, x1.shape[0])])
      elif x1.ndim > 1 and x2.ndim == 1:
          first = np.tile(x1, (x2.shape[0], 1))
          second = np.repeat(x2, x1.shape[0])
          return np.column_stack([first, second])
      else:
          raise NotImplementedError("Come back here")
docs: Expands two vectors (or matrices) into a matrix where rows span the
      cartesian product of combinations of the input arrays. Each column of the
      input arrays will correspond to one column of the output matrix.
  
      Parameters
      ----------
      x1 : np.ndarray
           First vector to be expanded.
  
      x2 : np.ndarray
           Second vector to be expanded.
  
      Returns
      -------
      out : np.ndarray
            The cartesian product of combinations of the input arrays.
  
      Notes
      -----
      Based of original function ``gridmake2`` in CompEcon toolbox by
      Miranda and Fackler.
  
      References
      ----------
      Miranda, Mario J, and Paul L Fackler. Applied Computational Economics
      and Finance, MIT Press, 2002.