@openmle/omle.js 0.1.0-rc4

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.
Files changed (71) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +172 -0
  3. package/dist/engine/clustering.d.ts +8 -0
  4. package/dist/engine/clustering.d.ts.map +1 -0
  5. package/dist/engine/clustering.js +161 -0
  6. package/dist/engine/clustering.js.map +1 -0
  7. package/dist/engine/executor.d.ts +57 -0
  8. package/dist/engine/executor.d.ts.map +1 -0
  9. package/dist/engine/executor.js +1160 -0
  10. package/dist/engine/executor.js.map +1 -0
  11. package/dist/engine/explain.d.ts +68 -0
  12. package/dist/engine/explain.d.ts.map +1 -0
  13. package/dist/engine/explain.js +401 -0
  14. package/dist/engine/explain.js.map +1 -0
  15. package/dist/engine/linear.d.ts +5 -0
  16. package/dist/engine/linear.d.ts.map +1 -0
  17. package/dist/engine/linear.js +37 -0
  18. package/dist/engine/linear.js.map +1 -0
  19. package/dist/engine/naive_bayes.d.ts +5 -0
  20. package/dist/engine/naive_bayes.d.ts.map +1 -0
  21. package/dist/engine/naive_bayes.js +102 -0
  22. package/dist/engine/naive_bayes.js.map +1 -0
  23. package/dist/engine/nn.d.ts +5 -0
  24. package/dist/engine/nn.d.ts.map +1 -0
  25. package/dist/engine/nn.js +34 -0
  26. package/dist/engine/nn.js.map +1 -0
  27. package/dist/engine/ops.d.ts +14 -0
  28. package/dist/engine/ops.d.ts.map +1 -0
  29. package/dist/engine/ops.js +244 -0
  30. package/dist/engine/ops.js.map +1 -0
  31. package/dist/engine/predicates.d.ts +5 -0
  32. package/dist/engine/predicates.d.ts.map +1 -0
  33. package/dist/engine/predicates.js +105 -0
  34. package/dist/engine/predicates.js.map +1 -0
  35. package/dist/engine/preprocess.d.ts +31 -0
  36. package/dist/engine/preprocess.d.ts.map +1 -0
  37. package/dist/engine/preprocess.js +1112 -0
  38. package/dist/engine/preprocess.js.map +1 -0
  39. package/dist/engine/svm.d.ts +5 -0
  40. package/dist/engine/svm.d.ts.map +1 -0
  41. package/dist/engine/svm.js +241 -0
  42. package/dist/engine/svm.js.map +1 -0
  43. package/dist/engine/tree.d.ts +6 -0
  44. package/dist/engine/tree.d.ts.map +1 -0
  45. package/dist/engine/tree.js +274 -0
  46. package/dist/engine/tree.js.map +1 -0
  47. package/dist/engine/validate_inputs.d.ts +22 -0
  48. package/dist/engine/validate_inputs.d.ts.map +1 -0
  49. package/dist/engine/validate_inputs.js +225 -0
  50. package/dist/engine/validate_inputs.js.map +1 -0
  51. package/dist/index.d.ts +12 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +16 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/io.d.ts +9 -0
  56. package/dist/io.d.ts.map +1 -0
  57. package/dist/io.js +93 -0
  58. package/dist/io.js.map +1 -0
  59. package/dist/ir.d.ts +489 -0
  60. package/dist/ir.d.ts.map +1 -0
  61. package/dist/ir.js +41 -0
  62. package/dist/ir.js.map +1 -0
  63. package/dist/resolve.d.ts +20 -0
  64. package/dist/resolve.d.ts.map +1 -0
  65. package/dist/resolve.js +138 -0
  66. package/dist/resolve.js.map +1 -0
  67. package/dist/validate.d.ts +15 -0
  68. package/dist/validate.d.ts.map +1 -0
  69. package/dist/validate.js +332 -0
  70. package/dist/validate.js.map +1 -0
  71. package/package.json +51 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear.d.ts","sourceRoot":"","sources":["../../src/engine/linear.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAInD,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,YAAY,EAAG,iBAAiB;AAC5C,QAAQ,EAAE,MAAM,EAChB,CAAC,EAAE,MAAM,EACT,QAAQ,EAAE,aAAa,GACtB,YAAY,CAgCd"}
