df-script 1.4.0 → 1.5.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.
Files changed (95) hide show
  1. package/README.md +83 -34
  2. package/dist/api.d.ts +16 -8
  3. package/dist/api.js +11 -3
  4. package/dist/columnExpressions/ColumnExpr.d.ts +26 -364
  5. package/dist/columnExpressions/ColumnExpr.js +199 -3
  6. package/dist/columnExpressions/ExprBase.d.ts +8 -11
  7. package/dist/columnExpressions/ExprBase.js +20 -61
  8. package/dist/columnExpressions/constants.d.ts +2 -0
  9. package/dist/columnExpressions/constants.js +3 -1
  10. package/dist/columnExpressions/functions/coalesce.js +8 -4
  11. package/dist/columnExpressions/functions/element.d.ts +5 -0
  12. package/dist/columnExpressions/functions/element.js +11 -0
  13. package/dist/columnExpressions/functions/implode.d.ts +3 -0
  14. package/dist/columnExpressions/functions/implode.js +7 -0
  15. package/dist/columnExpressions/functions/lit.d.ts +3 -1
  16. package/dist/columnExpressions/functions/lit.js +8 -13
  17. package/dist/columnExpressions/functions/repeat.d.ts +47 -0
  18. package/dist/columnExpressions/functions/repeat.js +131 -0
  19. package/dist/columnExpressions/functions/seq_range.d.ts +31 -0
  20. package/dist/columnExpressions/functions/seq_range.js +91 -0
  21. package/dist/columnExpressions/functions/when.js +8 -4
  22. package/dist/columnExpressions/index.d.ts +5 -2
  23. package/dist/columnExpressions/index.js +5 -48
  24. package/dist/columnExpressions/mixins/AggregationExpr.d.ts +25 -50
  25. package/dist/columnExpressions/mixins/AggregationExpr.js +69 -165
  26. package/dist/columnExpressions/mixins/ArithmeticExpr.d.ts +41 -66
  27. package/dist/columnExpressions/mixins/ArithmeticExpr.js +126 -138
  28. package/dist/columnExpressions/mixins/BooleanExpr.d.ts +40 -0
  29. package/dist/columnExpressions/mixins/BooleanExpr.js +67 -0
  30. package/dist/columnExpressions/mixins/ComparisonExpr.d.ts +31 -60
  31. package/dist/columnExpressions/mixins/ComparisonExpr.js +231 -370
  32. package/dist/columnExpressions/mixins/ListExpr.d.ts +15 -39
  33. package/dist/columnExpressions/mixins/ListExpr.js +124 -148
  34. package/dist/columnExpressions/mixins/LogicalExpr.d.ts +7 -33
  35. package/dist/columnExpressions/mixins/LogicalExpr.js +48 -49
  36. package/dist/columnExpressions/mixins/ManipulationExpr.d.ts +6 -31
  37. package/dist/columnExpressions/mixins/ManipulationExpr.js +61 -25
  38. package/dist/columnExpressions/mixins/NumericExpr.d.ts +92 -0
  39. package/dist/columnExpressions/mixins/NumericExpr.js +259 -0
  40. package/dist/columnExpressions/mixins/StringExpr.d.ts +5 -30
  41. package/dist/columnExpressions/mixins/StringExpr.js +37 -49
  42. package/dist/columnExpressions/mixins/StructExpr.d.ts +16 -0
  43. package/dist/columnExpressions/mixins/StructExpr.js +139 -0
  44. package/dist/columnExpressions/mixins/TemporalExpr.d.ts +4 -30
  45. package/dist/columnExpressions/mixins/TemporalExpr.js +28 -29
  46. package/dist/columnExpressions/mixins/WindowExpr.d.ts +27 -49
  47. package/dist/columnExpressions/mixins/WindowExpr.js +144 -274
  48. package/dist/columnExpressions/utils.d.ts +4 -0
  49. package/dist/columnExpressions/utils.js +45 -0
  50. package/dist/dataframe/constants.d.ts +3 -0
  51. package/dist/dataframe/constants.js +4 -1
  52. package/dist/dataframe/dataframe.d.ts +27 -10
  53. package/dist/dataframe/dataframe.js +461 -220
  54. package/dist/dataframe/grouped/grouped.d.ts +2 -3
  55. package/dist/dataframe/grouped/grouped.js +17 -16
  56. package/dist/dataframe/types.d.ts +65 -1
  57. package/dist/dataframe/utils.d.ts +11 -3
  58. package/dist/dataframe/utils.js +101 -9
  59. package/dist/datatypes/DataType.d.ts +2 -1
  60. package/dist/datatypes/DataType.js +29 -0
  61. package/dist/datatypes/index.d.ts +2 -2
  62. package/dist/datatypes/types.d.ts +37 -36
  63. package/dist/datatypes/types.js +15 -11
  64. package/dist/exceptions/index.d.ts +2 -0
  65. package/dist/exceptions/index.js +4 -1
  66. package/dist/exceptions/utils.d.ts +1 -0
  67. package/dist/exceptions/utils.js +19 -0
  68. package/dist/functions/concat.d.ts +1 -2
  69. package/dist/functions/concat.js +24 -12
  70. package/dist/functions/index.d.ts +3 -1
  71. package/dist/functions/index.js +7 -15
  72. package/dist/functions/read_csv.d.ts +8 -0
  73. package/dist/functions/read_csv.js +53 -0
  74. package/dist/functions/read_json.d.ts +10 -0
  75. package/dist/functions/read_json.js +21 -0
  76. package/dist/functions/transpose.d.ts +7 -0
  77. package/dist/functions/transpose.js +84 -0
  78. package/dist/index.js +6 -1
  79. package/dist/types.d.ts +31 -5
  80. package/dist/utils/csv.d.ts +77 -0
  81. package/dist/utils/csv.js +313 -0
  82. package/dist/utils/date.js +5 -6
  83. package/dist/utils/guards.d.ts +0 -2
  84. package/dist/utils/guards.js +0 -31
  85. package/dist/utils/index.d.ts +2 -0
  86. package/dist/utils/index.js +2 -0
  87. package/dist/utils/json.d.ts +120 -2
  88. package/dist/utils/json.js +204 -20
  89. package/dist/utils/list.d.ts +173 -1
  90. package/dist/utils/list.js +255 -22
  91. package/dist/utils/number.d.ts +61 -28
  92. package/dist/utils/number.js +248 -70
  93. package/dist/utils/string.d.ts +5 -0
  94. package/dist/utils/string.js +89 -0
  95. package/package.json +5 -1
