@bilig/formula 0.1.0 → 0.1.3

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 (30) hide show
  1. package/dist/builtins/lookup-hypothesis-builtins.d.ts +4 -5
  2. package/dist/builtins/lookup-hypothesis-builtins.js +393 -10
  3. package/dist/builtins/lookup-hypothesis-builtins.js.map +1 -1
  4. package/dist/builtins/lookup.js +3 -387
  5. package/dist/builtins/lookup.js.map +1 -1
  6. package/dist/builtins/placeholder.d.ts +2 -2
  7. package/dist/builtins/text-core-builtins.d.ts +12 -0
  8. package/dist/builtins/text-core-builtins.js +409 -0
  9. package/dist/builtins/text-core-builtins.js.map +1 -0
  10. package/dist/builtins/text-format-builtins.d.ts +14 -0
  11. package/dist/builtins/text-format-builtins.js +537 -0
  12. package/dist/builtins/text-format-builtins.js.map +1 -0
  13. package/dist/builtins/text-search-builtins.d.ts +21 -0
  14. package/dist/builtins/text-search-builtins.js +469 -0
  15. package/dist/builtins/text-search-builtins.js.map +1 -0
  16. package/dist/builtins/text.js +41 -1368
  17. package/dist/builtins/text.js.map +1 -1
  18. package/dist/js-evaluator-array-special-calls.d.ts +28 -0
  19. package/dist/js-evaluator-array-special-calls.js +340 -0
  20. package/dist/js-evaluator-array-special-calls.js.map +1 -0
  21. package/dist/js-evaluator-context-special-calls.d.ts +24 -0
  22. package/dist/js-evaluator-context-special-calls.js +156 -0
  23. package/dist/js-evaluator-context-special-calls.js.map +1 -0
  24. package/dist/js-evaluator-types.d.ts +117 -0
  25. package/dist/js-evaluator-types.js +2 -0
  26. package/dist/js-evaluator-types.js.map +1 -0
  27. package/dist/js-evaluator.d.ts +3 -100
  28. package/dist/js-evaluator.js +42 -492
  29. package/dist/js-evaluator.js.map +1 -1
  30. package/package.json +6 -6
@@ -1,11 +1,10 @@
1
1
  import { ErrorCode, type CellValue } from "@bilig/protocol";
2
- import type { LookupBuiltin, LookupBuiltinArgument } from "./lookup.js";
2
+ import type { LookupBuiltin, LookupBuiltinArgument, RangeBuiltinArgument } from "./lookup.js";
3
3
  interface LookupHypothesisBuiltinDeps {
4
4
  errorValue: (code: ErrorCode) => CellValue;
5
- chiSquareTestResult: (actualArg: LookupBuiltinArgument, expectedArg: LookupBuiltinArgument) => CellValue;
6
- fTestResult: (firstArg: LookupBuiltinArgument, secondArg: LookupBuiltinArgument) => CellValue;
7
- zTestResult: (arrayArg: LookupBuiltinArgument, xArg: LookupBuiltinArgument, sigmaArg?: LookupBuiltinArgument) => CellValue;
8
- tTestResult: (firstArg: LookupBuiltinArgument, secondArg: LookupBuiltinArgument, tailsArg: LookupBuiltinArgument, typeArg: LookupBuiltinArgument) => CellValue;
5
+ isRangeArg: (value: LookupBuiltinArgument | undefined) => value is RangeBuiltinArgument;
6
+ toNumber: (value: CellValue) => number | undefined;
7
+ toNumericMatrix: (arg: LookupBuiltinArgument) => number[][] | CellValue;
9
8
  }
10
9
  export declare function createLookupHypothesisBuiltins(deps: LookupHypothesisBuiltinDeps): Record<string, LookupBuiltin>;
11
10
  export {};
