code: def sample(problem, N, num_levels=4, optimal_trajectories=None,
             local_optimization=True):
      
      if problem.get('groups'):
          sample = _sample_groups(problem, N, num_levels)
      else:
          sample = _sample_oat(problem, N, num_levels)
  
      if optimal_trajectories:
  
          sample = _compute_optimised_trajectories(problem,
                                                   sample,
                                                   N,
                                                   optimal_trajectories,
                                                   local_optimization)
  
      scale_samples(sample, problem['bounds'])
      return sample
docs: Generate model inputs using the Method of Morris
  
      Returns a NumPy matrix containing the model inputs required for Method of
      Morris.  The resulting matrix has :math:`(G+1)*T` rows and :math:`D`
      columns, where :math:`D` is the number of parameters, :math:`G` is the
      number of groups (if no groups are selected, the number of parameters).
      :math:`T` is the number of trajectories :math:`N`,
      or `optimal_trajectories` if selected.
      These model inputs  are intended to be used with
      :func:`SALib.analyze.morris.analyze`.
  
      Parameters
      ----------
      problem : dict
          The problem definition
      N : int
          The number of trajectories to generate
      num_levels : int, default=4
          The number of grid levels
      optimal_trajectories : int
          The number of optimal trajectories to sample (between 2 and N)
      local_optimization : bool, default=True
          Flag whether to use local optimization according to Ruano et al. (2012)
          Speeds up the process tremendously for bigger N and num_levels.
          If set to ``False`` brute force method is used, unless ``gurobipy`` is
          available
  
      Returns
      -------
      sample : numpy.ndarray
          Returns a numpy.ndarray containing the model inputs required for Method
          of Morris. The resulting matrix has :math:`(G/D+1)*N/T` rows and
          :math:`D` columns, where :math:`D` is the number of parameters.