@@ -2,388 +2,249 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ComparisonExpr = void 0;
4
4
  const ExprBase_1 = require("../ExprBase");
5
- const utils_1 = require("../../utils");
6
- function getCacheKey(val) {
7
- if (val == null) {
8
- return val;
9
- }
10
- if (val instanceof Date) {
11
- return `d:${val.getTime()}`;
12
- }
13
- if (val instanceof Uint8Array) {
14
- return `u:${val.toString()}`;
15
- }
16
- if (typeof val === "object" || typeof val === "function") {
17
- return String(val);
18
- }
19
- return val;
20
- }
21
- const ComparisonExpr = (Base) => {
22
- return class extends Base {
23
- between(lower, upper, closed = "both") {
24
- return (0, ExprBase_1.derive)(this, (vArray, columns) => {
25
- const height = vArray.length;
26
- const lResolved = this._resolve(lower, columns, height);
27
- const uResolved = this._resolve(upper, columns, height);
28
- const result = new Array(height);
29
- const isLArray = (0, utils_1.isArrayOrTypedArray)(lResolved);
30
- const isUArray = (0, utils_1.isArrayOrTypedArray)(uResolved);
31
- for (let i = 0; i < height; i++) {
32
- const v = vArray[i];
33
- const l = isLArray ? lResolved[i] : lResolved;
34
- const u = isUArray ? uResolved[i] : uResolved;
35
- if (v == null || l == null || u == null) {
36
- result[i] = null;
37
- }
38
- else {
39
- const geLower = closed === "both" || closed === "left" ? v >= l : v > l;
40
- const leUpper = closed === "both" || closed === "right" ? v <= u : v < u;
41
- result[i] = geLower && leUpper;
42
- }
43
- }
44
- return result;
45
- });
46
- }
47
- eq(val) {
48
- return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneBinary)(this, val, (v, r) => v === r));
49
- }
50
- eq_missing(val) {
51
- return (0, ExprBase_1.derive)(this, (vArray, columns) => {
52
- const height = vArray.length;
53
- const rResolved = this._resolve(val, columns, height);
54
- const result = new Array(height);
55
- if ((0, utils_1.isArrayOrTypedArray)(rResolved)) {
56
- for (let i = 0; i < height; i++) {
57
- const v = vArray[i];
58
- const r = rResolved[i];
59
- if (v == null && r == null)
60
- result[i] = true;
61
- else if (v == null || r == null)
62
- result[i] = false;
63
- else
64
- result[i] = v === r;
65
- }
66
- }
67
- else {
68
- for (let i = 0; i < height; i++) {
69
- const v = vArray[i];
70
- if (v == null && rResolved == null)
71
- result[i] = true;
72
- else if (v == null || rResolved == null)
73
- result[i] = false;
74
- else
75
- result[i] = v === rResolved;
76
- }
77
- }
78
- return result;
79
- });
80
- }
81
- ge(val) {
82
- return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneBinary)(this, val, (v, r) => v >= r));
83
- }
84
- gt(val) {
85
- return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneBinary)(this, val, (v, r) => v > r));
86
- }
87
- has_nulls() {
88
- return this._deriveAgg((v) => {
89
- for (let i = 0; i < v.length; i++) {
90
- if (v[i] == null)
91
- return true;
92
- }
93
- return false;
94
- });
95
- }
96
- is_close(other, options = {}) {
97
- const { abs_tol = 1e-8, rel_tol = 1e-8, nans_equal = false } = options;
98
- return (0, ExprBase_1.derive)(this, (vArray, columns) => {
99
- const height = vArray.length;
100
- const otherVal = this._resolve(other, columns, height);
101
- const isOtherArray = (0, utils_1.isArrayOrTypedArray)(otherVal);
102
- const result = new Array(height);
103
- for (let i = 0; i < height; i++) {
104
- const v = vArray[i];
105
- const o = isOtherArray ? otherVal[i] : otherVal;
106
- if (v == null || o == null) {
107
- result[i] = null;
108
- }
109
- else if (Number.isNaN(v) || Number.isNaN(o)) {
110
- if (nans_equal && Number.isNaN(v) && Number.isNaN(o)) {
111
- result[i] = true;
112
- }
113
- else {
114
- result[i] = false;
115
- }
116
- }
117
- else if (!Number.isFinite(v) || !Number.isFinite(o)) {
118
- result[i] = (v === o);
119
- }
120
- else {
121
- const absDiff = Math.abs(v - o);
122
- const threshold = Math.max(rel_tol * Math.max(Math.abs(v), Math.abs(o)), abs_tol);
123
- result[i] = absDiff <= threshold;
124
- }
125
- }
126
- return result;
127
- });
128
- }
129
- is_duplicated() {
130
- return (0, ExprBase_1.derive)(this, (vArray) => {
131
- const height = vArray.length;
132
- const counts = new Map();
133
- const keys = new Array(height);
134
- for (let i = 0; i < height; i++) {
135
- const k = getCacheKey(vArray[i]);
136
- keys[i] = k;
137
- counts.set(k, (counts.get(k) || 0) + 1);
138
- }
139
- const result = new Array(height);
140
- for (let i = 0; i < height; i++) {
141
- result[i] = (counts.get(keys[i]) || 0) > 1;
142
- }
143
- return result;
144
- });
145
- }
146
- is_empty(options = {}) {
147
- const { ignoreNulls = false } = options;
148
- return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)((v) => {
149
- if (typeof v === "string") {
150
- return v.length === 0;
151
- }
152
- if ((0, utils_1.isArrayOrTypedArray)(v)) {
153
- if (ignoreNulls) {
154
- const len = v.length;
155
- let nonNullCount = 0;
156
- for (let i = 0; i < len; i++) {
157
- if (v[i] != null) {
158
- nonNullCount++;
159
- }
160
- }
161
- return nonNullCount === 0;
162
- }
163
- return v.length === 0;
164
- }
165
- return null;
166
- }));
167
- }
168
- is_finite() {
169
- return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)(Number.isFinite));
170
- }
171
- is_first_distinct() {
172
- return (0, ExprBase_1.derive)(this, (vArray) => {
173
- const height = vArray.length;
174
- const seen = new Set();
175
- const result = new Array(height);
176
- for (let i = 0; i < height; i++) {
177
- const k = getCacheKey(vArray[i]);
178
- if (seen.has(k)) {
179
- result[i] = false;
180
- }
181
- else {
182
- seen.add(k);
183
- result[i] = true;
184
- }
185
- }
186
- return result;
187
- });
188
- }
189
- is_in(values) {
190
- return (0, ExprBase_1.derive)(this, (vArray, columns) => {
191
- const height = vArray.length;
192
- const result = new Array(height);
193
- if (values && typeof values === 'object' && 'evaluate' in values) {
194
- const resolved = values.evaluate(columns, height);
195
- for (let i = 0; i < height; i++) {
196
- const v = vArray[i];
197
- if (v == null) {
198
- result[i] = null;
199
- }
200
- else {
201
- const candidates = resolved[i];
202
- const set = new Set();
203
- if ((0, utils_1.isArrayOrTypedArray)(candidates)) {
204
- const cLen = candidates.length;
205
- for (let j = 0; j < cLen; j++) {
206
- set.add(getCacheKey(candidates[j]));
207
- }
208
- }
209
- else {
210
- set.add(getCacheKey(candidates));
211
- }
212
- result[i] = set.has(getCacheKey(v));
213
- }
5
+ const utils_1 = require("../utils");
6
+ const utils_2 = require("../../utils");
7
+ function computeIsIn(vArray, columns, values, invert) {
8
+ const height = vArray.length;
9
+ const result = new Array(height);
10
+ if (values && typeof values === 'object' && 'evaluate' in values) {
11
+ const resolved = values.evaluate(columns, height);
12
+ for (let i = 0; i < height; i++) {
13
+ const v = vArray[i];
14
+ if (v == null) {
15
+ result[i] = null;
16
+ }
17
+ else {
18
+ const candidates = resolved[i];
19
+ const set = new Set();
20
+ if ((0, utils_2.isArrayOrTypedArray)(candidates)) {
21
+ const cLen = candidates.length;
22
+ for (let j = 0; j < cLen; j++) {
23
+ set.add((0, utils_2.toCanonicalString)(candidates[j]));
214
24
  }
215
25
  }
216
26
  else {
217
- const arr = (0, utils_1.isArrayOrTypedArray)(values) ? values : [];
218
- const set = new Set();
219
- const arrLen = arr.length;
220
- for (let j = 0; j < arrLen; j++) {
221
- set.add(getCacheKey(arr[j]));
222
- }
223
- for (let i = 0; i < height; i++) {
224
- const v = vArray[i];
225
- result[i] = v == null ? null : set.has(getCacheKey(v));
226
- }
227
- }
228
- return result;
229
- });
230
- }
231
- is_infinite() {
232
- return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)((v) => v === Infinity || v === -Infinity));
233
- }
234
- is_last_distinct() {
235
- return (0, ExprBase_1.derive)(this, (vArray) => {
236
- const height = vArray.length;
237
- const seen = new Set();
238
- const result = new Array(height);
239
- for (let i = height - 1; i >= 0; i--) {
240
- const k = getCacheKey(vArray[i]);
241
- if (seen.has(k)) {
242
- result[i] = false;
243
- }
244
- else {
245
- seen.add(k);
246
- result[i] = true;
247
- }
248
- }
249
- return result;
250
- });
251
- }
252
- is_n_distinct(n) {
253
- return this._deriveAgg((v) => {
254
- const set = new Set();
255
- const len = v.length;
256
- for (let i = 0; i < len; i++) {
257
- set.add(getCacheKey(v[i]));
258
- }
259
- return set.size === n;
260
- });
261
- }
262
- is_nan() {
263
- return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)(Number.isNaN));
264
- }
265
- is_not_nan() {
266
- return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneUnary)((v) => !Number.isNaN(v)));
267
- }
268
- is_not_null() {
269
- return (0, ExprBase_1.derive)(this, (vArray) => {
270
- const height = vArray.length;
271
- const result = new Array(height);
272
- for (let i = 0; i < height; i++) {
273
- result[i] = vArray[i] != null;
274
- }
275
- return result;
276
- });
277
- }
278
- is_null() {
279
- return (0, ExprBase_1.derive)(this, (vArray) => {
280
- const height = vArray.length;
281
- const result = new Array(height);
282
- for (let i = 0; i < height; i++) {
283
- result[i] = vArray[i] == null;
284
- }
285
- return result;
286
- });
287
- }
288
- is_unique() {
289
- return (0, ExprBase_1.derive)(this, (vArray) => {
290
- const height = vArray.length;
291
- const counts = new Map();
292
- const keys = new Array(height);
293
- for (let i = 0; i < height; i++) {
294
- const k = getCacheKey(vArray[i]);
295
- keys[i] = k;
296
- counts.set(k, (counts.get(k) || 0) + 1);
27
+ set.add((0, utils_2.toCanonicalString)(candidates));
297
28
  }
298
- const result = new Array(height);
299
- for (let i = 0; i < height; i++) {
300
- result[i] = counts.get(keys[i]) === 1;
301
- }
302
- return result;
303
- });
29
+ const hasVal = set.has((0, utils_2.toCanonicalString)(v));
30
+ result[i] = invert ? !hasVal : hasVal;
31
+ }
304
32
  }
