common-fs 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/rng.ts","../src/generators/function.ts","../src/generators/xoshiro128-star-star.ts","../src/utils.ts","../src/generators/arc4.ts","../src/generators/math-random.ts","../src/generators/xor128.ts","../src/validation.ts","../src/distributions/bates.ts","../src/distributions/bernoulli.ts","../src/distributions/binomial.ts","../src/distributions/exponential.ts","../src/distributions/geometric.ts","../src/distributions/irwin-hall.ts","../src/distributions/log-normal.ts","../src/distributions/normal.ts","../src/distributions/pareto.ts","../src/distributions/poisson.ts","../src/distributions/uniform.ts","../src/distributions/uniform-boolean.ts","../src/distributions/uniform-int.ts","../src/distributions/weibull.ts","../src/random.ts"],"sourcesContent":["export abstract class RNG {\n abstract get name(): string\n\n abstract next(): number\n\n abstract clone(): RNG\n}\n","import type { RNGFn } from '../types'\nimport { RNG } from '../rng'\n\nexport class FunctionRNG extends RNG {\n _name: string\n _rngFn: RNGFn\n\n constructor(rngFn: RNGFn) {\n super()\n\n this._name = rngFn.name || 'function'\n this._rngFn = rngFn\n }\n\n override get name() {\n return this._name\n }\n\n override next() {\n return this._rngFn()\n }\n\n override clone() {\n return new FunctionRNG(this._rngFn)\n }\n}\n","import type { Seed } from '../types'\nimport { RNG } from '../rng'\n\nconst UINT53_SIZE = 0x20_00_00_00_00_00_00\nconst UINT26_SIZE = 0x04_00_00_00\n\nfunction rotateLeft(value: number, shift: number): number {\n return (value << shift) | (value >>> (32 - shift))\n}\n\n/**\n * cyrb128, a compact non-cryptographic string hash for seed generation.\n *\n * @see https://stackoverflow.com/a/47593316\n */\nfunction cyrb128(seed: Seed): [number, number, number, number] {\n const value = `${seed}`\n let s0 = 0x6a_09_e6_67\n let s1 = 0xbb_67_ae_85\n let s2 = 0x3c_6e_f3_72\n let s3 = 0xa5_4f_f5_3a\n\n for (let i = 0; i < value.length; i++) {\n const code = value.charCodeAt(i)\n s0 = s1 ^ Math.imul(s0 ^ code, 0x23_9b_96_1b)\n s1 = s2 ^ Math.imul(s1 ^ code, 0xab_0e_97_89)\n s2 = s3 ^ Math.imul(s2 ^ code, 0x38_b3_4a_e5)\n s3 = s0 ^ Math.imul(s3 ^ code, 0xa1_e3_8b_93)\n }\n\n s0 = Math.imul(s2 ^ (s0 >>> 18), 0x23_9b_96_1b)\n s1 = Math.imul(s3 ^ (s1 >>> 22), 0xab_0e_97_89)\n s2 = Math.imul(s0 ^ (s2 >>> 17), 0x38_b3_4a_e5)\n s3 = Math.imul(s1 ^ (s3 >>> 19), 0xa1_e3_8b_93)\n\n s0 ^= s1 ^ s2 ^ s3\n s1 ^= s0\n s2 ^= s0\n s3 ^= s0\n\n return [s0 >>> 0, s1 >>> 0, s2 >>> 0, s3 >>> 0]\n}\n\n/**\n * xoshiro128** is a small, fast, general-purpose pseudorandom number generator\n * with 128 bits of state and a period of 2^128 - 1.\n *\n * It is not cryptographically secure.\n *\n * @see https://prng.di.unimi.it/xoshiro128starstar.c\n */\nexport class Xoshiro128StarStarRNG extends RNG {\n protected readonly _seed: Seed\n\n protected s0 = 0\n protected s1 = 0\n protected s2 = 0\n protected s3 = 0\n\n constructor(seed: Seed = crypto.randomUUID()) {\n super()\n\n this._seed = seed\n this.setState(cyrb128(seed))\n }\n\n protected setState(state: [number, number, number, number]): void {\n this.s0 = state[0]\n this.s1 = state[1]\n this.s2 = state[2]\n this.s3 = state[3]\n\n // xoshiro generators cannot escape an all-zero state.\n if ((this.s0 | this.s1 | this.s2 | this.s3) === 0) {\n this.s0 = 0x6d_2b_79_f5\n }\n }\n\n override get name() {\n return 'xoshiro128**'\n }\n\n override next() {\n // Combine the high 27 and 26 bits of two outputs to fill all 53 bits of a\n // JavaScript number's significand.\n const high = this.nextUint32() >>> 5\n const low = this.nextUint32() >>> 6\n\n return (high * UINT26_SIZE + low) / UINT53_SIZE\n }\n\n override clone() {\n const clone = new Xoshiro128StarStarRNG(this._seed)\n\n clone.setState([this.s0, this.s1, this.s2, this.s3])\n\n return clone\n }\n\n protected nextUint32(): number {\n const result = Math.imul(rotateLeft(Math.imul(this.s1, 5), 7), 9) >>> 0\n const t = this.s1 << 9\n\n this.s2 ^= this.s0\n this.s3 ^= this.s1\n this.s1 ^= this.s2\n this.s0 ^= this.s3\n this.s2 ^= t\n this.s3 = rotateLeft(this.s3, 11)\n\n return result\n }\n}\n","import type { Seed, SeedOrRNG } from './types'\nimport { FunctionRNG } from './generators/function'\nimport { Xoshiro128StarStarRNG } from './generators/xoshiro128-star-star'\nimport { RNG } from './rng'\n\nexport function createRNG(seedOrRNG?: SeedOrRNG): RNG {\n switch (typeof seedOrRNG) {\n case 'object':\n if (seedOrRNG instanceof RNG) {\n return seedOrRNG\n }\n break\n\n case 'function':\n return new FunctionRNG(seedOrRNG)\n\n case 'number':\n case 'string':\n case 'undefined':\n return new Xoshiro128StarStarRNG(seedOrRNG)\n }\n\n throw new TypeError(`Invalid seed or RNG: ${String(seedOrRNG)}`)\n}\n\n/**\n * Mixes a string seed into a key that is an array of integers, and returns a\n * shortened string seed that is equivalent to the result key.\n */\nexport function mixKey(seed: Seed, key: number[]): number[] {\n const seedStr = `${seed}`\n let smear = 0\n let j = 0\n\n while (j < seedStr.length) {\n key[0xff & j] =\n 0xff & ((smear ^= (key[0xff & j] ?? 0) * 19) + seedStr.charCodeAt(j++))\n }\n\n if (!key.length) {\n return [0]\n }\n\n return key\n}\n\nexport function shuffleInPlace<T>(gen: RNG, array: Array<T>) {\n for (let i = array.length - 1; i > 0; i -= 1) {\n const j = Math.floor(gen.next() * (i + 1))\n const tmp = array[i]\n array[i] = array[j] as T\n array[j] = tmp as T\n }\n}\n\n/**\n * Fisher-Yates sampling without replacement\n * O(k) time and space, by using a hash table instead of a full copy of the array\n * see https://arxiv.org/pdf/2104.05091 Algorithm 2\n */\nexport function sparseFisherYates<T>(\n gen: RNG,\n array: Array<T>,\n k: number\n): T[] {\n const H = new Map<number, number>() // stores swapped indices\n const lastIndex = array.length - 1\n const result: T[] = Array.from({ length: k })\n\n for (let i = 0; i < k; i++) {\n const remaining = lastIndex - i + 1\n const r = Math.floor(gen.next() * remaining)\n result[i] = array[H.get(r) ?? r]!\n // move the element at the end of the active range into slot r\n H.set(r, H.get(lastIndex - i) ?? lastIndex - i)\n }\n\n return result\n}\n","import type { Seed } from '../types'\nimport { RNG } from '../rng'\nimport { mixKey } from '../utils'\n\n//\n// ARC4\n//\n// An ARC4 implementation. The constructor takes a key in the form of an array\n// of at most (width) integers that should be 0 <= x < (width).\n//\n// The g(count) method returns a pseudorandom integer that concatenates the\n// next (count) outputs from ARC4. Its return value is a number x that is in\n// the range 0 <= x < (width ^ count).\n\n// The following constants are related to IEEE 754 limits.\n// const width = 256 // each RC4 output is 0 <= x < 256\n// const chunks = 6 // at least six RC4 outputs for each double\nconst _arc4_startdenom = 281_474_976_710_656 // 256 ** 6 == width ** chunks\nconst _arc4_significance = 4_503_599_627_370_496 // 2 ** 52 significant digits in a double\nconst _arc4_overflow = 9_007_199_254_740_992 // 2 ** 53 == significance * 2\n\nexport class ARC4RNG extends RNG {\n protected readonly _seed: Seed\n\n i: number\n j: number\n S: number[]\n\n constructor(seed: Seed = crypto.randomUUID()) {\n super()\n\n this._seed = seed\n const key = mixKey(seed, [])\n\n const S: number[] = []\n const keylen = key.length\n this.i = 0\n this.j = 0\n this.S = S\n\n // Set up S using the standard key scheduling algorithm.\n let i = 0\n while (i <= 0xff) {\n S[i] = i++\n }\n\n for (let i = 0, j = 0; i <= 0xff; i++) {\n const t = S[i]!\n j = 0xff & (j + key[i % keylen]! + t)\n S[i] = S[j]!\n S[j] = t\n }\n\n // For more robust unpredictability, the function call below discards an\n // initial batch of values. This is called RC4-drop.\n this.g(256)\n }\n\n override get name() {\n return 'arc4'\n }\n\n override next() {\n // This function returns a random double in [0, 1) that contains\n // randomness in every bit of the mantissa of the IEEE 754 value.\n\n let n = this.g(6) // Start with a numerator n < 2 ^ 48\n let d = _arc4_startdenom // and denominator d = 2 ^ 48.\n let x = 0 // and no 'extra last byte'.\n\n while (n < _arc4_significance) {\n // Fill up all significant digits (2 ** 52)\n n = (n + x) * 256 // by shifting numerator and\n d *= 256 // denominator and generating a\n x = this.g(1) // new least-significant-byte.\n }\n\n while (n >= _arc4_overflow) {\n // To avoid rounding past overflow, before adding\n n /= 2 // last byte, shift everything\n d /= 2 // right using integer math until\n x >>>= 1 // we have exactly the desired bits.\n }\n\n return (n + x) / d // Form the number within [0, 1).\n }\n\n g(count: number) {\n const { S } = this\n let { i, j } = this\n let r = 0\n\n while (count--) {\n i = 0xff & (i + 1)\n const t = S[i]!\n j = 0xff & (j + t)\n S[i] = S[j]!\n S[j] = t\n r = r * 256 + S[0xff & (S[i]! + t)]!\n }\n\n this.i = i\n this.j = j\n\n return r\n }\n\n override clone() {\n const clone = new ARC4RNG(this._seed)\n\n clone.i = this.i\n clone.j = this.j\n clone.S = [...this.S]\n\n return clone\n }\n}\n","import { RNG } from '../rng'\n\nexport class MathRandomRNG extends RNG {\n override get name() {\n return 'Math.random'\n }\n\n override next() {\n return Math.random()\n }\n\n override clone() {\n return new MathRandomRNG()\n }\n}\n","import type { Seed } from '../types'\nimport { RNG } from '../rng'\n\nexport class XOR128RNG extends RNG {\n protected readonly _seed: Seed\n\n x: number\n y: number\n z: number\n w: number\n\n constructor(seed: Seed = crypto.randomUUID()) {\n super()\n\n this._seed = seed\n this.x = 0\n this.y = 0\n this.z = 0\n this.w = 0\n\n let strSeed = ''\n\n if (typeof seed === 'number') {\n this.x = seed\n } else {\n strSeed += `${seed}`\n }\n\n // Mix in string seed, then discard an initial batch of 64 values.\n for (let i = 0; i < strSeed.length + 64; ++i) {\n this.x ^= strSeed.charCodeAt(i) | 0\n this.next()\n }\n\n // Xorshift generators cannot escape an all-zero state.\n if ((this.x | this.y | this.z | this.w) === 0) {\n this.x = 0x6d_2b_79_f5\n\n for (let i = 0; i < 64; ++i) {\n this.next()\n }\n }\n }\n\n override get name() {\n return 'xor128'\n }\n\n override next() {\n const t = this.x ^ (this.x << 11)\n this.x = this.y\n this.y = this.z\n this.z = this.w\n this.w = this.w ^ ((this.w >>> 19) ^ t ^ (t >>> 8))\n return (this.w >>> 0) / 0x1_00_00_00_00\n }\n\n override clone() {\n const clone = new XOR128RNG(this._seed)\n\n clone.x = this.x\n clone.y = this.y\n clone.z = this.z\n clone.w = this.w\n\n return clone\n }\n}\n","export function numberValidator(num: number) {\n return new NumberValidator(num)\n}\n\nexport class NumberValidator {\n private n: number\n constructor(num: number) {\n this.n = num\n }\n\n public isInt = (): this => {\n if (Number.isInteger(this.n)) {\n return this\n }\n throw new Error(`Expected number to be an integer, got ${this.n}`)\n }\n\n public isPositive = (): this => {\n if (this.n > 0) {\n return this\n }\n throw new Error(`Expected number to be positive, got ${this.n}`)\n }\n\n public lessThan = (v: number): this => {\n if (this.n < v) {\n return this\n }\n throw new Error(`Expected number to be less than ${v}, got ${this.n}`)\n }\n\n public lessThanOrEqual = (v: number): this => {\n if (this.n <= v) {\n return this\n }\n throw new Error(\n `Expected number to be less than or equal to ${v}, got ${this.n}`\n )\n }\n\n public greaterThanOrEqual = (v: number): this => {\n if (this.n >= v) {\n return this\n }\n throw new Error(\n `Expected number to be greater than or equal to ${v}, got ${this.n}`\n )\n }\n\n public greaterThan = (v: number): this => {\n if (this.n > v) {\n return this\n }\n throw new Error(`Expected number to be greater than ${v}, got ${this.n}`)\n }\n}\n","import type { Random } from '../random'\nimport { numberValidator } from '../validation'\n\nexport function bates(random: Random, n = 1) {\n numberValidator(n).isInt().isPositive()\n const irwinHall = random.irwinHall(n)\n\n return () => {\n return irwinHall() / n\n }\n}\n","import type { Random } from '../random'\nimport { numberValidator } from '../validation'\n\nexport function bernoulli(random: Random, p = 0.5) {\n numberValidator(p).greaterThanOrEqual(0).lessThanOrEqual(1)\n\n return () => {\n return Math.min(1, Math.floor(random.next() + p))\n }\n}\n","import type { Random } from '../random'\nimport { numberValidator } from '../validation'\n\nexport function binomial(random: Random, n = 1, p = 0.5) {\n numberValidator(n).isInt().isPositive()\n numberValidator(p).greaterThanOrEqual(0).lessThan(1)\n\n return () => {\n let i = 0\n let x = 0\n\n while (i++ < n) {\n if (random.next() < p) {\n x++\n }\n }\n return x\n }\n}\n","import type { Random } from '../random'\nimport { numberValidator } from '../validation'\n\nexport function exponential(random: Random, lambda = 1) {\n numberValidator(lambda).isPositive()\n\n return () => {\n return -Math.log(1 - random.next()) / lambda\n }\n}\n","import type { Random } from '../random'\nimport { numberValidator } from '../validation'\n\nexport function geometric(random: Random, p = 0.5) {\n numberValidator(p).greaterThan(0).lessThan(1)\n const invLogP = 1.0 / Math.log(1.0 - p)\n\n return () => {\n return Math.floor(1 + Math.log(random.next()) * invLogP)\n }\n}\n","import type { Random } from '../random'\nimport { numberValidator } from '../validation'\n\nexport function irwinHall(random: Random, n = 1) {\n numberValidator(n).isInt().greaterThanOrEqual(0)\n\n return () => {\n let sum = 0\n for (let i = 0; i < n; ++i) {\n sum += random.next()\n }\n\n return sum\n }\n}\n","import type { Random } from '../random'\n\nexport function logNormal(random: Random, mu = 0, sigma = 1) {\n const normal = random.normal(mu, sigma)\n return () => {\n return Math.exp(normal())\n }\n}\n","import type { Random } from '../random'\n\nexport function normal(random: Random, mu = 0, sigma = 1) {\n return () => {\n let x: number, y: number, r: number\n\n do {\n x = random.next() * 2 - 1\n y = random.next() * 2 - 1\n r = x * x + y * y\n } while (!r || r > 1)\n\n return mu + sigma * y * Math.sqrt((-2 * Math.log(r)) / r)\n }\n}\n","import type { Random } from '../random'\nimport { numberValidator } from '../validation'\n\nexport function pareto(random: Random, alpha = 1) {\n numberValidator(alpha).greaterThanOrEqual(0)\n const invAlpha = 1.0 / alpha\n\n return () => {\n return 1.0 / Math.pow(1.0 - random.next(), invAlpha)\n }\n}\n","import type { Random } from '../random'\nimport { numberValidator } from '../validation'\n\nconst logFactorialTable = [\n 0.0, 0.0, 0.693_147_180_559_945_29, 1.791_759_469_228_055,\n 3.178_053_830_347_945_8, 4.787_491_742_782_045_8, 6.579_251_212_010_101_2,\n 8.525_161_361_065_414_7, 10.604_602_902_745_251, 12.801_827_480_081_469\n]\n\nconst logFactorial = (k: number) => {\n return logFactorialTable[k]\n}\n\nconst logSqrt2PI = 0.918_938_533_204_672_67\n\nexport function poisson(random: Random, lambda = 1) {\n numberValidator(lambda).isPositive()\n\n if (lambda < 10) {\n // inversion method\n const expMean = Math.exp(-lambda)\n\n return () => {\n let p = expMean\n let x = 0\n let u = random.next()\n\n while (u > p) {\n u = u - p\n p = (lambda * p) / ++x\n }\n\n return x\n }\n } else {\n // generative method\n const smu = Math.sqrt(lambda)\n const b = 0.931 + 2.53 * smu\n const a = -0.059 + 0.024_83 * b\n const invAlpha = 1.1239 + 1.1328 / (b - 3.4)\n const vR = 0.9277 - 3.6224 / (b - 2)\n\n return () => {\n while (true) {\n let u\n let v = random.next()\n\n if (v <= 0.86 * vR) {\n u = v / vR - 0.43\n return Math.floor(\n ((2 * a) / (0.5 - Math.abs(u)) + b) * u + lambda + 0.445\n )\n }\n\n if (v >= vR) {\n u = random.next() - 0.5\n } else {\n u = v / vR - 0.93\n u = (u < 0 ? -0.5 : 0.5) - u\n v = random.next() * vR\n }\n\n const us = 0.5 - Math.abs(u)\n if (us < 0.013 && v > us) {\n continue\n }\n\n const k = Math.floor(((2 * a) / us + b) * u + lambda + 0.445)\n v = (v * invAlpha) / (a / (us * us) + b)\n\n if (k >= 10) {\n const t =\n (k + 0.5) * Math.log(lambda / k) -\n lambda -\n logSqrt2PI +\n k -\n (1 / 12.0 - (1 / 360.0 - 1 / (1260.0 * k * k)) / (k * k)) / k\n\n if (Math.log(v * smu) <= t) {\n return k\n }\n } else if (k >= 0) {\n const f = logFactorial(k) ?? 0\n\n if (Math.log(v) <= k * Math.log(lambda) - lambda - f) {\n return k\n }\n }\n }\n }\n }\n}\n","import type { Random } from '../random'\n\nexport function uniform(random: Random, min?: number, max?: number) {\n if (max === undefined) {\n max = min === undefined ? 1 : min\n min = 0\n }\n min ??= 0\n\n return () => {\n return random.next() * (max - min) + min\n }\n}\n","import type { Random } from '../random'\n\nexport function uniformBoolean(random: Random) {\n return () => {\n return random.next() >= 0.5\n }\n}\n","import type { Random } from '../random'\nimport { numberValidator } from '../validation'\n\nexport function uniformInt(random: Random, min?: number, max?: number) {\n if (max === undefined) {\n max = min === undefined ? 1 : min\n min = 0\n }\n min ??= 0\n\n numberValidator(min).isInt()\n numberValidator(max).isInt()\n\n return () => {\n return Math.floor(random.next() * (max - min + 1) + min)\n }\n}\n","import type { Random } from '../random'\nimport { numberValidator } from '../validation'\n\nexport function weibull(random: Random, lambda: number, k: number) {\n numberValidator(lambda).greaterThan(0.0)\n numberValidator(k).greaterThan(0.0)\n return () => {\n const u = 1.0 - random.next()\n return lambda * Math.pow(-Math.log(u), 1.0 / k)\n }\n}\n","import type { RNG } from './rng'\nimport type { SeedOrRNG } from './types'\nimport { bates } from './distributions/bates'\nimport { bernoulli } from './distributions/bernoulli'\nimport { binomial } from './distributions/binomial'\nimport { exponential } from './distributions/exponential'\nimport { geometric } from './distributions/geometric'\nimport { irwinHall } from './distributions/irwin-hall'\nimport { logNormal } from './distributions/log-normal'\nimport { normal } from './distributions/normal'\nimport { pareto } from './distributions/pareto'\nimport { poisson } from './distributions/poisson'\nimport { uniform } from './distributions/uniform'\nimport { uniformBoolean } from './distributions/uniform-boolean'\nimport { uniformInt } from './distributions/uniform-int'\nimport { weibull } from './distributions/weibull'\nimport { MathRandomRNG } from './generators/math-random'\nimport { createRNG, shuffleInPlace, sparseFisherYates } from './utils'\n\n/**\n * Distribution function\n */\ntype IDistFn<R> = (random: Random, ...argv: any) => R\n\n/**\n * Distribution\n */\ntype IDist<R> = () => R\n\n/**\n * Keyed cache entry\n */\ninterface ICacheEntry<T> {\n key: string\n distribution: () => T\n}\n\n/**\n * Seedable random number generator supporting many common distributions.\n *\n * @name Random\n * @class\n *\n * @param {RNG|function|string|number} [rng=Math.random] - Underlying random number generator or a seed for the default PRNG. Defaults to `Math.random`.\n */\nexport class Random {\n protected _rng!: RNG\n protected _cache: Record<string, ICacheEntry<any>> = {}\n\n constructor(seedOrRNG: SeedOrRNG = new MathRandomRNG()) {\n this._rng = createRNG(seedOrRNG)\n }\n\n /**\n * @member {RNG} rng - Underlying pseudo-random number generator.\n */\n get rng() {\n return this._rng\n }\n\n /**\n * Creates a new `Random` instance, optionally specifying parameters to\n * set a new seed.\n */\n clone(seedOrRNG: SeedOrRNG = this.rng.clone()): Random {\n return new Random(seedOrRNG)\n }\n\n /**\n * Sets the underlying pseudorandom number generator.\n *\n * @example\n * ```ts\n * import random from 'random'\n *\n * random.use('example-seed')\n * // or\n * random.use(Math.random)\n * ```\n */\n use(seedOrRNG: SeedOrRNG) {\n this._rng = createRNG(seedOrRNG)\n this._cache = {}\n }\n\n // --------------------------------------------------------------------------\n // Uniform utility functions\n // --------------------------------------------------------------------------\n\n /**\n * Convenience wrapper around `this.rng.next()`\n *\n * Returns a floating point number in [0, 1).\n *\n * @return {number}\n */\n next(): number {\n return this._rng.next()\n }\n\n /**\n * Samples a uniform random floating point number, optionally specifying\n * lower and upper bounds.\n *\n * Convenience wrapper around `random.uniform()`\n *\n * @param {number} [min=0] - Lower bound (float, inclusive)\n * @param {number} [max=1] - Upper bound (float, exclusive)\n */\n float(min?: number, max?: number): number {\n return this.uniform(min, max)()\n }\n\n /**\n * Samples a uniform random integer, optionally specifying lower and upper\n * bounds.\n *\n * Convenience wrapper around `random.uniformInt()`\n *\n * @param {number} [min=0] - Lower bound (integer, inclusive)\n * @param {number} [max=1] - Upper bound (integer, inclusive)\n */\n int(min?: number, max?: number): number {\n return this.uniformInt(min, max)()\n }\n\n /**\n * Samples a uniform random integer, optionally specifying lower and upper\n * bounds.\n *\n * Convenience wrapper around `random.uniformInt()`\n *\n * @alias `random.int`\n *\n * @param {number} [min=0] - Lower bound (integer, inclusive)\n * @param {number} [max=1] - Upper bound (integer, inclusive)\n */\n integer(min?: number, max?: number): number {\n return this.uniformInt(min, max)()\n }\n\n /**\n * Samples a uniform random boolean value.\n *\n * Convenience wrapper around `random.uniformBoolean()`\n *\n * @alias `random.boolean`\n */\n bool(): boolean {\n return this.uniformBoolean()()\n }\n\n /**\n * Samples a uniform random boolean value.\n *\n * Convenience wrapper around `random.uniformBoolean()`\n */\n boolean(): boolean {\n return this.uniformBoolean()()\n }\n\n /**\n * Returns an item chosen uniformly at random from the given array.\n * If weights are provided, returns an item based on weighted probabilities.\n *\n * Convenience wrapper around `random.uniformInt()` for uniform selection,\n * or implements weighted selection using cumulative distribution.\n *\n * @param {Array<T>} [array] - Input array\n * @param {Array<number>} [weights] - Optional weights for each item (must be same length as array)\n */\n choice<T>(array: Array<T>, weights?: Array<number>): T | undefined {\n if (!Array.isArray(array)) {\n throw new TypeError(\n `Random.choice expected input to be an array, got ${typeof array}`\n )\n }\n\n const length = array.length\n\n if (length === 0) {\n return undefined\n }\n\n // Uniform selection when no weights provided\n if (!weights) {\n const index = this.uniformInt(0, length - 1)()\n return array[index]\n }\n\n // Weighted selection\n if (!Array.isArray(weights)) {\n throw new TypeError(\n `Random.choice expected weights to be an array, got ${typeof weights}`\n )\n }\n\n if (weights.length !== length) {\n throw new Error(\n `Random.choice expected weights array length (${weights.length}) to match array length (${length})`\n )\n }\n\n for (const [i, weight] of weights.entries()) {\n if (\n typeof weight !== 'number' ||\n weight < 0 ||\n !Number.isFinite(weight)\n ) {\n throw new Error(\n `Random.choice expected all weights to be non-negative finite numbers, got ${weight} at index ${i}`\n )\n }\n }\n\n const totalWeight = weights.reduce((sum, weight) => sum + weight, 0)\n if (totalWeight === 0) {\n throw new Error(\n 'Random.choice expected at least one positive weight, got all zeros'\n )\n }\n\n const random = this.float(0, totalWeight)\n let cumulativeWeight = 0\n for (let i = 0; i < length; i++) {\n cumulativeWeight += weights[i]!\n if (random <= cumulativeWeight) {\n return array[i]\n }\n }\n\n // Fallback for floating point precision\n return array[length - 1]\n }\n\n /**\n * Returns a random subset of k items from the given array (without replacement).\n *\n * @param {Array<T>} [array] - Input array\n */\n sample<T>(array: Array<T>, k: number): Array<T> {\n if (!Array.isArray(array)) {\n throw new TypeError(\n `Random.sample expected input to be an array, got ${typeof array}`\n )\n }\n if (k < 0 || k > array.length) {\n throw new Error(\n `Random.sample: k must be between 0 and array.length (${array.length}), got ${k}`\n )\n }\n return sparseFisherYates(this.rng, array, k)\n }\n\n /**\n * Generates a thunk which returns samples of size k from the given array.\n *\n * This is for convenience only; there is no gain in efficiency.\n *\n * @param {Array<T>} [array] - Input array\n */\n sampler<T>(array: Array<T>, k: number): () => Array<T> {\n if (!Array.isArray(array)) {\n throw new TypeError(\n `Random.sampler expected input to be an array, got ${typeof array}`\n )\n }\n if (k < 0 || k > array.length) {\n throw new Error(\n `Random.sampler: k must be between 0 and array.length (${array.length}), got ${k}`\n )\n }\n\n const gen = this.rng\n\n return () => {\n return sparseFisherYates(gen, array, k)\n }\n }\n\n /**\n * Returns a shuffled copy of the given array.\n *\n * @param {Array<T>} [array] - Input array\n */\n shuffle<T>(array: Array<T>): Array<T> {\n if (!Array.isArray(array)) {\n throw new TypeError(\n `Random.shuffle expected input to be an array, got ${typeof array}`\n )\n }\n\n const copy = [...array]\n shuffleInPlace(this.rng, copy)\n\n return copy\n }\n\n /**\n * Generates a thunk which returns shuffled copies of the given array.\n *\n * @param {Array<T>} [array] - Input array\n */\n shuffler<T>(array: Array<T>): () => Array<T> {\n if (!Array.isArray(array)) {\n throw new TypeError(\n `Random.shuffler expected input to be an array, got ${typeof array}`\n )\n }\n\n const gen = this.rng\n const copy = [...array]\n\n return () => {\n shuffleInPlace(gen, copy)\n return [...copy]\n }\n }\n\n // --------------------------------------------------------------------------\n // Uniform distributions\n // --------------------------------------------------------------------------\n\n /**\n * Generates a [Continuous uniform distribution](https://en.wikipedia.org/wiki/Uniform_distribution_(continuous)).\n *\n * @param {number} [min=0] - Lower bound (float, inclusive)\n * @param {number} [max=1] - Upper bound (float, exclusive)\n */\n uniform(min?: number, max?: number): IDist<number> {\n return this._memoize<number>('uniform', uniform, min, max)\n }\n\n /**\n * Generates a [Discrete uniform distribution](https://en.wikipedia.org/wiki/Discrete_uniform_distribution).\n *\n * @param {number} [min=0] - Lower bound (integer, inclusive)\n * @param {number} [max=1] - Upper bound (integer, inclusive)\n */\n uniformInt(min?: number, max?: number): IDist<number> {\n return this._memoize<number>('uniformInt', uniformInt, min, max)\n }\n\n /**\n * Generates a [Discrete uniform distribution](https://en.wikipedia.org/wiki/Discrete_uniform_distribution),\n * with two possible outcomes, `true` or `false.\n *\n * This method is analogous to flipping a coin.\n */\n uniformBoolean(): IDist<boolean> {\n return this._memoize<boolean>('uniformBoolean', uniformBoolean)\n }\n\n // --------------------------------------------------------------------------\n // Normal distributions\n // --------------------------------------------------------------------------\n\n /**\n * Generates a [Normal distribution](https://en.wikipedia.org/wiki/Normal_distribution).\n *\n * @param {number} [mu=0] - Mean\n * @param {number} [sigma=1] - Standard deviation\n */\n normal(mu?: number, sigma?: number): IDist<number> {\n return normal(this, mu, sigma)\n }\n\n /**\n * Generates a [Log-normal distribution](https://en.wikipedia.org/wiki/Log-normal_distribution).\n *\n * @param {number} [mu=0] - Mean of underlying normal distribution\n * @param {number} [sigma=1] - Standard deviation of underlying normal distribution\n */\n logNormal(mu?: number, sigma?: number): IDist<number> {\n return logNormal(this, mu, sigma)\n }\n\n // --------------------------------------------------------------------------\n // Bernoulli distributions\n // --------------------------------------------------------------------------\n\n /**\n * Generates a [Bernoulli distribution](https://en.wikipedia.org/wiki/Bernoulli_distribution).\n *\n * @param {number} [p=0.5] - Success probability of each trial.\n */\n bernoulli(p?: number): IDist<number> {\n return bernoulli(this, p)\n }\n\n /**\n * Generates a [Binomial distribution](https://en.wikipedia.org/wiki/Binomial_distribution).\n *\n * @param {number} [n=1] - Number of trials.\n * @param {number} [p=0.5] - Success probability of each trial.\n */\n binomial(n?: number, p?: number): IDist<number> {\n return binomial(this, n, p)\n }\n\n /**\n * Generates a [Geometric distribution](https://en.wikipedia.org/wiki/Geometric_distribution).\n *\n * @param {number} [p=0.5] - Success probability of each trial.\n */\n geometric(p?: number): IDist<number> {\n return geometric(this, p)\n }\n\n // --------------------------------------------------------------------------\n // Poisson distributions\n // --------------------------------------------------------------------------\n\n /**\n * Generates a [Poisson distribution](https://en.wikipedia.org/wiki/Poisson_distribution).\n *\n * @param {number} [lambda=1] - Mean (lambda > 0)\n */\n poisson(lambda?: number): IDist<number> {\n return poisson(this, lambda)\n }\n\n /**\n * Generates an [Exponential distribution](https://en.wikipedia.org/wiki/Exponential_distribution).\n *\n * @param {number} [lambda=1] - Inverse mean (lambda > 0)\n */\n exponential(lambda?: number): IDist<number> {\n return exponential(this, lambda)\n }\n\n // --------------------------------------------------------------------------\n // Misc distributions\n // --------------------------------------------------------------------------\n\n /**\n * Generates an [Irwin Hall distribution](https://en.wikipedia.org/wiki/Irwin%E2%80%93Hall_distribution).\n *\n * @param {number} [n=1] - Number of uniform samples to sum (n >= 0)\n */\n irwinHall(n?: number): IDist<number> {\n return irwinHall(this, n)\n }\n\n /**\n * Generates a [Bates distribution](https://en.wikipedia.org/wiki/Bates_distribution).\n *\n * @param {number} [n=1] - Number of uniform samples to average (n >= 1)\n */\n bates(n?: number): IDist<number> {\n return bates(this, n)\n }\n\n /**\n * Generates a [Pareto distribution](https://en.wikipedia.org/wiki/Pareto_distribution).\n *\n * @param {number} [alpha=1] - Alpha\n */\n pareto(alpha?: number): IDist<number> {\n return pareto(this, alpha)\n }\n\n /**\n * Generates a [Weibull distribution](https://en.wikipedia.org/wiki/Weibull_distribution).\n *\n * @param {number} [lambda] - Lambda, the scale parameter\n * @param {number} [k] - k, the shape parameter\n */\n weibull(lambda: number, k: number) {\n return weibull(this, lambda, k)\n }\n\n // --------------------------------------------------------------------------\n // Internal\n // --------------------------------------------------------------------------\n\n /**\n * Memoizes distributions to ensure they're only created when necessary.\n *\n * Returns a thunk which that returns independent, identically distributed\n * samples from the specified distribution.\n *\n * @internal\n *\n * @param {string} label - Name of distribution\n * @param {function} getter - Function which generates a new distribution\n * @param {...*} args - Distribution-specific arguments\n */\n protected _memoize<T>(\n label: string,\n getter: IDistFn<any>,\n ...args: any[]\n ): IDist<T> {\n // return getter(this, ...args)\n const key = `${args.join(';')}`\n let value = this._cache[label]\n\n if (value === undefined || value.key !== key) {\n value = {\n key,\n distribution: getter(this, ...args)\n }\n this._cache[label] = value\n }\n\n return value.distribution\n }\n}\n\nexport default new Random()\n"],"mappings":"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"}
package/license ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Travis Fischer
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/package.json ADDED
@@ -0,0 +1,13 @@
1
+ {
2
+ "name": "common-fs",
3
+ "version": "1.0.0",
4
+ "description": "Default count value is 5 if you dont pass any count.",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "test": "echo \"Error: no test specified\" && exit 1"
8
+ },
9
+ "keywords": [],
10
+ "author": "",
11
+ "license": "ISC",
12
+ "types": "./index.d.ts"
13
+ }