@guillaume-docquier/tools-ts 6.3.4 → 6.4.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.
@@ -0,0 +1,9 @@
1
+ /**
2
+ * box-muller basic form implementation: https://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform
3
+ *
4
+ * u1 must be non-zero
5
+ */
6
+ export declare function boxMullerSample(u1: number, u2: number): {
7
+ z1: number;
8
+ z2: number;
9
+ };
@@ -0,0 +1,21 @@
1
+ /**
2
+ * box-muller basic form implementation: https://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform
3
+ *
4
+ * u1 must be non-zero
5
+ */
6
+ export function boxMullerSample(u1, u2) {
7
+ // z1 = Rcos(theta)
8
+ // z2 = Rsin(theta)
9
+ //
10
+ // where
11
+ //
12
+ // R^2 = -2 * ln(u1)
13
+ // theta = 2 * PI * u2
14
+ const R = Math.sqrt(-2 * Math.log(u1));
15
+ const theta = 2 * Math.PI * u2;
16
+ return {
17
+ z1: R * Math.cos(theta),
18
+ z2: R * Math.sin(theta),
19
+ };
20
+ }
21
+ //# sourceMappingURL=boxMullerSample.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"boxMullerSample.js","sourceRoot":"","sources":["../../src/rng/boxMullerSample.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,EAAU,EAAE,EAAU;IACpD,mBAAmB;IACnB,mBAAmB;IACnB,EAAE;IACF,QAAQ;IACR,EAAE;IACF,oBAAoB;IACpB,sBAAsB;IACtB,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAA;IACtC,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IAE9B,OAAO;QACL,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;QACvB,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;KACxB,CAAA;AACH,CAAC"}
package/dist/rng/rng.d.ts CHANGED
@@ -29,6 +29,13 @@ export type Rng = {
29
29
  drawn: T[];
30
30
  remaining: T[];
31
31
  };
32
+ /**
33
+ * Returns a random number from a normal distribution.
34
+ *
35
+ * The mean is the center of the distribution (default: 0)
36
+ * The std is the spread of the distribution (default: 1)
37
+ */
38
+ normal: (mean?: number, std?: number) => number;
32
39
  };
33
40
  /**
34
41
  * Creates a random number generator based on your generator of choice.
package/dist/rng/rng.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { boxMullerSample } from "./boxMullerSample.js";
1
2
  const intBoundsOffset = {
2
3
  inclusive: 1,
3
4
  exclusive: 0,
@@ -47,12 +48,32 @@ export function createRng(generator) {
47
48
  remaining: shuffled.splice(count),
48
49
  };
49
50
  }
51
+ /**
52
+ * box-muller outputs 2 numbers, so we keep the extra value that we can return instead of recomputing
53
+ */
54
+ let spareNormal;
55
+ function normal(mean = 0, std = 1) {
56
+ if (spareNormal !== undefined) {
57
+ const value = spareNormal;
58
+ spareNormal = undefined;
59
+ return value;
60
+ }
61
+ // u1 must be non-zero
62
+ let u1;
63
+ do {
64
+ u1 = generator();
65
+ } while (u1 === 0);
66
+ const { z1, z2 } = boxMullerSample(u1, generator());
67
+ spareNormal = mean + std * z1;
68
+ return mean + std * z2;
69
+ }
50
70
  return {
51
71
  random,
52
72
  float,
53
73
  int,
54
74
  shuffle,
55
75
  draw,
76
+ normal,
56
77
  };
57
78
  }
