UNPKG

seeded

Version:

Seedable pseudorandom number generator (PRNG).

1 lines 49.6 kB
{"version":3,"file":"seeded.mjs","sources":["../src/data/maximumSafeBinary.ts","../src/data/index.ts","../node_modules/tslib/tslib.es6.js","../src/utilities/ceiling.ts","../src/utilities/floorMap.ts","../src/utilities/length.ts","../src/utilities/sliceAt.ts","../src/arithmetic/add.ts","../src/arithmetic/addTo.ts","../src/arithmetic/divideBy.ts","../src/arithmetic/increment.ts","../src/arithmetic/multiply.ts","../src/arithmetic/negate.ts","../src/arithmetic/raiseToPowerOf.ts","../src/arithmetic/remainder.ts","../src/arithmetic/multiplyBy.ts","../src/arithmetic/sum.ts","../src/utilities/identityPermutation.ts","../src/utilities/atIndex.ts","../src/utilities/map.ts","../src/utilities/split.ts","../src/utilities/toCharCodes.ts","../src/cipher/key.ts","../src/utilities/forEach.ts","../src/utilities/swapIndices.ts","../src/cipher/pool.ts","../src/cipher/roundKey.ts","../src/cipher/keySchedule.ts","../src/number/octet.ts","../src/utilities/strictlyEquals.ts","../src/utilities/binaryToNumber.ts","../src/utilities/concatenate.ts","../src/utilities/toBinary.ts","../src/utilities/toFixedBinaryOctets.ts","../src/utilities/octetToInterval.ts","../src/number/interval.ts","../src/number/largeInteger.ts","../src/number/integer.ts","../src/utilities/timeSinceEpoch.ts","../src/number/number.ts","../src/utilities/head.ts","../src/utilities/not.ts","../src/sample/Samples.ts","../src/sample/sampleUniform.ts","../src/sample/sampleWeighted.ts","../src/sample/sample.ts"],"sourcesContent":["import { maximumSafeBinaryLength } from './metrics.json'\n\nconst maximumSafeBinary: number = 2 ** maximumSafeBinaryLength\n\nexport default maximumSafeBinary\n","import maximumSafeBinary from './maximumSafeBinary'\nimport {\n numberRange as numberRangeErrorMessages,\n sampleWeight as sampleWeightErrorMessages,\n} from './errorMessages.json'\nimport {\n bitsInOctet,\n defaultDrop,\n maximumSafeBinaryLength,\n poolWidth,\n} from './metrics.json'\n\nconst {\n underflow: {\n integer: integerRangeUnderflowErrorMessage,\n interval: intervalRangeUnderflowErrorMessage,\n },\n} = numberRangeErrorMessages\n\nconst { underflow: sampleWeightUnderflowErrorMessage } =\n sampleWeightErrorMessages\n\nexport {\n bitsInOctet,\n defaultDrop,\n integerRangeUnderflowErrorMessage,\n intervalRangeUnderflowErrorMessage,\n maximumSafeBinary,\n maximumSafeBinaryLength,\n poolWidth,\n sampleWeightUnderflowErrorMessage,\n}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || from);\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","export default function ceiling(n: number): number {\n return Math.ceil(n)\n}\n","export function floor(n: number): number {\n return Math.floor(n)\n}\n\nexport default function floorMap(a: number[]): number[] {\n return a.map(floor)\n}\n","export default function length(x: any): number {\n return x.length\n}\n","type StringOrArray<T> = string | T[]\n\nexport default function sliceAt(n: number) {\n return <T>(sliceable: StringOrArray<T>): StringOrArray<T> =>\n sliceable.slice(n)\n}\n","export default function add(x: number, y: number): number {\n return x + y\n}\n","import type { N, NumberCallback } from '../utilities/numbers'\nimport add from './add'\n\nexport default function addTo(x: N): NumberCallback {\n return (y: N): N => add(x, y)\n}\n","import type { N, NumberCallback } from '../utilities/numbers'\n\nexport default function divideBy(denominator: N): NumberCallback {\n return (numerator: N): N => numerator / denominator\n}\n","import add from './add'\n\nexport default function increment(n: number): number {\n return add(n, 1)\n}\n","export default function multiply(x: number, y: number): number {\n return x * y\n}\n","export default function negate(n: number): number {\n return -n\n}\n","type RaiseToPowerOfCallback = (exponent: number) => number\n\nfunction raiseToPowerOf(base: number): RaiseToPowerOfCallback {\n return (exponent: number) => base ** exponent\n}\n\nconst raiseTwoToPowerOf: RaiseToPowerOfCallback = raiseToPowerOf(2)\n\nexport default raiseTwoToPowerOf\n","import type { N, NumberCallback } from '../utilities/numbers'\n\nexport default function remainder(divisor: N): NumberCallback {\n return (dividend: N): N => dividend % divisor\n}\n","import type { N, NumberCallback } from '../utilities/numbers'\nimport multiply from './multiply'\n\nexport default function multiplyBy(x: N): NumberCallback {\n return (y: N): N => multiply(x, y)\n}\n","import add from './add'\n\nexport default function sum(...n: number[]): number {\n return n.reduce((prev, current) => add(prev, current), 0)\n}\n","export default function identityPermutation(width: number): number[] {\n // @ts-ignore\n return [...Array(width).keys()]\n}\n","import type { Callback } from './Callback'\nimport type { N } from './numbers'\n\ntype AtIndexCallback<T> = Callback<N, T>\n\nexport interface AtIndexProperty<T> {\n atIndex: AtIndexCallback<T>\n}\n\nexport default function atIndex<T>(a: T[]): AtIndexCallback<T> {\n return (i: number): T => a[i]\n}\n","import { Callback } from './Callback'\n\ntype ArrayMap = typeof Array.prototype.map\ntype Map = ReturnType<ArrayMap>\ntype MapParam = Parameters<ArrayMap>[0]\ntype Mappable = { map: (fn: MapParam) => Map }\ntype MapCallback = Callback<Mappable, Map>\n\nexport default function map(fn: MapParam): MapCallback {\n return (a: Mappable): Map => a.map(fn)\n}\n","import type { S } from './strings'\n\ntype Split = ReturnType<typeof String.prototype.split>\ntype Splittable = { split: (separator: S) => Split }\n\nexport default function split(s: Splittable): Split {\n return s.split('')\n}\n","import type { S } from './strings'\nimport map from './map'\nimport split from './split'\n\ntype MapCallback = ReturnType<typeof map>\ntype UTF16 = ReturnType<typeof String.prototype.charCodeAt>\ntype UTF16s = UTF16[]\n\nconst stringsToUTF16: MapCallback = map((x: S): UTF16 => x.charCodeAt(0))\n\nexport default function toCharCodes(s: S): UTF16s {\n return <UTF16s>stringsToUTF16(split(s))\n}\n","import type { AtIndexProperty } from '../utilities/atIndex'\nimport type { N, NumberCallback } from '../utilities/numbers'\nimport type { S as Seed } from '../utilities/strings'\nimport atIndexUtil from '../utilities/atIndex'\nimport length from '../utilities/length'\nimport { remainder } from '../arithmetic'\nimport toCharCodes from '../utilities/toCharCodes'\n\ntype CharacterCodes = ReturnType<typeof toCharCodes>\ninterface Key extends AtIndexProperty<N> {}\n\nexport default function key(seedParam: Seed): Key {\n const seed: CharacterCodes = toCharCodes(seedParam),\n atOverflowableIndex: NumberCallback = atIndexUtil(seed),\n remainderLength: NumberCallback = remainder(length(seed))\n\n return {\n atIndex(n: N): N {\n return atOverflowableIndex(remainderLength(n))\n },\n }\n}\n","import type { Callback } from './Callback'\n\ntype ForEach = typeof Array.prototype.forEach\ntype ForEachParameter = Parameters<ForEach>[0]\ntype ForEachReturns = ReturnType<ForEach>\ntype ForEachCallback = Callback<ForEachParameter, ForEachReturns>\n\nexport interface ForEachProperty {\n forEach: ForEachCallback\n}\n\nexport default function forEach<T>(a: T[]): ForEachCallback {\n return (fn: ForEachParameter) => a.forEach(fn)\n}\n","import type { Callback } from './Callback'\nimport type { N } from './numbers'\nimport atIndexUtil from './atIndex'\n\ntype SwapIndicesCallback<T> = (x: N, y: N) => T[]\n\nexport interface SwapIndicesProperty<T> {\n swapIndices: SwapIndicesCallback<T>\n}\n\nexport default function swapIndices<T>(a: T[]): SwapIndicesCallback<T> {\n return (x: N, y: N): T[] => {\n const array: T[] = [...a],\n atIndex: Callback<N, T> = atIndexUtil(array),\n prevX: T = atIndex(x)\n\n array[x] = atIndex(y)\n array[y] = prevX\n\n return array\n }\n}\n","import type { AtIndexProperty } from '../utilities/atIndex'\nimport type { ForEachProperty } from '../utilities/forEach'\nimport type { RecursiveState } from '../utilities/state'\nimport type { SwapIndicesProperty } from '../utilities/swapIndices'\nimport type { N, Ns } from '../utilities/numbers'\nimport atIndexUtil from '../utilities/atIndex'\nimport forEachUtil from '../utilities/forEach'\nimport swapIndicesUtil from '../utilities/swapIndices'\n\ninterface Pool\n extends AtIndexProperty<N>,\n ForEachProperty,\n SwapIndicesProperty<N>,\n RecursiveState<Pool, Ns> {}\n\ntype PoolState = Pool['state']\n\nexport default function pool(state: PoolState): Pool {\n return {\n state,\n atIndex: atIndexUtil(state),\n create: pool,\n forEach: forEachUtil(state),\n swapIndices: swapIndicesUtil(state),\n }\n}\n","import type { RecursiveState } from '../utilities/state'\nimport type { N, NumberCallback } from '../utilities/numbers'\nimport { poolWidth } from '../data'\nimport { addTo, remainder } from '../arithmetic'\n\ninterface RoundKey extends RecursiveState<RoundKey, N> {\n addTo: NumberCallback\n}\n\ntype RoundKeyState = RoundKey['state']\n\nconst remainderPoolWidth: NumberCallback = remainder(poolWidth)\n\nexport default function roundKey(state: RoundKeyState): RoundKey {\n return {\n state,\n addTo: addTo(state),\n create(newState: RoundKeyState): RoundKey {\n return roundKey(remainderPoolWidth(newState))\n },\n }\n}\n","import { add } from '../arithmetic'\nimport identityPermutation from '../utilities/identityPermutation'\nimport keyModule from './key'\nimport poolModule from './pool'\nimport { poolWidth } from '../data'\nimport roundKeyModule from './roundKey'\n\ntype Key = ReturnType<typeof keyModule>\ntype Pool = ReturnType<typeof poolModule>\ntype RoundKey = ReturnType<typeof roundKeyModule>\ntype Seed = Parameters<typeof keyModule>[0]\n\nexport default function keySchedule(seed: Seed): Pool {\n const { atIndex: atKeyIndex }: Key = keyModule(seed)\n\n let pool: Pool = poolModule(identityPermutation(poolWidth)),\n roundKey: RoundKey = roundKeyModule(0)\n\n pool.forEach((i: number): void => {\n roundKey = roundKey.create(\n roundKey.addTo(add(atKeyIndex(i), pool.atIndex(i)))\n )\n pool = pool.create(pool.swapIndices(i, roundKey.state))\n })\n\n return pool\n}\n","import type { Cipher, CipherParams } from '../cipher'\nimport type {\n N,\n Ns,\n NumberCallback,\n NumbersCallback,\n} from '../utilities/numbers'\nimport ceiling from '../utilities/ceiling'\nimport length from '../utilities/length'\nimport { poolWidth } from '../data'\nimport sliceAt from '../utilities/sliceAt'\nimport { add, addTo, increment, negate, remainder } from '../arithmetic'\nimport { pool as poolModule, roundKey as roundKeyModule } from '../cipher'\n\ntype Pool = ReturnType<typeof poolModule>\ntype RoundKey = ReturnType<typeof roundKeyModule>\n\nexport default function octet({\n count,\n drop,\n max: prevMax,\n min: prevMin,\n state: { i: prevI, roundKey: prevRoundKeyState, pool: prevPoolState },\n}: CipherParams): Cipher {\n const max: N = ceiling(prevMax),\n min: N = ceiling(prevMin),\n toGenerate: N = add(count, drop),\n prevPool: Pool = poolModule(prevPoolState),\n dropInitial = <NumbersCallback>sliceAt(drop),\n addToMin: NumberCallback = addTo(min),\n remainderPoolWidth: NumberCallback = remainder(poolWidth),\n remainderRangeDiff: NumberCallback = remainder(add(max, negate(min)))\n\n let i: N = prevI,\n innerGenerated: Ns = [],\n roundKey: RoundKey = roundKeyModule(prevRoundKeyState),\n pool: Pool = prevPool.create(prevPool.state)\n\n while (length(innerGenerated) < toGenerate) {\n i = remainderPoolWidth(increment(i))\n roundKey = roundKey.create(roundKey.addTo(pool.atIndex(i)))\n pool = pool.create(pool.swapIndices(i, roundKey.state))\n innerGenerated = [\n ...innerGenerated,\n addToMin(\n remainderRangeDiff(\n pool.atIndex(\n remainderPoolWidth(\n add(pool.atIndex(i), pool.atIndex(roundKey.state))\n )\n )\n )\n ),\n ]\n }\n\n return {\n generated: dropInitial(innerGenerated),\n state: {\n i,\n pool: pool.state,\n roundKey: roundKey.state,\n },\n }\n}\n","import type { Callback } from './Callback'\n\ntype IsNumberCallback = Callback<number, boolean>\n\nexport const strictlyEqualsOne: IsNumberCallback = strictlyEquals(1)\nexport const strictlyEqualsZero: IsNumberCallback = strictlyEquals(0)\n\nexport default function strictlyEquals<T>(x: T): Callback<T, boolean> {\n return (y: T) => x === y\n}\n","export default function binaryToNumber(s: string): number {\n return parseInt(s, 2)\n}\n","export default function concatenate(a: string[]): string {\n return a.join('')\n}\n","export default function toBinary(n: number): string {\n return n.toString(2)\n}\n","import toBinary from './toBinary'\nimport { bitsInOctet } from '../data'\n\nexport function toFixedBinaryOctet(n: number): string {\n return toBinary(n).padStart(bitsInOctet, '0')\n}\n\nexport default function toFixedBinaryOctets(a: number[]): string[] {\n return a.map(toFixedBinaryOctet)\n}\n","import type { StringCallback } from './strings'\nimport type { N, Ns, NumberCallback } from './numbers'\nimport binaryToNumber from './binaryToNumber'\nimport ceiling from './ceiling'\nimport concatenate from './concatenate'\nimport sliceAt from './sliceAt'\nimport toFixedBinaryOctets from './toFixedBinaryOctets'\nimport {\n add,\n divideBy,\n multiply,\n multiplyBy,\n negate,\n raiseTwoToPowerOf,\n} from '../arithmetic'\nimport { bitsInOctet, maximumSafeBinaryLength } from '../data'\n\nconst maxSafeBinaryToInterval: NumberCallback = multiplyBy(\n raiseTwoToPowerOf(negate(maximumSafeBinaryLength))\n)\n\nconst divideByBitsInOctet: NumberCallback = divideBy(bitsInOctet)\n\nexport const octetsNeededForMaxSafeBinary: N = ceiling(\n divideByBitsInOctet(maximumSafeBinaryLength)\n)\n\nconst sliceToMaxSafeBinary = <StringCallback>(\n sliceAt(\n add(\n negate(maximumSafeBinaryLength),\n multiply(octetsNeededForMaxSafeBinary, bitsInOctet)\n )\n )\n)\n\nexport default function octetToInterval(octet: Ns): N {\n return maxSafeBinaryToInterval(\n binaryToNumber(\n sliceToMaxSafeBinary(concatenate(toFixedBinaryOctets(octet)))\n )\n )\n}\n","import type { IntegerOrInterval } from './Numbers'\nimport type { Cipher, CipherParams } from '../cipher'\nimport length from '../utilities/length'\nimport octet from './octet'\nimport { strictlyEqualsZero } from '../utilities/strictlyEquals'\nimport { add, multiply, negate } from '../arithmetic'\nimport { intervalRangeUnderflowErrorMessage, poolWidth } from '../data'\nimport octetToInterval, {\n octetsNeededForMaxSafeBinary,\n} from '../utilities/octetToInterval'\n\nexport function intervalCipher({\n count,\n drop,\n max,\n min,\n state: prevState,\n}: CipherParams): Cipher {\n let generated: Cipher['generated'] = [],\n state: Cipher['state'] = prevState\n\n while (length(generated) < count) {\n const { generated: generatedOctet, state: octetState }: Cipher = octet({\n state,\n count: octetsNeededForMaxSafeBinary,\n drop: strictlyEqualsZero(length(generated)) ? drop : 0,\n max: poolWidth,\n min: 0,\n }),\n prevGenerated: number = add(\n min,\n multiply(octetToInterval(generatedOctet), add(max, negate(min)))\n ),\n overflow: boolean = prevGenerated >= max\n\n generated = overflow ? generated : [...generated, prevGenerated]\n state = octetState\n }\n\n return { generated, state }\n}\n\nconst interval: IntegerOrInterval = {\n cipherModule: intervalCipher,\n defaultMax: 1,\n throwIfRangeUnderflowError({\n max,\n min,\n }: Pick<CipherParams, 'max' | 'min'>): void {\n if (min >= max) throw new RangeError(intervalRangeUnderflowErrorMessage)\n },\n}\n\nexport default interval\n","import type { Cipher, CipherParams } from '../cipher'\nimport ceiling from '../utilities/ceiling'\nimport floorMap from '../utilities/floorMap'\nimport { intervalCipher } from './interval'\n\nexport default function largeInteger({\n count,\n max,\n min,\n state: prevState,\n ...props\n}: CipherParams): Cipher {\n const { state, generated: generatedInterval }: Cipher = intervalCipher({\n ...props,\n count,\n max,\n min: ceiling(min),\n state: prevState,\n }),\n generated: Cipher['generated'] = floorMap(generatedInterval)\n\n return {\n generated,\n state,\n }\n}\n","import type { IntegerOrInterval } from './Numbers'\nimport type { Cipher, CipherParams } from '../cipher'\nimport ceiling from '../utilities/ceiling'\nimport largeInteger from './largeInteger'\nimport octet from './octet'\nimport { add, negate } from '../arithmetic'\nimport {\n integerRangeUnderflowErrorMessage,\n maximumSafeBinary,\n poolWidth,\n} from '../data'\n\nconst integer: IntegerOrInterval = {\n cipherModule({ max, min, ...props }: CipherParams): Cipher {\n const octetRangeOverflow: boolean = add(max, negate(min)) > poolWidth,\n cipherModule: (props: CipherParams) => Cipher = octetRangeOverflow\n ? largeInteger\n : octet\n\n return cipherModule({ max, min, ...props })\n },\n defaultMax: maximumSafeBinary,\n throwIfRangeUnderflowError({\n max,\n min,\n }: Pick<CipherParams, 'max' | 'min'>): void {\n if (ceiling(min) >= ceiling(max))\n throw new RangeError(integerRangeUnderflowErrorMessage)\n },\n}\n\nexport default integer\n","export default function timeSinceEpoch(): number {\n return Date.now()\n}\n","import type { CipherParams } from '../cipher'\nimport type { IntegerOrInterval, Number, NumberParams } from './Numbers'\nimport { defaultDrop } from '../data'\nimport integer from './integer'\nimport interval from './interval'\nimport { keySchedule } from '../cipher'\nimport timeSinceEpoch from '../utilities/timeSinceEpoch'\n\nexport default function number({\n count = 1,\n discrete = false,\n drop = defaultDrop,\n max: prevMax,\n min = 0,\n seed = `${timeSinceEpoch()}`,\n state: prevState = {\n i: 0,\n pool: keySchedule(seed).state,\n roundKey: 0,\n },\n}: NumberParams = {}): Number {\n const {\n cipherModule,\n defaultMax,\n throwIfRangeUnderflowError,\n }: IntegerOrInterval = discrete ? integer : interval,\n max: CipherParams['max'] = prevMax ?? defaultMax\n\n throwIfRangeUnderflowError({ max, min })\n\n const { generated, state } = cipherModule({\n count,\n drop,\n max,\n min,\n state: prevState,\n })\n\n function next(newCount: NumberParams['count'] = 1): Number {\n return number({\n discrete,\n max,\n min,\n seed,\n state,\n count: newCount,\n drop: 0,\n })\n }\n\n return {\n generated,\n next,\n state,\n }\n}\n","export default function head<T>(a: T[]): T {\n return a[0]\n}\n","export default function not(b: boolean): boolean {\n return !b\n}\n","import type { Callback } from '../utilities/Callback'\nimport type { NumberParams } from '../number'\nimport head from '../utilities/head'\nimport length from '../utilities/length'\nimport not from '../utilities/not'\nimport { sampleWeightUnderflowErrorMessage } from '../data'\nimport strictlyEquals, { strictlyEqualsZero } from '../utilities/strictlyEquals'\n\nexport type Value<T> = T\ntype Values<T> = Value<T>[]\n\nexport type Weight = number\n\nexport interface WeightedValue<T> {\n value: Value<T>\n weight: Weight\n}\n\nexport type WeightedValues<T> = WeightedValue<T>[]\n\ntype SampleNumberParams = Pick<\n NumberParams,\n 'count' | 'drop' | 'seed' | 'state'\n>\n\nexport interface SampleUniformParams<T> extends SampleNumberParams {\n distribution: Values<T>\n}\n\nexport interface SampleWeightedParams<T> extends SampleNumberParams {\n distribution: WeightedValues<T>\n}\n\nexport interface SampleParams<T> extends SampleNumberParams {\n distribution: Values<T> | WeightedValues<T>\n}\n\nexport interface Sample<T> {\n generated: T[]\n state: NumberParams['state']\n}\n\nexport interface SamplePersistent<T> extends Sample<T> {\n next: (count?: NumberParams['count']) => SamplePersistent<T>\n}\n\nexport function isExpandedDistributionSyntax<T>(\n distribution: SampleParams<T>['distribution']\n): distribution is WeightedValues<T> {\n const distributionKeys: ReturnType<typeof Object.keys> = Object.keys(\n head(<Values<T>>distribution)\n )\n\n return strictlyEqualsZero(length(distributionKeys))\n ? false\n : distributionKeys.every((key: string): boolean => {\n const strictlyEqualsKey: Callback<typeof key, boolean> =\n strictlyEquals(key)\n\n return strictlyEqualsKey('value') || strictlyEqualsKey('weight')\n })\n}\n\nexport function throwIfRangeUnderflowError<T>(distribution: WeightedValues<T>) {\n if (\n distribution.some(({ weight }: WeightedValue<T>): boolean =>\n not(weight > 0)\n )\n )\n throw new RangeError(sampleWeightUnderflowErrorMessage)\n}\n","import type { Number } from '../number'\nimport type { Sample, SampleUniformParams, Value } from './Samples'\nimport length from '../utilities/length'\nimport number from '../number'\n\nexport default function sampleUniform<T>({\n distribution,\n ...props\n}: SampleUniformParams<T>): Sample<T> {\n const { generated, state }: Number = number({\n ...props,\n discrete: true,\n max: length(distribution),\n })\n\n return {\n state,\n generated: generated.map(\n (i: Number['generated'][number]): Value<T> => distribution[i]\n ),\n }\n}\n","import type { Number } from '../number'\nimport type { N, NumberCallback } from '../utilities/numbers'\nimport type {\n Sample,\n SampleWeightedParams,\n Value,\n Weight,\n WeightedValue,\n WeightedValues,\n} from './Samples'\nimport not from '../utilities/not'\nimport number from '../number'\nimport { throwIfRangeUnderflowError } from './Samples'\nimport { add, divideBy, increment, negate, sum } from '../arithmetic'\n\nexport default function sampleWeighted<T>({\n distribution,\n ...props\n}: SampleWeightedParams<T>): Sample<T> {\n throwIfRangeUnderflowError(distribution)\n\n const divideByTotalWeight: NumberCallback = divideBy(\n sum(...distribution.map(({ weight }: WeightedValue<T>): Weight => weight))\n ),\n weightedValues: WeightedValues<T> = distribution.sort(\n (\n { weight: prevWeight }: WeightedValue<T>,\n { weight }: WeightedValue<T>\n ): Weight => add(weight, negate(prevWeight))\n ),\n { generated, state }: Number = number({\n ...props,\n discrete: false,\n })\n\n return {\n state,\n generated: generated.map((generatedInterval: N): Value<T> => {\n let selected: Value<T> | undefined,\n isValueSelected: boolean = false,\n cumulativeWeight: Weight = 0,\n i: N = 0\n\n while (not(isValueSelected)) {\n const { value, weight }: WeightedValue<T> = weightedValues[i]\n\n cumulativeWeight = add(cumulativeWeight, weight)\n\n if (generatedInterval < divideByTotalWeight(cumulativeWeight)) {\n selected = value\n isValueSelected = true\n } else i = increment(i)\n }\n\n return <Value<T>>selected\n }),\n }\n}\n","import type { NumberParams } from '../number'\nimport type {\n Sample,\n SampleParams,\n SamplePersistent,\n WeightedValue,\n} from './Samples'\nimport { isExpandedDistributionSyntax } from './Samples'\nimport sampleUniform from './sampleUniform'\nimport sampleWeighted from './sampleWeighted'\nimport { strictlyEqualsOne } from '../utilities/strictlyEquals'\n\nexport default function sample<T>({\n distribution,\n ...props\n}: SampleParams<T>): SamplePersistent<T> {\n let generated: SamplePersistent<T>['generated']\n let state: SamplePersistent<T>['state']\n\n if (isExpandedDistributionSyntax(distribution)) {\n if (\n distribution.every(({ weight }: WeightedValue<T>) =>\n strictlyEqualsOne(weight)\n )\n ) {\n const { generated: prevGenerated, state: prevState }: Sample<T> =\n sampleUniform({\n ...props,\n distribution: distribution.map(\n ({ value }: WeightedValue<T>): T => value\n ),\n })\n\n generated = prevGenerated\n state = prevState\n } else {\n const { generated: prevGenerated, state: prevState }: Sample<T> =\n sampleWeighted({ ...props, distribution })\n\n generated = prevGenerated\n state = prevState\n }\n } else {\n const { generated: prevGenerated, state: prevState }: Sample<T> =\n sampleUniform({ ...props, distribution })\n\n generated = prevGenerated\n state = prevState\n }\n\n function next(count?: NumberParams['count']): SamplePersistent<T> {\n return sample({ ...props, count, distribution, state, drop: 0 })\n }\n\n return { generated, next, state }\n}\n"],"names":["numberRangeErrorMessages","sampleWeightErrorMessages","atIndexUtil","atIndex","forEachUtil","swapIndicesUtil","keyModule","pool","poolModule","roundKey","roundKeyModule"],"mappings":"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"}