@ohos-ports/nodejs-polars 0.23.4-beta.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 (71) hide show
  1. package/LICENSE +19 -0
  2. package/README.md +217 -0
  3. package/bin/cfg.d.ts +156 -0
  4. package/bin/cfg.js +52 -0
  5. package/bin/dataframe.d.ts +2135 -0
  6. package/bin/dataframe.js +783 -0
  7. package/bin/datatypes/conversion.d.ts +2 -0
  8. package/bin/datatypes/conversion.js +2 -0
  9. package/bin/datatypes/datatype.d.ts +285 -0
  10. package/bin/datatypes/datatype.js +430 -0
  11. package/bin/datatypes/field.d.ts +26 -0
  12. package/bin/datatypes/field.js +36 -0
  13. package/bin/datatypes/index.d.ts +43 -0
  14. package/bin/datatypes/index.js +120 -0
  15. package/bin/error.d.ts +7 -0
  16. package/bin/error.js +17 -0
  17. package/bin/functions.d.ts +26 -0
  18. package/bin/functions.js +208 -0
  19. package/bin/groupby.d.ts +212 -0
  20. package/bin/groupby.js +156 -0
  21. package/bin/html.d.ts +4 -0
  22. package/bin/html.js +18 -0
  23. package/bin/index.d.ts +256 -0
  24. package/bin/index.js +267 -0
  25. package/bin/internals/construction.d.ts +7 -0
  26. package/bin/internals/construction.js +256 -0
  27. package/bin/internals/polars_internal.d.ts +2 -0
  28. package/bin/internals/polars_internal.js +7 -0
  29. package/bin/io.d.ts +433 -0
  30. package/bin/io.js +344 -0
  31. package/bin/lazy/dataframe.d.ts +785 -0
  32. package/bin/lazy/dataframe.js +427 -0
  33. package/bin/lazy/expr/datetime.d.ts +8 -0
  34. package/bin/lazy/expr/datetime.js +27 -0
  35. package/bin/lazy/expr/index.d.ts +1152 -0
  36. package/bin/lazy/expr/index.js +632 -0
  37. package/bin/lazy/expr/list.d.ts +8 -0
  38. package/bin/lazy/expr/list.js +115 -0
  39. package/bin/lazy/expr/string.d.ts +534 -0
  40. package/bin/lazy/expr/string.js +131 -0
  41. package/bin/lazy/expr/struct.d.ts +126 -0
  42. package/bin/lazy/expr/struct.js +26 -0
  43. package/bin/lazy/functions.d.ts +612 -0
  44. package/bin/lazy/functions.js +687 -0
  45. package/bin/lazy/groupby.d.ts +29 -0
  46. package/bin/lazy/groupby.js +30 -0
  47. package/bin/lazy/index.d.ts +4 -0
  48. package/bin/lazy/index.js +20 -0
  49. package/bin/lazy/whenthen.d.ts +67 -0
  50. package/bin/lazy/whenthen.js +81 -0
  51. package/bin/native-polars.d.ts +2 -0
  52. package/bin/native-polars.js +267 -0
  53. package/bin/series/datetime.d.ts +8 -0
  54. package/bin/series/datetime.js +34 -0
  55. package/bin/series/index.d.ts +1135 -0
  56. package/bin/series/index.js +700 -0
  57. package/bin/series/list.d.ts +8 -0
  58. package/bin/series/list.js +87 -0
  59. package/bin/series/string.d.ts +300 -0
  60. package/bin/series/string.js +125 -0
  61. package/bin/series/struct.d.ts +36 -0
  62. package/bin/series/struct.js +35 -0
  63. package/bin/shared_traits.d.ts +1458 -0
  64. package/bin/shared_traits.js +2 -0
  65. package/bin/sql.d.ts +244 -0
  66. package/bin/sql.js +63 -0
  67. package/bin/types.d.ts +287 -0
  68. package/bin/types.js +2 -0
  69. package/bin/utils.d.ts +38 -0
  70. package/bin/utils.js +69 -0
  71. package/package.json +45 -0
