code: def uniform_spacings(N):
      
      z = np.cumsum(-np.log(random.rand(N + 1)))
      return z[:-1] / z[-1]
docs: Generate ordered uniform variates in O(N) time.
  
      Parameters
      ----------
      N: int (>0)
          the expected number of uniform variates
  
      Returns
      -------
      (N,) float ndarray 
          the N ordered variates (ascending order)
  
      Note
      ----
      This is equivalent to::
  
          from numpy import random
          u = sort(random.rand(N))
  
      but the line above has complexity O(N*log(N)), whereas the algorithm 
      used here has complexity O(N).