iterflow 0.4.0 → 0.7.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/dist/fn/index.js CHANGED
@@ -181,6 +181,13 @@ function transducerToIterator(transducer) {
181
181
 
182
182
  // src/fn/index.ts
183
183
  function sum(iterable) {
184
+ if (Array.isArray(iterable)) {
185
+ let total2 = 0;
186
+ for (let i = 0; i < iterable.length; i++) {
187
+ total2 += iterable[i];
188
+ }
189
+ return total2;
190
+ }
184
191
  let total = 0;
185
192
  for (const value of iterable) {
186
193
  total += value;
@@ -188,6 +195,14 @@ function sum(iterable) {
188
195
  return total;
189
196
  }
190
197
  function mean(iterable) {
198
+ if (Array.isArray(iterable)) {
199
+ if (iterable.length === 0) return void 0;
200
+ let total2 = 0;
201
+ for (let i = 0; i < iterable.length; i++) {
202
+ total2 += iterable[i];
203
+ }
204
+ return total2 / iterable.length;
205
+ }
191
206
  let total = 0;
192
207
  let count2 = 0;
193
208
  for (const value of iterable) {
@@ -197,6 +212,10 @@ function mean(iterable) {
197
212
  return count2 === 0 ? void 0 : total / count2;
198
213
  }
199
214
  function min(iterable) {
215
+ if (Array.isArray(iterable)) {
216
+ if (iterable.length === 0) return void 0;
217
+ return Math.min(...iterable);
218
+ }
200
219
  let minimum = void 0;
201
220
  for (const value of iterable) {
202
221
  if (minimum === void 0 || value < minimum) {
@@ -206,6 +225,10 @@ function min(iterable) {
206
225
  return minimum;
207
226
  }
208
227
  function max(iterable) {
228
+ if (Array.isArray(iterable)) {
229
+ if (iterable.length === 0) return void 0;
230
+ return Math.max(...iterable);
231
+ }
209
232
  let maximum = void 0;
210
233
  for (const value of iterable) {
211
234
  if (maximum === void 0 || value > maximum) {
@@ -215,6 +238,9 @@ function max(iterable) {
215
238
  return maximum;
216
239
  }
217
240
  function count(iterable) {
241
+ if (Array.isArray(iterable)) {
242
+ return iterable.length;
243
+ }
218
244
  let count2 = 0;
219
245
  for (const _ of iterable) {
220
246
  count2++;
@@ -222,18 +248,18 @@ function count(iterable) {
222
248
  return count2;
223
249
  }
224
250
  function median(iterable) {
225
- const values = Array.from(iterable);
251
+ const values = Array.isArray(iterable) ? iterable : Array.from(iterable);
226
252
  if (values.length === 0) return void 0;
227
- values.sort((a, b) => a - b);
228
- const mid = Math.floor(values.length / 2);
229
- if (values.length % 2 === 0) {
230
- return (values[mid - 1] + values[mid]) / 2;
253
+ const sorted = values.slice().sort((a, b) => a - b);
254
+ const mid = Math.floor(sorted.length / 2);
255
+ if (sorted.length % 2 === 0) {
256
+ return (sorted[mid - 1] + sorted[mid]) / 2;
231
257
  } else {
232
- return values[mid];
258
+ return sorted[mid];
233
259
  }
234
260
  }
235
261
  function variance(iterable) {
236
- const values = Array.from(iterable);
262
+ const values = Array.isArray(iterable) ? iterable : Array.from(iterable);
237
263
  if (values.length === 0) return void 0;
238
264
  const mean2 = values.reduce((sum2, val) => sum2 + val, 0) / values.length;
239
265
  let sumSquaredDiffs = 0;
@@ -249,22 +275,22 @@ function stdDev(iterable) {
249
275
  }
250
276
  function percentile(iterable, p) {
251
277
  validateRange(p, 0, 100, "percentile", "percentile");
252
- const values = Array.from(iterable);
278
+ const values = Array.isArray(iterable) ? iterable : Array.from(iterable);
253
279
  if (values.length === 0) return void 0;
254
- values.sort((a, b) => a - b);
255
- if (p === 0) return values[0];
256
- if (p === 100) return values[values.length - 1];
257
- const index = p / 100 * (values.length - 1);
280
+ const sorted = values.slice().sort((a, b) => a - b);
281
+ if (p === 0) return sorted[0];
282
+ if (p === 100) return sorted[sorted.length - 1];
283
+ const index = p / 100 * (sorted.length - 1);
258
284
  const lower = Math.floor(index);
259
285
  const upper = Math.ceil(index);
260
286
  if (lower === upper) {
261
- return values[lower];
287
+ return sorted[lower];
262
288
  }
263
289
  const weight = index - lower;
264
- return values[lower] * (1 - weight) + values[upper] * weight;
290
+ return sorted[lower] * (1 - weight) + sorted[upper] * weight;
265
291
  }
266
292
  function mode(iterable) {
267
- const values = Array.from(iterable);
293
+ const values = Array.isArray(iterable) ? iterable : Array.from(iterable);
268
294
  if (values.length === 0) return void 0;
269
295
  const frequency = /* @__PURE__ */ new Map();
270
296
  let maxFreq = 0;
@@ -282,20 +308,20 @@ function mode(iterable) {
282
308
  return modes.sort((a, b) => a - b);
283
309
  }
284
310
  function quartiles(iterable) {
285
- const values = Array.from(iterable);
311
+ const values = Array.isArray(iterable) ? iterable : Array.from(iterable);
286
312
  if (values.length === 0) return void 0;
287
- values.sort((a, b) => a - b);
313
+ const sorted = values.slice().sort((a, b) => a - b);
288
314
  const calculatePercentile = (p) => {
289
- if (p === 0) return values[0];
290
- if (p === 100) return values[values.length - 1];
291
- const index = p / 100 * (values.length - 1);
315
+ if (p === 0) return sorted[0];
316
+ if (p === 100) return sorted[sorted.length - 1];
317
+ const index = p / 100 * (sorted.length - 1);
292
318
  const lower = Math.floor(index);
293
319
  const upper = Math.ceil(index);
294
320
  if (lower === upper) {
295
- return values[lower];
321
+ return sorted[lower];
296
322
  }
297
323
  const weight = index - lower;
298
- return values[lower] * (1 - weight) + values[upper] * weight;
324
+ return sorted[lower] * (1 - weight) + sorted[upper] * weight;
299
325
  };
300
326
  return {
301
327
  Q1: calculatePercentile(25),