305
- le(val) {
306
- return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneBinary)(this, val, (v, r) => v <= r));
33
+ }
34
+ else {
35
+ const arr = (0, utils_2.isArrayOrTypedArray)(values) ? values : [];
36
+ const set = new Set();
37
+ const arrLen = arr.length;
38
+ for (let j = 0; j < arrLen; j++) {
39
+ set.add((0, utils_2.toCanonicalString)(arr[j]));
40
+ }
41
+ for (let i = 0; i < height; i++) {
42
+ const v = vArray[i];
43
+ if (v == null) {
44
+ result[i] = null;
45
+ }
46
+ else {
47
+ const hasVal = set.has((0, utils_2.toCanonicalString)(v));
48
+ result[i] = invert ? !hasVal : hasVal;
49
+ }
307
50
  }
308
- lt(val) {
309
- return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneBinary)(this, val, (v, r) => v < r));
51
+ }
52
+ return result;
53
+ }
54
+ function evaluateDuplication(vArray, checkDuplicate) {
55
+ const { frequencies } = (0, utils_2.getUniqueListStats)(vArray, { strict: true });
56
+ const height = vArray.length;
57
+ const result = new Array(height);
58
+ for (let i = 0; i < height; i++) {
59
+ const count = frequencies.get(vArray[i]) || 0;
60
+ result[i] = checkDuplicate ? count > 1 : count === 1;
61
+ }
62
+ return result;
63
+ }
64
+ function compareMissing(vArray, rResolved, invert) {
65
+ const height = vArray.length;
66
+ const result = new Array(height);
67
+ if ((0, utils_2.isArrayOrTypedArray)(rResolved)) {
68
+ for (let i = 0; i < height; i++) {
69
+ const v = vArray[i];
70
+ const r = rResolved[i];
71
+ if (v == null && r == null) {
72
+ result[i] = !invert;
73
+ }
74
+ else if (v == null || r == null) {
75
+ result[i] = invert;
76
+ }
77
+ else {
78
+ result[i] = invert ? v !== r : v === r;
79
+ }
310
80
  }
311
- ne(val) {
312
- return (0, ExprBase_1.derive)(this, (0, ExprBase_1.kleeneBinary)(this, val, (v, r) => v !== r));
81
+ }
82
+ else {
83
+ for (let i = 0; i < height; i++) {
84
+ const v = vArray[i];
85
+ if (v == null && rResolved == null) {
86
+ result[i] = !invert;
87
+ }
88
+ else if (v == null || rResolved == null) {
89
+ result[i] = invert;
90
+ }
91
+ else {
92
+ result[i] = invert ? v !== rResolved : v === rResolved;
93
+ }
313
94
  }
314
- ne_missing(val) {
315
- return (0, ExprBase_1.derive)(this, (vArray, columns) => {
316
- const height = vArray.length;
317
- const rResolved = this._resolve(val, columns, height);
318
- const result = new Array(height);
319
- if ((0, utils_1.isArrayOrTypedArray)(rResolved)) {
320
- for (let i = 0; i < height; i++) {
321
- const v = vArray[i];
322
- const r = rResolved[i];
323
- if (v == null && r == null)
324
- result[i] = false;
325
- else if (v == null || r == null)
326
- result[i] = true;
327
- else
328
- result[i] = v !== r;
329
- }
95
+ }
96
+ return result;
97
+ }
98
+ class ComparisonExpr extends ExprBase_1.ExprBase {
99
+ between(lower, upper, closed = "both") {
100
+ return (0, ExprBase_1.derive)(this, (vArray, columns) => {
101
+ const height = vArray.length;
102
+ const lResolved = this._resolve(lower, columns, height);
103
+ const uResolved = this._resolve(upper, columns, height);
104
+ const result = new Array(height);
105
+ const isLArray = (0, utils_2.isArrayOrTypedArray)(lResolved);
106
+ const isUArray = (0, utils_2.isArrayOrTypedArray)(uResolved);
107
+ for (let i = 0; i < height; i++) {
108
+ const v = vArray[i];
109
+ const l = isLArray ? lResolved[i] : lResolved;
110
+ const u = isUArray ? uResolved[i] : uResolved;
111
+ if (v == null || l == null || u == null) {
112
+ result[i] = null;
330
113
  }
331
114
  else {
332
- for (let i = 0; i < height; i++) {
333
- const v = vArray[i];
334
- if (v == null && rResolved == null)
335
- result[i] = false;
336
- else if (v == null || rResolved == null)
337
- result[i] = true;
338
- else
339
- result[i] = v !== rResolved;
340
- }
115
+ const geLower = closed === "both" || closed === "left" ? v >= l : v > l;
116
+ const leUpper = closed === "both" || closed === "right" ? v <= u : v < u;
117
+ result[i] = geLower && leUpper;
341
118
  }
342
- return result;
343
- });
344
- }
345
- not_in(values) {
346
- return (0, ExprBase_1.derive)(this, (vArray, columns) => {
347
- const height = vArray.length;
348
- const result = new Array(height);
349
- if (values && typeof values === 'object' && 'evaluate' in values) {
350
- const resolved = values.evaluate(columns, height);
351
- for (let i = 0; i < height; i++) {
352
- const v = vArray[i];
353
- if (v == null) {
354
- result[i] = null;
355
- }
356
- else {
357
- const candidates = resolved[i];
358
- const set = new Set();
359
- if ((0, utils_1.isArrayOrTypedArray)(candidates)) {
360
- const cLen = candidates.length;
361
- for (let j = 0; j < cLen; j++) {
362
- set.add(getCacheKey(candidates[j]));
363
- }
364
- }
365
- else {
366
- set.add(getCacheKey(candidates));
367
- }
368
- result[i] = !set.has(getCacheKey(v));
369
- }
370
- }
119
+ }
120
+ return result;
121
+ });
122
+ }
123
+ eq(val) {
124
+ return (0, ExprBase_1.derive)(this, (0, utils_1.kleeneBinary)(this, val, (v, r) => v === r));
125
+ }
126
+ eq_missing(val) {
127
+ return (0, ExprBase_1.derive)(this, (vArray, columns) => {
128
+ const rResolved = this._resolve(val, columns, vArray.length);
129
+ return compareMissing(vArray, rResolved, false);
130
+ });
131
+ }
132
+ ge(val) {
133
+ return (0, ExprBase_1.derive)(this, (0, utils_1.kleeneBinary)(this, val, (v, r) => v >= r));
134
+ }
135
+ gt(val) {
136
+ return (0, ExprBase_1.derive)(this, (0, utils_1.kleeneBinary)(this, val, (v, r) => v > r));
137
+ }
138
+ has_nulls() {
139
+ return this._deriveAgg((v) => {
140
+ for (let i = 0; i < v.length; i++) {
141
+ if (v[i] == null)
142
+ return true;
143
+ }
144
+ return false;
145
+ });
146
+ }
147
+ is_close(other, { abs_tol = 1e-8, rel_tol = 1e-8, nans_equal = false } = {}) {
148
+ return (0, ExprBase_1.derive)(this, (vArray, columns) => {
149
+ const height = vArray.length;
150
+ const otherVal = this._resolve(other, columns, height);
151
+ const isOtherArray = (0, utils_2.isArrayOrTypedArray)(otherVal);
152
+ const result = new Array(height);
153
+ for (let i = 0; i < height; i++) {
154
+ const v = vArray[i];
155
+ const o = isOtherArray ? otherVal[i] : otherVal;
156
+ if (v == null || o == null) {
157
+ result[i] = null;
158
+ }
159
+ else if ((0, utils_2.isValidNumber)(v) && (0, utils_2.isValidNumber)(o)) {
160
+ const absDiff = Math.abs(v - o);
161
+ const threshold = Math.max(rel_tol * Math.max(Math.abs(v), Math.abs(o)), abs_tol);
162
+ result[i] = absDiff <= threshold;
163
+ }
164
+ else if (Number.isNaN(v) && Number.isNaN(o)) {
165
+ result[i] = nans_equal;
371
166
  }
372
167
  else {
373
- const arr = (0, utils_1.isArrayOrTypedArray)(values) ? values : [];
374
- const set = new Set();
375
- const arrLen = arr.length;
376
- for (let j = 0; j < arrLen; j++) {
377
- set.add(getCacheKey(arr[j]));
378
- }
379
- for (let i = 0; i < height; i++) {
380
- const v = vArray[i];
381
- result[i] = v == null ? null : !set.has(getCacheKey(v));
382
- }
168
+ result[i] = (v === o);
383
169
  }
384
- return result;
385
- });
386
- }
387
- };
388
- };
170
+ }
171
+ return result;
172
+ });
173
+ }
174
+ is_duplicated() {
175
+ return (0, ExprBase_1.derive)(this, (vArray) => evaluateDuplication(vArray, true));
176
+ }
177
+ is_empty({ ignoreNulls = false } = {}) {
178
+ return (0, ExprBase_1.derive)(this, (0, utils_1.kleeneUnary)((v) => {
179
+ if (typeof v === "string") {
180
+ return v.length === 0;
181
+ }
182
+ if ((0, utils_2.isArrayOrTypedArray)(v)) {
183
+ if (ignoreNulls) {
184
+ return (0, utils_2.isArrayOfType)(v, "nullish", {
185
+ mode: "every"
186
+ });
187
+ }
188
+ return v.length === 0;
189
+ }
190
+ return null;
191
+ }));
192
+ }
193
+ is_finite() {
194
+ return (0, ExprBase_1.derive)(this, (0, utils_1.kleeneUnary)(Number.isFinite));
195
+ }
196
+ is_in(values) {
197
+ return (0, ExprBase_1.derive)(this, (vArray, columns) => computeIsIn(vArray, columns, values, false));
198
+ }
199
+ is_infinite() {
200
+ return (0, ExprBase_1.derive)(this, (0, utils_1.kleeneUnary)((v) => v === Infinity || v === -Infinity));
201
+ }
202
+ is_nan() {
203
+ return (0, ExprBase_1.derive)(this, (0, utils_1.kleeneUnary)(Number.isNaN));
204
+ }
205
+ is_not_nan() {
206
+ return (0, ExprBase_1.derive)(this, (0, utils_1.kleeneUnary)((v) => !Number.isNaN(v)));
207
+ }
208
+ is_not_null() {
209
+ return (0, ExprBase_1.derive)(this, (vArray) => {
210
+ const height = vArray.length;
211
+ const result = new Array(height);
212
+ for (let i = 0; i < height; i++) {
213
+ result[i] = vArray[i] != null;
214
+ }
215
+ return result;
216
+ });
217
+ }
218
+ is_null() {
219
+ return (0, ExprBase_1.derive)(this, (vArray) => {
220
+ const height = vArray.length;
221
+ const result = new Array(height);
222
+ for (let i = 0; i < height; i++) {
223
+ result[i] = vArray[i] == null;
224
+ }
225
+ return result;
226
+ });
227
+ }
228
+ is_unique() {
229
+ return (0, ExprBase_1.derive)(this, (vArray) => evaluateDuplication(vArray, false));
230
+ }
231
+ le(val) {
232
+ return (0, ExprBase_1.derive)(this, (0, utils_1.kleeneBinary)(this, val, (v, r) => v <= r));
233
+ }
234
+ lt(val) {
235
+ return (0, ExprBase_1.derive)(this, (0, utils_1.kleeneBinary)(this, val, (v, r) => v < r));
236
+ }
237
+ ne(val) {
238
+ return (0, ExprBase_1.derive)(this, (0, utils_1.kleeneBinary)(this, val, (v, r) => v !== r));
239
+ }
240
+ ne_missing(val) {
241
+ return (0, ExprBase_1.derive)(this, (vArray, columns) => {
242
+ const rResolved = this._resolve(val, columns, vArray.length);
243
+ return compareMissing(vArray, rResolved, true);
244
+ });
245
+ }
246
+ not_in(values) {
247
+ return (0, ExprBase_1.derive)(this, (vArray, columns) => computeIsIn(vArray, columns, values, true));
248
+ }
249
+ }
389
250
  exports.ComparisonExpr = ComparisonExpr;