@guillaume-docquier/tools-ts 7.0.0 → 7.1.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/README.md +6 -5
- package/dist/entry.tools-ts.d.ts +2 -1
- package/dist/entry.tools-ts.js.map +1 -1
- package/dist/rng/Generator.d.ts +8 -0
- package/dist/rng/Generator.js +2 -0
- package/dist/rng/Generator.js.map +1 -0
- package/dist/rng/Generator.stub.d.ts +2 -0
- package/dist/rng/Generator.stub.js +8 -0
- package/dist/rng/Generator.stub.js.map +1 -0
- package/dist/rng/Rng.d.ts +15 -6
- package/dist/rng/Rng.js +80 -64
- package/dist/rng/Rng.js.map +1 -1
- package/dist/rng/mulberry32prng.d.ts +2 -2
- package/dist/rng/mulberry32prng.js +9 -6
- package/dist/rng/mulberry32prng.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -58,11 +58,12 @@ Use this tool when code needs shared ordering helpers.
|
|
|
58
58
|
Use these tools when code needs injectable randomness or deterministic
|
|
59
59
|
pseudo-random sequences.
|
|
60
60
|
|
|
61
|
-
| Export | What it is
|
|
62
|
-
| ---------------- |
|
|
63
|
-
| `Rng` | Builds
|
|
64
|
-
| `
|
|
65
|
-
| `
|
|
61
|
+
| Export | What it is | Use it when |
|
|
62
|
+
| ---------------- | ----------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
|
|
63
|
+
| `Rng` | Builds a stateful RNG facade from a serializable generator. | You need range-aware random numbers, shuffling, draws, or resumable random sequences. |
|
|
64
|
+
| `RngState` | Serializable generator and cached-normal state captured by `Rng`. | You need to persist an `Rng` and resume its exact sequence later. |
|
|
65
|
+
| `Generator` | Contract for random sources that expose their serializable state. | You provide the primitive, resumable random source used to construct an `Rng`. |
|
|
66
|
+
| `mulberry32Prng` | Deterministic, resumable Mulberry32 generator factory. | Tests, simulations, or generation code need repeatable pseudo-random sequences. |
|
|
66
67
|
|
|
67
68
|
### Utility Types
|
|
68
69
|
|
package/dist/entry.tools-ts.d.ts
CHANGED
|
@@ -26,7 +26,8 @@ export type { LoggerContext } from "./logging/log-context/LoggerContext.js";
|
|
|
26
26
|
export type { LogContextProvider } from "./logging/log-context/LogContextProvider.js";
|
|
27
27
|
export { debounce } from "./debounce.js";
|
|
28
28
|
export { Sort } from "./Sort.js";
|
|
29
|
-
export { Rng, type
|
|
29
|
+
export { Rng, type RngState } from "./rng/Rng.js";
|
|
30
|
+
export type { Generator } from "./rng/Generator.js";
|
|
30
31
|
export { mulberry32Prng } from "./rng/mulberry32prng.js";
|
|
31
32
|
export { Datetime } from "./Datetime.js";
|
|
32
33
|
export { Angle, UnitOfAngle } from "./measurements/Angle.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry.tools-ts.js","sourceRoot":"","sources":["../src/entry.tools-ts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAI5C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,MAAM,EAA8B,MAAM,aAAa,CAAA;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAE3C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAA;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAA;AAEtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;AAKvE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"entry.tools-ts.js","sourceRoot":"","sources":["../src/entry.tools-ts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAI5C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,MAAM,EAA8B,MAAM,aAAa,CAAA;AAChE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAE3C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAA;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAA;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAA;AAEtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;AAKvE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,GAAG,EAAiB,MAAM,cAAc,CAAA;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EAAE,OAAO,EAAW,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,OAAO,EAAY,MAAM,2BAA2B,CAAA;AAC7D,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAClC,OAAO,EAAgB,OAAO,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Generator.js","sourceRoot":"","sources":["../../src/rng/Generator.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Generator.stub.js","sourceRoot":"","sources":["../../src/rng/Generator.stub.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAG3C,MAAM,UAAU,mBAAmB,CAAC,KAA8B;IAChE,OAAO;QACL,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK;QACrD,QAAQ,EAAE,GAAG,EAAE,CAAC,IAAI;KACrB,CAAA;AACH,CAAC"}
|
package/dist/rng/Rng.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { Range } from "../Range.js";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
import { type Generator } from "./Generator.js";
|
|
3
|
+
export type RngState<TGeneratorState> = {
|
|
4
|
+
generatorState: TGeneratorState;
|
|
5
|
+
spareNormal: number | null;
|
|
6
|
+
};
|
|
7
|
+
export type Rng<TGeneratorState = unknown> = {
|
|
7
8
|
/**
|
|
8
9
|
* Generates a random number based on the given Range.
|
|
9
10
|
* It will output an int given an int Range, or a float given a float Range.
|
|
@@ -36,11 +37,19 @@ export type Rng = {
|
|
|
36
37
|
* The std is the spread of the distribution (default: 1)
|
|
37
38
|
*/
|
|
38
39
|
normal: (mean?: number, std?: number) => number;
|
|
40
|
+
/**
|
|
41
|
+
* Returns the state required to resume the random sequence.
|
|
42
|
+
*/
|
|
43
|
+
getState: () => RngState<TGeneratorState>;
|
|
39
44
|
};
|
|
40
45
|
export declare const Rng: {
|
|
41
46
|
/**
|
|
42
47
|
* Creates a random number generator based on your generator of choice.
|
|
43
48
|
* @param generator The generator that returns numbers in the range [0, 1)
|
|
44
49
|
*/
|
|
45
|
-
create
|
|
50
|
+
create<TGeneratorState>(generator: Generator<TGeneratorState>): Rng<TGeneratorState>;
|
|
51
|
+
/**
|
|
52
|
+
* Restores a random number generator from previously captured state.
|
|
53
|
+
*/
|
|
54
|
+
fromState<TGeneratorState>(state: RngState<TGeneratorState>, createGenerator: (state: TGeneratorState) => Generator<TGeneratorState>): Rng<TGeneratorState>;
|
|
46
55
|
};
|
package/dist/rng/Rng.js
CHANGED
|
@@ -8,74 +8,90 @@ export const Rng = {
|
|
|
8
8
|
* Creates a random number generator based on your generator of choice.
|
|
9
9
|
* @param generator The generator that returns numbers in the range [0, 1)
|
|
10
10
|
*/
|
|
11
|
-
create
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
// We +1 the max because float is exclusive of the max, but for int we want the range to be inclusive.
|
|
31
|
-
// We floor before the addition, because the addition can lose precision and generate numbers that are out of bounds when float ~= 1.
|
|
32
|
-
// We don't use Math.floor(float(rangeWithMaxPlus1)) for the same reason
|
|
33
|
-
return range.min + Math.floor(float() * (range.max + intBoundsOffset[range.maxBoundType] - range.min));
|
|
11
|
+
create(generator) {
|
|
12
|
+
return createRng(generator, null);
|
|
13
|
+
},
|
|
14
|
+
/**
|
|
15
|
+
* Restores a random number generator from previously captured state.
|
|
16
|
+
*/
|
|
17
|
+
fromState(state, createGenerator) {
|
|
18
|
+
return createRng(createGenerator(state.generatorState), state.spareNormal);
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
function createRng(generator, initialSpareNormal) {
|
|
22
|
+
function random(range) {
|
|
23
|
+
switch (range.numericType) {
|
|
24
|
+
case "float":
|
|
25
|
+
// oxlint-disable-next-line typescript/no-unsafe-type-assertion -- The fact we have to cast like this sucks a little bit, we'll see if we have to do this often or not.
|
|
26
|
+
return float(range);
|
|
27
|
+
case "integer":
|
|
28
|
+
// oxlint-disable-next-line typescript/no-unsafe-type-assertion -- The fact we have to cast like this sucks a little bit, we'll see if we have to do this often or not.
|
|
29
|
+
return int(range);
|
|
34
30
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
for (let i = values.length - 1; i > 0; i--) {
|
|
40
|
-
const j = Math.floor(generator() * (i + 1));
|
|
41
|
-
[values[i], values[j]] = [values[j], values[i]];
|
|
42
|
-
}
|
|
43
|
-
return values;
|
|
31
|
+
}
|
|
32
|
+
function float(range) {
|
|
33
|
+
if (range === undefined) {
|
|
34
|
+
return generator.next();
|
|
44
35
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
36
|
+
// Because of floating point errors, this is inclusive when min > 1, but that's statistically insignificant.
|
|
37
|
+
return range.min + generator.next() * (range.max - range.min);
|
|
38
|
+
}
|
|
39
|
+
function int(range) {
|
|
40
|
+
// We +1 the max because float is exclusive of the max, but for int we want the range to be inclusive.
|
|
41
|
+
// We floor before the addition, because the addition can lose precision and generate numbers that are out of bounds when float ~= 1.
|
|
42
|
+
// We don't use Math.floor(float(rangeWithMaxPlus1)) for the same reason
|
|
43
|
+
return range.min + Math.floor(float() * (range.max + intBoundsOffset[range.maxBoundType] - range.min));
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Fisher-Yates shuffle in place.
|
|
47
|
+
*/
|
|
48
|
+
function shuffle(values) {
|
|
49
|
+
for (let i = values.length - 1; i > 0; i--) {
|
|
50
|
+
const j = Math.floor(generator.next() * (i + 1));
|
|
51
|
+
[values[i], values[j]] = [values[j], values[i]];
|
|
51
52
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
const
|
|
68
|
-
spareNormal =
|
|
69
|
-
return mean + std *
|
|
53
|
+
return values;
|
|
54
|
+
}
|
|
55
|
+
function draw(values, count) {
|
|
56
|
+
const shuffled = shuffle(values.slice());
|
|
57
|
+
return {
|
|
58
|
+
drawn: shuffled,
|
|
59
|
+
remaining: shuffled.splice(count),
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* box-muller outputs 2 numbers, so we keep the extra value that we can return instead of recomputing
|
|
64
|
+
*/
|
|
65
|
+
let spareNormal = initialSpareNormal;
|
|
66
|
+
function normal(mean = 0, std = 1) {
|
|
67
|
+
if (spareNormal !== null) {
|
|
68
|
+
const value = spareNormal;
|
|
69
|
+
spareNormal = null;
|
|
70
|
+
return mean + std * value;
|
|
70
71
|
}
|
|
72
|
+
// u1 must be non-zero
|
|
73
|
+
let u1;
|
|
74
|
+
do {
|
|
75
|
+
u1 = generator.next();
|
|
76
|
+
} while (u1 === 0);
|
|
77
|
+
const { z1, z2 } = boxMullerSample(u1, generator.next());
|
|
78
|
+
spareNormal = z1;
|
|
79
|
+
return mean + std * z2;
|
|
80
|
+
}
|
|
81
|
+
function getState() {
|
|
71
82
|
return {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
int,
|
|
75
|
-
shuffle,
|
|
76
|
-
draw,
|
|
77
|
-
normal,
|
|
83
|
+
generatorState: generator.getState(),
|
|
84
|
+
spareNormal,
|
|
78
85
|
};
|
|
79
|
-
}
|
|
80
|
-
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
random,
|
|
89
|
+
float,
|
|
90
|
+
int,
|
|
91
|
+
shuffle,
|
|
92
|
+
draw,
|
|
93
|
+
normal,
|
|
94
|
+
getState,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
81
97
|
//# sourceMappingURL=Rng.js.map
|
package/dist/rng/Rng.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Rng.js","sourceRoot":"","sources":["../../src/rng/Rng.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"Rng.js","sourceRoot":"","sources":["../../src/rng/Rng.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Generator } from "./Generator.js";
|
|
2
2
|
/**
|
|
3
3
|
* Creates a deterministic pseudo-random number generator based on a 32-bit integer seed using the mulberry32 algorithm.
|
|
4
4
|
*
|
|
5
5
|
* It generates floats in the range [0, 1)
|
|
6
6
|
*/
|
|
7
|
-
export declare function mulberry32Prng(seed: number): Generator
|
|
7
|
+
export declare function mulberry32Prng(seed: number): Generator<number>;
|
|
@@ -5,12 +5,15 @@
|
|
|
5
5
|
*/
|
|
6
6
|
export function mulberry32Prng(seed) {
|
|
7
7
|
let state = seed >>> 0;
|
|
8
|
-
return
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
return {
|
|
9
|
+
next: () => {
|
|
10
|
+
state = (state + 0x6d2b79f5) >>> 0;
|
|
11
|
+
let next = state;
|
|
12
|
+
next = Math.imul(next ^ (next >>> 15), next | 1);
|
|
13
|
+
next ^= next + Math.imul(next ^ (next >>> 7), next | 61);
|
|
14
|
+
return ((next ^ (next >>> 14)) >>> 0) / 4_294_967_296;
|
|
15
|
+
},
|
|
16
|
+
getState: () => state,
|
|
14
17
|
};
|
|
15
18
|
}
|
|
16
19
|
//# sourceMappingURL=mulberry32prng.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mulberry32prng.js","sourceRoot":"","sources":["../../src/rng/mulberry32prng.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,CAAA;IAEtB,OAAO,GAAG,EAAE;
|
|
1
|
+
{"version":3,"file":"mulberry32prng.js","sourceRoot":"","sources":["../../src/rng/mulberry32prng.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,CAAA;IAEtB,OAAO;QACL,IAAI,EAAE,GAAG,EAAE;YACT,KAAK,GAAG,CAAC,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;YAElC,IAAI,IAAI,GAAG,KAAK,CAAA;YAChB,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,CAAA;YAChD,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,EAAE,CAAC,CAAA;YAExD,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,aAAa,CAAA;QACvD,CAAC;QACD,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK;KACtB,CAAA;AACH,CAAC"}
|