import '../../assert/js/assert.js';
import '../../globals.js';
import Bounds2 from './Bounds2.js';
import Range from './Range.js';
import Vector2 from './Vector2.js';
type RandomOptions = {
    seed?: number | null;
};
export default class Random {
    private seed;
    private seedrandom;
    numberOfCalls: number;
    constructor(providedOptions?: RandomOptions);
    /**
     * Clears out this instance from all the Random instances.
     */
    dispose(): void;
    /**
     * Gets the seed.
     */
    getSeed(): number | null;
    /**
     * Returns the next pseudo-random boolean
     */
    nextBoolean(): boolean;
    /**
     * Returns the next pseudo random number from this random number generator sequence.
     * The random number is an integer ranging from 0 to n-1.
     * @returns an integer
     */
    nextInt(n: number): number;
    /**
     * Randomly select a random integer between min and max (inclusive).
     * @param min - must be an integer
     * @param max - must be an integer
     * @returns an integer between min and max, inclusive
     */
    nextIntBetween(min: number, max: number): number;
    /**
     * Randomly select one element from the given array.
     * @param array - from which one element will be selected, must have at least one element
     * @returns the selected element from the array
     */
    sample<T>(array: T[]): T;
    /**
     * Creates an array of shuffled values, using a version of the Fisher-Yates shuffle.  Adapted from lodash-2.4.1 by
     * Sam Reid on Aug 16, 2016, See http://en.wikipedia.org/wiki/Fisher-Yates_shuffle.
     * @param array - the array which will be shuffled
     * @returns a new array with all the same elements in the passed-in array, in randomized order.
     */
    shuffle<T>(array: T[]): T[];
    /**
     * Returns the next pseudo random number from this random number generator sequence in the range [0, 1)
     * The distribution of the random numbers is uniformly distributed across the interval
     * @returns the random number
     */
    nextDouble(): number;
    /**
     * Randomly selects a double in the range [min,max).
     */
    nextDoubleBetween(min: number, max: number): number;
    /**
     * Returns the next gaussian-distributed random number from this random number generator sequence.
     * The distribution of the random numbers is gaussian, with a mean = 0 and standard deviation = 1
     */
    nextGaussian(): number;
    /**
     * Gets the next random double in a Range.
     * For min < max, the return value is [min,max), between min (inclusive) and max (exclusive).
     * For min === max, the return value is min.
     */
    nextDoubleInRange(range: Range): number;
    /**
     * Gets a random point within the provided Bounds2, [min,max)
     */
    nextPointInBounds(bounds: Bounds2): Vector2;
    /**
     * @param seed - if null, Math.random will be used to create the seed.
     */
    setSeed(seed: number | null): void;
    /**
     * Choose a numeric index from the array of weights.  The array of weights does not need to be normalized.
     * See https://stackoverflow.com/questions/8877249/generate-random-integers-with-probabilities
     * See also ContinuousServer.weightedSampleTest which uses the same algorithm
     */
    sampleProbabilities(weights: readonly number[]): number;
    static allRandomInstances: Set<Random>;
}
export {};
//# sourceMappingURL=Random.d.ts.map