def METHOD_NAME(seeds, n, skip_seeds=0):
    """Generate random numbers using the Latin Hypercube algorithm.
    Args:
        seeds (List[int64]): List of seeds.
        n (int): number of random samples to generate for each seed.
    Returns:
        rndms (array[float]): 2-d array of shape (number of seeds, n) 
          containing the random values generated for each seed.
        rndms_idx (Dict[int64, int]): mapping between `seed` and the 
          row in rndms that stores the corresponding random values.
        skip_seeds (int): number of seeds to skip starting from the beginning
          of the `seeds` array. For skipped seeds no random numbers are generated
          and the output rndms will contain zeros at their corresponding row.
          Default is 0, i.e. no seeds are skipped.
    Notes:
        Implementation follows scipy.stats.qmc.LatinHypercube v1.8.0.
        Following scipy notation, here we assume `centered=False` all the times:
        instead of taking `samples=0.5*np.ones(n)`, here we always
        draw uniform random samples in order to initialise `samples`.
    """
    Nseeds = len(seeds)
    rndms = np.zeros((Nseeds, n), dtype='float64')
    # define arrays here and re-use them later
    samples = np.zeros(n, dtype='float64')
    perms = np.zeros(n, dtype='float64')
    for seed_i in range(skip_seeds, Nseeds, 1):
        # set the seed
        np.random.seed(seeds[seed_i])
        # draw the random numbers and re-generate permutations array
        for i in range(n):
            samples[i] = np.random.uniform(0., 1.)
            perms[i] = i + 1
        # in-place shuffle permutations
        np.random.shuffle(perms)
        for j in range(n):
            rndms[seed_i, j] = (perms[j] - samples[j]) / float(n)
    return rndms