pythonlib 0.1.0 → 0.2.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.
- package/README.md +41 -138
- package/dist/{chunk-3CSEXTA7.js → chunk-4QG3772L.js} +53 -53
- package/dist/chunk-4QG3772L.js.map +1 -0
- package/dist/{chunk-OMQNGE6T.js → chunk-4SZT4HJI.js} +32 -27
- package/dist/chunk-4SZT4HJI.js.map +1 -0
- package/dist/{chunk-IVYYI2VR.js → chunk-6POEDI34.js} +1 -1
- package/dist/chunk-6POEDI34.js.map +1 -0
- package/dist/{chunk-P3SGIF72.js → chunk-6VQ7ITWO.js} +6 -6
- package/dist/chunk-6VQ7ITWO.js.map +1 -0
- package/dist/{chunk-V63LKSA3.js → chunk-7TH4FCVQ.js} +24 -24
- package/dist/chunk-7TH4FCVQ.js.map +1 -0
- package/dist/{chunk-TJFGYXBJ.js → chunk-BDBX5BG4.js} +63 -61
- package/dist/chunk-BDBX5BG4.js.map +1 -0
- package/dist/{chunk-WAONBJE5.js → chunk-H76SKASU.js} +36 -36
- package/dist/chunk-H76SKASU.js.map +1 -0
- package/dist/{chunk-TOI6IG3T.js → chunk-HQ42WNKZ.js} +43 -16
- package/dist/chunk-HQ42WNKZ.js.map +1 -0
- package/dist/{chunk-HA5Y7PKO.js → chunk-KRRY534Q.js} +36 -35
- package/dist/chunk-KRRY534Q.js.map +1 -0
- package/dist/{chunk-UFMTN4T4.js → chunk-XGT3VOIZ.js} +5 -5
- package/dist/chunk-XGT3VOIZ.js.map +1 -0
- package/dist/{collections-xN9Gi0TA.d.ts → collections-CJur5Wg-.d.ts} +5 -3
- package/dist/collections.d.ts +1 -1
- package/dist/collections.js +1 -1
- package/dist/{datetime-DRwFAiGV.d.ts → datetime-Bpce8gG2.d.ts} +17 -15
- package/dist/datetime.d.ts +1 -1
- package/dist/datetime.js +1 -1
- package/dist/{functools-St5GqpKG.d.ts → functools-NrsZAqJk.d.ts} +42 -26
- package/dist/functools.d.ts +1 -1
- package/dist/functools.js +19 -17
- package/dist/index.d.ts +56 -158
- package/dist/index.js +45 -137
- package/dist/index.js.map +1 -1
- package/dist/{itertools-Bj8XivI6.d.ts → itertools-Sjl1LB_0.d.ts} +35 -17
- package/dist/itertools.d.ts +1 -1
- package/dist/itertools.js +15 -11
- package/dist/{json-Xpk0kwSd.d.ts → json-DAlvCadU.d.ts} +7 -5
- package/dist/json.d.ts +1 -1
- package/dist/json.js +1 -1
- package/dist/{math-BrT4Aw3E.d.ts → math-DwEGjjQ-.d.ts} +2 -0
- package/dist/math.d.ts +1 -1
- package/dist/math.js +1 -1
- package/dist/{os-FRSJbEUH.d.ts → os-C6Nt7Ijx.d.ts} +45 -42
- package/dist/os.d.ts +1 -1
- package/dist/os.js +23 -23
- package/dist/{random-D5S5iSV3.d.ts → random-BJv_rSpL.d.ts} +24 -22
- package/dist/random.d.ts +1 -1
- package/dist/random.js +21 -21
- package/dist/{re-DSxiURqN.d.ts → re-B1CHCgyr.d.ts} +17 -15
- package/dist/re.d.ts +1 -1
- package/dist/re.js +7 -7
- package/dist/string.d.ts +51 -48
- package/dist/string.js +13 -13
- package/package.json +20 -3
- package/dist/chunk-3CSEXTA7.js.map +0 -1
- package/dist/chunk-HA5Y7PKO.js.map +0 -1
- package/dist/chunk-IVYYI2VR.js.map +0 -1
- package/dist/chunk-OMQNGE6T.js.map +0 -1
- package/dist/chunk-P3SGIF72.js.map +0 -1
- package/dist/chunk-TJFGYXBJ.js.map +0 -1
- package/dist/chunk-TOI6IG3T.js.map +0 -1
- package/dist/chunk-UFMTN4T4.js.map +0 -1
- package/dist/chunk-V63LKSA3.js.map +0 -1
- package/dist/chunk-WAONBJE5.js.map +0 -1
|
@@ -5,24 +5,24 @@ import {
|
|
|
5
5
|
// src/random.ts
|
|
6
6
|
var random_exports = {};
|
|
7
7
|
__export(random_exports, {
|
|
8
|
-
|
|
8
|
+
betaVariate: () => betaVariate,
|
|
9
9
|
choice: () => choice,
|
|
10
10
|
choices: () => choices,
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
expoVariate: () => expoVariate,
|
|
12
|
+
gammaVariate: () => gammaVariate,
|
|
13
13
|
gauss: () => gauss,
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
14
|
+
logNormVariate: () => logNormVariate,
|
|
15
|
+
normalVariate: () => normalVariate,
|
|
16
|
+
paretoVariate: () => paretoVariate,
|
|
17
|
+
randInt: () => randInt,
|
|
18
|
+
randRange: () => randRange,
|
|
18
19
|
random: () => random,
|
|
19
|
-
randrange: () => randrange,
|
|
20
20
|
sample: () => sample,
|
|
21
21
|
shuffle: () => shuffle,
|
|
22
22
|
triangular: () => triangular,
|
|
23
23
|
uniform: () => uniform,
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
vonMisesVariate: () => vonMisesVariate,
|
|
25
|
+
weibullVariate: () => weibullVariate
|
|
26
26
|
});
|
|
27
27
|
function random() {
|
|
28
28
|
return Math.random();
|
|
@@ -30,12 +30,12 @@ function random() {
|
|
|
30
30
|
function uniform(a, b) {
|
|
31
31
|
return a + Math.random() * (b - a);
|
|
32
32
|
}
|
|
33
|
-
function
|
|
33
|
+
function randInt(a, b) {
|
|
34
34
|
a = Math.floor(a);
|
|
35
35
|
b = Math.floor(b);
|
|
36
36
|
return Math.floor(Math.random() * (b - a + 1)) + a;
|
|
37
37
|
}
|
|
38
|
-
function
|
|
38
|
+
function randRange(start, stop, step = 1) {
|
|
39
39
|
if (stop === void 0) {
|
|
40
40
|
stop = start;
|
|
41
41
|
start = 0;
|
|
@@ -45,7 +45,7 @@ function randrange(start, stop, step = 1) {
|
|
|
45
45
|
}
|
|
46
46
|
const numSteps = Math.ceil((stop - start) / step);
|
|
47
47
|
if (numSteps <= 0) {
|
|
48
|
-
throw new Error("empty range for
|
|
48
|
+
throw new Error("empty range for randRange()");
|
|
49
49
|
}
|
|
50
50
|
const randomStep = Math.floor(Math.random() * numSteps);
|
|
51
51
|
return start + randomStep * step;
|
|
@@ -130,7 +130,7 @@ function gauss(mu = 0, sigma = 1) {
|
|
|
130
130
|
const z = Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2);
|
|
131
131
|
return mu + z * sigma;
|
|
132
132
|
}
|
|
133
|
-
var
|
|
133
|
+
var normalVariate = gauss;
|
|
134
134
|
function triangular(low = 0, high = 1, mode) {
|
|
135
135
|
if (mode === void 0) {
|
|
136
136
|
mode = (low + high) / 2;
|
|
@@ -142,17 +142,17 @@ function triangular(low = 0, high = 1, mode) {
|
|
|
142
142
|
}
|
|
143
143
|
return high - Math.sqrt((1 - u) * (high - low) * (high - mode));
|
|
144
144
|
}
|
|
145
|
-
function
|
|
146
|
-
const y =
|
|
145
|
+
function betaVariate(alpha, beta) {
|
|
146
|
+
const y = gammaVariate(alpha, 1);
|
|
147
147
|
if (y === 0) return 0;
|
|
148
|
-
return y / (y +
|
|
148
|
+
return y / (y + gammaVariate(beta, 1));
|
|
149
149
|
}
|
|
150
|
-
function
|
|
150
|
+
function expoVariate(lambd) {
|
|
151
151
|
return -Math.log(1 - Math.random()) / lambd;
|
|
152
152
|
}
|
|
153
|
-
function
|
|
153
|
+
function gammaVariate(alpha, beta) {
|
|
154
154
|
if (alpha <= 0 || beta <= 0) {
|
|
155
|
-
throw new Error("
|
|
155
|
+
throw new Error("gammaVariate: alpha and beta must be > 0");
|
|
156
156
|
}
|
|
157
157
|
if (alpha > 1) {
|
|
158
158
|
const d = alpha - 1 / 3;
|
|
@@ -175,13 +175,13 @@ function gammavariate(alpha, beta) {
|
|
|
175
175
|
}
|
|
176
176
|
} else {
|
|
177
177
|
const u = Math.random();
|
|
178
|
-
return
|
|
178
|
+
return gammaVariate(1 + alpha, beta) * Math.pow(u, 1 / alpha);
|
|
179
179
|
}
|
|
180
180
|
}
|
|
181
|
-
function
|
|
181
|
+
function logNormVariate(mu, sigma) {
|
|
182
182
|
return Math.exp(gauss(mu, sigma));
|
|
183
183
|
}
|
|
184
|
-
function
|
|
184
|
+
function vonMisesVariate(mu, kappa) {
|
|
185
185
|
if (kappa <= 1e-6) {
|
|
186
186
|
return 2 * Math.PI * Math.random();
|
|
187
187
|
}
|
|
@@ -203,11 +203,11 @@ function vonmisesvariate(mu, kappa) {
|
|
|
203
203
|
}
|
|
204
204
|
}
|
|
205
205
|
}
|
|
206
|
-
function
|
|
206
|
+
function paretoVariate(alpha) {
|
|
207
207
|
const u = 1 - Math.random();
|
|
208
208
|
return 1 / Math.pow(u, 1 / alpha);
|
|
209
209
|
}
|
|
210
|
-
function
|
|
210
|
+
function weibullVariate(alpha, beta) {
|
|
211
211
|
const u = 1 - Math.random();
|
|
212
212
|
return alpha * Math.pow(-Math.log(u), 1 / beta);
|
|
213
213
|
}
|
|
@@ -215,22 +215,22 @@ function weibullvariate(alpha, beta) {
|
|
|
215
215
|
export {
|
|
216
216
|
random,
|
|
217
217
|
uniform,
|
|
218
|
-
|
|
219
|
-
|
|
218
|
+
randInt,
|
|
219
|
+
randRange,
|
|
220
220
|
choice,
|
|
221
221
|
choices,
|
|
222
222
|
sample,
|
|
223
223
|
shuffle,
|
|
224
224
|
gauss,
|
|
225
|
-
|
|
225
|
+
normalVariate,
|
|
226
226
|
triangular,
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
227
|
+
betaVariate,
|
|
228
|
+
expoVariate,
|
|
229
|
+
gammaVariate,
|
|
230
|
+
logNormVariate,
|
|
231
|
+
vonMisesVariate,
|
|
232
|
+
paretoVariate,
|
|
233
|
+
weibullVariate,
|
|
234
234
|
random_exports
|
|
235
235
|
};
|
|
236
|
-
//# sourceMappingURL=chunk-
|
|
236
|
+
//# sourceMappingURL=chunk-H76SKASU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/random.ts"],"sourcesContent":["/**\n * Python random module for TypeScript\n *\n * Provides random number generation functions matching Python's random module.\n * Uses JavaScript's Math.random() as the underlying generator.\n *\n * Note: This is NOT cryptographically secure. For security-sensitive\n * applications, use the Web Crypto API instead.\n *\n * @see {@link https://docs.python.org/3/library/random.html | Python random documentation}\n */\n\n// ============================================================================\n// Basic random functions\n// ============================================================================\n\n/** Return a random floating point number in the range [0.0, 1.0) */\nexport function random(): number {\n return Math.random()\n}\n\n/** Return a random floating point number N such that a <= N <= b */\nexport function uniform(a: number, b: number): number {\n return a + Math.random() * (b - a)\n}\n\n/** Return a random integer N such that a <= N <= b (inclusive) */\nexport function randInt(a: number, b: number): number {\n a = Math.floor(a)\n b = Math.floor(b)\n return Math.floor(Math.random() * (b - a + 1)) + a\n}\n\n/** Return a randomly selected element from range(start, stop, step) */\nexport function randRange(start: number, stop?: number, step: number = 1): number {\n if (stop === undefined) {\n stop = start\n start = 0\n }\n if (step === 0) {\n throw new Error(\"step cannot be zero\")\n }\n\n const numSteps = Math.ceil((stop - start) / step)\n if (numSteps <= 0) {\n throw new Error(\"empty range for randRange()\")\n }\n\n const randomStep = Math.floor(Math.random() * numSteps)\n return start + randomStep * step\n}\n\n// ============================================================================\n// Sequence functions\n// ============================================================================\n\n/** Return a random element from the non-empty sequence */\nexport function choice<T>(seq: T[] | string): T | string {\n if (seq.length === 0) {\n throw new Error(\"Cannot choose from an empty sequence\")\n }\n const index = Math.floor(Math.random() * seq.length)\n return seq[index] as T | string\n}\n\n/** Return a k-length list of elements chosen from the population with replacement */\nexport function choices<T>(population: T[], options?: { weights?: number[]; k?: number }): T[] {\n const k = options?.k ?? 1\n const weights = options?.weights\n\n if (population.length === 0) {\n throw new Error(\"Cannot choose from an empty population\")\n }\n\n if (weights) {\n if (weights.length !== population.length) {\n throw new Error(\"weights and population must have the same length\")\n }\n\n // Compute cumulative weights\n const cumWeights: number[] = []\n let total = 0\n for (const w of weights) {\n total += w\n cumWeights.push(total)\n }\n\n const result: T[] = []\n for (let i = 0; i < k; i++) {\n const r = Math.random() * total\n // Binary search for the index\n let lo = 0\n let hi = cumWeights.length\n while (lo < hi) {\n const mid = Math.floor((lo + hi) / 2)\n if (r > (cumWeights[mid] as number)) {\n lo = mid + 1\n } else {\n hi = mid\n }\n }\n result.push(population[lo] as T)\n }\n return result\n }\n\n const result: T[] = []\n for (let i = 0; i < k; i++) {\n result.push(population[Math.floor(Math.random() * population.length)] as T)\n }\n return result\n}\n\n/** Return a k-length list of unique elements chosen from the population (without replacement) */\nexport function sample<T>(population: T[], k: number): T[] {\n if (k > population.length) {\n throw new Error(\"Sample larger than population\")\n }\n if (k < 0) {\n throw new Error(\"Sample size cannot be negative\")\n }\n\n // Fisher-Yates shuffle on a copy, take first k elements\n const pool = [...population]\n for (let i = 0; i < k; i++) {\n const j = i + Math.floor(Math.random() * (pool.length - i))\n const temp = pool[i] as T\n pool[i] = pool[j] as T\n pool[j] = temp\n }\n return pool.slice(0, k)\n}\n\n/** Shuffle the sequence in place */\nexport function shuffle(x: unknown[]): void {\n // Fisher-Yates shuffle\n for (let i = x.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1))\n const temp = x[i]\n x[i] = x[j]\n x[j] = temp\n }\n}\n\n// ============================================================================\n// Real-valued distributions\n// ============================================================================\n\n/** Gaussian distribution with mean mu and standard deviation sigma */\nexport function gauss(mu: number = 0, sigma: number = 1): number {\n // Box-Muller transform\n let u1: number\n let u2: number\n do {\n u1 = Math.random()\n u2 = Math.random()\n } while (u1 === 0)\n\n const z = Math.sqrt(-2 * Math.log(u1)) * Math.cos(2 * Math.PI * u2)\n return mu + z * sigma\n}\n\n/** Normal distribution (alias for gauss) */\nexport const normalVariate = gauss\n\n/** Triangular distribution with low, high, and mode */\nexport function triangular(low: number = 0, high: number = 1, mode?: number): number {\n if (mode === undefined) {\n mode = (low + high) / 2\n }\n\n const u = Math.random()\n const c = (mode - low) / (high - low)\n\n if (u < c) {\n return low + Math.sqrt(u * (high - low) * (mode - low))\n }\n return high - Math.sqrt((1 - u) * (high - low) * (high - mode))\n}\n\n/** Beta distribution with alpha and beta parameters */\nexport function betaVariate(alpha: number, beta: number): number {\n // Use the gamma method\n const y = gammaVariate(alpha, 1)\n if (y === 0) return 0\n return y / (y + gammaVariate(beta, 1))\n}\n\n/** Exponential distribution with mean 1/lambd */\nexport function expoVariate(lambd: number): number {\n // lambd is 1.0 divided by the desired mean\n return -Math.log(1 - Math.random()) / lambd\n}\n\n/** Gamma distribution with shape alpha and scale beta */\nexport function gammaVariate(alpha: number, beta: number): number {\n // Marsaglia and Tsang's method\n if (alpha <= 0 || beta <= 0) {\n throw new Error(\"gammaVariate: alpha and beta must be > 0\")\n }\n\n if (alpha > 1) {\n const d = alpha - 1 / 3\n const c = 1 / Math.sqrt(9 * d)\n for (;;) {\n let x: number\n let v: number\n do {\n x = gauss()\n v = 1 + c * x\n } while (v <= 0)\n v = v * v * v\n const u = Math.random()\n if (u < 1 - 0.0331 * (x * x) * (x * x)) {\n return d * v * beta\n }\n if (Math.log(u) < 0.5 * x * x + d * (1 - v + Math.log(v))) {\n return d * v * beta\n }\n }\n } else {\n // alpha <= 1\n const u = Math.random()\n return gammaVariate(1 + alpha, beta) * Math.pow(u, 1 / alpha)\n }\n}\n\n/** Log normal distribution */\nexport function logNormVariate(mu: number, sigma: number): number {\n return Math.exp(gauss(mu, sigma))\n}\n\n/** Von Mises distribution (circular data) */\nexport function vonMisesVariate(mu: number, kappa: number): number {\n if (kappa <= 1e-6) {\n return 2 * Math.PI * Math.random()\n }\n\n const s = 0.5 / kappa\n const r = s + Math.sqrt(1 + s * s)\n\n for (;;) {\n const u1 = Math.random()\n const z = Math.cos(Math.PI * u1)\n const d = z / (r + z)\n const u2 = Math.random()\n if (u2 < 1 - d * d || u2 <= (1 - d) * Math.exp(d)) {\n const q = 1 / r\n const f = (q + z) / (1 + q * z)\n const u3 = Math.random()\n if (u3 > 0.5) {\n return (mu + Math.acos(f)) % (2 * Math.PI)\n }\n return (mu - Math.acos(f)) % (2 * Math.PI)\n }\n }\n}\n\n/** Pareto distribution */\nexport function paretoVariate(alpha: number): number {\n const u = 1 - Math.random()\n return 1 / Math.pow(u, 1 / alpha)\n}\n\n/** Weibull distribution */\nexport function weibullVariate(alpha: number, beta: number): number {\n const u = 1 - Math.random()\n return alpha * Math.pow(-Math.log(u), 1 / beta)\n}\n"],"mappings":"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","names":["result"]}
|
|
@@ -7,23 +7,25 @@ var itertools_exports = {};
|
|
|
7
7
|
__export(itertools_exports, {
|
|
8
8
|
accumulate: () => accumulate,
|
|
9
9
|
chain: () => chain,
|
|
10
|
+
chunk: () => chunk,
|
|
10
11
|
combinations: () => combinations,
|
|
11
|
-
|
|
12
|
+
combinationsWithReplacement: () => combinationsWithReplacement,
|
|
12
13
|
compress: () => compress,
|
|
13
14
|
count: () => count,
|
|
14
15
|
cycle: () => cycle,
|
|
15
|
-
|
|
16
|
-
|
|
16
|
+
dropWhile: () => dropWhile,
|
|
17
|
+
filterFalse: () => filterFalse,
|
|
17
18
|
groupby: () => groupby,
|
|
18
19
|
islice: () => islice,
|
|
19
20
|
pairwise: () => pairwise,
|
|
21
|
+
partition: () => partition,
|
|
20
22
|
permutations: () => permutations,
|
|
21
23
|
product: () => product,
|
|
22
24
|
productRepeat: () => productRepeat,
|
|
23
25
|
repeat: () => repeat,
|
|
24
|
-
|
|
26
|
+
takeWhile: () => takeWhile,
|
|
25
27
|
tee: () => tee,
|
|
26
|
-
|
|
28
|
+
zipLongest: () => zipLongest
|
|
27
29
|
});
|
|
28
30
|
function chain(...iterables) {
|
|
29
31
|
return iterables.flatMap((it) => [...it]);
|
|
@@ -148,7 +150,7 @@ function islice(iterable, start, stop, step = 1) {
|
|
|
148
150
|
}
|
|
149
151
|
return result;
|
|
150
152
|
}
|
|
151
|
-
function
|
|
153
|
+
function takeWhile(predicate, iterable) {
|
|
152
154
|
const result = [];
|
|
153
155
|
for (const element of iterable) {
|
|
154
156
|
if (predicate(element)) {
|
|
@@ -159,7 +161,7 @@ function takewhile(predicate, iterable) {
|
|
|
159
161
|
}
|
|
160
162
|
return result;
|
|
161
163
|
}
|
|
162
|
-
function
|
|
164
|
+
function dropWhile(predicate, iterable) {
|
|
163
165
|
const result = [];
|
|
164
166
|
let dropping = true;
|
|
165
167
|
for (const element of iterable) {
|
|
@@ -171,7 +173,7 @@ function dropwhile(predicate, iterable) {
|
|
|
171
173
|
}
|
|
172
174
|
return result;
|
|
173
175
|
}
|
|
174
|
-
function
|
|
176
|
+
function zipLongest(...args) {
|
|
175
177
|
let fillvalue;
|
|
176
178
|
let iterables;
|
|
177
179
|
const lastArg = args[args.length - 1];
|
|
@@ -206,7 +208,7 @@ function compress(data, selectors) {
|
|
|
206
208
|
}
|
|
207
209
|
return result;
|
|
208
210
|
}
|
|
209
|
-
function
|
|
211
|
+
function filterFalse(predicate, iterable) {
|
|
210
212
|
const result = [];
|
|
211
213
|
for (const element of iterable) {
|
|
212
214
|
if (!predicate(element)) {
|
|
@@ -292,7 +294,7 @@ function productRepeat(iterable, repeat2 = 1) {
|
|
|
292
294
|
const pools = Array.from({ length: repeat2 }, () => pool);
|
|
293
295
|
return product(...pools);
|
|
294
296
|
}
|
|
295
|
-
function
|
|
297
|
+
function combinationsWithReplacement(iterable, r) {
|
|
296
298
|
const pool = [...iterable];
|
|
297
299
|
const n = pool.length;
|
|
298
300
|
if (r < 0 || n === 0) return r === 0 ? [[]] : [];
|
|
@@ -311,6 +313,29 @@ function combinations_with_replacement(iterable, r) {
|
|
|
311
313
|
}
|
|
312
314
|
return result;
|
|
313
315
|
}
|
|
316
|
+
function chunk(iterable, size) {
|
|
317
|
+
if (size < 1) {
|
|
318
|
+
throw new Error("chunk size must be at least 1");
|
|
319
|
+
}
|
|
320
|
+
const arr = [...iterable];
|
|
321
|
+
const result = [];
|
|
322
|
+
for (let i = 0; i < arr.length; i += size) {
|
|
323
|
+
result.push(arr.slice(i, i + size));
|
|
324
|
+
}
|
|
325
|
+
return result;
|
|
326
|
+
}
|
|
327
|
+
function partition(iterable, predicate) {
|
|
328
|
+
const truthy = [];
|
|
329
|
+
const falsy = [];
|
|
330
|
+
for (const item of iterable) {
|
|
331
|
+
if (predicate(item)) {
|
|
332
|
+
truthy.push(item);
|
|
333
|
+
} else {
|
|
334
|
+
falsy.push(item);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
return [truthy, falsy];
|
|
338
|
+
}
|
|
314
339
|
|
|
315
340
|
export {
|
|
316
341
|
chain,
|
|
@@ -320,18 +345,20 @@ export {
|
|
|
320
345
|
cycle,
|
|
321
346
|
repeat,
|
|
322
347
|
islice,
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
348
|
+
takeWhile,
|
|
349
|
+
dropWhile,
|
|
350
|
+
zipLongest,
|
|
326
351
|
compress,
|
|
327
|
-
|
|
352
|
+
filterFalse,
|
|
328
353
|
accumulate,
|
|
329
354
|
groupby,
|
|
330
355
|
count,
|
|
331
356
|
tee,
|
|
332
357
|
pairwise,
|
|
333
358
|
productRepeat,
|
|
334
|
-
|
|
359
|
+
combinationsWithReplacement,
|
|
360
|
+
chunk,
|
|
361
|
+
partition,
|
|
335
362
|
itertools_exports
|
|
336
363
|
};
|
|
337
|
-
//# sourceMappingURL=chunk-
|
|
364
|
+
//# sourceMappingURL=chunk-HQ42WNKZ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/itertools.ts"],"sourcesContent":["/**\n * Python itertools module for TypeScript\n *\n * Provides iterator building blocks inspired by Python's itertools module.\n *\n * @see {@link https://docs.python.org/3/library/itertools.html | Python itertools documentation}\n *\n * Design Decision (ADR-0008):\n * - Most functions return eager arrays for better debugging and familiarity\n * - Only infinite sequences (cycle, repeat without count) use generators\n */\n\n/**\n * Chain multiple iterables together into a single array\n * chain([1, 2], [3, 4]) -> [1, 2, 3, 4]\n */\nexport function chain<T>(...iterables: Iterable<T>[]): T[] {\n return iterables.flatMap((it) => [...it])\n}\n\n/**\n * Return successive r-length combinations of elements\n * combinations([1, 2, 3], 2) -> [[1, 2], [1, 3], [2, 3]]\n */\nexport function combinations<T>(iterable: Iterable<T>, r: number): T[][] {\n const pool = [...iterable]\n const n = pool.length\n if (r > n || r < 0) return []\n\n const result: T[][] = []\n const indices: number[] = Array.from({ length: r }, (_, i) => i)\n result.push(indices.map((i) => pool[i] as T))\n\n for (;;) {\n let i = r - 1\n while (i >= 0 && indices[i] === i + n - r) i--\n if (i < 0) break\n ;(indices[i] as number)++\n for (let j = i + 1; j < r; j++) {\n indices[j] = (indices[j - 1] as number) + 1\n }\n result.push(indices.map((idx) => pool[idx] as T))\n }\n\n return result\n}\n\n/**\n * Return successive r-length permutations of elements\n * permutations([1, 2, 3], 2) -> [[1, 2], [1, 3], [2, 1], [2, 3], [3, 1], [3, 2]]\n */\nexport function permutations<T>(iterable: Iterable<T>, r?: number): T[][] {\n const pool = [...iterable]\n const n = pool.length\n const rLen = r === undefined ? n : r\n if (rLen > n || rLen < 0) return []\n\n const result: T[][] = []\n const indices: number[] = Array.from({ length: n }, (_, i) => i)\n const cycles: number[] = Array.from({ length: rLen }, (_, i) => n - i)\n\n result.push(indices.slice(0, rLen).map((i) => pool[i] as T))\n\n outer: for (;;) {\n for (let i = rLen - 1; i >= 0; i--) {\n ;(cycles[i] as number)--\n if (cycles[i] === 0) {\n // Rotate indices[i:] left by one\n const temp = indices[i] as number\n for (let j = i; j < n - 1; j++) {\n indices[j] = indices[j + 1] as number\n }\n indices[n - 1] = temp\n cycles[i] = n - i\n } else {\n const j = n - (cycles[i] as number)\n const swap = indices[j] as number\n indices[j] = indices[i] as number\n indices[i] = swap\n result.push(indices.slice(0, rLen).map((idx) => pool[idx] as T))\n continue outer\n }\n }\n break\n }\n\n return result\n}\n\n/**\n * Cartesian product of input iterables\n * product([1, 2], ['a', 'b']) -> [[1, 'a'], [1, 'b'], [2, 'a'], [2, 'b']]\n */\nexport function product<T>(...iterables: Iterable<T>[]): T[][] {\n if (iterables.length === 0) return [[]]\n\n const pools = iterables.map((it) => [...it])\n\n // Check if any pool is empty\n if (pools.some((p) => p.length === 0)) return []\n\n const result: T[][] = []\n const indices: number[] = new Array<number>(pools.length).fill(0)\n result.push(pools.map((p, i) => p[indices[i] as number] as T))\n\n for (;;) {\n let i = pools.length - 1\n while (i >= 0) {\n ;(indices[i] as number)++\n const currentPool = pools[i] as T[]\n if ((indices[i] as number) < currentPool.length) {\n result.push(pools.map((p, j) => p[indices[j] as number] as T))\n break\n }\n indices[i] = 0\n i--\n }\n if (i < 0) break\n }\n\n return result\n}\n\n/**\n * Cycle through an iterable indefinitely (INFINITE - returns Generator)\n * cycle([1, 2, 3]) -> 1, 2, 3, 1, 2, 3, 1, 2, 3, ...\n *\n * WARNING: This is infinite! Use with for...of and break, or islice.\n */\nexport function* cycle<T>(iterable: Iterable<T>): Generator<T> {\n const saved: T[] = []\n for (const element of iterable) {\n yield element\n saved.push(element)\n }\n if (saved.length === 0) return\n for (;;) {\n yield* saved\n }\n}\n\n/**\n * Repeat an object. If times is specified, returns an array. Otherwise returns\n * an infinite generator.\n *\n * repeat('x', 3) -> ['x', 'x', 'x']\n * repeat('x') -> Generator that yields 'x' forever (INFINITE)\n */\nexport function repeat<T>(obj: T, times?: number): T[] | Generator<T> {\n if (times !== undefined) {\n // Finite: return array\n return Array.from({ length: times }, () => obj)\n }\n // Infinite: return generator\n return (function* () {\n for (;;) {\n yield obj\n }\n })()\n}\n\n/**\n * Slice an iterable from start to stop with step\n * islice([1, 2, 3, 4, 5], 1, 4) -> [2, 3, 4]\n * islice([1, 2, 3, 4, 5], 3) -> [1, 2, 3]\n */\nexport function islice<T>(\n iterable: Iterable<T>,\n start: number,\n stop?: number,\n step: number = 1\n): T[] {\n // Handle single argument (stop only): islice(it, 5) means islice(it, 0, 5, 1)\n let actualStart = start\n let actualStop = stop\n if (actualStop === undefined) {\n actualStop = start\n actualStart = 0\n }\n\n if (step < 1) {\n throw new Error(\"step must be >= 1\")\n }\n\n const result: T[] = []\n let index = 0\n let nextIndex = actualStart\n\n for (const element of iterable) {\n if (index >= actualStop) break\n if (index === nextIndex) {\n result.push(element)\n nextIndex += step\n }\n index++\n }\n\n return result\n}\n\n/**\n * Take elements while predicate is true\n * takeWhile(x => x < 5, [1, 4, 6, 4, 1]) -> [1, 4]\n */\nexport function takeWhile<T>(predicate: (x: T) => boolean, iterable: Iterable<T>): T[] {\n const result: T[] = []\n for (const element of iterable) {\n if (predicate(element)) {\n result.push(element)\n } else {\n break\n }\n }\n return result\n}\n\n/**\n * Skip elements while predicate is true, then return the rest\n * dropWhile(x => x < 5, [1, 4, 6, 4, 1]) -> [6, 4, 1]\n */\nexport function dropWhile<T>(predicate: (x: T) => boolean, iterable: Iterable<T>): T[] {\n const result: T[] = []\n let dropping = true\n for (const element of iterable) {\n if (dropping && predicate(element)) {\n continue\n }\n dropping = false\n result.push(element)\n }\n return result\n}\n\n/**\n * Zip iterables together, filling missing values with fillvalue\n * zipLongest([1, 2, 3], ['a', 'b'], { fillvalue: '-' }) -> [[1, 'a'], [2, 'b'], [3, '-']]\n */\nexport function zipLongest<T>(\n ...args: [...Iterable<T>[], { fillvalue?: T }] | Iterable<T>[]\n): T[][] {\n let fillvalue: T | undefined\n let iterables: Iterable<T>[]\n\n // Check if last argument is options object\n const lastArg = args[args.length - 1]\n if (\n lastArg &&\n typeof lastArg === \"object\" &&\n !Array.isArray(lastArg) &&\n !(Symbol.iterator in lastArg)\n ) {\n fillvalue = (lastArg as { fillvalue?: T }).fillvalue\n iterables = args.slice(0, -1) as Iterable<T>[]\n } else {\n iterables = args as Iterable<T>[]\n }\n\n if (iterables.length === 0) return []\n\n const arrays = iterables.map((it) => [...it])\n const maxLen = Math.max(...arrays.map((a) => a.length))\n const result: T[][] = []\n\n for (let i = 0; i < maxLen; i++) {\n const tuple: T[] = []\n for (const arr of arrays) {\n tuple.push(i < arr.length ? (arr[i] as T) : (fillvalue as T))\n }\n result.push(tuple)\n }\n\n return result\n}\n\n/**\n * Return elements from iterable where the corresponding selector is true\n * compress([1, 2, 3, 4, 5], [1, 0, 1, 0, 1]) -> [1, 3, 5]\n */\nexport function compress<T>(data: Iterable<T>, selectors: Iterable<unknown>): T[] {\n const result: T[] = []\n const dataArr = [...data]\n const selectorsArr = [...selectors]\n const len = Math.min(dataArr.length, selectorsArr.length)\n\n for (let i = 0; i < len; i++) {\n if (selectorsArr[i]) {\n result.push(dataArr[i] as T)\n }\n }\n return result\n}\n\n/**\n * Return elements for which predicate is false\n * filterFalse(x => x % 2, [1, 2, 3, 4, 5]) -> [2, 4]\n */\nexport function filterFalse<T>(predicate: (x: T) => unknown, iterable: Iterable<T>): T[] {\n const result: T[] = []\n for (const element of iterable) {\n if (!predicate(element)) {\n result.push(element)\n }\n }\n return result\n}\n\n/**\n * Make an iterator that returns accumulated sums or accumulated results\n * accumulate([1, 2, 3, 4, 5]) -> [1, 3, 6, 10, 15]\n * accumulate([1, 2, 3, 4, 5], (x, y) => x * y) -> [1, 2, 6, 24, 120]\n */\nexport function accumulate<T>(\n iterable: Iterable<T>,\n func?: (acc: T, val: T) => T,\n initial?: T\n): T[] {\n const result: T[] = []\n const arr = [...iterable]\n\n if (arr.length === 0) {\n if (initial !== undefined) {\n return [initial]\n }\n return []\n }\n\n const operation = func ?? ((a: T, b: T): T => ((a as number) + (b as number)) as unknown as T)\n\n let acc: T\n let startIdx: number\n\n if (initial !== undefined) {\n acc = initial\n startIdx = 0\n result.push(acc)\n } else {\n acc = arr[0] as T\n startIdx = 1\n result.push(acc)\n }\n\n for (let i = startIdx; i < arr.length; i++) {\n acc = operation(acc, arr[i] as T)\n result.push(acc)\n }\n\n return result\n}\n\n/**\n * Return consecutive keys and groups from the iterable\n * groupby([1, 1, 2, 2, 2, 3, 1, 1]) -> [[1, [1, 1]], [2, [2, 2, 2]], [3, [3]], [1, [1, 1]]]\n */\nexport function groupby<T, K = T>(iterable: Iterable<T>, key?: (x: T) => K): [K, T[]][] {\n const result: [K, T[]][] = []\n const keyFunc = key ?? ((x: T) => x as unknown as K)\n\n let currentKey: K | undefined\n let currentGroup: T[] = []\n let first = true\n\n for (const element of iterable) {\n const k = keyFunc(element)\n if (first) {\n currentKey = k\n currentGroup = [element]\n first = false\n } else if (k === currentKey) {\n currentGroup.push(element)\n } else {\n result.push([currentKey as K, currentGroup])\n currentKey = k\n currentGroup = [element]\n }\n }\n\n if (!first) {\n result.push([currentKey as K, currentGroup])\n }\n\n return result\n}\n\n/**\n * Make an iterator that returns evenly spaced values starting with n\n * count(10, 2) -> 10, 12, 14, 16, 18, ... (INFINITE Generator)\n */\nexport function* count(start: number = 0, step: number = 1): Generator<number> {\n let n = start\n for (;;) {\n yield n\n n += step\n }\n}\n\n/**\n * Return n independent iterators from a single iterable\n * tee([1, 2, 3], 2) -> [[1, 2, 3], [1, 2, 3]]\n */\nexport function tee<T>(iterable: Iterable<T>, n: number = 2): T[][] {\n const arr = [...iterable]\n return Array.from({ length: n }, () => [...arr])\n}\n\n/**\n * Return successive overlapping pairs from the iterable\n * pairwise([1, 2, 3, 4, 5]) -> [[1, 2], [2, 3], [3, 4], [4, 5]]\n */\nexport function pairwise<T>(iterable: Iterable<T>): [T, T][] {\n const arr = [...iterable]\n const result: [T, T][] = []\n for (let i = 0; i < arr.length - 1; i++) {\n result.push([arr[i] as T, arr[i + 1] as T])\n }\n return result\n}\n\n/**\n * Cartesian product with repeat (product(range(3), repeat=2) like nested loops)\n * productRepeat([0, 1], 2) -> [[0, 0], [0, 1], [1, 0], [1, 1]]\n */\nexport function productRepeat<T>(iterable: Iterable<T>, repeat: number = 1): T[][] {\n const pool = [...iterable]\n if (repeat < 1 || pool.length === 0) return repeat === 0 ? [[]] : []\n\n const pools = Array.from({ length: repeat }, () => pool)\n return product(...pools)\n}\n\n/**\n * Return r-length combinations with replacement\n * combinationsWithReplacement([1, 2, 3], 2) -> [[1, 1], [1, 2], [1, 3], [2, 2], [2, 3], [3, 3]]\n */\nexport function combinationsWithReplacement<T>(iterable: Iterable<T>, r: number): T[][] {\n const pool = [...iterable]\n const n = pool.length\n if (r < 0 || n === 0) return r === 0 ? [[]] : []\n\n const result: T[][] = []\n const indices: number[] = new Array<number>(r).fill(0)\n result.push(indices.map((i) => pool[i] as T))\n\n for (;;) {\n let i = r - 1\n while (i >= 0 && indices[i] === n - 1) i--\n if (i < 0) break\n const newVal = (indices[i] as number) + 1\n for (let j = i; j < r; j++) {\n indices[j] = newVal\n }\n result.push(indices.map((idx) => pool[idx] as T))\n }\n\n return result\n}\n\n/**\n * Split an iterable into chunks of specified size.\n * @inspired Remeda, Lodash\n *\n * chunk([1, 2, 3, 4, 5], 2) -> [[1, 2], [3, 4], [5]]\n */\nexport function chunk<T>(iterable: Iterable<T>, size: number): T[][] {\n if (size < 1) {\n throw new Error(\"chunk size must be at least 1\")\n }\n const arr = [...iterable]\n const result: T[][] = []\n for (let i = 0; i < arr.length; i += size) {\n result.push(arr.slice(i, i + size))\n }\n return result\n}\n\n/**\n * Partition an iterable into two arrays based on a predicate.\n * @inspired Remeda, Lodash\n *\n * partition([1, 2, 3, 4], x => x % 2 === 0) -> [[2, 4], [1, 3]]\n */\nexport function partition<T>(iterable: Iterable<T>, predicate: (x: T) => boolean): [T[], T[]] {\n const truthy: T[] = []\n const falsy: T[] = []\n for (const item of iterable) {\n if (predicate(item)) {\n truthy.push(item)\n } else {\n falsy.push(item)\n }\n }\n return [truthy, falsy]\n}\n"],"mappings":"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","names":["repeat"]}
|
|
@@ -46,7 +46,7 @@ var timedelta = class _timedelta {
|
|
|
46
46
|
this.days -= 1;
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
|
-
|
|
49
|
+
totalSeconds() {
|
|
50
50
|
return this.days * 24 * 60 * 60 + this.seconds + this.microseconds / 1e6;
|
|
51
51
|
}
|
|
52
52
|
toString() {
|
|
@@ -81,7 +81,7 @@ var timedelta = class _timedelta {
|
|
|
81
81
|
}
|
|
82
82
|
multiply(n) {
|
|
83
83
|
return new _timedelta({
|
|
84
|
-
microseconds: Math.round(this.
|
|
84
|
+
microseconds: Math.round(this.totalSeconds() * 1e6 * n)
|
|
85
85
|
});
|
|
86
86
|
}
|
|
87
87
|
static min = new _timedelta({ days: -999999999 });
|
|
@@ -114,18 +114,18 @@ var date = class _date {
|
|
|
114
114
|
const now = /* @__PURE__ */ new Date();
|
|
115
115
|
return new _date(now.getFullYear(), now.getMonth() + 1, now.getDate());
|
|
116
116
|
}
|
|
117
|
-
static
|
|
117
|
+
static fromTimestamp(timestamp) {
|
|
118
118
|
const d = new Date(timestamp * 1e3);
|
|
119
119
|
return new _date(d.getFullYear(), d.getMonth() + 1, d.getDate());
|
|
120
120
|
}
|
|
121
|
-
static
|
|
121
|
+
static fromIsoFormat(dateString) {
|
|
122
122
|
const match = /^(\d{4})-(\d{2})-(\d{2})$/.exec(dateString);
|
|
123
123
|
if (!match || !match[1] || !match[2] || !match[3]) {
|
|
124
|
-
throw new Error(`Invalid
|
|
124
|
+
throw new Error(`Invalid isoFormat string: '${dateString}'`);
|
|
125
125
|
}
|
|
126
126
|
return new _date(parseInt(match[1]), parseInt(match[2]), parseInt(match[3]));
|
|
127
127
|
}
|
|
128
|
-
static
|
|
128
|
+
static fromOrdinal(ordinal) {
|
|
129
129
|
const d = new Date(Date.UTC(1, 0, ordinal));
|
|
130
130
|
return new _date(d.getUTCFullYear(), d.getUTCMonth() + 1, d.getUTCDate());
|
|
131
131
|
}
|
|
@@ -136,7 +136,7 @@ var date = class _date {
|
|
|
136
136
|
options?.day ?? this.day
|
|
137
137
|
);
|
|
138
138
|
}
|
|
139
|
-
|
|
139
|
+
toOrdinal() {
|
|
140
140
|
const d = new Date(Date.UTC(this.year, this.month - 1, this.day));
|
|
141
141
|
const epoch = new Date(Date.UTC(1, 0, 1));
|
|
142
142
|
return Math.floor((d.getTime() - epoch.getTime()) / (24 * 60 * 60 * 1e3)) + 1;
|
|
@@ -145,10 +145,10 @@ var date = class _date {
|
|
|
145
145
|
const d = new Date(this.year, this.month - 1, this.day);
|
|
146
146
|
return (d.getDay() + 6) % 7;
|
|
147
147
|
}
|
|
148
|
-
|
|
148
|
+
isoWeekday() {
|
|
149
149
|
return this.weekday() + 1;
|
|
150
150
|
}
|
|
151
|
-
|
|
151
|
+
isoCalendar() {
|
|
152
152
|
const d = new Date(this.year, this.month - 1, this.day);
|
|
153
153
|
const dayOfYear = Math.floor(
|
|
154
154
|
(d.getTime() - new Date(this.year, 0, 0).getTime()) / (24 * 60 * 60 * 1e3)
|
|
@@ -168,16 +168,16 @@ var date = class _date {
|
|
|
168
168
|
year += 1;
|
|
169
169
|
}
|
|
170
170
|
}
|
|
171
|
-
return [year, week, this.
|
|
171
|
+
return [year, week, this.isoWeekday()];
|
|
172
172
|
}
|
|
173
|
-
|
|
173
|
+
isoFormat() {
|
|
174
174
|
return `${String(this.year)}-${String(this.month).padStart(2, "0")}-${String(this.day).padStart(2, "0")}`;
|
|
175
175
|
}
|
|
176
176
|
strftime(format) {
|
|
177
177
|
return strftime(format, new datetime(this.year, this.month, this.day, 0, 0, 0, 0));
|
|
178
178
|
}
|
|
179
179
|
toString() {
|
|
180
|
-
return this.
|
|
180
|
+
return this.isoFormat();
|
|
181
181
|
}
|
|
182
182
|
__add__(delta) {
|
|
183
183
|
const d = new Date(this.year, this.month - 1, this.day + delta.days);
|
|
@@ -194,19 +194,19 @@ var date = class _date {
|
|
|
194
194
|
return new timedelta({ days: Math.floor(diffMs / (24 * 60 * 60 * 1e3)) });
|
|
195
195
|
}
|
|
196
196
|
__lt__(other) {
|
|
197
|
-
return this.
|
|
197
|
+
return this.toOrdinal() < other.toOrdinal();
|
|
198
198
|
}
|
|
199
199
|
__le__(other) {
|
|
200
|
-
return this.
|
|
200
|
+
return this.toOrdinal() <= other.toOrdinal();
|
|
201
201
|
}
|
|
202
202
|
__gt__(other) {
|
|
203
|
-
return this.
|
|
203
|
+
return this.toOrdinal() > other.toOrdinal();
|
|
204
204
|
}
|
|
205
205
|
__ge__(other) {
|
|
206
|
-
return this.
|
|
206
|
+
return this.toOrdinal() >= other.toOrdinal();
|
|
207
207
|
}
|
|
208
208
|
__eq__(other) {
|
|
209
|
-
return this.
|
|
209
|
+
return this.toOrdinal() === other.toOrdinal();
|
|
210
210
|
}
|
|
211
211
|
static min = new _date(1, 1, 1);
|
|
212
212
|
static max = new _date(9999, 12, 31);
|
|
@@ -229,10 +229,10 @@ var time = class _time {
|
|
|
229
229
|
this.microsecond = microsecond;
|
|
230
230
|
this.tzinfo = null;
|
|
231
231
|
}
|
|
232
|
-
static
|
|
232
|
+
static fromIsoFormat(timeString) {
|
|
233
233
|
const match = /^(\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?$/.exec(timeString);
|
|
234
234
|
if (!match || !match[1] || !match[2] || !match[3]) {
|
|
235
|
-
throw new Error(`Invalid
|
|
235
|
+
throw new Error(`Invalid isoFormat string: '${timeString}'`);
|
|
236
236
|
}
|
|
237
237
|
const microsecond = match[4] ? parseInt(match[4].padEnd(6, "0").slice(0, 6)) : 0;
|
|
238
238
|
return new _time(parseInt(match[1]), parseInt(match[2]), parseInt(match[3]), microsecond);
|
|
@@ -245,7 +245,7 @@ var time = class _time {
|
|
|
245
245
|
options?.microsecond ?? this.microsecond
|
|
246
246
|
);
|
|
247
247
|
}
|
|
248
|
-
|
|
248
|
+
isoFormat(timespec = "auto") {
|
|
249
249
|
const hh = String(this.hour).padStart(2, "0");
|
|
250
250
|
const mm = String(this.minute).padStart(2, "0");
|
|
251
251
|
const ss = String(this.second).padStart(2, "0");
|
|
@@ -275,7 +275,7 @@ var time = class _time {
|
|
|
275
275
|
);
|
|
276
276
|
}
|
|
277
277
|
toString() {
|
|
278
|
-
return this.
|
|
278
|
+
return this.isoFormat();
|
|
279
279
|
}
|
|
280
280
|
static min = new _time(0, 0, 0, 0);
|
|
281
281
|
static max = new _time(23, 59, 59, 999999);
|
|
@@ -314,7 +314,7 @@ var datetime = class _datetime extends date {
|
|
|
314
314
|
d.getMilliseconds() * 1e3
|
|
315
315
|
);
|
|
316
316
|
}
|
|
317
|
-
static
|
|
317
|
+
static utcNow() {
|
|
318
318
|
const d = /* @__PURE__ */ new Date();
|
|
319
319
|
return new _datetime(
|
|
320
320
|
d.getUTCFullYear(),
|
|
@@ -326,7 +326,7 @@ var datetime = class _datetime extends date {
|
|
|
326
326
|
d.getUTCMilliseconds() * 1e3
|
|
327
327
|
);
|
|
328
328
|
}
|
|
329
|
-
static
|
|
329
|
+
static fromTimestamp(timestamp) {
|
|
330
330
|
const d = new Date(timestamp * 1e3);
|
|
331
331
|
return new _datetime(
|
|
332
332
|
d.getFullYear(),
|
|
@@ -338,7 +338,7 @@ var datetime = class _datetime extends date {
|
|
|
338
338
|
d.getMilliseconds() * 1e3
|
|
339
339
|
);
|
|
340
340
|
}
|
|
341
|
-
static
|
|
341
|
+
static utcfromTimestamp(timestamp) {
|
|
342
342
|
const d = new Date(timestamp * 1e3);
|
|
343
343
|
return new _datetime(
|
|
344
344
|
d.getUTCFullYear(),
|
|
@@ -350,14 +350,14 @@ var datetime = class _datetime extends date {
|
|
|
350
350
|
d.getUTCMilliseconds() * 1e3
|
|
351
351
|
);
|
|
352
352
|
}
|
|
353
|
-
static
|
|
353
|
+
static fromIsoFormat(s) {
|
|
354
354
|
const match = /^(\d{4})-(\d{2})-(\d{2})[T ](\d{2}):(\d{2}):(\d{2})(?:\.(\d+))?$/.exec(s);
|
|
355
355
|
if (!match || !match[1] || !match[2] || !match[3] || !match[4] || !match[5] || !match[6]) {
|
|
356
356
|
const dateMatch = /^(\d{4})-(\d{2})-(\d{2})$/.exec(s);
|
|
357
357
|
if (dateMatch && dateMatch[1] && dateMatch[2] && dateMatch[3]) {
|
|
358
358
|
return new _datetime(parseInt(dateMatch[1]), parseInt(dateMatch[2]), parseInt(dateMatch[3]));
|
|
359
359
|
}
|
|
360
|
-
throw new Error(`Invalid
|
|
360
|
+
throw new Error(`Invalid isoFormat string: '${s}'`);
|
|
361
361
|
}
|
|
362
362
|
const microsecond = match[7] ? parseInt(match[7].padEnd(6, "0").slice(0, 6)) : 0;
|
|
363
363
|
return new _datetime(
|
|
@@ -405,10 +405,10 @@ var datetime = class _datetime extends date {
|
|
|
405
405
|
);
|
|
406
406
|
return d.getTime() / 1e3;
|
|
407
407
|
}
|
|
408
|
-
|
|
409
|
-
const dateStr = super.
|
|
408
|
+
isoFormat(sep = "T", timespec = "auto") {
|
|
409
|
+
const dateStr = super.isoFormat();
|
|
410
410
|
const t = new time(this.hour, this.minute, this.second, this.microsecond);
|
|
411
|
-
return `${dateStr}${sep}${t.
|
|
411
|
+
return `${dateStr}${sep}${t.isoFormat(timespec)}`;
|
|
412
412
|
}
|
|
413
413
|
ctime() {
|
|
414
414
|
const days = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"];
|
|
@@ -434,16 +434,16 @@ var datetime = class _datetime extends date {
|
|
|
434
434
|
return strftime(format, this);
|
|
435
435
|
}
|
|
436
436
|
toString() {
|
|
437
|
-
return this.
|
|
437
|
+
return this.isoFormat(" ");
|
|
438
438
|
}
|
|
439
439
|
__add__(delta) {
|
|
440
|
-
const totalMicroseconds = this.timestamp() * 1e6 + this.microsecond + delta.
|
|
441
|
-
return _datetime.
|
|
440
|
+
const totalMicroseconds = this.timestamp() * 1e6 + this.microsecond + delta.totalSeconds() * 1e6;
|
|
441
|
+
return _datetime.fromTimestamp(totalMicroseconds / 1e6);
|
|
442
442
|
}
|
|
443
443
|
__sub__(other) {
|
|
444
444
|
if (other instanceof timedelta) {
|
|
445
|
-
const totalMicroseconds = this.timestamp() * 1e6 + this.microsecond - other.
|
|
446
|
-
return _datetime.
|
|
445
|
+
const totalMicroseconds = this.timestamp() * 1e6 + this.microsecond - other.totalSeconds() * 1e6;
|
|
446
|
+
return _datetime.fromTimestamp(totalMicroseconds / 1e6);
|
|
447
447
|
}
|
|
448
448
|
if (other instanceof _datetime) {
|
|
449
449
|
const diff = this.timestamp() - other.timestamp();
|
|
@@ -645,6 +645,7 @@ function strptime(dateString, format) {
|
|
|
645
645
|
if (!found) throw new Error("Invalid month name");
|
|
646
646
|
break;
|
|
647
647
|
}
|
|
648
|
+
/* c8 ignore start - rare edge cases */
|
|
648
649
|
case "%":
|
|
649
650
|
if (dateString[pos] !== "%") throw new Error("Expected %");
|
|
650
651
|
pos++;
|
|
@@ -677,4 +678,4 @@ export {
|
|
|
677
678
|
MAXYEAR,
|
|
678
679
|
datetime_exports
|
|
679
680
|
};
|
|
680
|
-
//# sourceMappingURL=chunk-
|
|
681
|
+
//# sourceMappingURL=chunk-KRRY534Q.js.map
|