@@ -0,0 +1,37 @@
1
+ // Linear model execution for the reference engine.
2
+ import { applyPostTransform, matmulBias, tensorToData } from './ops.js';
3
+ import { resolveTensorValue } from '../resolve.js';
4
+ // Linear: score = X @ coeff^T + intercept, then post_transform
5
+ export function executeLinear(linear, flatInputs, // [N * numSlots]
6
+ numSlots, N, resolved) {
7
+ const { tensorIndex } = resolved;
8
+ const coeffTensor = resolveTensorValue(linear.coefficients, tensorIndex);
9
+ if (!coeffTensor)
10
+ throw new Error('Linear: coefficients tensor is missing');
11
+ const coeffData = tensorToData(coeffTensor);
12
+ const coeffArr = coeffData.data;
13
+ const coeffShape = coeffTensor.type?.shape ?? [];
14
+ // Determine output width
15
+ let outWidth;
16
+ let weights;
17
+ if (coeffShape.length === 2) {
18
+ // [outWidth, numSlots] — multiclass or multi-output
19
+ outWidth = coeffShape[0];
20
+ weights = coeffArr;
21
+ }
22
+ else {
23
+ // [numSlots] — single output
24
+ outWidth = 1;
25
+ weights = coeffArr;
26
+ }
27
+ // Build bias
28
+ let bias = null;
29
+ if (linear.intercept) {
30
+ const interceptTensor = resolveTensorValue(linear.intercept, tensorIndex);
31
+ if (interceptTensor)
32
+ bias = tensorToData(interceptTensor).data;
33
+ }
34
+ const scores = matmulBias(flatInputs, N, numSlots, weights, outWidth, bias);
35
+ return applyPostTransform(scores, linear.post_transform, outWidth);
36
+ }
37
+ //# sourceMappingURL=linear.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear.js","sourceRoot":"","sources":["../../src/engine/linear.ts"],"names":[],"mappings":"AAAA,mDAAmD;AAGnD,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAExE,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,+DAA+D;AAC/D,MAAM,UAAU,aAAa,CAC3B,MAAc,EACd,UAAwB,EAAG,iBAAiB;AAC5C,QAAgB,EAChB,CAAS,EACT,QAAuB;IAEvB,MAAM,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAC;IAEjC,MAAM,WAAW,GAAG,kBAAkB,CAAC,MAAM,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;IACzE,IAAI,CAAC,WAAW;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IAC5E,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAoB,CAAC;IAChD,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;IAEjD,yBAAyB;IACzB,IAAI,QAAgB,CAAC;IACrB,IAAI,OAAqB,CAAC;IAE1B,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,oDAAoD;QACpD,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QACzB,OAAO,GAAG,QAAQ,CAAC;IACrB,CAAC;SAAM,CAAC;QACN,6BAA6B;QAC7B,QAAQ,GAAG,CAAC,CAAC;QACb,OAAO,GAAG,QAAQ,CAAC;IACrB,CAAC;IAED,aAAa;IACb,IAAI,IAAI,GAAwB,IAAI,CAAC;IACrC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,MAAM,eAAe,GAAG,kBAAkB,CAAC,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;QAC1E,IAAI,eAAe;YAAE,IAAI,GAAG,YAAY,CAAC,eAAe,CAAC,CAAC,IAAoB,CAAC;IACjF,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC5E,OAAO,kBAAkB,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC;AACrE,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { NaiveBayes } from '../ir.js';
2
+ import type { ResolvedModel } from '../resolve.js';
3
+ export declare function executeNaiveBayes(nb: NaiveBayes, flatInputs: Float64Array, // [N * numFeatures]
4
+ numFeatures: number, N: number, resolved: ResolvedModel): Float64Array;
5
+ //# sourceMappingURL=naive_bayes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naive_bayes.d.ts","sourceRoot":"","sources":["../../src/engine/naive_bayes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG3C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAGnD,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,UAAU,EACd,UAAU,EAAE,YAAY,EAAG,oBAAoB;AAC/C,WAAW,EAAE,MAAM,EACnB,CAAC,EAAE,MAAM,EACT,QAAQ,EAAE,aAAa,GACtB,YAAY,CA+Fd"}
@@ -0,0 +1,102 @@
1
+ // Naive Bayes execution for the reference engine.
2
+ import { scalarToNumber } from '../ir.js';
3
+ import { applyPostTransform, tensorToData } from './ops.js';
4
+ import { resolveTensorValue } from '../resolve.js';
5
+ export function executeNaiveBayes(nb, flatInputs, // [N * numFeatures]
6
+ numFeatures, N, resolved) {
7
+ const { tensorIndex } = resolved;
8
+ const priorsTensor = resolveTensorValue(nb.class_log_priors, tensorIndex);
9
+ if (!priorsTensor)
10
+ throw new Error('NaiveBayes: class_log_priors tensor is missing');
11
+ const priorsData = tensorToData(priorsTensor);
12
+ const logPriors = priorsData.data;
13
+ const numClasses = logPriors.length;
14
+ const logPosteriors = new Float64Array(N * numClasses);
15
+ if (nb.gaussian) {
16
+ const meansTensor = resolveTensorValue(nb.gaussian.means, tensorIndex);
17
+ const varsTensor = resolveTensorValue(nb.gaussian.variances, tensorIndex);
18
+ if (!meansTensor)
19
+ throw new Error('GaussianNaiveBayes: means tensor is missing');
20
+ if (!varsTensor)
21
+ throw new Error('GaussianNaiveBayes: variances tensor is missing');
22
+ const means = tensorToData(meansTensor).data;
23
+ const vars = tensorToData(varsTensor).data;
24
+ const eps = nb.gaussian.variance_epsilon != null ? scalarToNumber(nb.gaussian.variance_epsilon) : 0;
25
+ for (let row = 0; row < N; row++) {
26
+ for (let c = 0; c < numClasses; c++) {
27
+ let logProb = logPriors[c];
28
+ for (let f = 0; f < numFeatures; f++) {
29
+ const x = flatInputs[row * numFeatures + f];
30
+ const mu = means[c * numFeatures + f];
31
+ const v = vars[c * numFeatures + f] + eps;
32
+ logProb -= 0.5 * (Math.log(2 * Math.PI * v) + ((x - mu) ** 2) / v);
33
+ }
34
+ logPosteriors[row * numClasses + c] = logProb;
35
+ }
36
+ }
37
+ }
38
+ else if (nb.multinomial) {
39
+ const flpTensor = resolveTensorValue(nb.multinomial.feature_log_prob, tensorIndex);
40
+ if (!flpTensor)
41
+ throw new Error('MultinomialNaiveBayes: feature_log_prob tensor is missing');
42
+ const flp = tensorToData(flpTensor).data;
43
+ for (let row = 0; row < N; row++) {
44
+ for (let c = 0; c < numClasses; c++) {
45
+ let logProb = logPriors[c];
46
+ for (let f = 0; f < numFeatures; f++) {
47
+ logProb += flatInputs[row * numFeatures + f] * flp[c * numFeatures + f];
48
+ }
49
+ logPosteriors[row * numClasses + c] = logProb;
50
+ }
51
+ }
52
+ }
53
+ else if (nb.bernoulli) {
54
+ const flpTensor = resolveTensorValue(nb.bernoulli.feature_log_prob, tensorIndex);
55
+ if (!flpTensor)
56
+ throw new Error('BernoulliNaiveBayes: feature_log_prob tensor is missing');
57
+ const flp = tensorToData(flpTensor).data;
58
+ const binarizeThreshold = nb.bernoulli.binarize_threshold != null ? scalarToNumber(nb.bernoulli.binarize_threshold) : null;
59
+ // Precompute log(1 - exp(feature_log_prob))
60
+ const logNegProb = new Float64Array(flp.length);
61
+ for (let i = 0; i < flp.length; i++) {
62
+ logNegProb[i] = Math.log(1 - Math.exp(flp[i]) + 1e-10);
63
+ }
64
+ for (let row = 0; row < N; row++) {
65
+ for (let c = 0; c < numClasses; c++) {
66
+ let logProb = logPriors[c];
67
+ for (let f = 0; f < numFeatures; f++) {
68
+ const rawVal = flatInputs[row * numFeatures + f];
69
+ const xi = binarizeThreshold !== null ? (rawVal > binarizeThreshold ? 1 : 0) : rawVal;
70
+ logProb += xi * flp[c * numFeatures + f] + (1 - xi) * logNegProb[c * numFeatures + f];
71
+ }
72
+ logPosteriors[row * numClasses + c] = logProb;
73
+ }
74
+ }
75
+ }
76
+ else if (nb.categorical) {
77
+ const clpTensor = resolveTensorValue(nb.categorical.category_log_prob, tensorIndex);
78
+ if (!clpTensor)
79
+ throw new Error('CategoricalNaiveBayes: category_log_prob tensor is missing');
80
+ const clp = tensorToData(clpTensor).data;
81
+ const catOffset = nb.categorical.category_offset ?? [];
82
+ const catCount = nb.categorical.category_count ?? [];
83
+ const rowSize = catOffset.length > 0
84
+ ? (catOffset[catOffset.length - 1] + (catCount[catCount.length - 1] ?? 0))
85
+ : numFeatures;
86
+ for (let row = 0; row < N; row++) {
87
+ for (let c = 0; c < numClasses; c++) {
88
+ let logProb = logPriors[c];
89
+ for (let f = 0; f < numFeatures; f++) {
90
+ const catIdx = Math.round(flatInputs[row * numFeatures + f]);
91
+ const offset = catOffset[f] ?? f;
92
+ const count = catCount[f] ?? 1;
93
+ const safeIdx = Math.max(0, Math.min(catIdx, count - 1));
94
+ logProb += clp[c * rowSize + offset + safeIdx];
95
+ }
96
+ logPosteriors[row * numClasses + c] = logProb;
97
+ }
98
+ }
99
+ }
100
+ return applyPostTransform(logPosteriors, 'SOFTMAX', numClasses);
101
+ }
102
+ //# sourceMappingURL=naive_bayes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naive_bayes.js","sourceRoot":"","sources":["../../src/engine/naive_bayes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { NeuralNetwork } from '../ir.js';
2
+ import type { ResolvedModel } from '../resolve.js';
3
+ export declare function executeNeuralNetwork(nn: NeuralNetwork, flatInputs: Float64Array, // [N * inputWidth]
4
+ inputWidth: number, N: number, resolved: ResolvedModel): Float64Array;
5
+ //# sourceMappingURL=nn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nn.d.ts","sourceRoot":"","sources":["../../src/engine/nn.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAKnD,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,aAAa,EACjB,UAAU,EAAE,YAAY,EAAG,mBAAmB;AAC9C,UAAU,EAAE,MAAM,EAClB,CAAC,EAAE,MAAM,EACT,QAAQ,EAAE,aAAa,GACtB,YAAY,CA8Bd"}
@@ -0,0 +1,34 @@
1
+ // Neural network (MLP) execution for the reference engine.
2
+ import { applyActivation, matmulBias, tensorToData } from './ops.js';
3
+ import { resolveTensorValue } from '../resolve.js';
4
+ // Evaluates a classical feed-forward MLP: y = activation(W @ x + b) per layer.
5
+ export function executeNeuralNetwork(nn, flatInputs, // [N * inputWidth]
6
+ inputWidth, N, resolved) {
7
+ const { tensorIndex } = resolved;
8
+ const layers = nn.layers ?? [];
9
+ if (layers.length === 0)
10
+ return flatInputs;
11
+ let current = flatInputs;
12
+ let currentWidth = inputWidth;
13
+ for (const layer of layers) {
14
+ const wTensor = resolveTensorValue(layer.weights, tensorIndex);
15
+ if (!wTensor)
16
+ throw new Error(`DenseLayer "${layer.name ?? '?'}": weights tensor is missing`);
17
+ const wData = tensorToData(wTensor);
18
+ const weights = wData.data;
19
+ const wShape = wTensor.type?.shape ?? [];
20
+ const outWidth = wShape[0] ?? 1;
21
+ const inWidth = wShape[1] ?? currentWidth;
22
+ let bias = null;
23
+ if (layer.bias) {
24
+ const biasTensor = resolveTensorValue(layer.bias, tensorIndex);
25
+ if (biasTensor)
26
+ bias = tensorToData(biasTensor).data;
27
+ }
28
+ const preActivation = matmulBias(current, N, inWidth, weights, outWidth, bias);
29
+ current = applyActivation(preActivation, layer.activation, outWidth);
30
+ currentWidth = outWidth;
31
+ }
32
+ return current;
33
+ }
34
+ //# sourceMappingURL=nn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nn.js","sourceRoot":"","sources":["../../src/engine/nn.ts"],"names":[],"mappings":"AAAA,2DAA2D;AAG3D,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAErE,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAGnD,+EAA+E;AAC/E,MAAM,UAAU,oBAAoB,CAClC,EAAiB,EACjB,UAAwB,EAAG,mBAAmB;AAC9C,UAAkB,EAClB,CAAS,EACT,QAAuB;IAEvB,MAAM,EAAE,WAAW,EAAE,GAAG,QAAQ,CAAC;IACjC,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC;IAE/B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,UAAU,CAAC;IAE3C,IAAI,OAAO,GAAG,UAAU,CAAC;IACzB,IAAI,YAAY,GAAG,UAAU,CAAC;IAE9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC/D,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,eAAe,KAAK,CAAC,IAAI,IAAI,GAAG,8BAA8B,CAAC,CAAC;QAC9F,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAoB,CAAC;QAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAChC,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,YAAY,CAAC;QAE1C,IAAI,IAAI,GAAwB,IAAI,CAAC;QACrC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,UAAU,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YAC/D,IAAI,UAAU;gBAAE,IAAI,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC,IAAoB,CAAC;QACvE,CAAC;QAED,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC/E,OAAO,GAAG,eAAe,CAAC,aAAa,EAAE,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QACrE,YAAY,GAAG,QAAQ,CAAC;IAC1B,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { Tensor, DataType, PostTransform } from '../ir.js';
2
+ export type NumericArray = Float64Array | Float32Array | Int32Array;
3
+ export interface TensorData {
4
+ dtype: DataType;
5
+ shape: number[];
6
+ data: Float64Array | string[] | boolean[];
7
+ }
8
+ export declare function tensorRows(td: TensorData): number;
9
+ export declare function tensorCols(td: TensorData): number;
10
+ export declare function tensorToData(tensor: Tensor | number[]): TensorData;
11
+ export declare function applyPostTransform(scores: Float64Array, transform: PostTransform | undefined, outputSize: number): Float64Array;
12
+ export declare function applyActivation(x: Float64Array, activation: string, outputSize: number): Float64Array;
13
+ export declare function matmulBias(input: Float64Array, N: number, inD: number, weights: Float64Array, outD: number, bias: Float64Array | null): Float64Array;
14
+ //# sourceMappingURL=ops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ops.d.ts","sourceRoot":"","sources":["../../src/engine/ops.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAIhE,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,YAAY,GAAG,UAAU,CAAC;AAEpE,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC;CAC3C;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,UAAU,GAAG,MAAM,CAEjD;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,UAAU,GAAG,MAAM,CAGjD;AAID,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,UAAU,CA+BlE;AAyDD,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,aAAa,GAAG,SAAS,EACpC,UAAU,EAAE,MAAM,GACjB,YAAY,CAqFd;AAED,wBAAgB,eAAe,CAC7B,CAAC,EAAE,YAAY,EACf,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,GACjB,YAAY,CAuBd;AAID,wBAAgB,UAAU,CACxB,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAC3C,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EACnC,IAAI,EAAE,YAAY,GAAG,IAAI,GACxB,YAAY,CAYd"}
@@ -0,0 +1,244 @@
1
+ // Core tensor operations and post-transforms used by the reference engine.
2
+ export function tensorRows(td) {
3
+ return td.shape[0] ?? 0;
4
+ }
5
+ export function tensorCols(td) {
6
+ if (td.shape.length < 2)
7
+ return 1;
8
+ return td.shape.slice(1).reduce((a, b) => a * b, 1);
9
+ }
10
+ // ── Tensor → TensorData conversion ───────────────────────────────────────────
11
+ export function tensorToData(tensor) {
12
+ // Some JSON serializations emit plain arrays instead of Tensor objects (e.g. split_threshold, leaf_value).
13
+ if (Array.isArray(tensor)) {
14
+ return { dtype: 'FLOAT64', shape: [tensor.length], data: new Float64Array(tensor) };
15
+ }
16
+ const dtype = tensor.type?.dtype ?? 'FLOAT64';
17
+ const shape = tensor.type?.shape ?? [];
18
+ if (dtype === 'STRING') {
19
+ const data = tensor.string_data ?? [];
20
+ return { dtype, shape, data };
21
+ }
22
+ if (dtype === 'BOOL') {
23
+ const data = tensor.bool_data ?? [];
24
+ return { dtype, shape, data };
25
+ }
26
+ if (tensor.raw_data) {
27
+ return { dtype, shape, data: decodeRawData(tensor.raw_data, dtype, shape) };
28
+ }
29
+ let nums;
30
+ if (tensor.float32_data)
31
+ nums = tensor.float32_data;
32
+ else if (tensor.float64_data)
33
+ nums = tensor.float64_data;
34
+ else if (tensor.int32_data)
35
+ nums = tensor.int32_data;
36
+ else if (tensor.int64_data)
37
+ nums = tensor.int64_data;
38
+ else
39
+ nums = [];
40
+ return { dtype, shape, data: new Float64Array(nums) };
41
+ }
42
+ function decodeRawData(b64, dtype, shape) {
43
+ const bytes = base64ToBytes(b64);
44
+ const n = shape.reduce((a, b) => a * b, 1);
45
+ const out = new Float64Array(n);
46
+ const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
47
+ switch (dtype) {
48
+ case 'FLOAT32':
49
+ for (let i = 0; i < n; i++)
50
+ out[i] = view.getFloat32(i * 4, true);
51
+ break;
52
+ case 'FLOAT64':
53
+ for (let i = 0; i < n; i++)
54
+ out[i] = view.getFloat64(i * 8, true);
55
+ break;
56
+ case 'INT32':
57
+ for (let i = 0; i < n; i++)
58
+ out[i] = view.getInt32(i * 4, true);
59
+ break;
60
+ case 'INT64':
61
+ for (let i = 0; i < n; i++)
62
+ out[i] = Number(view.getBigInt64(i * 8, true));
63
+ break;
64
+ case 'INT8':
65
+ for (let i = 0; i < n; i++)
66
+ out[i] = view.getInt8(i);
67
+ break;
68
+ case 'UINT8':
69
+ for (let i = 0; i < n; i++)
70
+ out[i] = view.getUint8(i);
71
+ break;
72
+ case 'INT16':
73
+ for (let i = 0; i < n; i++)
74
+ out[i] = view.getInt16(i * 2, true);
75
+ break;
76
+ case 'UINT16':
77
+ for (let i = 0; i < n; i++)
78
+ out[i] = view.getUint16(i * 2, true);
79
+ break;
80
+ case 'UINT32':
81
+ for (let i = 0; i < n; i++)
82
+ out[i] = view.getUint32(i * 4, true);
83
+ break;
84
+ default:
85
+ // Unsupported dtype for raw binary decode — return zeros
86
+ break;
87
+ }
88
+ return out;
89
+ }
90
+ function base64ToBytes(b64) {
91
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
92
+ const g = globalThis;
93
+ if (typeof g['Buffer'] !== 'undefined') {
94
+ return new Uint8Array(g['Buffer'].from(b64, 'base64'));
95
+ }
96
+ const bin = g['atob'](b64);
97
+ const bytes = new Uint8Array(bin.length);
98
+ for (let i = 0; i < bin.length; i++)
99
+ bytes[i] = bin.charCodeAt(i);
100
+ return bytes;
101
+ }
102
+ // ── Post-transforms ───────────────────────────────────────────────────────────
103
+ export function applyPostTransform(scores, transform, outputSize) {
104
+ switch (transform) {
105
+ case undefined:
106
+ case 'POST_TRANSFORM_UNSPECIFIED':
107
+ case 'IDENTITY':
108
+ return scores;
109
+ case 'SIGMOID': {
110
+ const out = new Float64Array(scores.length);
111
+ for (let i = 0; i < scores.length; i++)
112
+ out[i] = 1 / (1 + Math.exp(-scores[i]));
113
+ return out;
114
+ }
115
+ case 'SIGMOID_BINARY': {
116
+ // Sigmoid then expand to 2-column [1-p, p] per row
117
+ const N = scores.length / outputSize;
118
+ const out = new Float64Array(N * 2);
119
+ for (let row = 0; row < N; row++) {
120
+ const p = 1 / (1 + Math.exp(-scores[row * outputSize]));
121
+ out[row * 2] = 1 - p;
122
+ out[row * 2 + 1] = p;
123
+ }
124
+ return out;
125
+ }
126
+ case 'SOFTMAX': {
127
+ const out = new Float64Array(scores.length);
128
+ const N = scores.length / outputSize;
129
+ for (let row = 0; row < N; row++) {
130
+ const offset = row * outputSize;
131
+ let maxVal = -Infinity;
132
+ for (let k = 0; k < outputSize; k++)
133
+ maxVal = Math.max(maxVal, scores[offset + k]);
134
+ let sum = 0;
135
+ for (let k = 0; k < outputSize; k++) {
136
+ out[offset + k] = Math.exp(scores[offset + k] - maxVal);
137
+ sum += out[offset + k];
138
+ }
139
+ for (let k = 0; k < outputSize; k++)
140
+ out[offset + k] /= sum;
141
+ }
142
+ return out;
143
+ }
144
+ case 'EXP': {
145
+ const out = new Float64Array(scores.length);
146
+ for (let i = 0; i < scores.length; i++)
147
+ out[i] = Math.exp(scores[i]);
148
+ return out;
149
+ }
150
+ case 'LOGIT': {
151
+ const out = new Float64Array(scores.length);
152
+ for (let i = 0; i < scores.length; i++) {
153
+ const p = scores[i];
154
+ out[i] = Math.log(p / (1 - p));
155
+ }
156
+ return out;
157
+ }
158
+ case 'PROBIT': {
159
+ // Rational approximation for inverse normal CDF
160
+ const out = new Float64Array(scores.length);
161
+ for (let i = 0; i < scores.length; i++)
162
+ out[i] = probitApprox(scores[i]);
163
+ return out;
164
+ }
165
+ case 'CLOGLOG': {
166
+ const out = new Float64Array(scores.length);
167
+ for (let i = 0; i < scores.length; i++)
168
+ out[i] = 1 - Math.exp(-Math.exp(scores[i]));
169
+ return out;
170
+ }
171
+ case 'LOGLOG': {
172
+ const out = new Float64Array(scores.length);
173
+ for (let i = 0; i < scores.length; i++)
174
+ out[i] = Math.exp(-Math.exp(-scores[i]));
175
+ return out;
176
+ }
177
+ case 'CAUCHIT': {
178
+ const out = new Float64Array(scores.length);
179
+ for (let i = 0; i < scores.length; i++)
180
+ out[i] = 0.5 + (1 / Math.PI) * Math.atan(scores[i]);
181
+ return out;
182
+ }
183
+ default:
184
+ return scores;
185
+ }
186
+ }
187
+ export function applyActivation(x, activation, outputSize) {
188
+ switch (activation) {
189
+ case 'IDENTITY': return x;
190
+ case 'LOGISTIC': {
191
+ const out = new Float64Array(x.length);
192
+ for (let i = 0; i < x.length; i++)
193
+ out[i] = 1 / (1 + Math.exp(-x[i]));
194
+ return out;
195
+ }
196
+ case 'TANH': {
197
+ const out = new Float64Array(x.length);
198
+ for (let i = 0; i < x.length; i++)
199
+ out[i] = Math.tanh(x[i]);
200
+ return out;
201
+ }
202
+ case 'RELU': {
203
+ const out = new Float64Array(x.length);
204
+ for (let i = 0; i < x.length; i++)
205
+ out[i] = Math.max(0, x[i]);
206
+ return out;
207
+ }
208
+ case 'SOFTMAX':
209
+ return applyPostTransform(x, 'SOFTMAX', outputSize);
210
+ default:
211
+ return x;
212
+ }
213
+ }
214
+ // ── Matrix multiply: out[N, outD] = in[N, inD] @ W[outD, inD]^T + b[outD] ───
215
+ export function matmulBias(input, N, inD, weights, outD, bias) {
216
+ const out = new Float64Array(N * outD);
217
+ for (let row = 0; row < N; row++) {
218
+ for (let j = 0; j < outD; j++) {
219
+ let acc = bias ? bias[j] : 0;
220
+ for (let k = 0; k < inD; k++) {
221
+ acc += input[row * inD + k] * weights[j * inD + k];
222
+ }
223
+ out[row * outD + j] = acc;
224
+ }
225
+ }
226
+ return out;
227
+ }
228
+ // ── Probit approximation ──────────────────────────────────────────────────────
229
+ function probitApprox(p) {
230
+ if (p <= 0)
231
+ return -Infinity;
232
+ if (p >= 1)
233
+ return Infinity;
234
+ // Beasley-Springer-Moro algorithm approximation
235
+ const a = [2.515517, 0.802853, 0.010328];
236
+ const b = [1.432788, 0.189269, 0.001308];
237
+ const sign = p < 0.5 ? -1 : 1;
238
+ const q = Math.min(p, 1 - p);
239
+ const t = Math.sqrt(-2 * Math.log(q));
240
+ const num = a[0] + a[1] * t + a[2] * t * t;
241
+ const den = 1 + b[0] * t + b[1] * t * t + b[2] * t * t * t;
242
+ return sign * (t - num / den);
243
+ }
244
+ //# sourceMappingURL=ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ops.js","sourceRoot":"","sources":["../../src/engine/ops.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Predicate, Scalar } from '../ir.js';
2
+ export type ColumnResolver = (name: string, row: number) => number | string | boolean | undefined;
3
+ export declare function evalPredicate(pred: Predicate, resolver: ColumnResolver, row: number): boolean | null;
4
+ export declare function scalarEquals(a: Scalar, b: Scalar): boolean;
5
+ //# sourceMappingURL=predicates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"predicates.d.ts","sourceRoot":"","sources":["../../src/engine/predicates.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,SAAS,EAA0D,MAAM,EAC1E,MAAM,UAAU,CAAC;AAKlB,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;AAIlG,wBAAgB,aAAa,CAC3B,IAAI,EAAE,SAAS,EACf,QAAQ,EAAE,cAAc,EACxB,GAAG,EAAE,MAAM,GACV,OAAO,GAAG,IAAI,CAOhB;AAoGD,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAE1D"}
@@ -0,0 +1,105 @@
1
+ // Predicate evaluation for the reference engine.
2
+ // Predicates are evaluated per-row over named column values.
3
+ import { scalarValue } from '../ir.js';
4
+ // ── Entry point ───────────────────────────────────────────────────────────────
5
+ export function evalPredicate(pred, resolver, row) {
6
+ if (pred.true_predicate !== undefined)
7
+ return true;
8
+ if (pred.false_predicate !== undefined)
9
+ return false;
10
+ if (pred.simple)
11
+ return evalSimple(pred.simple, resolver, row);
12
+ if (pred.simple_set)
13
+ return evalSimpleSet(pred.simple_set, resolver, row);
14
+ if (pred.compound)
15
+ return evalCompound(pred.compound, resolver, row);
16
+ return null;
17
+ }
18
+ // ── Simple predicate ──────────────────────────────────────────────────────────
19
+ function evalSimple(pred, resolver, row) {
20
+ const val = resolver(pred.column.value, row);
21
+ const isMissing = val === undefined || val === null || (typeof val === 'number' && isNaN(val));
22
+ switch (pred.op) {
23
+ case 'IS_MISSING': return isMissing;
24
+ case 'IS_NOT_MISSING': return !isMissing;
25
+ default: break;
26
+ }
27
+ if (isMissing)
28
+ return null;
29
+ const cmp = pred.value ? scalarValue(pred.value) : undefined;
30
+ switch (pred.op) {
31
+ case 'LESS_THAN': return val < cmp;
32
+ case 'LESS_OR_EQUAL': return val <= cmp;
33
+ case 'GREATER_THAN': return val > cmp;
34
+ case 'GREATER_OR_EQUAL': return val >= cmp;
35
+ case 'EQUAL': return val === cmp;
36
+ case 'NOT_EQUAL': return val !== cmp;
37
+ default: return null;
38
+ }
39
+ }
40
+ // ── Set predicate ─────────────────────────────────────────────────────────────
41
+ function evalSimpleSet(pred, resolver, row) {
42
+ const val = resolver(pred.column.value, row);
43
+ if (val === undefined || val === null)
44
+ return null;
45
+ const setVals = new Set((pred.values ?? []).map(s => scalarValue(s)));
46
+ switch (pred.op) {
47
+ case 'IN': return setVals.has(val);
48
+ case 'NOT_IN': return !setVals.has(val);
49
+ default: return null;
50
+ }
51
+ }
52
+ // ── Compound predicate ────────────────────────────────────────────────────────
53
+ function evalCompound(pred, resolver, row) {
54
+ const children = pred.predicates ?? [];
55
+ switch (pred.op) {
56
+ case 'AND': {
57
+ let result = true;
58
+ for (const c of children) {
59
+ const r = evalPredicate(c, resolver, row);
60
+ if (r === false)
61
+ return false;
62
+ if (r === null)
63
+ result = null;
64
+ }
65
+ return result;
66
+ }
67
+ case 'OR': {
68
+ let result = false;
69
+ for (const c of children) {
70
+ const r = evalPredicate(c, resolver, row);
71
+ if (r === true)
72
+ return true;
73
+ if (r === null)
74
+ result = null;
75
+ }
76
+ return result;
77
+ }
78
+ case 'XOR': {
79
+ let trueCount = 0;
80
+ for (const c of children) {
81
+ const r = evalPredicate(c, resolver, row);
82
+ if (r === null)
83
+ return null;
84
+ if (r)
85
+ trueCount++;
86
+ }
87
+ return trueCount % 2 === 1;
88
+ }
89
+ case 'SURROGATE': {
90
+ for (const c of children) {
91
+ const r = evalPredicate(c, resolver, row);
92
+ if (r !== null)
93
+ return r;
94
+ }
95
+ return null;
96
+ }
97
+ default:
98
+ return null;
99
+ }
100
+ }
101
+ // ── Scalar comparison helpers ─────────────────────────────────────────────────
102
+ export function scalarEquals(a, b) {
103
+ return scalarValue(a) === scalarValue(b);
104
+ }
105
+ //# sourceMappingURL=predicates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"predicates.js","sourceRoot":"","sources":["../../src/engine/predicates.ts"],"names":[],"mappings":"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"}