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
@@ -3,279 +3,149 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WindowExpr = void 0;
4
4
  const ExprBase_1 = require("../ExprBase");
5
5
  const utils_1 = require("../../utils");
6
- const WindowExpr = (Base) => {
7
- return class extends Base {
8
- partitionBy = this.partitionBy || null;
9
- _rolling(windowSize, aggFn) {
10
- const newInst = (0, ExprBase_1.derive)(this);
11
- newInst.partitionOpsIndex = this.ops.length;
12
- newInst.groupingOpsIndex = this.ops.length;
13
- newInst.evaluateWindow = function (groupPreValues, _partitionIndices, currentIndex) {
14
- const start = Math.max(0, currentIndex - windowSize + 1);
15
- const end = currentIndex + 1;
16
- const windowVals = groupPreValues.slice(start, end);
17
- return aggFn(windowVals);
18
- };
19
- return newInst;
20
- }
21
- get isWindow() {
22
- return this.partitionBy !== null || this.evaluateWindow !== undefined || this.aggFn !== null;
23
- }
24
- cum_count(reverse = false) {
25
- const newInst = (0, ExprBase_1.derive)(this);
26
- newInst.partitionOpsIndex = this.ops.length;
27
- newInst.groupingOpsIndex = this.ops.length;
28
- newInst.evaluateWindow = function (groupPreValues, _partitionIndices, currentIndex) {
29
- let count = 0;
30
- const start = reverse ? currentIndex : 0;
31
- const end = reverse ? groupPreValues.length - 1 : currentIndex;
32
- for (let i = start; i <= end; i++) {
33
- const val = groupPreValues[i];
34
- if (val != null)
35
- count++;
6
+ function computeRank(arr, value, options = {}) {
7
+ if (value == null)
8
+ return null;
9
+ let targetArr = arr;
10
+ if (options.ignoreNulls) {
11
+ targetArr = [];
12
+ const len = arr.length;
13
+ for (let i = 0; i < len; i++) {
14
+ if (arr[i] != null)
15
+ targetArr.push(arr[i]);
16
+ }
17
+ }
18
+ if (options.dense) {
19
+ targetArr = Array.from(new Set(targetArr));
20
+ }
21
+ const sorted = [...targetArr].sort((a, b) => a - b);
22
+ const valueToRank = new Map();
23
+ const len = sorted.length;
24
+ for (let i = 0; i < len; i++) {
25
+ const v = sorted[i];
26
+ if (!valueToRank.has(v)) {
27
+ valueToRank.set(v, i + 1);
28
+ }
29
+ }
30
+ return valueToRank.get(value) ?? null;
31
+ }
32
+ class WindowExpr extends ExprBase_1.ExprBase {
33
+ partitionBy = this.partitionBy || null;
34
+ _window(evaluateWindow) {
35
+ const newInst = (0, ExprBase_1.derive)(this);
36
+ newInst.partitionOpsIndex = this.ops.length;
37
+ newInst.groupingOpsIndex = this.ops.length;
38
+ newInst.evaluateWindow = evaluateWindow;
39
+ return newInst;
40
+ }
41
+ _rolling(windowSize, aggFn) {
42
+ return this._window(function (groupPreValues, _partitionIndices, currentIndex) {
43
+ const start = Math.max(0, currentIndex - windowSize + 1);
44
+ const end = currentIndex + 1;
45
+ const windowVals = groupPreValues.slice(start, end);
46
+ return aggFn(windowVals);
47
+ });
48
+ }
49
+ _cum(reverse, initialVal, stepFn, postFn) {
50
+ return this._window(function (groupPreValues, _partitionIndices, currentIndex) {
51
+ let acc = initialVal;
52
+ let hasValid = false;
53
+ const start = reverse ? currentIndex : 0;
54
+ const end = reverse ? groupPreValues.length - 1 : currentIndex;
55
+ for (let i = start; i <= end; i++) {
56
+ const val = groupPreValues[i];
57
+ if (val != null) {
58
+ acc = stepFn(acc, val);
59
+ hasValid = true;
36
60
  }
37
- return count;
38
- };
39
- return newInst;
40
- }
41
- cum_max(reverse = false) {
42
- const newInst = (0, ExprBase_1.derive)(this);
43
- newInst.partitionOpsIndex = this.ops.length;
44
- newInst.groupingOpsIndex = this.ops.length;
45
- newInst.evaluateWindow = function (groupPreValues, _partitionIndices, currentIndex) {
46
- let maxVal = null;
47
- const start = reverse ? currentIndex : 0;
48
- const end = reverse ? groupPreValues.length - 1 : currentIndex;
49
- for (let i = start; i <= end; i++) {
50
- const val = groupPreValues[i];
51
- if (val != null) {
52
- if (maxVal === null || val > maxVal) {
53
- maxVal = val;
54
- }
55
- }
56
- }
57
- return maxVal;
58
- };
59
- return newInst;
60
- }
61
- cum_min(reverse = false) {
62
- const newInst = (0, ExprBase_1.derive)(this);
63
- newInst.partitionOpsIndex = this.ops.length;
64
- newInst.groupingOpsIndex = this.ops.length;
65
- newInst.evaluateWindow = function (groupPreValues, _partitionIndices, currentIndex) {
66
- let minVal = null;
67
- const start = reverse ? currentIndex : 0;
68
- const end = reverse ? groupPreValues.length - 1 : currentIndex;
69
- for (let i = start; i <= end; i++) {
70
- const val = groupPreValues[i];
71
- if (val != null) {
72
- if (minVal === null || val < minVal) {
73
- minVal = val;
74
- }
75
- }
76
- }
77
- return minVal;
78
- };
79
- return newInst;
80
- }
81
- cum_prod(reverse = false) {
82
- const newInst = (0, ExprBase_1.derive)(this);
83
- newInst.partitionOpsIndex = this.ops.length;
84
- newInst.groupingOpsIndex = this.ops.length;
85
- newInst.evaluateWindow = function (groupPreValues, _partitionIndices, currentIndex) {
86
- let prod = 1;
87
- let hasValid = false;
88
- const start = reverse ? currentIndex : 0;
89
- const end = reverse ? groupPreValues.length - 1 : currentIndex;
90
- for (let i = start; i <= end; i++) {
91
- const val = groupPreValues[i];
92
- if (val != null) {
93
- prod *= val;
94
- hasValid = true;
95
- }
96
- }
97
- return hasValid ? prod : null;
98
- };
99
- return newInst;
100
- }
101
- cum_sum(reverse = false) {
102
- const newInst = (0, ExprBase_1.derive)(this);
103
- newInst.partitionOpsIndex = this.ops.length;
104
- newInst.groupingOpsIndex = this.ops.length;
105
- newInst.evaluateWindow = function (groupPreValues, _partitionIndices, currentIndex) {
106
- let sum = 0;
107
- const start = reverse ? currentIndex : 0;
108
- const end = reverse ? groupPreValues.length - 1 : currentIndex;
109
- for (let i = start; i <= end; i++) {
110
- const val = groupPreValues[i];
111
- if (val != null)
112
- sum += val;
113
- }
114
- return sum;
115
- };
116
- return newInst;
117
- }
118
- dense_rank() {
119
- const newInst = (0, ExprBase_1.derive)(this);
120
- newInst.partitionOpsIndex = this.ops.length;
121
- newInst.groupingOpsIndex = this.ops.length;
122
- newInst.evaluateWindow = function (groupPreValues, _partitionIndices, currentIndex) {
123
- const sortedUnique = Array.from(new Set(groupPreValues)).sort((a, b) => a - b);
124
- const valueToRank = new Map();
125
- for (let idx = 0; idx < sortedUnique.length; idx++) {
126
- valueToRank.set(sortedUnique[idx], idx + 1);
127
- }
128
- const currentVal = groupPreValues[currentIndex];
129
- return valueToRank.get(currentVal) ?? null;
130
- };
131
- return newInst;
132
- }
133
- lag(offset = 1, defaultVal = null) {
134
- const newInst = (0, ExprBase_1.derive)(this);
135
- newInst.partitionOpsIndex = this.ops.length;
136
- newInst.groupingOpsIndex = this.ops.length;
137
- newInst.evaluateWindow = function (groupPreValues, _partitionIndices, currentIndex) {
138
- let val = defaultVal;
139
- if (currentIndex - offset >= 0) {
140
- val = groupPreValues[currentIndex - offset];
141
- }
142
- return val;
143
- };
144
- return newInst;
145
- }
146
- lead(offset = 1, defaultVal = null) {
147
- const newInst = (0, ExprBase_1.derive)(this);
148
- newInst.partitionOpsIndex = this.ops.length;
149
- newInst.groupingOpsIndex = this.ops.length;
150
- newInst.evaluateWindow = function (groupPreValues, _partitionIndices, currentIndex) {
151
- let val = defaultVal;
152
- if (currentIndex + offset < groupPreValues.length) {
153
- val = groupPreValues[currentIndex + offset];
154
- }
155
- return val;
156
- };
157
- return newInst;
158
- }
159
- over(columns) {
160
- const newInst = (0, ExprBase_1.derive)(this);
161
- const cols = Array.isArray(columns) ? columns : [columns];
162
- newInst.partitionBy = cols;
163
- return newInst;
164
- }
165
- rank() {
166
- const newInst = (0, ExprBase_1.derive)(this);
167
- newInst.partitionOpsIndex = this.ops.length;
168
- newInst.groupingOpsIndex = this.ops.length;
169
- newInst.evaluateWindow = function (groupPreValues, _partitionIndices, currentIndex) {
170
- const sorted = [...groupPreValues].sort((a, b) => a - b);
171
- const valueToRank = new Map();
172
- for (let i = 0; i < sorted.length; i++) {
173
- const v = sorted[i];
174
- if (!valueToRank.has(v)) {
175
- valueToRank.set(v, i + 1);
176
- }
177
- }
178
- const currentVal = groupPreValues[currentIndex];
179
- return valueToRank.get(currentVal) ?? null;
180
- };
181
- return newInst;
182
- }
183
- rolling_max(windowSize) {
184
- return this._rolling(windowSize, v => (0, utils_1.getListStats)(v).max);
185
- }
186
- rolling_mean(windowSize) {
187
- return this._rolling(windowSize, v => (0, utils_1.getListStats)(v).mean);
188
- }
189
- rolling_median(windowSize) {
190
- return this._rolling(windowSize, v => {
191
- if (!(0, utils_1.isArrayOfType)(v, "number", { allowNulls: true }))
192
- return null;
193
- const len = v.length;
194
- const nums = [];
195
- for (let i = 0; i < len; i++) {
196
- const val = v[i];
197
- if (val != null) {
198
- nums.push(val);
199
- }
200
- }
201
- const numsLen = nums.length;
202
- if (numsLen === 0)
203
- return null;
204
- nums.sort((a, b) => a - b);
205
- const mid = Math.floor(numsLen / 2);
206
- return numsLen % 2 !== 0
207
- ? nums[mid]
208
- : (nums[mid - 1] + nums[mid]) / 2;
209
- });
210
- }
211
- rolling_min(windowSize) {
212
- return this._rolling(windowSize, v => (0, utils_1.getListStats)(v).min);
213
- }
214
- rolling_quantile(quantile, windowSize) {
215
- return this._rolling(windowSize, v => {
216
- const f = [];
217
- for (let i = 0; i < v.length; i++) {
218
- if (v[i] != null)
219
- f.push(v[i]);
220
- }
221
- const n = f.length;
222
- if (n === 0)
223
- return null;
224
- f.sort((a, b) => a - b);
225
- const idx = quantile * (n - 1);
226
- const low = Math.floor(idx);
227
- const high = Math.ceil(idx);
228
- if (low === high)
229
- return f[low];
230
- return f[low] + (idx - low) * (f[high] - f[low]);
231
- });
232
- }
233
- rolling_rank(windowSize) {
234
- const newInst = (0, ExprBase_1.derive)(this);
235
- newInst.partitionOpsIndex = this.ops.length;
236
- newInst.groupingOpsIndex = this.ops.length;
237
- newInst.evaluateWindow = function (groupPreValues, _partitionIndices, currentIndex) {
238
- const start = Math.max(0, currentIndex - windowSize + 1);
239
- const end = currentIndex + 1;
240
- const vals = groupPreValues.slice(start, end);
241
- const currentVal = groupPreValues[currentIndex];
242
- if (currentVal == null)
243
- return null;
244
- const nonNullVals = [];
245
- for (let j = 0; j < vals.length; j++) {
246
- if (vals[j] != null)
247
- nonNullVals.push(vals[j]);
248
- }
249
- if (nonNullVals.length === 0)
250
- return null;
251
- const sorted = [...nonNullVals].sort((a, b) => a - b);
252
- const valueToRank = new Map();
253
- for (let i = 0; i < sorted.length; i++) {
254
- const v = sorted[i];
255
- if (!valueToRank.has(v)) {
256
- valueToRank.set(v, i + 1);
257
- }
258
- }
259
- return valueToRank.get(currentVal) ?? null;
260
- };
261
- return newInst;
262
- }
263
- rolling_std(windowSize) {
264
- return this._rolling(windowSize, v => (0, utils_1.getListStats)(v).std);
265
- }
266
- rolling_sum(windowSize) {
267
- return this._rolling(windowSize, v => (0, utils_1.getListStats)(v).sum);
268
- }
269
- row_number() {
270
- const newInst = (0, ExprBase_1.derive)(this);
271
- newInst.partitionOpsIndex = this.ops.length;
272
- newInst.groupingOpsIndex = this.ops.length;
273
- newInst.evaluateWindow = function (_groupPreValues, _partitionIndices, currentIndex) {
274
- return currentIndex + 1;
275
- };
276
- newInst.outputName = "row_number";
277
- return newInst;
278
- }
279
- };
280
- };
61
+ }
62
+ return postFn ? postFn(acc, hasValid) : acc;
63
+ });
64
+ }
65
+ get isWindow() {
66
+ return this.partitionBy !== null || this.evaluateWindow !== undefined || this.aggFn !== null;
67
+ }
68
+ cum_count(reverse = false) {
69
+ return this._cum(reverse, 0, (acc) => acc + 1);
70
+ }
71
+ cum_max(reverse = false) {
72
+ return this._cum(reverse, null, (acc, val) => (acc === null || val > acc ? val : acc));
73
+ }
74
+ cum_min(reverse = false) {
75
+ return this._cum(reverse, null, (acc, val) => (acc === null || val < acc ? val : acc));
76
+ }
77
+ cum_prod(reverse = false) {
78
+ return this._cum(reverse, 1, (acc, val) => acc * val, (acc, hasValid) => (hasValid ? acc : null));
79
+ }
80
+ cum_sum(reverse = false) {
81
+ return this._cum(reverse, 0, (acc, val) => acc + val);
82
+ }
83
+ dense_rank() {
84
+ return this._window(function (groupPreValues, _partitionIndices, currentIndex) {
85
+ return computeRank(groupPreValues, groupPreValues[currentIndex], { dense: true });
86
+ });
87
+ }
88
+ lag(offset = 1, defaultVal = null) {
89
+ return this._window(function (groupPreValues, _partitionIndices, currentIndex) {
90
+ let val = defaultVal;
91
+ if (currentIndex - offset >= 0) {
92
+ val = groupPreValues[currentIndex - offset];
93
+ }
94
+ return val;
95
+ });
96
+ }
97
+ lead(offset = 1, defaultVal = null) {
98
+ return this._window(function (groupPreValues, _partitionIndices, currentIndex) {
99
+ let val = defaultVal;
100
+ if (currentIndex + offset < groupPreValues.length) {
101
+ val = groupPreValues[currentIndex + offset];
102
+ }
103
+ return val;
104
+ });
105
+ }
106
+ over(columns) {
107
+ const newInst = (0, ExprBase_1.derive)(this);
108
+ const cols = Array.isArray(columns) ? columns : [columns];
109
+ newInst.partitionBy = cols;
110
+ return newInst;
111
+ }
112
+ rank() {
113
+ return this._window(function (groupPreValues, _partitionIndices, currentIndex) {
114
+ return computeRank(groupPreValues, groupPreValues[currentIndex]);
115
+ });
116
+ }
117
+ rolling_max(windowSize) {
118
+ return this._rolling(windowSize, v => (0, utils_1.getListStats)(v).max);
119
+ }
120
+ rolling_mean(windowSize) {
121
+ return this._rolling(windowSize, v => (0, utils_1.getListStats)(v).mean);
122
+ }
123
+ rolling_median(windowSize) {
124
+ return this._rolling(windowSize, v => (0, utils_1.computeMedian)(v));
125
+ }
126
+ rolling_min(windowSize) {
127
+ return this._rolling(windowSize, v => (0, utils_1.getListStats)(v).min);
128
+ }
129
+ rolling_quantile(quantile, windowSize) {
130
+ return this._rolling(windowSize, v => (0, utils_1.computeQuantile)(v, quantile));
131
+ }
132
+ rolling_rank(windowSize) {
133
+ return this._rolling(windowSize, (vals) => {
134
+ return computeRank(vals, vals[vals.length - 1], { ignoreNulls: true });
135
+ });
136
+ }
137
+ rolling_std(windowSize) {
138
+ return this._rolling(windowSize, v => (0, utils_1.getListStats)(v).std);
139
+ }
140
+ rolling_sum(windowSize) {
141
+ return this._rolling(windowSize, v => (0, utils_1.getListStats)(v).sum);
142
+ }
143
+ row_number() {
144
+ const newInst = this._window(function (_groupPreValues, _partitionIndices, currentIndex) {
145
+ return currentIndex + 1;
146
+ });
147
+ newInst.outputName = "row_number";
148
+ return newInst;
149
+ }
150
+ }
281
151
  exports.WindowExpr = WindowExpr;
@@ -0,0 +1,4 @@
1
+ import type { IExpr, ColumnData, ColumnDict } from "../types";
2
+ export declare const kleeneUnary: (fn: (v: any) => any) => (vArray: ColumnData) => any[];
3
+ export declare const kleeneBinary: (expr: IExpr, other: any, fn: (v: any, r: any) => any) => (vArray: ColumnData, columns: ColumnDict) => any[];
4
+ export declare function evaluateExpression(expr: IExpr, columns: ColumnDict, height: number): ColumnData;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.kleeneBinary = exports.kleeneUnary = void 0;
4
+ exports.evaluateExpression = evaluateExpression;
5
+ const utils_1 = require("../utils");
6
+ const utils_2 = require("../dataframe/utils");
7
+ const kleeneUnary = (fn) => {
8
+ return (vArray) => {
9
+ const height = vArray.length;
10
+ const result = new Array(height);
11
+ for (let i = 0; i < height; i++) {
12
+ const v = vArray[i];
13
+ result[i] = v == null ? null : fn(v);
14
+ }
15
+ return result;
16
+ };
17
+ };
18
+ exports.kleeneUnary = kleeneUnary;
19
+ const kleeneBinary = (expr, other, fn) => {
20
+ return (vArray, columns) => {
21
+ const height = vArray.length;
22
+ const rResolved = expr._resolve(other, columns, height);
23
+ const result = new Array(height);
24
+ if ((0, utils_1.isArrayOrTypedArray)(rResolved)) {
25
+ for (let i = 0; i < height; i++) {
26
+ const v = vArray[i];
27
+ const r = rResolved[i];
28
+ result[i] = (v == null || r == null) ? null : fn(v, r);
29
+ }
30
+ }
31
+ else {
32
+ for (let i = 0; i < height; i++) {
33
+ const v = vArray[i];
34
+ result[i] = (v == null || rResolved == null) ? null : fn(v, rResolved);
35
+ }
36
+ }
37
+ return result;
38
+ };
39
+ };
40
+ exports.kleeneBinary = kleeneBinary;
41
+ function evaluateExpression(expr, columns, height) {
42
+ return expr.isWindow
43
+ ? (0, utils_2.resolveWindowExpr)(expr, columns, height)
44
+ : expr.evaluate(columns, height);
45
+ }
@@ -1 +1,4 @@
1
1
  export declare const KEY_SEPARATOR = "\0";
2
+ export declare const NEWLINE = "\n";
3
+ export declare const CARRIAGE_RETURN = "\r";
4
+ export declare const UTF8_BOM = "\uFEFF";
@@ -1,4 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.KEY_SEPARATOR = void 0;
3
+ exports.UTF8_BOM = exports.CARRIAGE_RETURN = exports.NEWLINE = exports.KEY_SEPARATOR = void 0;
4
4
  exports.KEY_SEPARATOR = "\x00";
5
+ exports.NEWLINE = "\n";
6
+ exports.CARRIAGE_RETURN = "\r";
7
+ exports.UTF8_BOM = "\ufeff";
@@ -1,42 +1,59 @@
1
1
  import { GroupedData } from "./grouped/grouped";
2
- import type { IExpr, ColumnDict, DataFrameColumns, ConcatOptions, ConcatItem, HorizontalConcatOptions, RowRecord } from "../types";
3
- import type { LimitOptions, SortOptions, PivotOptions, JoinOptions, UnpivotOptions } from "./types";
4
- import { DataType } from "../datatypes";
2
+ import type { IExpr, ColumnData, ColumnDict, DataFrameColumns, ConcatOptions, ConcatItem, HorizontalConcatOptions, RowRecord, DataFrameSchema, RegisteredDataType, ExplodeOptions, IntoExpr, FillNullOptions } from "../types";
3
+ import type { LimitOptions, SortOptions, PivotOptions, JoinOptions, UnpivotOptions, TransposeOptions, WriteJSONOptions, WriteCSVOptions } from "./types";
5
4
  export declare class DataFrame<T extends RowRecord = any> {
6
5
  _columns: DataFrameColumns<T>;
7
6
  private _height;
8
7
  private _schema;
9
- constructor(data: T[] | ColumnDict, schema?: Record<string, DataType>, height?: number);
8
+ static _createDirect<U extends RowRecord = any>(columns: ColumnDict, schema: DataFrameSchema, height: number): DataFrame<U>;
9
+ constructor(data: T[] | ColumnDict, schema?: DataFrameSchema, height?: number);
10
10
  private inferSchema;
11
11
  private applySchema;
12
- getSchema(): Record<string, DataType>;
13
- to_dicts(): T[];
14
- to_dict(): DataFrameColumns<T>;
15
12
  get columns(): string[];
16
13
  concat<U extends RowRecord = any>(items: ConcatItem | ConcatItem[], options?: ConcatOptions): DataFrame<U>;
17
14
  drop<K extends keyof T>(...args: (K | K[])[]): DataFrame<Omit<T, K>>;
18
- get dtypes(): DataType[];
15
+ drop_nulls(subset?: string | string[]): DataFrame<T>;
16
+ get dtypes(): RegisteredDataType[];
17
+ explode(columns: IntoExpr | IntoExpr[], options?: ExplodeOptions): DataFrame<any>;
18
+ fill_null(options?: FillNullOptions): DataFrame<T>;
19
19
  filter(...exprs: (IExpr | ((row: T) => any))[]): DataFrame<T>;
20
+ get_schema(): DataFrameSchema;
20
21
  groupby<K extends keyof T>(keys: K | K[]): GroupedData<T, K>;
21
22
  head(n?: number): DataFrame<T>;
22
23
  get height(): number;
23
24
  hstack<U extends RowRecord = any>(other: ConcatItem | ConcatItem[], options?: HorizontalConcatOptions): DataFrame<U>;
25
+ insert_column(index: number, name: string, expr: IntoExpr): DataFrame<any>;
26
+ item(row?: number, column?: number | string): any;
27
+ iter_columns(): Generator<ColumnData>;
28
+ iter_rows({ named }?: {
29
+ named?: boolean;
30
+ }): Generator<any[] | Record<string, any>>;
24
31
  join<U extends RowRecord = any, R extends RowRecord = any>(config: JoinOptions<T, U>): DataFrame<R>;
25
- limit(n: number, options?: LimitOptions): DataFrame<T>;
32
+ limit(n: number, { offset, from }?: LimitOptions): DataFrame<T>;
26
33
  pivot<U extends RowRecord = any>(config: PivotOptions<T>): DataFrame<U>;
27
34
  rename(mapping?: Partial<Record<keyof T, string>>): DataFrame<any>;
28
35
  reverse(): DataFrame<T>;
29
- get schema(): Record<string, DataType>;
36
+ get schema(): DataFrameSchema;
30
37
  select<U extends RowRecord = any>(...args: (string | IExpr | Record<string, any> | (string | IExpr | Record<string, any>)[])[]): DataFrame<U>;
31
38
  get shape(): [number, number];
32
39
  slice(start: number, end?: number): DataFrame<T>;
33
40
  sort(config?: SortOptions<T>): DataFrame<T>;
34
41
  tail(n?: number): DataFrame<T>;
42
+ to_dict(): DataFrameColumns<T>;
43
+ to_dicts(): T[];
35
44
  to_list<K extends keyof T>(nameOrExpr: K | IExpr): any[];
45
+ transpose({ include_header: includeHeader, header_name: headerName, column_names: colNamesOpt }?: TransposeOptions): DataFrame<any>;
36
46
  unique<K extends keyof T>(columns?: K | K[]): DataFrame<T>;
37
47
  unpivot<U extends RowRecord = any>(config: UnpivotOptions<T>): DataFrame<U>;
38
48
  vstack<U extends RowRecord = any>(other: ConcatItem | ConcatItem[]): DataFrame<U>;
39
49
  get width(): number;
40
50
  private _normalizeArgs;
41
51
  with_columns(...args: (string | IExpr | Record<string, any> | (string | IExpr | Record<string, any>)[])[]): DataFrame<any>;
52
+ with_row_index(name?: string, offset?: number): DataFrame<any>;
53
+ write_json(file?: string | {
54
+ write: (str: string) => void;
55
+ }, { format, replacerOptions }?: WriteJSONOptions): string;
56
+ write_csv(file?: string | {
57
+ write: (str: string) => void;
58
+ }, options?: WriteCSVOptions): string;
42
59
  }