@@ -0,0 +1,256 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.jsTypeToPolarsType = void 0;
7
+ exports.arrayToJsSeries = arrayToJsSeries;
8
+ exports.arrayToJsDataFrame = arrayToJsDataFrame;
9
+ const types_1 = require("node:util/types");
10
+ const datatypes_1 = require("../datatypes");
11
+ const datatype_1 = require("../datatypes/datatype");
12
+ const field_1 = require("../datatypes/field");
13
+ const series_1 = require("../series");
14
+ const polars_internal_1 = __importDefault(require("./polars_internal"));
15
+ const jsTypeToPolarsType = (value) => {
16
+ if (value === null) {
17
+ return datatypes_1.DataType.Float64;
18
+ }
19
+ if (Array.isArray(value)) {
20
+ return (0, exports.jsTypeToPolarsType)(firstNonNull(value));
21
+ }
22
+ if ((0, types_1.isTypedArray)(value)) {
23
+ switch (value.constructor.name) {
24
+ case Int8Array.name:
25
+ return datatypes_1.DataType.Int8;
26
+ case Int16Array.name:
27
+ return datatypes_1.DataType.Int16;
28
+ case Int32Array.name:
29
+ return datatypes_1.DataType.Int32;
30
+ case BigInt64Array.name:
31
+ return datatypes_1.DataType.Int64;
32
+ case Uint8Array.name:
33
+ return datatypes_1.DataType.UInt8;
34
+ case Uint16Array.name:
35
+ return datatypes_1.DataType.UInt16;
36
+ case Uint32Array.name:
37
+ return datatypes_1.DataType.UInt32;
38
+ case BigUint64Array.name:
39
+ return datatypes_1.DataType.UInt64;
40
+ case Float32Array.name:
41
+ return datatypes_1.DataType.Float32;
42
+ case Float64Array.name:
43
+ return datatypes_1.DataType.Float64;
44
+ default:
45
+ throw new Error(`unknown typed array type: ${value.constructor.name}`);
46
+ }
47
+ }
48
+ if (value instanceof Date) {
49
+ return datatypes_1.DataType.Datetime(datatype_1.TimeUnit.Milliseconds);
50
+ }
51
+ if (typeof value === "object" && value.constructor === Object) {
52
+ const flds = Object.entries(value).map(([name, value]) => {
53
+ const dtype = (0, exports.jsTypeToPolarsType)(value);
54
+ return field_1.Field.from(name, dtype);
55
+ });
56
+ return datatypes_1.DataType.Struct(flds);
57
+ }
58
+ switch (typeof value) {
59
+ case "bigint":
60
+ return datatypes_1.DataType.UInt64;
61
+ case "number":
62
+ return datatypes_1.DataType.Float64;
63
+ case "string":
64
+ return datatypes_1.DataType.Utf8;
65
+ case "boolean":
66
+ return datatypes_1.DataType.Bool;
67
+ default:
68
+ return datatypes_1.DataType.Float64;
69
+ }
70
+ };
71
+ exports.jsTypeToPolarsType = jsTypeToPolarsType;
72
+ /**
73
+ * __finds the first non null value in the inputs__
74
+ * ___
75
+ * If the first value is an array
76
+ * it will find the first scalar type in the array and return it wrapped into the array
77
+ *
78
+ * @example
79
+ * ```
80
+ * > const input = [null, [], [null, "a", "b"]]
81
+ * > firstNonNull(input)
82
+ * ["a"]
83
+ * > const ints = [null, 1]
84
+ * > firstNonNull(ints)
85
+ * 1
86
+ * ```
87
+ */
88
+ const firstNonNull = (arr) => {
89
+ const first = arr.find((x) => x !== null && x !== undefined);
90
+ if (Array.isArray(first)) {
91
+ return [firstNonNull(arr.flat())];
92
+ }
93
+ return first;
94
+ };
95
+ const fromTypedArray = (name, value) => {
96
+ switch (value.constructor.name) {
97
+ case Int8Array.name:
98
+ return polars_internal_1.default.JsSeries.newInt8Array(name, value);
99
+ case Int16Array.name:
100
+ return polars_internal_1.default.JsSeries.newInt16Array(name, value);
101
+ case Int32Array.name:
102
+ return polars_internal_1.default.JsSeries.newInt32Array(name, value);
103
+ case BigInt64Array.name:
104
+ return polars_internal_1.default.JsSeries.newBigint64Array(name, value);
105
+ case Uint8Array.name:
106
+ return polars_internal_1.default.JsSeries.newUint8Array(name, value);
107
+ case Uint8ClampedArray.name:
108
+ return polars_internal_1.default.JsSeries.newUint8ClampedArray(name, value);
109
+ case Uint16Array.name:
110
+ return polars_internal_1.default.JsSeries.newUint16Array(name, value);
111
+ case Uint32Array.name:
112
+ return polars_internal_1.default.JsSeries.newUint32Array(name, value);
113
+ case BigUint64Array.name:
114
+ return polars_internal_1.default.JsSeries.newBiguint64Array(name, value);
115
+ case Float32Array.name:
116
+ return polars_internal_1.default.JsSeries.newFloat32Array(name, value);
117
+ case Float64Array.name:
118
+ return polars_internal_1.default.JsSeries.newFloat64Array(name, value);
119
+ default:
120
+ throw new Error(`unknown typed array type: ${value.constructor.name}`);
121
+ }
122
+ };
123
+ /**
124
+ * Construct an internal `JsSeries` from an array
125
+ */
126
+ function arrayToJsSeries(name = "", values = [], dtype) {
127
+ if ((0, types_1.isTypedArray)(values)) {
128
+ return fromTypedArray(name, values);
129
+ }
130
+ // Empty sequence defaults to Float64 type
131
+ if (!(values?.length || dtype)) {
132
+ dtype = datatypes_1.DataType.Float64;
133
+ }
134
+ const firstValue = firstNonNull(values);
135
+ if (Array.isArray(firstValue) || (0, types_1.isTypedArray)(firstValue)) {
136
+ const arrayDtype = dtype ?? datatypes_1.DataType.List((0, exports.jsTypeToPolarsType)(firstValue));
137
+ const ctor = (0, datatypes_1.polarsTypeToConstructor)(arrayDtype);
138
+ const s = ctor(name, values, arrayDtype);
139
+ if (dtype instanceof datatype_1.FixedSizeList) {
140
+ // TODO: build a FixedSizeList natively in Rust
141
+ return s.cast(dtype);
142
+ }
143
+ return s;
144
+ }
145
+ dtype = dtype ?? (0, exports.jsTypeToPolarsType)(firstValue);
146
+ switch (dtype?.variant) {
147
+ case "Duration":
148
+ return polars_internal_1.default.JsSeries.newAnyValue(name, values, dtype);
149
+ case "Struct":
150
+ return polars_internal_1.default.fromRows(values, null, 1).toStruct(name);
151
+ case "Decimal":
152
+ if (typeof firstValue !== "bigint") {
153
+ throw new Error("Decimal type can only be constructed from BigInt");
154
+ }
155
+ return polars_internal_1.default.JsSeries.newAnyValue(name, values, dtype);
156
+ case "Time":
157
+ return polars_internal_1.default.JsSeries.newAnyValue(name, values, dtype);
158
+ }
159
+ let series;
160
+ if (firstValue instanceof Date) {
161
+ series = polars_internal_1.default.JsSeries.newOptDate(name, values);
162
+ }
163
+ else {
164
+ const ctor = (0, datatypes_1.polarsTypeToConstructor)(dtype);
165
+ series = ctor(name, values);
166
+ }
167
+ if ([
168
+ "Datetime",
169
+ "Date",
170
+ "Time",
171
+ "Categorical",
172
+ "Int8",
173
+ "Int16",
174
+ "UInt8",
175
+ "UInt16",
176
+ "Float32",
177
+ ].includes(dtype.variant)) {
178
+ series = series.cast(dtype);
179
+ }
180
+ return series;
181
+ }
182
+ function arrayToJsDataFrame(data, options) {
183
+ const columns = options?.columns;
184
+ let orient = options?.orient;
185
+ const schema = options?.schema;
186
+ const inferSchemaLength = options?.inferSchemaLength;
187
+ let dataSeries;
188
+ if (!data.length) {
189
+ dataSeries = [];
190
+ }
191
+ else if (data[0]?._s) {
192
+ dataSeries = [];
193
+ for (const [idx, series] of data.entries()) {
194
+ if (!series.name) {
195
+ series.rename(`column_${idx}`, true);
196
+ }
197
+ dataSeries.push(series._s);
198
+ }
199
+ }
200
+ else if (data[0].constructor.name === "Object") {
201
+ const df = polars_internal_1.default.fromRows(data, schema, inferSchemaLength);
202
+ if (columns) {
203
+ df.columns = columns;
204
+ }
205
+ return df;
206
+ }
207
+ else if (Array.isArray(data[0])) {
208
+ if (!orient && columns) {
209
+ orient = columns.length === data.length ? "col" : "row";
210
+ }
211
+ if (orient === "row") {
212
+ const df = polars_internal_1.default.fromRows(data);
213
+ if (columns)
214
+ df.columns = columns;
215
+ return df;
216
+ }
217
+ dataSeries = data.map((s, idx) => (0, series_1.Series)(`column_${idx}`, s)._s);
218
+ }
219
+ else {
220
+ dataSeries = [(0, series_1.Series)("column_0", data)._s];
221
+ }
222
+ dataSeries = handleColumnsArg(dataSeries, columns);
223
+ return jsDataFrameFromSeries(dataSeries);
224
+ }
225
+ exports.jsDataFrameFromSeries = jsDataFrameFromSeries;
226
+ /**
227
+ * OHOS/napi-rs 3.x workaround: the native `JsDataFrame.from_columns`
228
+ * constructor (and `to_series_collection`) extracts `&JsSeries` references
229
+ * via `Array::get`, which fails on this platform with
230
+ * "Native references can only be created by generated callback argument
231
+ * conversion". Build the frame through an empty `fromRows()` plus
232
+ * `withColumn()` per series, which uses proper generated argument conversion.
233
+ */
234
+ function jsDataFrameFromSeries(dataSeries) {
235
+ let df = polars_internal_1.default.fromRows([], null, 1);
236
+ for (const s of dataSeries) {
237
+ df = df.withColumn(s);
238
+ }
239
+ return df;
240
+ }
241
+
242
+ function handleColumnsArg(data, columns) {
243
+ if (!columns) {
244
+ return data;
245
+ }
246
+ if (!data) {
247
+ return columns.map((c) => series_1.Series.from(c, [])._s);
248
+ }
249
+ if (data.length === columns.length) {
250
+ for (const [idx, name] of columns.entries()) {
251
+ data[idx].rename(name);
252
+ }
253
+ return data;
254
+ }
255
+ throw new TypeError("Dimensions of columns arg must match data dimensions.");
256
+ }
@@ -0,0 +1,2 @@
1
+ import pl from "../native-polars.js";
2
+ export default pl;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const native_polars_js_1 = __importDefault(require("../native-polars.js"));
7
+ exports.default = native_polars_js_1.default;