code: def sample(problem, N, seed=None):
      
      if seed:
          np.random.seed(seed)
      D = problem['num_vars']
  
      result = np.zeros([N, D])
      temp = np.zeros([N])
      d = 1.0 / N
  
      for i in range(D):
  
          for j in range(N):
              temp[j] = np.random.uniform(
                  low=j * d, high=(j + 1) * d, size=1)[0]
  
          np.random.shuffle(temp)
  
          for j in range(N):
              result[j, i] = temp[j]
  
      scale_samples(result, problem['bounds'])
      return result
docs: Generate model inputs using Latin hypercube sampling (LHS).
  
      Returns a NumPy matrix containing the model inputs generated by Latin
      hypercube sampling.  The resulting matrix contains N rows and D columns,
      where D is the number of parameters.
  
      Parameters
      ----------
      problem : dict
          The problem definition
      N : int
          The number of samples to generate