@nirs4all/methods 1.0.17 → 1.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 +37 -2
- package/dist/estimatorRoles.d.ts +139 -0
- package/dist/estimatorRoles.js +531 -0
- package/dist/estimatorRolesGenerated.d.ts +4711 -0
- package/dist/estimatorRolesGenerated.js +3825 -0
- package/dist/index.d.ts +8 -1
- package/dist/index.js +8 -1
- package/dist/methodResult.d.ts +2 -0
- package/dist/methodResult.js +33 -1
- package/dist/model.d.ts +29 -1
- package/dist/model.js +69 -3
- package/dist/n4m.js +1 -1
- package/dist/n4m.wasm +0 -0
- package/dist/nativeAugmentation.d.ts +29 -0
- package/dist/nativeAugmentation.js +49 -0
- package/dist/nativeModel.d.ts +17 -0
- package/dist/nativeModel.js +100 -0
- package/dist/nativePreprocessingPipeline.d.ts +42 -0
- package/dist/nativePreprocessingPipeline.js +246 -0
- package/dist/nativeSplitter.d.ts +23 -0
- package/dist/nativeSplitter.js +116 -0
- package/dist/selection.d.ts +6 -0
- package/dist/selection.js +245 -0
- package/dist/types.d.ts +14 -13
- package/dist/types.js +14 -13
- package/package.json +3 -3
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
// SPDX-License-Identifier: CECILL-2.1
|
|
2
|
+
import { Config } from "./config.js";
|
|
3
|
+
import { Context } from "./context.js";
|
|
4
|
+
import { checkStatus, getModule, makeMatrixView } from "./ffi.js";
|
|
5
|
+
import { MethodResult } from "./methodResult.js";
|
|
6
|
+
const i = (name, fallback) => [name, "int", fallback];
|
|
7
|
+
const d = (name, fallback) => [name, "double", fallback];
|
|
8
|
+
const u = (name, fallback = 0) => [name, "uint64", fallback];
|
|
9
|
+
const b = (name, fallback = 1) => [name, "bool", fallback];
|
|
10
|
+
const a = (name) => [name, "doubleArray", null];
|
|
11
|
+
/** Exact scalar ordering of the public feature_selection.h C ABI. */
|
|
12
|
+
const SELECTORS = {
|
|
13
|
+
spa_select: { params: [i("top_k", 10)] },
|
|
14
|
+
cars_select: { plan: true, params: [i("n_iterations", 50), i("min_features", 5)] },
|
|
15
|
+
interval_select: { plan: true, params: [i("interval_width", 10), i("step", 1)] },
|
|
16
|
+
stability_select: { plan: true, params: [i("top_k", 10)] },
|
|
17
|
+
uve_select: { plan: true, params: [i("noise_features", -1), u("noise_seed")] },
|
|
18
|
+
random_frog_select: { plan: true, params: [i("n_iterations", 100), i("initial_size", 30),
|
|
19
|
+
i("min_size", -1), i("max_size", -1), i("top_k", 10), u("seed")] },
|
|
20
|
+
scars_select: { plan: true, params: [i("n_iterations", 50), i("min_features", 5),
|
|
21
|
+
d("sample_fraction", 0.8), u("seed")] },
|
|
22
|
+
ga_select: { plan: true, params: [i("n_generations", 50), i("population_size", 50),
|
|
23
|
+
i("min_features", -1), i("max_features", -1), d("mutation_rate", 0.01), u("seed")] },
|
|
24
|
+
pso_select: { plan: true, params: [i("n_swarm", 30), i("n_iterations", 50),
|
|
25
|
+
d("w", 0.729), d("c1", 1.494), d("c2", 1.494), d("v_max", 4), u("seed")] },
|
|
26
|
+
vissa_select: { plan: true, params: [i("n_iterations", 20), i("n_submodels", 100),
|
|
27
|
+
d("ratio_kept", 0.1), d("threshold", 0.5), d("floor_probability", 0.01), u("seed")] },
|
|
28
|
+
shaving_select: { plan: true, params: [i("n_steps", 10), i("min_features", 5),
|
|
29
|
+
d("shave_fraction", 0.1)] },
|
|
30
|
+
bve_select: { plan: true, params: [i("n_steps", 10), i("min_features", 5)] },
|
|
31
|
+
t2_select: { plan: true, params: [a("alpha_thresholds"), i("min_selected", -1)] },
|
|
32
|
+
wvc_select: { config: false, params: [i("top_k", 10), b("normalize")] },
|
|
33
|
+
wvc_threshold_select: { config: false, params: [b("normalize"), d("threshold", 0),
|
|
34
|
+
d("threshold_factor", 1), i("min_selected", 1)] },
|
|
35
|
+
emcuve_select: { plan: true, params: [i("noise_features", -1), u("noise_seed"),
|
|
36
|
+
i("n_ensembles", 5), d("vote_threshold", 0.5)] },
|
|
37
|
+
randomization_select: { params: [i("n_permutations", 100), u("randomization_seed"),
|
|
38
|
+
d("alpha", 0.05)] },
|
|
39
|
+
bipls_select: { plan: true, params: [i("interval_width", 10), i("min_intervals", 1)] },
|
|
40
|
+
sipls_select: { plan: true, params: [i("interval_width", 10), i("combination_size", 2)] },
|
|
41
|
+
rep_select: { plan: true, params: [i("n_steps", 10), i("min_features", 5),
|
|
42
|
+
i("remove_count", 1)] },
|
|
43
|
+
ipw_select: { plan: true, params: [i("n_iterations", 10), i("top_k", 10),
|
|
44
|
+
d("damping", 0.5), d("weight_floor", 1e-6)] },
|
|
45
|
+
st_select: { plan: true, params: [a("thresholds"), i("min_selected", -1)] },
|
|
46
|
+
iriv_select: { plan: true, params: [i("max_rounds", 20), u("seed")] },
|
|
47
|
+
irf_select: { plan: true, params: [i("n_iterations", 100), i("window_size", 10),
|
|
48
|
+
i("initial_intervals", 10), i("top_k", 5), u("seed")] },
|
|
49
|
+
vip_spa_select: { params: [d("vip_threshold", 0.3), i("top_k", 10)] },
|
|
50
|
+
};
|
|
51
|
+
export const selectorMethods = Object.freeze(Object.keys(SELECTORS));
|
|
52
|
+
function resolvedParam(spec, params, X, nComponents) {
|
|
53
|
+
const [name, kind, fallback] = spec;
|
|
54
|
+
const raw = params[name] ?? (fallback === -1
|
|
55
|
+
? (name === "min_selected" || name === "min_size" || name === "min_features"
|
|
56
|
+
? nComponents : X.cols) : fallback);
|
|
57
|
+
if (kind === "doubleArray") {
|
|
58
|
+
if (!Array.isArray(raw) || raw.length === 0 ||
|
|
59
|
+
!raw.every((value) => typeof value === "number" && Number.isFinite(value))) {
|
|
60
|
+
throw new TypeError(`${name} must be a non-empty finite numeric array.`);
|
|
61
|
+
}
|
|
62
|
+
return raw;
|
|
63
|
+
}
|
|
64
|
+
if (kind === "bool") {
|
|
65
|
+
if (typeof raw !== "boolean" && raw !== 0 && raw !== 1) {
|
|
66
|
+
throw new TypeError(`${name} must be boolean.`);
|
|
67
|
+
}
|
|
68
|
+
return raw === true || raw === 1 ? 1 : 0;
|
|
69
|
+
}
|
|
70
|
+
if (kind === "uint64") {
|
|
71
|
+
if (typeof raw === "string" && /^\d+$/.test(raw)) {
|
|
72
|
+
const value = BigInt(raw);
|
|
73
|
+
if (value <= 0xffffffffffffffffn)
|
|
74
|
+
return value;
|
|
75
|
+
}
|
|
76
|
+
if (typeof raw === "number" && Number.isSafeInteger(raw) && raw >= 0)
|
|
77
|
+
return BigInt(raw);
|
|
78
|
+
throw new RangeError(`${name} must be a non-negative uint64 integer.`);
|
|
79
|
+
}
|
|
80
|
+
if (typeof raw !== "number" || !Number.isFinite(raw)) {
|
|
81
|
+
throw new TypeError(`${name} must be finite numeric.`);
|
|
82
|
+
}
|
|
83
|
+
if (kind === "int" && (!Number.isInteger(raw) || raw < 1 || raw > 2147483647)) {
|
|
84
|
+
throw new RangeError(`${name} must be a positive i32 integer.`);
|
|
85
|
+
}
|
|
86
|
+
return raw;
|
|
87
|
+
}
|
|
88
|
+
function allocInt64(values) {
|
|
89
|
+
const m = getModule();
|
|
90
|
+
const ptr = m._malloc(values.length * 8);
|
|
91
|
+
const view = new DataView(m.HEAPU8.buffer, m.HEAPU8.byteOffset + ptr, values.length * 8);
|
|
92
|
+
values.forEach((value, index) => view.setBigInt64(index * 8, BigInt(value), true));
|
|
93
|
+
return ptr;
|
|
94
|
+
}
|
|
95
|
+
function createPlan(rows) {
|
|
96
|
+
if (rows < 4)
|
|
97
|
+
throw new RangeError("Selectors with validation plans require at least 4 training rows.");
|
|
98
|
+
const m = getModule();
|
|
99
|
+
const out = m._malloc(4);
|
|
100
|
+
let plan = 0;
|
|
101
|
+
try {
|
|
102
|
+
checkStatus(m.ccall("n4m_validation_plan_create", "number", ["number"], [out]));
|
|
103
|
+
plan = m.getValue(out, "i32") >>> 0;
|
|
104
|
+
checkStatus(m.ccall("n4m_validation_plan_set_n_samples", "number", ["number", "i64"], [plan, BigInt(rows)]));
|
|
105
|
+
const folds = Math.min(3, Math.floor(rows / 2));
|
|
106
|
+
const foldSize = Math.floor(rows / folds);
|
|
107
|
+
for (let fold = 0; fold < folds; fold += 1) {
|
|
108
|
+
const start = fold * foldSize;
|
|
109
|
+
const stop = fold === folds - 1 ? rows : start + foldSize;
|
|
110
|
+
const train = Array.from({ length: rows }, (_, row) => row)
|
|
111
|
+
.filter((row) => row < start || row >= stop);
|
|
112
|
+
const test = Array.from({ length: stop - start }, (_, row) => start + row);
|
|
113
|
+
const trainPtr = allocInt64(train);
|
|
114
|
+
try {
|
|
115
|
+
const testPtr = allocInt64(test);
|
|
116
|
+
try {
|
|
117
|
+
checkStatus(m.ccall("n4m_validation_plan_add_fold", "number", ["number", "number", "i64", "number", "i64"], [plan, trainPtr, BigInt(train.length), testPtr, BigInt(test.length)]));
|
|
118
|
+
}
|
|
119
|
+
finally {
|
|
120
|
+
m._free(testPtr);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
finally {
|
|
124
|
+
m._free(trainPtr);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return plan;
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
if (plan)
|
|
131
|
+
m.ccall("n4m_validation_plan_destroy", null, ["number"], [plan]);
|
|
132
|
+
throw error;
|
|
133
|
+
}
|
|
134
|
+
finally {
|
|
135
|
+
m._free(out);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
/** Run one of the 25 native selectors, preserving its ranked int64 indices. */
|
|
139
|
+
export function selectVariables(method, X, Y, nComponents = 2, methodParams = {}) {
|
|
140
|
+
if (!Object.prototype.hasOwnProperty.call(SELECTORS, method)) {
|
|
141
|
+
throw new RangeError(`Unsupported selector '${method}'.`);
|
|
142
|
+
}
|
|
143
|
+
const spec = SELECTORS[method];
|
|
144
|
+
if (!methodParams || typeof methodParams !== "object" || Array.isArray(methodParams)) {
|
|
145
|
+
throw new TypeError("Selector methodParams must be a mapping.");
|
|
146
|
+
}
|
|
147
|
+
const names = new Set(spec.params.map(([name]) => name));
|
|
148
|
+
for (const key of Object.keys(methodParams)) {
|
|
149
|
+
if (!names.has(key))
|
|
150
|
+
throw new TypeError(`Unsupported ${method} parameter '${key}'.`);
|
|
151
|
+
}
|
|
152
|
+
if (X.rows !== Y.rows || Y.cols !== 1 || X.rows < 2 || X.cols < 1) {
|
|
153
|
+
throw new RangeError("Selector requires matching X/Y rows and one target column.");
|
|
154
|
+
}
|
|
155
|
+
if (!Number.isInteger(nComponents) || nComponents < 1 ||
|
|
156
|
+
nComponents > Math.min(X.cols, X.rows - 1)) {
|
|
157
|
+
throw new RangeError("Selector nComponents exceed the available training rank.");
|
|
158
|
+
}
|
|
159
|
+
const values = spec.params.map((param) => resolvedParam(param, methodParams, X, nComponents));
|
|
160
|
+
const m = getModule();
|
|
161
|
+
const context = Context.create();
|
|
162
|
+
let config = null;
|
|
163
|
+
let plan = 0;
|
|
164
|
+
const allocations = [];
|
|
165
|
+
try {
|
|
166
|
+
if (spec.config !== false) {
|
|
167
|
+
config = Config.create();
|
|
168
|
+
config.setNComponents(nComponents);
|
|
169
|
+
}
|
|
170
|
+
if (spec.plan)
|
|
171
|
+
plan = createPlan(X.rows);
|
|
172
|
+
const xv = makeMatrixView(X.data, X.rows, X.cols);
|
|
173
|
+
try {
|
|
174
|
+
const yv = makeMatrixView(Y.data, Y.rows, Y.cols);
|
|
175
|
+
try {
|
|
176
|
+
const out = m._malloc(4);
|
|
177
|
+
allocations.push(out);
|
|
178
|
+
m.setValue(out, 0, "i32");
|
|
179
|
+
const argTypes = ["number"];
|
|
180
|
+
const args = [context.handle];
|
|
181
|
+
if (config) {
|
|
182
|
+
argTypes.push("number");
|
|
183
|
+
args.push(config.handle);
|
|
184
|
+
}
|
|
185
|
+
argTypes.push("number", "number");
|
|
186
|
+
args.push(xv.viewPtr, yv.viewPtr);
|
|
187
|
+
if (plan) {
|
|
188
|
+
argTypes.push("number");
|
|
189
|
+
args.push(plan);
|
|
190
|
+
}
|
|
191
|
+
if (!config) {
|
|
192
|
+
argTypes.push("number");
|
|
193
|
+
args.push(nComponents);
|
|
194
|
+
}
|
|
195
|
+
values.forEach((value) => {
|
|
196
|
+
if (Array.isArray(value)) {
|
|
197
|
+
const ptr = m._malloc(value.length * 8);
|
|
198
|
+
allocations.push(ptr);
|
|
199
|
+
m.HEAPF64.set(value, ptr >>> 3);
|
|
200
|
+
argTypes.push("number", "i64");
|
|
201
|
+
args.push(ptr, BigInt(value.length));
|
|
202
|
+
}
|
|
203
|
+
else if (typeof value === "bigint") {
|
|
204
|
+
argTypes.push("i64");
|
|
205
|
+
args.push(value);
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
argTypes.push("number");
|
|
209
|
+
args.push(value);
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
argTypes.push("number");
|
|
213
|
+
args.push(out);
|
|
214
|
+
checkStatus(m.ccall(`n4m_feature_selection_${method}`, "number", argTypes, args), context.handle);
|
|
215
|
+
const result = new MethodResult(m.getValue(out, "i32") >>> 0);
|
|
216
|
+
try {
|
|
217
|
+
return result.vectorInt64("selected_indices");
|
|
218
|
+
}
|
|
219
|
+
finally {
|
|
220
|
+
result.destroy();
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
finally {
|
|
224
|
+
yv.free();
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
finally {
|
|
228
|
+
xv.free();
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
finally {
|
|
232
|
+
allocations.forEach((ptr) => m._free(ptr));
|
|
233
|
+
if (plan)
|
|
234
|
+
m.ccall("n4m_validation_plan_destroy", null, ["number"], [plan]);
|
|
235
|
+
config?.destroy();
|
|
236
|
+
context.destroy();
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
/** Compatibility convenience wrapper for the native SPA selector. */
|
|
240
|
+
export function selectSpa(X, Y, topK, nComponents = 2) {
|
|
241
|
+
if (!Number.isSafeInteger(topK) || topK < 1 || topK > X.cols) {
|
|
242
|
+
throw new RangeError("SPA topK must be between 1 and X.cols.");
|
|
243
|
+
}
|
|
244
|
+
return selectVariables("spa_select", X, Y, nComponents, { top_k: topK });
|
|
245
|
+
}
|
package/dist/types.d.ts
CHANGED
|
@@ -5,26 +5,27 @@ export interface Matrix {
|
|
|
5
5
|
rows: number;
|
|
6
6
|
cols: number;
|
|
7
7
|
}
|
|
8
|
-
/** Mirror of the C enum n4m_status_t. */
|
|
8
|
+
/** Mirror of the C enum n4m_status_t (cpp/include/n4m/n4m.h). */
|
|
9
9
|
export declare enum Status {
|
|
10
10
|
OK = 0,
|
|
11
11
|
ERR_INVALID_ARGUMENT = 1,
|
|
12
12
|
ERR_NULL_POINTER = 2,
|
|
13
|
-
|
|
13
|
+
ERR_SHAPE_MISMATCH = 3,
|
|
14
14
|
ERR_DTYPE_MISMATCH = 4,
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
ERR_STRIDE_INVALID = 5,
|
|
16
|
+
ERR_NOT_FITTED = 6,
|
|
17
17
|
ERR_NUMERICAL_FAILURE = 7,
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
18
|
+
ERR_CONVERGENCE_FAILED = 8,
|
|
19
|
+
ERR_OUT_OF_MEMORY = 9,
|
|
20
|
+
ERR_UNSUPPORTED = 10,
|
|
21
|
+
ERR_NOT_IMPLEMENTED = 11,
|
|
22
|
+
ERR_ABI_MISMATCH = 12,
|
|
23
23
|
ERR_IO = 13,
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
ERR_CORRUPT_BUFFER = 14,
|
|
25
|
+
ERR_VERSION_INCOMPATIBLE = 15,
|
|
26
|
+
ERR_BACKEND_UNAVAILABLE = 16,
|
|
27
|
+
ERR_CANCELLED = 17,
|
|
28
|
+
ERR_INTERNAL = 255
|
|
28
29
|
}
|
|
29
30
|
/** Mirror of n4m_dtype_t (cpp/include/n4m/n4m.h §2). */
|
|
30
31
|
export declare enum Dtype {
|
package/dist/types.js
CHANGED
|
@@ -1,25 +1,26 @@
|
|
|
1
1
|
// SPDX-License-Identifier: CECILL-2.1
|
|
2
|
-
/** Mirror of the C enum n4m_status_t. */
|
|
2
|
+
/** Mirror of the C enum n4m_status_t (cpp/include/n4m/n4m.h). */
|
|
3
3
|
export var Status;
|
|
4
4
|
(function (Status) {
|
|
5
5
|
Status[Status["OK"] = 0] = "OK";
|
|
6
6
|
Status[Status["ERR_INVALID_ARGUMENT"] = 1] = "ERR_INVALID_ARGUMENT";
|
|
7
7
|
Status[Status["ERR_NULL_POINTER"] = 2] = "ERR_NULL_POINTER";
|
|
8
|
-
Status[Status["
|
|
8
|
+
Status[Status["ERR_SHAPE_MISMATCH"] = 3] = "ERR_SHAPE_MISMATCH";
|
|
9
9
|
Status[Status["ERR_DTYPE_MISMATCH"] = 4] = "ERR_DTYPE_MISMATCH";
|
|
10
|
-
Status[Status["
|
|
11
|
-
Status[Status["
|
|
10
|
+
Status[Status["ERR_STRIDE_INVALID"] = 5] = "ERR_STRIDE_INVALID";
|
|
11
|
+
Status[Status["ERR_NOT_FITTED"] = 6] = "ERR_NOT_FITTED";
|
|
12
12
|
Status[Status["ERR_NUMERICAL_FAILURE"] = 7] = "ERR_NUMERICAL_FAILURE";
|
|
13
|
-
Status[Status["
|
|
14
|
-
Status[Status["
|
|
15
|
-
Status[Status["
|
|
16
|
-
Status[Status["
|
|
17
|
-
Status[Status["
|
|
13
|
+
Status[Status["ERR_CONVERGENCE_FAILED"] = 8] = "ERR_CONVERGENCE_FAILED";
|
|
14
|
+
Status[Status["ERR_OUT_OF_MEMORY"] = 9] = "ERR_OUT_OF_MEMORY";
|
|
15
|
+
Status[Status["ERR_UNSUPPORTED"] = 10] = "ERR_UNSUPPORTED";
|
|
16
|
+
Status[Status["ERR_NOT_IMPLEMENTED"] = 11] = "ERR_NOT_IMPLEMENTED";
|
|
17
|
+
Status[Status["ERR_ABI_MISMATCH"] = 12] = "ERR_ABI_MISMATCH";
|
|
18
18
|
Status[Status["ERR_IO"] = 13] = "ERR_IO";
|
|
19
|
-
Status[Status["
|
|
20
|
-
Status[Status["
|
|
21
|
-
Status[Status["
|
|
22
|
-
Status[Status["
|
|
19
|
+
Status[Status["ERR_CORRUPT_BUFFER"] = 14] = "ERR_CORRUPT_BUFFER";
|
|
20
|
+
Status[Status["ERR_VERSION_INCOMPATIBLE"] = 15] = "ERR_VERSION_INCOMPATIBLE";
|
|
21
|
+
Status[Status["ERR_BACKEND_UNAVAILABLE"] = 16] = "ERR_BACKEND_UNAVAILABLE";
|
|
22
|
+
Status[Status["ERR_CANCELLED"] = 17] = "ERR_CANCELLED";
|
|
23
|
+
Status[Status["ERR_INTERNAL"] = 255] = "ERR_INTERNAL";
|
|
23
24
|
})(Status || (Status = {}));
|
|
24
25
|
/** Mirror of n4m_dtype_t (cpp/include/n4m/n4m.h §2). */
|
|
25
26
|
export var Dtype;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nirs4all/methods",
|
|
3
|
-
"version": "1.0
|
|
4
|
-
"description": "WebAssembly build of libn4m (nirs4all-methods) — portable PLS/NIRS engine
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "WebAssembly build of libn4m (nirs4all-methods) — portable PLS/NIRS engine and native method bindings.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"build": "npm run clean && tsc -p .",
|
|
21
21
|
"stage:wasm": "node -e \"const fs=require('fs'),p='../../build/emscripten/bindings/js/';fs.mkdirSync('dist',{recursive:true});for(const f of ['n4m.js','n4m.wasm']){if(!fs.existsSync(p+f))throw new Error('missing WASM artifact '+p+f+' — run: cmake --preset emscripten && cmake --build --preset emscripten --target n4m_wasm');fs.copyFileSync(p+f,'dist/'+f)}console.log('staged n4m.js + n4m.wasm into dist/')\"",
|
|
22
22
|
"prepack": "npm run build && npm run stage:wasm",
|
|
23
|
-
"test": "node --experimental-vm-modules test/run_smoke.mjs && node --experimental-vm-modules test/run_api.mjs && node --experimental-vm-modules test/run_generic_method.mjs && node --experimental-vm-modules test/run_pop_aom.mjs && node --experimental-vm-modules test/run_new_pack.mjs && node --experimental-vm-modules test/run_serialization_inspect.mjs"
|
|
23
|
+
"test": "node --experimental-vm-modules test/run_smoke.mjs && node --experimental-vm-modules test/run_api.mjs && node --experimental-vm-modules test/run_generic_method.mjs && node --experimental-vm-modules test/run_pop_aom.mjs && node --experimental-vm-modules test/run_new_pack.mjs && node --experimental-vm-modules test/run_serialization_inspect.mjs && node --experimental-vm-modules test/run_method_result_model.mjs && node --experimental-vm-modules test/run_native_preprocessing_pipeline.mjs && node --experimental-vm-modules test/run_native_splitter.mjs && node --experimental-vm-modules test/run_native_augmentation.mjs && node --experimental-vm-modules test/run_estimator_roles.mjs"
|
|
24
24
|
},
|
|
25
25
|
"license": "CECILL-2.1",
|
|
26
26
|
"publishConfig": {
|