@fuzdev/fuz_util 0.42.0 → 0.44.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/LICENSE +1 -1
- package/README.md +19 -12
- package/dist/async.d.ts +2 -2
- package/dist/async.d.ts.map +1 -1
- package/dist/async.js +2 -2
- package/dist/benchmark.d.ts +179 -0
- package/dist/benchmark.d.ts.map +1 -0
- package/dist/benchmark.js +400 -0
- package/dist/benchmark_baseline.d.ts +195 -0
- package/dist/benchmark_baseline.d.ts.map +1 -0
- package/dist/benchmark_baseline.js +388 -0
- package/dist/benchmark_format.d.ts +87 -0
- package/dist/benchmark_format.d.ts.map +1 -0
- package/dist/benchmark_format.js +266 -0
- package/dist/benchmark_stats.d.ts +112 -0
- package/dist/benchmark_stats.d.ts.map +1 -0
- package/dist/benchmark_stats.js +219 -0
- package/dist/benchmark_types.d.ts +174 -0
- package/dist/benchmark_types.d.ts.map +1 -0
- package/dist/benchmark_types.js +1 -0
- package/dist/git.d.ts +12 -0
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +14 -0
- package/dist/library_json.d.ts +3 -3
- package/dist/library_json.d.ts.map +1 -1
- package/dist/library_json.js +1 -1
- package/dist/maths.d.ts +4 -0
- package/dist/maths.d.ts.map +1 -1
- package/dist/maths.js +8 -0
- package/dist/object.js +1 -1
- package/dist/source_json.d.ts +4 -4
- package/dist/stats.d.ts +180 -0
- package/dist/stats.d.ts.map +1 -0
- package/dist/stats.js +402 -0
- package/dist/string.d.ts +13 -0
- package/dist/string.d.ts.map +1 -1
- package/dist/string.js +58 -0
- package/dist/time.d.ts +165 -0
- package/dist/time.d.ts.map +1 -0
- package/dist/time.js +264 -0
- package/dist/timings.d.ts +1 -7
- package/dist/timings.d.ts.map +1 -1
- package/dist/timings.js +16 -16
- package/package.json +21 -19
- package/src/lib/async.ts +3 -3
- package/src/lib/benchmark.ts +498 -0
- package/src/lib/benchmark_baseline.ts +538 -0
- package/src/lib/benchmark_format.ts +314 -0
- package/src/lib/benchmark_stats.ts +311 -0
- package/src/lib/benchmark_types.ts +197 -0
- package/src/lib/git.ts +24 -0
- package/src/lib/library_json.ts +3 -3
- package/src/lib/maths.ts +8 -0
- package/src/lib/object.ts +1 -1
- package/src/lib/stats.ts +534 -0
- package/src/lib/string.ts +66 -0
- package/src/lib/time.ts +319 -0
- package/src/lib/timings.ts +17 -17
- package/src/lib/types.ts +2 -2
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
import type { BenchmarkStats } from './benchmark_stats.js';
|
|
2
|
+
import type { Timer } from './time.js';
|
|
3
|
+
/**
|
|
4
|
+
* Configuration options for a benchmark suite.
|
|
5
|
+
*/
|
|
6
|
+
export interface BenchmarkConfig {
|
|
7
|
+
/**
|
|
8
|
+
* Target duration to run each benchmark task in milliseconds.
|
|
9
|
+
* The benchmark will run until this duration is reached or max_iterations is hit.
|
|
10
|
+
* Default: 1000ms
|
|
11
|
+
*/
|
|
12
|
+
duration_ms?: number;
|
|
13
|
+
/**
|
|
14
|
+
* Number of warmup iterations before actual measurements.
|
|
15
|
+
* Warmup helps stabilize JIT compilation and caches.
|
|
16
|
+
* Default: 5
|
|
17
|
+
*/
|
|
18
|
+
warmup_iterations?: number;
|
|
19
|
+
/**
|
|
20
|
+
* Cooldown time between tasks in milliseconds.
|
|
21
|
+
* Helps prevent interference between benchmarks.
|
|
22
|
+
* Default: 100ms
|
|
23
|
+
*/
|
|
24
|
+
cooldown_ms?: number;
|
|
25
|
+
/**
|
|
26
|
+
* Minimum number of iterations to run.
|
|
27
|
+
* Default: 10
|
|
28
|
+
*/
|
|
29
|
+
min_iterations?: number;
|
|
30
|
+
/**
|
|
31
|
+
* Maximum number of iterations to run.
|
|
32
|
+
* Prevents infinite loops if function is extremely fast.
|
|
33
|
+
* Default: 100000
|
|
34
|
+
*/
|
|
35
|
+
max_iterations?: number;
|
|
36
|
+
/**
|
|
37
|
+
* Custom timer to use for measurements.
|
|
38
|
+
* Default: timer_default (auto-detects environment)
|
|
39
|
+
*/
|
|
40
|
+
timer?: Timer;
|
|
41
|
+
/**
|
|
42
|
+
* Callback invoked after each iteration completes.
|
|
43
|
+
* Useful for triggering garbage collection, logging progress, early termination,
|
|
44
|
+
* or custom instrumentation.
|
|
45
|
+
*
|
|
46
|
+
* **Note**: The callback time is NOT included in iteration measurements - it runs
|
|
47
|
+
* after the timing capture. However, frequent GC calls will slow overall benchmark
|
|
48
|
+
* execution time.
|
|
49
|
+
*
|
|
50
|
+
* @param task_name - Name of the current task being benchmarked
|
|
51
|
+
* @param iteration - Current iteration number (1-indexed)
|
|
52
|
+
* @param abort - Call to stop the benchmark early for this task
|
|
53
|
+
*
|
|
54
|
+
* @example
|
|
55
|
+
* ```ts
|
|
56
|
+
* // Trigger GC between iterations (run node with --expose-gc)
|
|
57
|
+
* new Benchmark({
|
|
58
|
+
* on_iteration: () => {
|
|
59
|
+
* if (globalThis.gc) globalThis.gc();
|
|
60
|
+
* }
|
|
61
|
+
* })
|
|
62
|
+
*
|
|
63
|
+
* // Log progress for long-running benchmarks
|
|
64
|
+
* new Benchmark({
|
|
65
|
+
* on_iteration: (name, iteration) => {
|
|
66
|
+
* if (iteration % 1000 === 0) {
|
|
67
|
+
* console.log(`${name}: ${iteration} iterations`);
|
|
68
|
+
* }
|
|
69
|
+
* }
|
|
70
|
+
* })
|
|
71
|
+
*
|
|
72
|
+
* // Stop early when converged
|
|
73
|
+
* new Benchmark({
|
|
74
|
+
* on_iteration: (name, iteration, abort) => {
|
|
75
|
+
* if (iteration > 1000 && has_stabilized()) abort();
|
|
76
|
+
* }
|
|
77
|
+
* })
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
on_iteration?: (task_name: string, iteration: number, abort: () => void) => void;
|
|
81
|
+
/**
|
|
82
|
+
* Callback invoked after each task completes.
|
|
83
|
+
* Useful for logging progress during long benchmark runs.
|
|
84
|
+
*
|
|
85
|
+
* @param result - The completed benchmark result
|
|
86
|
+
* @param index - Zero-based index of the completed task
|
|
87
|
+
* @param total - Total number of tasks to run
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```ts
|
|
91
|
+
* new Benchmark({
|
|
92
|
+
* on_task_complete: (result, index, total) => {
|
|
93
|
+
* console.log(`[${index + 1}/${total}] ${result.name}: ${result.stats.ops_per_second.toFixed(0)} ops/sec`);
|
|
94
|
+
* }
|
|
95
|
+
* })
|
|
96
|
+
* ```
|
|
97
|
+
*/
|
|
98
|
+
on_task_complete?: (result: BenchmarkResult, index: number, total: number) => void;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* A benchmark task to execute.
|
|
102
|
+
*/
|
|
103
|
+
export interface BenchmarkTask {
|
|
104
|
+
/** Name of the task (for display) */
|
|
105
|
+
name: string;
|
|
106
|
+
/** Function to benchmark (sync or async). Return values are ignored. */
|
|
107
|
+
fn: () => unknown;
|
|
108
|
+
/**
|
|
109
|
+
* Optional setup function run before benchmarking this task.
|
|
110
|
+
* Not included in timing measurements.
|
|
111
|
+
*/
|
|
112
|
+
setup?: () => void | Promise<void>;
|
|
113
|
+
/**
|
|
114
|
+
* Optional teardown function run after benchmarking this task.
|
|
115
|
+
* Not included in timing measurements.
|
|
116
|
+
*/
|
|
117
|
+
teardown?: () => void | Promise<void>;
|
|
118
|
+
/**
|
|
119
|
+
* If true, skip this task during benchmark runs.
|
|
120
|
+
* Useful for temporarily disabling tasks during development.
|
|
121
|
+
*/
|
|
122
|
+
skip?: boolean;
|
|
123
|
+
/**
|
|
124
|
+
* If true, run only this task (and other tasks marked `only`).
|
|
125
|
+
* Useful for focusing on specific tasks during development.
|
|
126
|
+
*/
|
|
127
|
+
only?: boolean;
|
|
128
|
+
/**
|
|
129
|
+
* Hint for whether the function is sync or async.
|
|
130
|
+
* If not provided, automatically detected during warmup.
|
|
131
|
+
* Setting this explicitly skips per-iteration promise checking for sync functions.
|
|
132
|
+
*/
|
|
133
|
+
async?: boolean;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Result from running a single benchmark task.
|
|
137
|
+
*/
|
|
138
|
+
export interface BenchmarkResult {
|
|
139
|
+
/** Task name */
|
|
140
|
+
name: string;
|
|
141
|
+
/** Statistical analysis of the benchmark */
|
|
142
|
+
stats: BenchmarkStats;
|
|
143
|
+
/** Number of iterations executed */
|
|
144
|
+
iterations: number;
|
|
145
|
+
/** Total time spent benchmarking (including warmup) in milliseconds */
|
|
146
|
+
total_time_ms: number;
|
|
147
|
+
/**
|
|
148
|
+
* Raw timing data for each iteration in nanoseconds.
|
|
149
|
+
* Useful for custom statistical analysis, histogram generation,
|
|
150
|
+
* or exporting to external tools.
|
|
151
|
+
*/
|
|
152
|
+
timings_ns: Array<number>;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Options for table formatting.
|
|
156
|
+
*/
|
|
157
|
+
export interface BenchmarkFormatTableOptions {
|
|
158
|
+
/**
|
|
159
|
+
* Group results by category using filter functions.
|
|
160
|
+
*/
|
|
161
|
+
groups?: Array<BenchmarkGroup>;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* A group definition for organizing benchmark results.
|
|
165
|
+
*/
|
|
166
|
+
export interface BenchmarkGroup {
|
|
167
|
+
/** Display name for the group */
|
|
168
|
+
name: string;
|
|
169
|
+
/** Optional description shown below the group name */
|
|
170
|
+
description?: string;
|
|
171
|
+
/** Filter function to determine which results belong to this group */
|
|
172
|
+
filter: (result: BenchmarkResult) => boolean;
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=benchmark_types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"benchmark_types.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/benchmark_types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,sBAAsB,CAAC;AACzD,OAAO,KAAK,EAAC,KAAK,EAAC,MAAM,WAAW,CAAC;AAErC;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,KAAK,CAAC,EAAE,KAAK,CAAC;IAEd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsCG;IACH,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IAEjF;;;;;;;;;;;;;;;;OAgBG;IACH,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnF;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC7B,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IAEb,wEAAwE;IACxE,EAAE,EAAE,MAAM,OAAO,CAAC;IAElB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnC;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtC;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IAEf;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC/B,gBAAgB;IAChB,IAAI,EAAE,MAAM,CAAC;IAEb,4CAA4C;IAC5C,KAAK,EAAE,cAAc,CAAC;IAEtB,oCAAoC;IACpC,UAAU,EAAE,MAAM,CAAC;IAEnB,uEAAuE;IACvE,aAAa,EAAE,MAAM,CAAC;IAEtB;;;;OAIG;IACH,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC3C;;OAEG;IACH,MAAM,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IAEb,sDAAsD;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,sEAAsE;IACtE,MAAM,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,OAAO,CAAC;CAC7C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/git.d.ts
CHANGED
|
@@ -1,6 +1,18 @@
|
|
|
1
1
|
import type { SpawnOptions } from 'node:child_process';
|
|
2
2
|
import { z } from 'zod';
|
|
3
3
|
import type { Flavored } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Basic git repository info.
|
|
6
|
+
*/
|
|
7
|
+
export interface GitInfo {
|
|
8
|
+
commit: string | null;
|
|
9
|
+
branch: string | null;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Get basic git info (commit hash and branch name) without throwing.
|
|
13
|
+
* Returns null values if git commands fail (e.g., not in a git repo).
|
|
14
|
+
*/
|
|
15
|
+
export declare const git_info_get: (options?: SpawnOptions) => Promise<GitInfo>;
|
|
4
16
|
export declare const GitOrigin: z.ZodString;
|
|
5
17
|
export type GitOrigin = Flavored<string, 'GitOrigin'>;
|
|
6
18
|
export declare const GitBranch: z.ZodString;
|
package/dist/git.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/git.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/git.ts"],"names":[],"mappings":"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"}
|
package/dist/git.js
CHANGED
|
@@ -2,6 +2,20 @@ import { z } from 'zod';
|
|
|
2
2
|
import { spawn, spawn_out } from './process.js';
|
|
3
3
|
import { to_file_path } from './path.js';
|
|
4
4
|
import { fs_exists } from './fs.js';
|
|
5
|
+
/**
|
|
6
|
+
* Get basic git info (commit hash and branch name) without throwing.
|
|
7
|
+
* Returns null values if git commands fail (e.g., not in a git repo).
|
|
8
|
+
*/
|
|
9
|
+
export const git_info_get = async (options) => {
|
|
10
|
+
const [commit_result, branch_result] = await Promise.all([
|
|
11
|
+
spawn_out('git', ['rev-parse', 'HEAD'], options).catch(() => ({ stdout: null })),
|
|
12
|
+
spawn_out('git', ['rev-parse', '--abbrev-ref', 'HEAD'], options).catch(() => ({ stdout: null })),
|
|
13
|
+
]);
|
|
14
|
+
return {
|
|
15
|
+
commit: commit_result.stdout?.trim() || null,
|
|
16
|
+
branch: branch_result.stdout?.trim() || null,
|
|
17
|
+
};
|
|
18
|
+
};
|
|
5
19
|
export const GitOrigin = z.string();
|
|
6
20
|
export const GitBranch = z.string();
|
|
7
21
|
/**
|
package/dist/library_json.d.ts
CHANGED
|
@@ -10,11 +10,11 @@ import type { Url } from './url.js';
|
|
|
10
10
|
export interface LibraryJson {
|
|
11
11
|
package_json: PackageJson;
|
|
12
12
|
source_json: SourceJson;
|
|
13
|
-
/** Package name, e.g. `@
|
|
13
|
+
/** Package name, e.g. `@fuzdev/fuz_ui`. */
|
|
14
14
|
name: string;
|
|
15
15
|
/** Name without scope, e.g. `fuz`. */
|
|
16
16
|
repo_name: string;
|
|
17
|
-
/** GitHub repo URL, e.g. `https://github.com/
|
|
17
|
+
/** GitHub repo URL, e.g. `https://github.com/fuzdev/fuz_ui`. */
|
|
18
18
|
repo_url: Url;
|
|
19
19
|
/** GitHub user/org, e.g. `ryanatkn`. */
|
|
20
20
|
owner_name: string | null;
|
|
@@ -32,7 +32,7 @@ export interface LibraryJson {
|
|
|
32
32
|
*/
|
|
33
33
|
export declare const library_json_parse: (package_json: PackageJson, source_json: SourceJson) => LibraryJson;
|
|
34
34
|
/**
|
|
35
|
-
* Extracts repo name from a package name, e.g. `@
|
|
35
|
+
* Extracts repo name from a package name, e.g. `@fuzdev/fuz_ui` → `fuz`.
|
|
36
36
|
*/
|
|
37
37
|
export declare const library_repo_name_parse: (name: string) => string;
|
|
38
38
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"library_json.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/library_json.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAC,GAAG,EAAC,MAAM,UAAU,CAAC;AAElC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,YAAY,EAAE,WAAW,CAAC;IAC1B,WAAW,EAAE,UAAU,CAAC;IACxB,
|
|
1
|
+
{"version":3,"file":"library_json.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/library_json.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EAAC,GAAG,EAAC,MAAM,UAAU,CAAC;AAElC;;GAEG;AACH,MAAM,WAAW,WAAW;IAC3B,YAAY,EAAE,WAAW,CAAC;IAC1B,WAAW,EAAE,UAAU,CAAC;IACxB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,QAAQ,EAAE,GAAG,CAAC;IACd,wCAAwC;IACxC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,YAAY,EAAE,GAAG,GAAG,IAAI,CAAC;IACzB,6CAA6C;IAC7C,QAAQ,EAAE,GAAG,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,GAAG,GAAG,IAAI,CAAC;IACpB,aAAa,EAAE,GAAG,GAAG,IAAI,CAAC;IAC1B,sDAAsD;IACtD,SAAS,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAC9B,cAAc,WAAW,EACzB,aAAa,UAAU,KACrB,WAuDF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,uBAAuB,GAAI,MAAM,MAAM,KAAG,MAStD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAAI,SAAS,WAAW,KAAG,MAAM,GAAG,IAQrE,CAAC"}
|
package/dist/library_json.js
CHANGED
|
@@ -49,7 +49,7 @@ export const library_json_parse = (package_json, source_json) => {
|
|
|
49
49
|
};
|
|
50
50
|
};
|
|
51
51
|
/**
|
|
52
|
-
* Extracts repo name from a package name, e.g. `@
|
|
52
|
+
* Extracts repo name from a package name, e.g. `@fuzdev/fuz_ui` → `fuz`.
|
|
53
53
|
*/
|
|
54
54
|
export const library_repo_name_parse = (name) => {
|
|
55
55
|
if (name[0] === '@') {
|
package/dist/maths.d.ts
CHANGED
|
@@ -82,4 +82,8 @@ export declare const GR_9 = 76.01315561749645;
|
|
|
82
82
|
* golden ratio/mean constants, `1/(GR**9)`, useful for scaling: https://wikipedia.org/wiki/Golden_ratio
|
|
83
83
|
*/
|
|
84
84
|
export declare const GR_9i = 0.013155617496424835;
|
|
85
|
+
/**
|
|
86
|
+
* Format a number with fixed decimal places and thousands separators.
|
|
87
|
+
*/
|
|
88
|
+
export declare const format_number: (n: number, decimals?: number) => string;
|
|
85
89
|
//# sourceMappingURL=maths.d.ts.map
|
package/dist/maths.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"maths.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/maths.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,KAAG,MAC5B,CAAC;AAEjC;;GAEG;AACH,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,QAAQ,MAAM,KAAG,MAAuC,CAAC;AAEpG;;GAEG;AACH,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,EAAE,UAAU,MAAM,KAAG,MAGnD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,EAAE,oBAAoB,CAAC;AACpC;;GAEG;AACH,eAAO,MAAM,IAAI,qBAAqB,CAAC;AACvC;;GAEG;AACH,eAAO,MAAM,IAAI,oBAAoB,CAAC;AACtC;;GAEG;AACH,eAAO,MAAM,KAAK,sBAAsB,CAAC;AACzC;;GAEG;AACH,eAAO,MAAM,IAAI,mBAAmB,CAAC;AACrC;;GAEG;AACH,eAAO,MAAM,KAAK,qBAAqB,CAAC;AACxC;;GAEG;AACH,eAAO,MAAM,IAAI,oBAAoB,CAAC;AACtC;;GAEG;AACH,eAAO,MAAM,KAAK,sBAAsB,CAAC;AACzC;;GAEG;AACH,eAAO,MAAM,IAAI,qBAAqB,CAAC;AACvC;;GAEG;AACH,eAAO,MAAM,KAAK,sBAAsB,CAAC;AACzC;;GAEG;AACH,eAAO,MAAM,IAAI,qBAAqB,CAAC;AACvC;;GAEG;AACH,eAAO,MAAM,KAAK,qBAAqB,CAAC;AACxC;;GAEG;AACH,eAAO,MAAM,IAAI,oBAAoB,CAAC;AACtC;;GAEG;AACH,eAAO,MAAM,KAAK,sBAAsB,CAAC;AACzC;;GAEG;AACH,eAAO,MAAM,IAAI,qBAAqB,CAAC;AACvC;;GAEG;AACH,eAAO,MAAM,KAAK,sBAAsB,CAAC;AACzC;;GAEG;AACH,eAAO,MAAM,IAAI,oBAAoB,CAAC;AACtC;;GAEG;AACH,eAAO,MAAM,KAAK,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"maths.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/maths.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,EAAE,KAAK,MAAM,EAAE,KAAK,MAAM,KAAG,MAC5B,CAAC;AAEjC;;GAEG;AACH,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,QAAQ,MAAM,KAAG,MAAuC,CAAC;AAEpG;;GAEG;AACH,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,EAAE,UAAU,MAAM,KAAG,MAGnD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,EAAE,oBAAoB,CAAC;AACpC;;GAEG;AACH,eAAO,MAAM,IAAI,qBAAqB,CAAC;AACvC;;GAEG;AACH,eAAO,MAAM,IAAI,oBAAoB,CAAC;AACtC;;GAEG;AACH,eAAO,MAAM,KAAK,sBAAsB,CAAC;AACzC;;GAEG;AACH,eAAO,MAAM,IAAI,mBAAmB,CAAC;AACrC;;GAEG;AACH,eAAO,MAAM,KAAK,qBAAqB,CAAC;AACxC;;GAEG;AACH,eAAO,MAAM,IAAI,oBAAoB,CAAC;AACtC;;GAEG;AACH,eAAO,MAAM,KAAK,sBAAsB,CAAC;AACzC;;GAEG;AACH,eAAO,MAAM,IAAI,qBAAqB,CAAC;AACvC;;GAEG;AACH,eAAO,MAAM,KAAK,sBAAsB,CAAC;AACzC;;GAEG;AACH,eAAO,MAAM,IAAI,qBAAqB,CAAC;AACvC;;GAEG;AACH,eAAO,MAAM,KAAK,qBAAqB,CAAC;AACxC;;GAEG;AACH,eAAO,MAAM,IAAI,oBAAoB,CAAC;AACtC;;GAEG;AACH,eAAO,MAAM,KAAK,sBAAsB,CAAC;AACzC;;GAEG;AACH,eAAO,MAAM,IAAI,qBAAqB,CAAC;AACvC;;GAEG;AACH,eAAO,MAAM,KAAK,sBAAsB,CAAC;AACzC;;GAEG;AACH,eAAO,MAAM,IAAI,oBAAoB,CAAC;AACtC;;GAEG;AACH,eAAO,MAAM,KAAK,uBAAuB,CAAC;AAE1C;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,GAAG,MAAM,EAAE,WAAU,MAAU,KAAG,MAG/D,CAAC"}
|
package/dist/maths.js
CHANGED
|
@@ -85,3 +85,11 @@ export const GR_9 = 76.01315561749645;
|
|
|
85
85
|
* golden ratio/mean constants, `1/(GR**9)`, useful for scaling: https://wikipedia.org/wiki/Golden_ratio
|
|
86
86
|
*/
|
|
87
87
|
export const GR_9i = 0.013155617496424835;
|
|
88
|
+
/**
|
|
89
|
+
* Format a number with fixed decimal places and thousands separators.
|
|
90
|
+
*/
|
|
91
|
+
export const format_number = (n, decimals = 2) => {
|
|
92
|
+
if (!isFinite(n))
|
|
93
|
+
return String(n);
|
|
94
|
+
return n.toFixed(decimals).replace(/\B(?=(\d{3})+(?!\d))/g, ',');
|
|
95
|
+
};
|
package/dist/object.js
CHANGED
|
@@ -65,7 +65,7 @@ export const reorder = (obj, keys) => {
|
|
|
65
65
|
/**
|
|
66
66
|
* Frozen empty object with no properties, good for options default values.
|
|
67
67
|
*/
|
|
68
|
-
export const EMPTY_OBJECT = Object.freeze({});
|
|
68
|
+
export const EMPTY_OBJECT = Object.freeze({});
|
|
69
69
|
/**
|
|
70
70
|
* Performs a depth-first traversal of an object's enumerable properties,
|
|
71
71
|
* calling `cb` for every key and value with the current `obj` context.
|
package/dist/source_json.d.ts
CHANGED
|
@@ -13,8 +13,8 @@ import { z } from 'zod';
|
|
|
13
13
|
*/
|
|
14
14
|
export declare const DeclarationKind: z.ZodEnum<{
|
|
15
15
|
function: "function";
|
|
16
|
-
type: "type";
|
|
17
16
|
json: "json";
|
|
17
|
+
type: "type";
|
|
18
18
|
variable: "variable";
|
|
19
19
|
class: "class";
|
|
20
20
|
constructor: "constructor";
|
|
@@ -77,8 +77,8 @@ export declare const DeclarationJson: z.ZodObject<{
|
|
|
77
77
|
name: z.ZodString;
|
|
78
78
|
kind: z.ZodEnum<{
|
|
79
79
|
function: "function";
|
|
80
|
-
type: "type";
|
|
81
80
|
json: "json";
|
|
81
|
+
type: "type";
|
|
82
82
|
variable: "variable";
|
|
83
83
|
class: "class";
|
|
84
84
|
constructor: "constructor";
|
|
@@ -169,8 +169,8 @@ export declare const ModuleJson: z.ZodObject<{
|
|
|
169
169
|
name: z.ZodString;
|
|
170
170
|
kind: z.ZodEnum<{
|
|
171
171
|
function: "function";
|
|
172
|
-
type: "type";
|
|
173
172
|
json: "json";
|
|
173
|
+
type: "type";
|
|
174
174
|
variable: "variable";
|
|
175
175
|
class: "class";
|
|
176
176
|
constructor: "constructor";
|
|
@@ -271,8 +271,8 @@ export declare const SourceJson: z.ZodObject<{
|
|
|
271
271
|
name: z.ZodString;
|
|
272
272
|
kind: z.ZodEnum<{
|
|
273
273
|
function: "function";
|
|
274
|
-
type: "type";
|
|
275
274
|
json: "json";
|
|
275
|
+
type: "type";
|
|
276
276
|
variable: "variable";
|
|
277
277
|
class: "class";
|
|
278
278
|
constructor: "constructor";
|
package/dist/stats.d.ts
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Statistical analysis utilities.
|
|
3
|
+
* Pure functions with zero dependencies - can be used standalone for any data analysis.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Calculate the mean (average) of an array of numbers.
|
|
7
|
+
*/
|
|
8
|
+
export declare const stats_mean: (values: Array<number>) => number;
|
|
9
|
+
/**
|
|
10
|
+
* Calculate the median of an array of numbers.
|
|
11
|
+
*/
|
|
12
|
+
export declare const stats_median: (values: Array<number>) => number;
|
|
13
|
+
/**
|
|
14
|
+
* Calculate the standard deviation of an array of numbers.
|
|
15
|
+
* Uses population standard deviation (divides by n, not n-1).
|
|
16
|
+
* For benchmarks with many samples, this is typically appropriate.
|
|
17
|
+
*/
|
|
18
|
+
export declare const stats_std_dev: (values: Array<number>, mean?: number) => number;
|
|
19
|
+
/**
|
|
20
|
+
* Calculate the variance of an array of numbers.
|
|
21
|
+
*/
|
|
22
|
+
export declare const stats_variance: (values: Array<number>, mean?: number) => number;
|
|
23
|
+
/**
|
|
24
|
+
* Calculate a percentile of an array of numbers using linear interpolation.
|
|
25
|
+
* Uses the "R-7" method (default in R, NumPy, Excel) which interpolates between
|
|
26
|
+
* data points for more accurate percentile estimates, especially with smaller samples.
|
|
27
|
+
* @param values - Array of numbers
|
|
28
|
+
* @param p - Percentile (0-1, e.g., 0.95 for 95th percentile)
|
|
29
|
+
*/
|
|
30
|
+
export declare const stats_percentile: (values: Array<number>, p: number) => number;
|
|
31
|
+
/**
|
|
32
|
+
* Calculate the coefficient of variation (CV).
|
|
33
|
+
* CV = standard deviation / mean, expressed as a ratio.
|
|
34
|
+
* Useful for comparing relative variability between datasets.
|
|
35
|
+
*/
|
|
36
|
+
export declare const stats_cv: (mean: number, std_dev: number) => number;
|
|
37
|
+
/**
|
|
38
|
+
* Calculate min and max values.
|
|
39
|
+
*/
|
|
40
|
+
export declare const stats_min_max: (values: Array<number>) => {
|
|
41
|
+
min: number;
|
|
42
|
+
max: number;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Result from outlier detection.
|
|
46
|
+
*/
|
|
47
|
+
export interface StatsOutlierResult {
|
|
48
|
+
/** Values after removing outliers */
|
|
49
|
+
cleaned: Array<number>;
|
|
50
|
+
/** Detected outlier values */
|
|
51
|
+
outliers: Array<number>;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Configuration options for IQR outlier detection.
|
|
55
|
+
*/
|
|
56
|
+
export interface StatsOutliersIqrOptions {
|
|
57
|
+
/** Multiplier for IQR bounds (default: 1.5) */
|
|
58
|
+
iqr_multiplier?: number;
|
|
59
|
+
/** Minimum sample size to perform outlier detection (default: 3) */
|
|
60
|
+
min_sample_size?: number;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Detect outliers using the IQR (Interquartile Range) method.
|
|
64
|
+
* Values outside [Q1 - multiplier*IQR, Q3 + multiplier*IQR] are considered outliers.
|
|
65
|
+
*/
|
|
66
|
+
export declare const stats_outliers_iqr: (values: Array<number>, options?: StatsOutliersIqrOptions) => StatsOutlierResult;
|
|
67
|
+
/**
|
|
68
|
+
* Configuration options for MAD outlier detection.
|
|
69
|
+
*/
|
|
70
|
+
export interface StatsOutliersMadOptions {
|
|
71
|
+
/** Modified Z-score threshold for outlier detection (default: 3.5) */
|
|
72
|
+
z_score_threshold?: number;
|
|
73
|
+
/** Extreme Z-score threshold when too many outliers detected (default: 5.0) */
|
|
74
|
+
z_score_extreme?: number;
|
|
75
|
+
/** MAD constant for normal distribution (default: 0.6745) */
|
|
76
|
+
mad_constant?: number;
|
|
77
|
+
/** Ratio threshold to switch to extreme mode (default: 0.3) */
|
|
78
|
+
outlier_ratio_high?: number;
|
|
79
|
+
/** Ratio threshold to switch to keep-closest mode (default: 0.4) */
|
|
80
|
+
outlier_ratio_extreme?: number;
|
|
81
|
+
/** Ratio of values to keep in keep-closest mode (default: 0.8) */
|
|
82
|
+
outlier_keep_ratio?: number;
|
|
83
|
+
/** Minimum sample size to perform outlier detection (default: 3) */
|
|
84
|
+
min_sample_size?: number;
|
|
85
|
+
/** Options to pass to IQR fallback when MAD is zero */
|
|
86
|
+
iqr_options?: StatsOutliersIqrOptions;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Detect outliers using the MAD (Median Absolute Deviation) method.
|
|
90
|
+
* More robust than IQR for skewed distributions.
|
|
91
|
+
* Uses modified Z-score: |0.6745 * (x - median) / MAD|
|
|
92
|
+
* Values with modified Z-score > threshold are considered outliers.
|
|
93
|
+
*/
|
|
94
|
+
export declare const stats_outliers_mad: (values: Array<number>, options?: StatsOutliersMadOptions) => StatsOutlierResult;
|
|
95
|
+
/**
|
|
96
|
+
* Common z-scores for confidence intervals.
|
|
97
|
+
*/
|
|
98
|
+
export declare const STATS_CONFIDENCE_Z_SCORES: Record<number, number>;
|
|
99
|
+
/**
|
|
100
|
+
* Convert a confidence level (0-1) to a z-score.
|
|
101
|
+
* Uses a lookup table for common values, approximates others.
|
|
102
|
+
*
|
|
103
|
+
* @example
|
|
104
|
+
* ```ts
|
|
105
|
+
* stats_confidence_level_to_z_score(0.95); // 1.96
|
|
106
|
+
* stats_confidence_level_to_z_score(0.99); // 2.576
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
export declare const stats_confidence_level_to_z_score: (level: number) => number;
|
|
110
|
+
/**
|
|
111
|
+
* Configuration options for confidence interval calculation.
|
|
112
|
+
*/
|
|
113
|
+
export interface StatsConfidenceIntervalOptions {
|
|
114
|
+
/** Z-score for confidence level (default: 1.96 for 95% CI) */
|
|
115
|
+
z_score?: number;
|
|
116
|
+
/** Confidence level (0-1), alternative to z_score. If both provided, z_score takes precedence. */
|
|
117
|
+
confidence_level?: number;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Calculate confidence interval for the mean.
|
|
121
|
+
* @param values - Array of numbers
|
|
122
|
+
* @param options - Configuration options
|
|
123
|
+
* @returns [lower_bound, upper_bound]
|
|
124
|
+
*/
|
|
125
|
+
export declare const stats_confidence_interval: (values: Array<number>, options?: StatsConfidenceIntervalOptions) => [number, number];
|
|
126
|
+
/**
|
|
127
|
+
* Calculate confidence interval from summary statistics (mean, std_dev, sample_size).
|
|
128
|
+
* Useful when raw data is not available.
|
|
129
|
+
* @param mean - Mean of the data
|
|
130
|
+
* @param std_dev - Standard deviation of the data
|
|
131
|
+
* @param sample_size - Number of samples
|
|
132
|
+
* @param options - Configuration options
|
|
133
|
+
* @returns [lower_bound, upper_bound]
|
|
134
|
+
*/
|
|
135
|
+
export declare const stats_confidence_interval_from_summary: (mean: number, std_dev: number, sample_size: number, options?: StatsConfidenceIntervalOptions) => [number, number];
|
|
136
|
+
/**
|
|
137
|
+
* Result from Welch's t-test calculation.
|
|
138
|
+
*/
|
|
139
|
+
export interface StatsWelchTTestResult {
|
|
140
|
+
/** The t-statistic */
|
|
141
|
+
t_statistic: number;
|
|
142
|
+
/** Welch-Satterthwaite degrees of freedom */
|
|
143
|
+
degrees_of_freedom: number;
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Calculate Welch's t-test statistic and degrees of freedom.
|
|
147
|
+
* Welch's t-test is more robust than Student's t-test when variances are unequal.
|
|
148
|
+
*
|
|
149
|
+
* @param mean1 - Mean of first sample
|
|
150
|
+
* @param std1 - Standard deviation of first sample
|
|
151
|
+
* @param n1 - Size of first sample
|
|
152
|
+
* @param mean2 - Mean of second sample
|
|
153
|
+
* @param std2 - Standard deviation of second sample
|
|
154
|
+
* @param n2 - Size of second sample
|
|
155
|
+
*/
|
|
156
|
+
export declare const stats_welch_t_test: (mean1: number, std1: number, n1: number, mean2: number, std2: number, n2: number) => StatsWelchTTestResult;
|
|
157
|
+
/**
|
|
158
|
+
* Standard normal CDF approximation (Abramowitz and Stegun formula 7.1.26).
|
|
159
|
+
*/
|
|
160
|
+
export declare const stats_normal_cdf: (x: number) => number;
|
|
161
|
+
/**
|
|
162
|
+
* Log gamma function approximation (Lanczos approximation).
|
|
163
|
+
*/
|
|
164
|
+
export declare const stats_ln_gamma: (z: number) => number;
|
|
165
|
+
/**
|
|
166
|
+
* Approximate regularized incomplete beta function for p-value calculation.
|
|
167
|
+
* Uses continued fraction expansion for reasonable accuracy.
|
|
168
|
+
*/
|
|
169
|
+
export declare const stats_incomplete_beta: (x: number, a: number, b: number) => number;
|
|
170
|
+
/**
|
|
171
|
+
* Approximate two-tailed p-value from t-distribution.
|
|
172
|
+
* For large df (>100), uses normal approximation.
|
|
173
|
+
* For smaller df, uses incomplete beta function.
|
|
174
|
+
*
|
|
175
|
+
* @param t - Absolute value of t-statistic
|
|
176
|
+
* @param df - Degrees of freedom
|
|
177
|
+
* @returns Two-tailed p-value
|
|
178
|
+
*/
|
|
179
|
+
export declare const stats_t_distribution_p_value: (t: number, df: number) => number;
|
|
180
|
+
//# sourceMappingURL=stats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"../src/lib/","sources":["../src/lib/stats.ts"],"names":[],"mappings":"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"}
|