@@ -1,40 +1,423 @@
1
- import { ErrorCode } from "@bilig/protocol";
1
+ import { ErrorCode, ValueTag } from "@bilig/protocol";
2
+ const LANCZOS_G = 7;
3
+ const LANCZOS_COEFFICIENTS = [
4
+ 676.5203681218851, -1259.1392167224028, 771.3234287776531, -176.6150291621406, 12.507343278686905,
5
+ -0.13857109526572012, 9.984369578019572e-6, 1.5056327351493116e-7,
6
+ ];
7
+ function logGamma(value) {
8
+ if (!Number.isFinite(value) || value <= 0) {
9
+ return Number.NaN;
10
+ }
11
+ let sum = 0.9999999999998099;
12
+ const shifted = value - 1;
13
+ LANCZOS_COEFFICIENTS.forEach((coefficient, index) => {
14
+ sum += coefficient / (shifted + index + 1);
15
+ });
16
+ const t = shifted + LANCZOS_G + 0.5;
17
+ return 0.5 * Math.log(2 * Math.PI) + (shifted + 0.5) * Math.log(t) - t + Math.log(sum);
18
+ }
19
+ function regularizedLowerGamma(shape, x) {
20
+ if (!Number.isFinite(shape) || !Number.isFinite(x) || shape <= 0 || x < 0) {
21
+ return Number.NaN;
22
+ }
23
+ if (x === 0) {
24
+ return 0;
25
+ }
26
+ const logGammaShape = logGamma(shape);
27
+ if (!Number.isFinite(logGammaShape)) {
28
+ return Number.NaN;
29
+ }
30
+ if (x < shape + 1) {
31
+ let term = 1 / shape;
32
+ let sum = term;
33
+ for (let iteration = 1; iteration < 1000; iteration += 1) {
34
+ term *= x / (shape + iteration);
35
+ sum += term;
36
+ if (Math.abs(term) <= Math.abs(sum) * 1e-14) {
37
+ break;
38
+ }
39
+ }
40
+ return sum * Math.exp(-x + shape * Math.log(x) - logGammaShape);
41
+ }
42
+ let b = x + 1 - shape;
43
+ let c = 1 / 1e-300;
44
+ let d = 1 / b;
45
+ let h = d;
46
+ for (let iteration = 1; iteration < 1000; iteration += 1) {
47
+ const factor = -iteration * (iteration - shape);
48
+ b += 2;
49
+ d = factor * d + b;
50
+ if (Math.abs(d) < 1e-300) {
51
+ d = 1e-300;
52
+ }
53
+ c = b + factor / c;
54
+ if (Math.abs(c) < 1e-300) {
55
+ c = 1e-300;
56
+ }
57
+ d = 1 / d;
58
+ const delta = d * c;
59
+ h *= delta;
60
+ if (Math.abs(delta - 1) <= 1e-14) {
61
+ break;
62
+ }
63
+ }
64
+ return 1 - Math.exp(-x + shape * Math.log(x) - logGammaShape) * h;
65
+ }
66
+ function regularizedUpperGamma(shape, x) {
67
+ const lower = regularizedLowerGamma(shape, x);
68
+ return Number.isFinite(lower) ? 1 - lower : Number.NaN;
69
+ }
70
+ function erfApprox(value) {
71
+ const sign = value < 0 ? -1 : 1;
72
+ const absolute = Math.abs(value);
73
+ const t = 1 / (1 + 0.3275911 * absolute);
74
+ const y = 1 -
75
+ ((((1.061405429 * t - 1.453152027) * t + 1.421413741) * t - 0.284496736) * t + 0.254829592) *
76
+ t *
77
+ Math.exp(-absolute * absolute);
78
+ return sign * y;
79
+ }
80
+ function standardNormalCdf(value) {
81
+ return 0.5 * (1 + erfApprox(value / Math.sqrt(2)));
82
+ }
83
+ function logBeta(alpha, beta) {
84
+ return logGamma(alpha) + logGamma(beta) - logGamma(alpha + beta);
85
+ }
86
+ function betaContinuedFraction(x, alpha, beta) {
87
+ const maxIterations = 200;
88
+ const epsilon = 1e-14;
89
+ const tiny = 1e-300;
90
+ const qab = alpha + beta;
91
+ const qap = alpha + 1;
92
+ const qam = alpha - 1;
93
+ let c = 1;
94
+ let d = 1 - (qab * x) / qap;
95
+ if (Math.abs(d) < tiny) {
96
+ d = tiny;
97
+ }
98
+ d = 1 / d;
99
+ let h = d;
100
+ for (let iteration = 1; iteration <= maxIterations; iteration += 1) {
101
+ const step = iteration * 2;
102
+ let factor = (iteration * (beta - iteration) * x) / ((qam + step) * (alpha + step));
103
+ d = 1 + factor * d;
104
+ if (Math.abs(d) < tiny) {
105
+ d = tiny;
106
+ }
107
+ c = 1 + factor / c;
108
+ if (Math.abs(c) < tiny) {
109
+ c = tiny;
110
+ }
111
+ d = 1 / d;
112
+ h *= d * c;
113
+ factor = (-(alpha + iteration) * (qab + iteration) * x) / ((alpha + step) * (qap + step));
114
+ d = 1 + factor * d;
115
+ if (Math.abs(d) < tiny) {
116
+ d = tiny;
117
+ }
118
+ c = 1 + factor / c;
119
+ if (Math.abs(c) < tiny) {
120
+ c = tiny;
121
+ }
122
+ d = 1 / d;
123
+ const delta = d * c;
124
+ h *= delta;
125
+ if (Math.abs(delta - 1) <= epsilon) {
126
+ break;
127
+ }
128
+ }
129
+ return h;
130
+ }
131
+ function regularizedBeta(x, alpha, beta) {
132
+ if (!Number.isFinite(x) ||
133
+ !Number.isFinite(alpha) ||
134
+ !Number.isFinite(beta) ||
135
+ x < 0 ||
136
+ x > 1 ||
137
+ alpha <= 0 ||
138
+ beta <= 0) {
139
+ return Number.NaN;
140
+ }
141
+ if (x === 0) {
142
+ return 0;
143
+ }
144
+ if (x === 1) {
145
+ return 1;
146
+ }
147
+ const logTerm = alpha * Math.log(x) + beta * Math.log(1 - x) - logBeta(alpha, beta);
148
+ if (!Number.isFinite(logTerm)) {
149
+ return Number.NaN;
150
+ }
151
+ const front = Math.exp(logTerm);
152
+ if (x < (alpha + 1) / (alpha + beta + 2)) {
153
+ return (front * betaContinuedFraction(x, alpha, beta)) / alpha;
154
+ }
155
+ return 1 - (front * betaContinuedFraction(1 - x, beta, alpha)) / beta;
156
+ }
157
+ function fDistributionCdf(x, degreesFreedom1, degreesFreedom2) {
158
+ if (!Number.isFinite(x) ||
159
+ !Number.isFinite(degreesFreedom1) ||
160
+ !Number.isFinite(degreesFreedom2) ||
161
+ x < 0 ||
162
+ degreesFreedom1 < 1 ||
163
+ degreesFreedom2 < 1) {
164
+ return Number.NaN;
165
+ }
166
+ const alpha = degreesFreedom1 / 2;
167
+ const beta = degreesFreedom2 / 2;
168
+ const transformed = (degreesFreedom1 * x) / (degreesFreedom1 * x + degreesFreedom2);
169
+ return regularizedBeta(transformed, alpha, beta);
170
+ }
171
+ function studentTCdf(x, degreesFreedom) {
172
+ if (!Number.isFinite(x) || !Number.isFinite(degreesFreedom) || degreesFreedom < 1) {
173
+ return Number.NaN;
174
+ }
175
+ if (x === 0) {
176
+ return 0.5;
177
+ }
178
+ const transformed = degreesFreedom / (degreesFreedom + x * x);
179
+ const tail = regularizedBeta(transformed, degreesFreedom / 2, 0.5);
180
+ if (!Number.isFinite(tail)) {
181
+ return Number.NaN;
182
+ }
183
+ return x > 0 ? 1 - tail / 2 : tail / 2;
184
+ }
185
+ function collectSampleNumbers(arg, deps) {
186
+ if (!deps.isRangeArg(arg)) {
187
+ if (arg.tag === ValueTag.Error) {
188
+ return arg;
189
+ }
190
+ return arg.tag === ValueTag.Number ? [arg.value] : deps.errorValue(ErrorCode.Value);
191
+ }
192
+ const values = [];
193
+ for (const value of arg.values) {
194
+ if (value.tag === ValueTag.Error) {
195
+ return value;
196
+ }
197
+ if (value.tag === ValueTag.Number) {
198
+ values.push(value.value);
199
+ }
200
+ }
201
+ return values;
202
+ }
203
+ function chiSquareTestResult(actualArg, expectedArg, deps) {
204
+ const actual = deps.toNumericMatrix(actualArg);
205
+ if (!Array.isArray(actual)) {
206
+ return actual;
207
+ }
208
+ const expected = deps.toNumericMatrix(expectedArg);
209
+ if (!Array.isArray(expected)) {
210
+ return expected;
211
+ }
212
+ const rows = actual.length;
213
+ const cols = actual[0]?.length ?? 0;
214
+ if (rows !== expected.length || cols !== (expected[0]?.length ?? 0)) {
215
+ return deps.errorValue(ErrorCode.NA);
216
+ }
217
+ if ((rows === 1 && cols === 1) || rows === 0 || cols === 0) {
218
+ return deps.errorValue(ErrorCode.NA);
219
+ }
220
+ let statistic = 0;
221
+ for (let row = 0; row < rows; row += 1) {
222
+ const actualRow = actual[row];
223
+ const expectedRow = expected[row];
224
+ if (actualRow.length !== cols || expectedRow.length !== cols) {
225
+ return deps.errorValue(ErrorCode.NA);
226
+ }
227
+ for (let col = 0; col < cols; col += 1) {
228
+ const actualValue = actualRow[col];
229
+ const expectedValue = expectedRow[col];
230
+ if (actualValue < 0 || expectedValue < 0) {
231
+ return deps.errorValue(ErrorCode.Value);
232
+ }
233
+ if (expectedValue === 0) {
234
+ return deps.errorValue(ErrorCode.Div0);
235
+ }
236
+ const delta = actualValue - expectedValue;
237
+ statistic += (delta * delta) / expectedValue;
238
+ }
239
+ }
240
+ const degrees = rows > 1 && cols > 1 ? (rows - 1) * (cols - 1) : rows > 1 ? rows - 1 : cols - 1;
241
+ if (degrees <= 0) {
242
+ return deps.errorValue(ErrorCode.NA);
243
+ }
244
+ const probability = regularizedUpperGamma(degrees / 2, statistic / 2);
245
+ return Number.isFinite(probability)
246
+ ? { tag: ValueTag.Number, value: probability }
247
+ : deps.errorValue(ErrorCode.Value);
248
+ }
249
+ function fTestResult(firstArg, secondArg, deps) {
250
+ const first = collectSampleNumbers(firstArg, deps);
251
+ if (!Array.isArray(first)) {
252
+ return first;
253
+ }
254
+ const second = collectSampleNumbers(secondArg, deps);
255
+ if (!Array.isArray(second)) {
256
+ return second;
257
+ }
258
+ if (first.length < 2 || second.length < 2) {
259
+ return deps.errorValue(ErrorCode.Div0);
260
+ }
261
+ const firstMean = first.reduce((sum, value) => sum + value, 0) / first.length;
262
+ const secondMean = second.reduce((sum, value) => sum + value, 0) / second.length;
263
+ const firstVariance = first.reduce((sum, value) => sum + (value - firstMean) ** 2, 0) / (first.length - 1);
264
+ const secondVariance = second.reduce((sum, value) => sum + (value - secondMean) ** 2, 0) / (second.length - 1);
265
+ if (!(firstVariance > 0) || !(secondVariance > 0)) {
266
+ return deps.errorValue(ErrorCode.Div0);
267
+ }
268
+ const firstLeads = firstVariance >= secondVariance;
269
+ const numeratorVariance = firstLeads ? firstVariance : secondVariance;
270
+ const denominatorVariance = firstLeads ? secondVariance : firstVariance;
271
+ const numeratorDf = firstLeads ? first.length - 1 : second.length - 1;
272
+ const denominatorDf = firstLeads ? second.length - 1 : first.length - 1;
273
+ const upperTail = 1 - fDistributionCdf(numeratorVariance / denominatorVariance, numeratorDf, denominatorDf);
274
+ const probability = Math.min(1, upperTail * 2);
275
+ return Number.isFinite(probability)
276
+ ? { tag: ValueTag.Number, value: probability }
277
+ : deps.errorValue(ErrorCode.Value);
278
+ }
279
+ function zTestResult(arrayArg, xArg, deps, sigmaArg) {
280
+ const sample = collectSampleNumbers(arrayArg, deps);
281
+ if (!Array.isArray(sample)) {
282
+ return sample;
283
+ }
284
+ const x = !deps.isRangeArg(xArg) ? deps.toNumber(xArg) : undefined;
285
+ if (x === undefined || sample.length === 0) {
286
+ return deps.errorValue(ErrorCode.Value);
287
+ }
288
+ let sigma;
289
+ if (sigmaArg !== undefined) {
290
+ sigma = !deps.isRangeArg(sigmaArg) ? deps.toNumber(sigmaArg) : undefined;
291
+ }
292
+ else if (sample.length >= 2) {
293
+ const mean = sample.reduce((sum, value) => sum + value, 0) / sample.length;
294
+ const variance = sample.reduce((sum, value) => sum + (value - mean) ** 2, 0) / (sample.length - 1);
295
+ sigma = variance > 0 ? Math.sqrt(variance) : undefined;
296
+ }
297
+ if (sigma === undefined || !(sigma > 0)) {
298
+ return deps.errorValue(ErrorCode.Div0);
299
+ }
300
+ const mean = sample.reduce((sum, value) => sum + value, 0) / sample.length;
301
+ const zScore = (mean - x) / (sigma / Math.sqrt(sample.length));
302
+ const probability = 1 - standardNormalCdf(zScore);
303
+ return Number.isFinite(probability)
304
+ ? { tag: ValueTag.Number, value: probability }
305
+ : deps.errorValue(ErrorCode.Value);
306
+ }
307
+ function tTestResult(firstArg, secondArg, tailsArg, typeArg, deps) {
308
+ const first = collectSampleNumbers(firstArg, deps);
309
+ if (!Array.isArray(first)) {
310
+ return first;
311
+ }
312
+ const second = collectSampleNumbers(secondArg, deps);
313
+ if (!Array.isArray(second)) {
314
+ return second;
315
+ }
316
+ const tails = !deps.isRangeArg(tailsArg) ? deps.toNumber(tailsArg) : undefined;
317
+ const type = !deps.isRangeArg(typeArg) ? deps.toNumber(typeArg) : undefined;
318
+ if (tails === undefined ||
319
+ type === undefined ||
320
+ !Number.isInteger(tails) ||
321
+ !Number.isInteger(type) ||
322
+ ![1, 2].includes(tails) ||
323
+ ![1, 2, 3].includes(type)) {
324
+ return deps.errorValue(ErrorCode.Value);
325
+ }
326
+ let statistic;
327
+ let degreesFreedom;
328
+ if (type === 1) {
329
+ if (first.length !== second.length) {
330
+ return deps.errorValue(ErrorCode.NA);
331
+ }
332
+ if (first.length < 2) {
333
+ return deps.errorValue(ErrorCode.Div0);
334
+ }
335
+ const deltas = first.map((value, index) => value - second[index]);
336
+ const mean = deltas.reduce((sum, value) => sum + value, 0) / deltas.length;
337
+ const variance = deltas.reduce((sum, value) => sum + (value - mean) ** 2, 0) / (deltas.length - 1);
338
+ if (!(variance > 0)) {
339
+ return deps.errorValue(ErrorCode.Div0);
340
+ }
341
+ statistic = mean / Math.sqrt(variance / deltas.length);
342
+ degreesFreedom = deltas.length - 1;
343
+ }
344
+ else {
345
+ if (first.length < 2 || second.length < 2) {
346
+ return deps.errorValue(ErrorCode.Div0);
347
+ }
348
+ const firstMean = first.reduce((sum, value) => sum + value, 0) / first.length;
349
+ const secondMean = second.reduce((sum, value) => sum + value, 0) / second.length;
350
+ const firstVariance = first.reduce((sum, value) => sum + (value - firstMean) ** 2, 0) / (first.length - 1);
351
+ const secondVariance = second.reduce((sum, value) => sum + (value - secondMean) ** 2, 0) / (second.length - 1);
352
+ if (!(firstVariance > 0) || !(secondVariance > 0)) {
353
+ return deps.errorValue(ErrorCode.Div0);
354
+ }
355
+ if (type === 2) {
356
+ const pooledVariance = ((first.length - 1) * firstVariance + (second.length - 1) * secondVariance) /
357
+ (first.length + second.length - 2);
358
+ if (!(pooledVariance > 0)) {
359
+ return deps.errorValue(ErrorCode.Div0);
360
+ }
361
+ statistic =
362
+ (firstMean - secondMean) /
363
+ Math.sqrt(pooledVariance * (1 / first.length + 1 / second.length));
364
+ degreesFreedom = first.length + second.length - 2;
365
+ }
366
+ else {
367
+ const firstTerm = firstVariance / first.length;
368
+ const secondTerm = secondVariance / second.length;
369
+ const denominator = Math.sqrt(firstTerm + secondTerm);
370
+ const welchDenominator = (firstTerm * firstTerm) / (first.length - 1) +
371
+ (secondTerm * secondTerm) / (second.length - 1);
372
+ if (!(denominator > 0) || !(welchDenominator > 0)) {
373
+ return deps.errorValue(ErrorCode.Div0);
374
+ }
375
+ statistic = (firstMean - secondMean) / denominator;
376
+ degreesFreedom = (firstTerm + secondTerm) ** 2 / welchDenominator;
377
+ }
378
+ }
379
+ const upperTail = 1 - studentTCdf(Math.abs(statistic), degreesFreedom);
380
+ const probability = tails === 1 ? upperTail : Math.min(1, upperTail * 2);
381
+ return Number.isFinite(probability)
382
+ ? { tag: ValueTag.Number, value: probability }
383
+ : deps.errorValue(ErrorCode.Value);
384
+ }
2
385
  export function createLookupHypothesisBuiltins(deps) {
3
386
  return {
4
387
  "CHISQ.TEST": (actualArg, expectedArg) => {
5
388
  return actualArg === undefined || expectedArg === undefined
6
389
  ? deps.errorValue(ErrorCode.Value)
7
- : deps.chiSquareTestResult(actualArg, expectedArg);
390
+ : chiSquareTestResult(actualArg, expectedArg, deps);
8
391
  },
9
392
  CHITEST: (actualArg, expectedArg) => {
10
393
  return actualArg === undefined || expectedArg === undefined
11
394
  ? deps.errorValue(ErrorCode.Value)
12
- : deps.chiSquareTestResult(actualArg, expectedArg);
395
+ : chiSquareTestResult(actualArg, expectedArg, deps);
13
396
  },
14
397
  "LEGACY.CHITEST": (actualArg, expectedArg) => {
15
398
  return actualArg === undefined || expectedArg === undefined
16
399
  ? deps.errorValue(ErrorCode.Value)
17
- : deps.chiSquareTestResult(actualArg, expectedArg);
400
+ : chiSquareTestResult(actualArg, expectedArg, deps);
18
401
  },
19
402
  "F.TEST": (firstArg, secondArg) => {
20
403
  return firstArg === undefined || secondArg === undefined
21
404
  ? deps.errorValue(ErrorCode.Value)
22
- : deps.fTestResult(firstArg, secondArg);
405
+ : fTestResult(firstArg, secondArg, deps);
23
406
  },
24
407
  FTEST: (firstArg, secondArg) => {
25
408
  return firstArg === undefined || secondArg === undefined
26
409
  ? deps.errorValue(ErrorCode.Value)
27
- : deps.fTestResult(firstArg, secondArg);
410
+ : fTestResult(firstArg, secondArg, deps);
28
411
  },
29
412
  "Z.TEST": (arrayArg, xArg, sigmaArg) => {
30
413
  return arrayArg === undefined || xArg === undefined
31
414
  ? deps.errorValue(ErrorCode.Value)
32
- : deps.zTestResult(arrayArg, xArg, sigmaArg);
415
+ : zTestResult(arrayArg, xArg, deps, sigmaArg);
33
416
  },
34
417
  ZTEST: (arrayArg, xArg, sigmaArg) => {
35
418
  return arrayArg === undefined || xArg === undefined
36
419
  ? deps.errorValue(ErrorCode.Value)
37
- : deps.zTestResult(arrayArg, xArg, sigmaArg);
420
+ : zTestResult(arrayArg, xArg, deps, sigmaArg);
38
421
  },
39
422
  "T.TEST": (firstArg, secondArg, tailsArg, typeArg) => {
40
423
  return firstArg === undefined ||
@@ -42,7 +425,7 @@ export function createLookupHypothesisBuiltins(deps) {
42
425
  tailsArg === undefined ||
43
426
  typeArg === undefined
44
427
  ? deps.errorValue(ErrorCode.Value)
45
- : deps.tTestResult(firstArg, secondArg, tailsArg, typeArg);
428
+ : tTestResult(firstArg, secondArg, tailsArg, typeArg, deps);
46
429
  },
47
430
  TTEST: (firstArg, secondArg, tailsArg, typeArg) => {
48
431
  return firstArg === undefined ||
@@ -50,7 +433,7 @@ export function createLookupHypothesisBuiltins(deps) {
50
433
  tailsArg === undefined ||
51
434
  typeArg === undefined
52
435
  ? deps.errorValue(ErrorCode.Value)
53
- : deps.tTestResult(firstArg, secondArg, tailsArg, typeArg);
436
+ : tTestResult(firstArg, secondArg, tailsArg, typeArg, deps);
54
437
  },
55
438
  };
56
439
  }
@@ -1 +1 @@
1
- {"version":3,"file":"lookup-hypothesis-builtins.js","sourceRoot":"","sources":["../../src/builtins/lookup-hypothesis-builtins.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lookup-hypothesis-builtins.js","sourceRoot":"","sources":["../../src/builtins/lookup-hypothesis-builtins.ts"],"names":[],"mappings":"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"}