code: def uniform(nmr_distributions, nmr_samples, low=0, high=1, ctype='float', seed=None):
      
      if is_scalar(low):
          low = np.ones((nmr_distributions, 1)) * low
      if is_scalar(high):
          high = np.ones((nmr_distributions, 1)) * high
  
      kernel_data = {'low': Array(low, as_scalar=True),
                     'high': Array(high, as_scalar=True)}
  
      kernel = SimpleCLFunction.from_string('''
          void compute(double low, double high, global uint* rng_state, global ''' + ctype + '''* samples){
          
              rand123_data rand123_rng_data = rand123_initialize_data((uint[]){
                  rng_state[0], rng_state[1], rng_state[2], rng_state[3], 
                  rng_state[4], rng_state[5], 0});
              void* rng_data = (void*)&rand123_rng_data;
  
              for(uint i = 0; i < ''' + str(nmr_samples) + '''; i++){
                  double4 randomnr = rand4(rng_data);
                  samples[i] = (''' + ctype + ''')(low + randomnr.x * (high - low));
              }
          }
      ''', dependencies=[Rand123()])
  
      return _generate_samples(kernel, nmr_distributions, nmr_samples, ctype, kernel_data, seed=seed)
docs: Draw random samples from the Uniform distribution.
  
      Args:
          nmr_distributions (int): the number of unique continuous_distributions to create
          nmr_samples (int): The number of samples to draw
          low (double): The minimum value of the random numbers
          high (double): The minimum value of the random numbers
          ctype (str): the C type of the output samples
          seed (float): the seed for the RNG
  
      Returns:
          ndarray: A two dimensional numpy array as (nmr_distributions, nmr_samples).