58
79
  //# sourceMappingURL=rng.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"rng.js","sourceRoot":"","sources":["../../src/rng/rng.ts"],"names":[],"mappings":"AAoCA,MAAM,eAAe,GAAG;IACtB,SAAS,EAAE,CAAC;IACZ,SAAS,EAAE,CAAC;CAC4C,CAAA;AAE1D;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,SAAoB;IAC5C,SAAS,MAAM,CAAC,KAAY;QAC1B,QAAQ,KAAK,CAAC,WAAW,EAAE,CAAC;YAC1B,KAAK,OAAO;gBACV,uKAAuK;gBACvK,OAAO,KAAK,CAAC,KAAwC,CAAC,CAAA;YACxD,KAAK,SAAS;gBACZ,uKAAuK;gBACvK,OAAO,GAAG,CAAC,KAAwC,CAAC,CAAA;QACxD,CAAC;IACH,CAAC;IAED,SAAS,KAAK,CAAC,KAAsB;QACnC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,SAAS,EAAE,CAAA;QACpB,CAAC;QAED,4GAA4G;QAC5G,OAAO,KAAK,CAAC,GAAG,GAAG,SAAS,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;IAC1D,CAAC;IAED,SAAS,GAAG,CAAC,KAAuB;QAClC,sGAAsG;QACtG,qIAAqI;QACrI,wEAAwE;QACxE,OAAO,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,eAAe,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;IACxG,CAAC;IAED;;OAEG;IACH,SAAS,OAAO,CAAI,MAA0B;QAC5C,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAC1C;YAAA,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QAClD,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAED,SAAS,IAAI,CAAI,MAAkC,EAAE,KAAa;QAChE,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;QAExC,OAAO;YACL,KAAK,EAAE,QAAQ;YACf,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;SAClC,CAAA;IACH,CAAC;IAED,OAAO;QACL,MAAM;QACN,KAAK;QACL,GAAG;QACH,OAAO;QACP,IAAI;KACL,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"rng.js","sourceRoot":"","sources":["../../src/rng/rng.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@guillaume-docquier/tools-ts",
3
- "version": "6.3.4",
3
+ "version": "6.4.0",
4
4
  "description": "My personal collection of typescript tools",
5
5
  "homepage": "https://github.com/Guillaume-Docquier/tools-ts",
6
6
  "license": "MIT",
@@ -24,12 +24,12 @@
24
24
  "provenance": true
25
25
  },
26
26
  "dependencies": {
27
- "@logtape/logtape": "^2.2.4",
28
- "@logtape/redaction": "^2.2.4"
27
+ "@logtape/logtape": "^2.3.0",
28
+ "@logtape/redaction": "^2.3.0"
29
29
  },
30
30
  "devDependencies": {
31
- "@guillaume-docquier/oxfmt": "^1.0.4",
32
- "@guillaume-docquier/oxlint": "^1.2.2",
31
+ "@guillaume-docquier/oxfmt": "^1.0.5",
32
+ "@guillaume-docquier/oxlint": "^1.2.3",
33
33
  "@semantic-release/commit-analyzer": "^13.0.1",
34
34
  "@semantic-release/exec": "^7.1.0",
35
35
  "@semantic-release/github": "^12.0.9",
@@ -40,12 +40,12 @@
40
40
  "husky": "^9.1.7",
41
41
  "jiti": "^2.7.0",
42
42
  "lint-staged": "^16.4.0",
43
- "oxfmt": ">=0.60.0",
44
- "oxlint": "^1.75.0",
43
+ "oxfmt": ">=0.61.0",
44
+ "oxlint": "^1.76.0",
45
45
  "oxlint-tsgolint": "^7.0.2001",
46
46
  "semantic-release": "^25.0.8",
47
47
  "typescript": "~7.0.2",
48
- "vite": "^8.1.5",
48
+ "vite": "^8.2.0",
49
49
  "vitest": "^4.1.10",
50
50
  "node": "runtime:26.5.0"
51
51
  },
@@ -59,7 +59,7 @@
59
59
  "devEngines": {
60
60
  "packageManager": {
61
61
  "name": "pnpm",
62
- "version": "11.11.0",
62
+ "version": "11.20.0",
63
63
  "onFail": "download"
64
64
  },
65
65
  "runtime": {