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.
Files changed (64) hide show
  1. package/README.md +41 -138
  2. package/dist/{chunk-3CSEXTA7.js → chunk-4QG3772L.js} +53 -53
  3. package/dist/chunk-4QG3772L.js.map +1 -0
  4. package/dist/{chunk-OMQNGE6T.js → chunk-4SZT4HJI.js} +32 -27
  5. package/dist/chunk-4SZT4HJI.js.map +1 -0
  6. package/dist/{chunk-IVYYI2VR.js → chunk-6POEDI34.js} +1 -1
  7. package/dist/chunk-6POEDI34.js.map +1 -0
  8. package/dist/{chunk-P3SGIF72.js → chunk-6VQ7ITWO.js} +6 -6
  9. package/dist/chunk-6VQ7ITWO.js.map +1 -0
  10. package/dist/{chunk-V63LKSA3.js → chunk-7TH4FCVQ.js} +24 -24
  11. package/dist/chunk-7TH4FCVQ.js.map +1 -0
  12. package/dist/{chunk-TJFGYXBJ.js → chunk-BDBX5BG4.js} +63 -61
  13. package/dist/chunk-BDBX5BG4.js.map +1 -0
  14. package/dist/{chunk-WAONBJE5.js → chunk-H76SKASU.js} +36 -36
  15. package/dist/chunk-H76SKASU.js.map +1 -0
  16. package/dist/{chunk-TOI6IG3T.js → chunk-HQ42WNKZ.js} +43 -16
  17. package/dist/chunk-HQ42WNKZ.js.map +1 -0
  18. package/dist/{chunk-HA5Y7PKO.js → chunk-KRRY534Q.js} +36 -35
  19. package/dist/chunk-KRRY534Q.js.map +1 -0
  20. package/dist/{chunk-UFMTN4T4.js → chunk-XGT3VOIZ.js} +5 -5
  21. package/dist/chunk-XGT3VOIZ.js.map +1 -0
  22. package/dist/{collections-xN9Gi0TA.d.ts → collections-CJur5Wg-.d.ts} +5 -3
  23. package/dist/collections.d.ts +1 -1
  24. package/dist/collections.js +1 -1
  25. package/dist/{datetime-DRwFAiGV.d.ts → datetime-Bpce8gG2.d.ts} +17 -15
  26. package/dist/datetime.d.ts +1 -1
  27. package/dist/datetime.js +1 -1
  28. package/dist/{functools-St5GqpKG.d.ts → functools-NrsZAqJk.d.ts} +42 -26
  29. package/dist/functools.d.ts +1 -1
  30. package/dist/functools.js +19 -17
  31. package/dist/index.d.ts +56 -158
  32. package/dist/index.js +45 -137
  33. package/dist/index.js.map +1 -1
  34. package/dist/{itertools-Bj8XivI6.d.ts → itertools-Sjl1LB_0.d.ts} +35 -17
  35. package/dist/itertools.d.ts +1 -1
  36. package/dist/itertools.js +15 -11
  37. package/dist/{json-Xpk0kwSd.d.ts → json-DAlvCadU.d.ts} +7 -5
  38. package/dist/json.d.ts +1 -1
  39. package/dist/json.js +1 -1
  40. package/dist/{math-BrT4Aw3E.d.ts → math-DwEGjjQ-.d.ts} +2 -0
  41. package/dist/math.d.ts +1 -1
  42. package/dist/math.js +1 -1
  43. package/dist/{os-FRSJbEUH.d.ts → os-C6Nt7Ijx.d.ts} +45 -42
  44. package/dist/os.d.ts +1 -1
  45. package/dist/os.js +23 -23
  46. package/dist/{random-D5S5iSV3.d.ts → random-BJv_rSpL.d.ts} +24 -22
  47. package/dist/random.d.ts +1 -1
  48. package/dist/random.js +21 -21
  49. package/dist/{re-DSxiURqN.d.ts → re-B1CHCgyr.d.ts} +17 -15
  50. package/dist/re.d.ts +1 -1
  51. package/dist/re.js +7 -7
  52. package/dist/string.d.ts +51 -48
  53. package/dist/string.js +13 -13
  54. package/package.json +20 -3
  55. package/dist/chunk-3CSEXTA7.js.map +0 -1
  56. package/dist/chunk-HA5Y7PKO.js.map +0 -1
  57. package/dist/chunk-IVYYI2VR.js.map +0 -1
  58. package/dist/chunk-OMQNGE6T.js.map +0 -1
  59. package/dist/chunk-P3SGIF72.js.map +0 -1
  60. package/dist/chunk-TJFGYXBJ.js.map +0 -1
  61. package/dist/chunk-TOI6IG3T.js.map +0 -1
  62. package/dist/chunk-UFMTN4T4.js.map +0 -1
  63. package/dist/chunk-V63LKSA3.js.map +0 -1
  64. package/dist/chunk-WAONBJE5.js.map +0 -1
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core.ts","../src/builtins.ts","../src/list.ts","../src/dict.ts","../src/set.ts","../src/index.ts"],"sourcesContent":["/**\n * Core Python operations for TypeScript\n * Arithmetic operations with Python semantics, slicing, etc.\n */\n\n// ============================================================\n// Arithmetic Operations (Python semantics)\n// ============================================================\n\n/**\n * Floor division (Python //)\n * Always rounds towards negative infinity, unlike Math.floor for negatives\n */\nexport function floordiv(a: number, b: number): number {\n return Math.floor(a / b)\n}\n\n/**\n * Power operator (Python **)\n */\nexport function pow(base: number, exp: number): number {\n return Math.pow(base, exp)\n}\n\n/**\n * Modulo (Python %)\n * Python's % always returns a result with the same sign as the divisor\n */\nexport function mod(a: number, b: number): number {\n return ((a % b) + b) % b\n}\n\n/**\n * Python divmod()\n */\nexport function divmod(a: number, b: number): [number, number] {\n return [floordiv(a, b), mod(a, b)]\n}\n\n// ============================================================\n// String Formatting\n// ============================================================\n\n/**\n * Python %-style string formatting\n * Handles %s, %d, %i, %f, %r, %x, %o, etc.\n */\nexport function sprintf(template: string, args: unknown): string {\n const values = Array.isArray(args) ? args : [args]\n let index = 0\n return template.replace(\n /%([+-]?\\d*\\.?\\d*)([sdifxXorec%])/g,\n (match: string, flags: string, type: string) => {\n if (type === \"%\") return \"%\"\n if (index >= values.length) return match\n const value: unknown = values[index++]\n switch (type) {\n case \"s\":\n return String(value)\n case \"d\":\n case \"i\":\n return String(Math.floor(Number(value)))\n case \"f\":\n if (flags && flags.includes(\".\")) {\n const precision = parseInt(flags.split(\".\")[1] ?? \"6\", 10)\n return Number(value).toFixed(precision)\n }\n return String(Number(value))\n case \"x\":\n return Math.floor(Number(value)).toString(16)\n case \"X\":\n return Math.floor(Number(value)).toString(16).toUpperCase()\n case \"o\":\n return Math.floor(Number(value)).toString(8)\n case \"r\":\n return JSON.stringify(value)\n case \"e\":\n return Number(value).toExponential()\n case \"c\":\n return String.fromCharCode(Number(value))\n default:\n return String(value)\n }\n }\n )\n}\n\n/**\n * Python str.format() style string formatting\n * Handles {} positional and {name} named placeholders\n */\nexport function strFormat(template: string, ...args: unknown[]): string {\n let positionalIndex = 0\n const lastArg = args[args.length - 1]\n const namedParams =\n lastArg && typeof lastArg === \"object\" && !Array.isArray(lastArg)\n ? (lastArg as Record<string, unknown>)\n : {}\n\n return template.replace(/\\{([^}]*)\\}/g, (match, key: string) => {\n if (key === \"\") {\n if (positionalIndex < args.length) {\n return String(args[positionalIndex++])\n }\n return match\n }\n\n const numIndex = parseInt(key, 10)\n if (!isNaN(numIndex) && numIndex < args.length) {\n return String(args[numIndex])\n }\n\n if (key in namedParams) {\n return String(namedParams[key])\n }\n\n return match\n })\n}\n\n// ============================================================\n// Slicing\n// ============================================================\n\nfunction normalizeIndex(index: number, length: number, forNegativeStep = false): number {\n if (index < 0) {\n index = length + index\n }\n\n if (forNegativeStep) {\n return Math.max(-1, Math.min(length - 1, index))\n }\n\n return Math.max(0, Math.min(length, index))\n}\n\n/**\n * Python-style slice operation\n * Supports negative indices and step\n */\nexport function slice<T>(\n obj: string | T[],\n start?: number,\n stop?: number,\n step?: number\n): string | T[] {\n const len = obj.length\n const actualStep = step ?? 1\n\n if (actualStep === 0) {\n throw new Error(\"slice step cannot be zero\")\n }\n\n let actualStart: number\n let actualStop: number\n\n if (actualStep > 0) {\n actualStart = start === undefined ? 0 : normalizeIndex(start, len)\n actualStop = stop === undefined ? len : normalizeIndex(stop, len)\n } else {\n actualStart = start === undefined ? len - 1 : normalizeIndex(start, len, true)\n actualStop = stop === undefined ? -1 : normalizeIndex(stop, len, true)\n }\n\n const result: T[] = []\n\n if (actualStep > 0) {\n for (let i = actualStart; i < actualStop; i += actualStep) {\n if (i >= 0 && i < len) {\n result.push((obj as T[])[i] as T)\n }\n }\n } else {\n for (let i = actualStart; i > actualStop; i += actualStep) {\n if (i >= 0 && i < len) {\n result.push((obj as T[])[i] as T)\n }\n }\n }\n\n if (typeof obj === \"string\") {\n return result.join(\"\")\n }\n\n return result\n}\n\n/**\n * Python-style index access with support for negative indices\n */\nexport function at<T>(obj: string | T[], index: number): T | string {\n const len = obj.length\n const normalizedIndex = index < 0 ? len + index : index\n if (normalizedIndex < 0 || normalizedIndex >= len) {\n throw new Error(\"IndexError: list index out of range\")\n }\n return (obj as T[])[normalizedIndex] as T\n}\n\n/**\n * Python-style string/array repetition\n */\nexport function repeat<T>(obj: string | T[], count: number): string | T[] {\n if (count <= 0) {\n return typeof obj === \"string\" ? \"\" : []\n }\n if (typeof obj === \"string\") {\n return obj.repeat(count)\n }\n const result: T[] = []\n for (let i = 0; i < count; i++) {\n result.push(...obj)\n }\n return result\n}\n\n// ============================================================\n// Membership & Identity\n// ============================================================\n\n/**\n * Python 'in' operator\n */\nexport function contains<T>(\n item: T,\n container: Iterable<T> | string | Map<T, unknown> | Set<T>\n): boolean {\n if (typeof container === \"string\") {\n return container.includes(item as unknown as string)\n }\n if (container instanceof Map) {\n return container.has(item)\n }\n if (container instanceof Set) {\n return container.has(item)\n }\n if (Array.isArray(container)) {\n return container.includes(item)\n }\n for (const element of container) {\n if (element === item) {\n return true\n }\n }\n return false\n}\n\n/**\n * Python 'is' operator (identity comparison)\n */\nexport function is(a: unknown, b: unknown): boolean {\n return a === b\n}\n","/**\n * Python built-in functions for TypeScript\n * len, range, enumerate, sorted, min, max, etc.\n */\n\n// Import for referencing py.bool and py.repr in str()\nimport type { py as PyType } from \"./index.js\"\nlet py: typeof PyType\n\n// This will be called from index.ts after py is constructed\nexport function _setPyRef(pyRef: typeof PyType): void {\n py = pyRef\n}\n\n// ============================================================\n// Iterables\n// ============================================================\n\n/**\n * Python range() function\n */\nexport function range(startOrStop: number, stop?: number, step?: number): Iterable<number> {\n let start: number\n let end: number\n let stepVal: number\n\n if (stop === undefined) {\n start = 0\n end = startOrStop\n stepVal = 1\n } else {\n start = startOrStop\n end = stop\n stepVal = step ?? 1\n }\n\n if (stepVal === 0) {\n throw new Error(\"range() arg 3 must not be zero\")\n }\n\n return {\n *[Symbol.iterator]() {\n if (stepVal > 0) {\n for (let i = start; i < end; i += stepVal) {\n yield i\n }\n } else {\n for (let i = start; i > end; i += stepVal) {\n yield i\n }\n }\n }\n }\n}\n\n/**\n * Python enumerate() function\n */\nexport function enumerate<T>(iterable: Iterable<T>, start = 0): Iterable<[number, T]> {\n return {\n *[Symbol.iterator]() {\n let index = start\n for (const item of iterable) {\n yield [index++, item] as [number, T]\n }\n }\n }\n}\n\n/**\n * Python zip() function\n */\nexport function zip<T extends unknown[][]>(\n ...iterables: { [K in keyof T]: Iterable<T[K]> }\n): Iterable<T> {\n return {\n *[Symbol.iterator]() {\n const iterators = iterables.map((it) => (it as Iterable<unknown>)[Symbol.iterator]())\n\n for (;;) {\n const results = iterators.map((it) => it.next())\n\n if (results.some((r) => r.done)) {\n break\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n yield results.map((r) => r.value) as T\n }\n }\n }\n}\n\n/**\n * Safe iteration helper for for-in loops\n */\nexport function iter<T>(\n obj: Iterable<T> | Record<string, unknown> | null | undefined\n): Iterable<T> | string[] {\n if (obj === null || obj === undefined) {\n return []\n }\n if (typeof (obj as Iterable<T>)[Symbol.iterator] === \"function\") {\n return obj as Iterable<T>\n }\n if (typeof obj === \"object\") {\n return Object.keys(obj)\n }\n return []\n}\n\n/**\n * Python reversed() function\n */\nexport function reversed<T>(iterable: Iterable<T>): Iterable<T> {\n const arr = Array.from(iterable)\n return {\n *[Symbol.iterator]() {\n for (let i = arr.length - 1; i >= 0; i--) {\n yield arr[i] as T\n }\n }\n }\n}\n\n/**\n * Python sorted() function\n */\nexport function sorted<T>(\n iterable: Iterable<T>,\n options?: { key?: (x: T) => unknown; reverse?: boolean }\n): T[] {\n const arr = Array.from(iterable)\n const key = options?.key ?? ((x: T) => x)\n const reverse = options?.reverse ?? false\n\n arr.sort((a, b) => {\n const aKey = key(a)\n const bKey = key(b)\n\n let cmp: number\n if (typeof aKey === \"string\" && typeof bKey === \"string\") {\n cmp = aKey.localeCompare(bKey)\n } else {\n cmp = (aKey as number) - (bKey as number)\n }\n\n return reverse ? -cmp : cmp\n })\n\n return arr\n}\n\n/**\n * Python map() function\n */\nexport function map<T, U>(fn: (x: T) => U, iterable: Iterable<T>): Iterable<U> {\n return {\n *[Symbol.iterator]() {\n for (const item of iterable) {\n yield fn(item)\n }\n }\n }\n}\n\n/**\n * Python filter() function\n */\nexport function filter<T>(fn: ((x: T) => boolean) | null, iterable: Iterable<T>): Iterable<T> {\n return {\n *[Symbol.iterator]() {\n for (const item of iterable) {\n if (fn === null ? bool(item) : fn(item)) {\n yield item\n }\n }\n }\n }\n}\n\n// ============================================================\n// Collections Constructors\n// ============================================================\n\n/**\n * Convert to list (array)\n */\nexport function list<T>(iterable?: Iterable<T>): T[] {\n if (iterable === undefined) {\n return []\n }\n return Array.from(iterable)\n}\n\n/**\n * Create a Map (Python dict)\n */\nexport function dict<K, V>(entries?: Iterable<[K, V]>): Map<K, V> {\n return new Map(entries)\n}\n\n/**\n * Create a Set\n */\nexport function set<T>(iterable?: Iterable<T>): Set<T> {\n return new Set(iterable)\n}\n\n/**\n * Create a tuple (readonly array)\n */\nexport function tuple<T extends unknown[]>(...items: T): Readonly<T> {\n return Object.freeze([...items]) as Readonly<T>\n}\n\n// ============================================================\n// Built-in Functions\n// ============================================================\n\n/**\n * Python len() function\n */\nexport function len(\n obj: string | unknown[] | Map<unknown, unknown> | Set<unknown> | { length: number }\n): number {\n if (typeof obj === \"string\" || Array.isArray(obj)) {\n return obj.length\n }\n if (obj instanceof Map || obj instanceof Set) {\n return obj.size\n }\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (typeof obj === \"object\" && obj !== null && \"length\" in obj) {\n return obj.length\n }\n throw new TypeError(\"object has no len()\")\n}\n\n/**\n * Python abs() function\n */\nexport function abs(x: number): number {\n return Math.abs(x)\n}\n\n/**\n * Python min() function\n */\nexport function min<T>(...args: T[] | [Iterable<T>]): T {\n const first = args[0]\n if (\n args.length === 1 &&\n typeof first === \"object\" &&\n first !== null &&\n Symbol.iterator in first\n ) {\n const arr = [...first]\n if (arr.length === 0) {\n throw new Error(\"min() arg is an empty sequence\")\n }\n return arr.reduce((a, b) => (a < b ? a : b))\n }\n\n if (args.length === 0) {\n throw new Error(\"min expected at least 1 argument, got 0\")\n }\n\n return (args as T[]).reduce((a, b) => (a < b ? a : b))\n}\n\n/**\n * Python max() function\n */\nexport function max<T>(...args: T[] | [Iterable<T>]): T {\n const first = args[0]\n if (\n args.length === 1 &&\n typeof first === \"object\" &&\n first !== null &&\n Symbol.iterator in first\n ) {\n const arr = [...first]\n if (arr.length === 0) {\n throw new Error(\"max() arg is an empty sequence\")\n }\n return arr.reduce((a, b) => (a > b ? a : b))\n }\n\n if (args.length === 0) {\n throw new Error(\"max expected at least 1 argument, got 0\")\n }\n\n return (args as T[]).reduce((a, b) => (a > b ? a : b))\n}\n\n/**\n * Python sum() function\n */\nexport function sum(iterable: Iterable<number>, start = 0): number {\n let total = start\n for (const item of iterable) {\n total += item\n }\n return total\n}\n\n/**\n * Python all() function\n */\nexport function all(iterable: Iterable<unknown>): boolean {\n for (const item of iterable) {\n if (!bool(item)) return false\n }\n return true\n}\n\n/**\n * Python any() function\n */\nexport function any(iterable: Iterable<unknown>): boolean {\n for (const item of iterable) {\n if (bool(item)) return true\n }\n return false\n}\n\n/**\n * Python round() function\n */\nexport function round(number: number, ndigits?: number): number {\n if (ndigits === undefined || ndigits === 0) {\n const rounded = Math.round(number)\n if (Math.abs(number % 1) === 0.5) {\n return rounded % 2 === 0 ? rounded : rounded - Math.sign(number)\n }\n return rounded\n }\n\n const factor = Math.pow(10, ndigits)\n return Math.round(number * factor) / factor\n}\n\n/**\n * Python ord()\n */\nexport function ord(char: string): number {\n if (char.length !== 1) {\n throw new Error(\"ord() expected a character\")\n }\n return char.charCodeAt(0)\n}\n\n/**\n * Python chr()\n */\nexport function chr(code: number): string {\n return String.fromCharCode(code)\n}\n\n/**\n * Python hex()\n */\nexport function hex(x: number): string {\n const prefix = x < 0 ? \"-0x\" : \"0x\"\n return prefix + Math.abs(Math.trunc(x)).toString(16)\n}\n\n/**\n * Python oct()\n */\nexport function oct(x: number): string {\n const prefix = x < 0 ? \"-0o\" : \"0o\"\n return prefix + Math.abs(Math.trunc(x)).toString(8)\n}\n\n/**\n * Python bin()\n */\nexport function bin(x: number): string {\n const prefix = x < 0 ? \"-0b\" : \"0b\"\n return prefix + Math.abs(Math.trunc(x)).toString(2)\n}\n\n// ============================================================\n// Type Conversions\n// ============================================================\n\n/**\n * Python int() function\n */\nexport function int(x: string | number | boolean, base?: number): number {\n if (typeof x === \"boolean\") {\n return x ? 1 : 0\n }\n if (typeof x === \"number\") {\n return Math.trunc(x)\n }\n const parsed = base !== undefined ? parseInt(x, base) : parseInt(x, 10)\n if (isNaN(parsed)) {\n throw new Error(`invalid literal for int(): '${x}'`)\n }\n return parsed\n}\n\n/**\n * Python float() function\n */\nexport function float(x: string | number): number {\n if (typeof x === \"number\") {\n return x\n }\n const parsed = parseFloat(x)\n if (isNaN(parsed)) {\n throw new Error(`could not convert string to float: '${x}'`)\n }\n return parsed\n}\n\n/**\n * Python str() function\n */\nexport function str(x: unknown): string {\n if (x === null) {\n return \"None\"\n }\n if (x === undefined) {\n return \"None\"\n }\n if (typeof x === \"boolean\") {\n return x ? \"True\" : \"False\"\n }\n if (Array.isArray(x)) {\n return \"[\" + x.map((item) => py.repr(item)).join(\", \") + \"]\"\n }\n if (x instanceof Map) {\n const entries = Array.from(x.entries())\n .map(([k, v]) => `${py.repr(k)}: ${py.repr(v)}`)\n .join(\", \")\n return \"{\" + entries + \"}\"\n }\n if (x instanceof Set) {\n if (x.size === 0) {\n return \"set()\"\n }\n return (\n \"{\" +\n Array.from(x)\n .map((item) => py.repr(item))\n .join(\", \") +\n \"}\"\n )\n }\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n return String(x)\n}\n\n/**\n * Python repr() function\n */\nexport function repr(x: unknown): string {\n if (typeof x === \"string\") {\n return `'${x}'`\n }\n return str(x)\n}\n\n/**\n * Python bool() function\n */\nexport function bool(x: unknown): boolean {\n if (x === null || x === undefined) {\n return false\n }\n if (typeof x === \"boolean\") {\n return x\n }\n if (typeof x === \"number\") {\n return x !== 0\n }\n if (typeof x === \"string\") {\n return x.length > 0\n }\n if (Array.isArray(x)) {\n return x.length > 0\n }\n if (x instanceof Map || x instanceof Set) {\n return x.size > 0\n }\n return true\n}\n\n/**\n * Python ascii() - returns ASCII representation\n */\nexport function ascii(x: unknown): string {\n const s = repr(x)\n let result = \"\"\n for (const char of s) {\n const code = char.charCodeAt(0)\n if (code > 127) {\n if (code > 0xffff) {\n result += `\\\\U${code.toString(16).padStart(8, \"0\")}`\n } else {\n result += `\\\\u${code.toString(16).padStart(4, \"0\")}`\n }\n } else {\n result += char\n }\n }\n return result\n}\n\n/**\n * Python isinstance() - simplified version\n */\nexport function isinstance(obj: unknown, classInfo: unknown): boolean {\n if (classInfo === Number || classInfo === \"int\" || classInfo === \"float\") {\n return typeof obj === \"number\"\n }\n if (classInfo === String || classInfo === \"str\") {\n return typeof obj === \"string\"\n }\n if (classInfo === Boolean || classInfo === \"bool\") {\n return typeof obj === \"boolean\"\n }\n if (classInfo === Array || classInfo === \"list\") {\n return Array.isArray(obj)\n }\n if (classInfo === Map || classInfo === \"dict\") {\n return obj instanceof Map\n }\n if (classInfo === Set || classInfo === \"set\") {\n return obj instanceof Set\n }\n if (typeof classInfo === \"function\") {\n return obj instanceof classInfo\n }\n return false\n}\n\n/**\n * Python type() - simplified version\n */\nexport function type(obj: unknown): string {\n if (obj === null) return \"NoneType\"\n if (typeof obj === \"number\") {\n return Number.isInteger(obj) ? \"int\" : \"float\"\n }\n if (typeof obj === \"string\") return \"str\"\n if (typeof obj === \"boolean\") return \"bool\"\n if (Array.isArray(obj)) return \"list\"\n if (obj instanceof Map) return \"dict\"\n if (obj instanceof Set) return \"set\"\n return typeof obj\n}\n\n/**\n * Python input() - for Node.js\n */\nexport function input(prompt?: string): string {\n if (prompt) {\n process.stdout.write(prompt)\n }\n throw new Error(\"input() requires async implementation\")\n}\n\n// ============================================================\n// Format Function\n// ============================================================\n\nfunction formatNumber(\n num: number,\n sign: string | undefined,\n _hash: string | undefined,\n grouping: string | undefined,\n precision?: number,\n isInteger = true\n): string {\n let result: string\n\n if (isInteger) {\n result = Math.trunc(num).toString()\n } else {\n result = num.toFixed(precision ?? 6)\n }\n\n if (grouping) {\n const sep = grouping === \"_\" ? \"_\" : \",\"\n const parts = result.split(\".\")\n const intPart = parts[0] as string\n const signChar = intPart[0] === \"-\" ? \"-\" : \"\"\n const digits = signChar ? intPart.slice(1) : intPart\n const grouped = digits.replace(/\\B(?=(\\d{3})+(?!\\d))/g, sep)\n parts[0] = signChar + grouped\n result = parts.join(\".\")\n }\n\n if (num >= 0) {\n if (sign === \"+\") {\n result = \"+\" + result\n } else if (sign === \" \") {\n result = \" \" + result\n }\n }\n\n return result\n}\n\n/**\n * Python format() - formats a value according to format spec\n */\nexport function format(value: unknown, spec: string): string {\n if (spec === \"\") {\n return str(value)\n }\n\n const match = spec.match(\n /^(.?[<>=^])?([+\\- ])?([#])?(0)?(\\d+)?([,_])?(?:\\.(\\d+))?([bcdeEfFgGnosxX%])?$/\n )\n\n if (!match) {\n return str(value)\n }\n\n const [, alignPart, sign, hash, zero, widthStr, grouping, precisionStr, typeChar] = match\n\n let fill = \" \"\n let align = \"\"\n if (alignPart) {\n if (alignPart.length === 2) {\n fill = alignPart[0] as string\n align = alignPart[1] as string\n } else {\n align = alignPart\n }\n }\n\n const width = widthStr ? parseInt(widthStr, 10) : 0\n const precision = precisionStr !== undefined ? parseInt(precisionStr, 10) : undefined\n\n if (zero && !alignPart) {\n fill = \"0\"\n align = \"=\"\n }\n\n let result: string\n\n if (typeChar === \"s\" || (!typeChar && typeof value === \"string\")) {\n result = str(value)\n if (precision !== undefined) {\n result = result.slice(0, precision)\n }\n } else if (\n typeChar === \"d\" ||\n (!typeChar && typeof value === \"number\" && Number.isInteger(value))\n ) {\n const num = typeof value === \"number\" ? value : int(value as string | number | boolean)\n result = formatNumber(num, sign, \"\", grouping)\n } else if (typeChar === \"f\" || typeChar === \"F\") {\n const num = typeof value === \"number\" ? value : float(value as string | number)\n const prec = precision ?? 6\n result = formatNumber(num, sign, \"\", grouping, prec, false)\n if (typeChar === \"F\") result = result.toUpperCase()\n } else if (typeChar === \"e\" || typeChar === \"E\") {\n const num = typeof value === \"number\" ? value : float(value as string | number)\n const prec = precision ?? 6\n result = num.toExponential(prec)\n if (sign === \"+\" && num >= 0) result = \"+\" + result\n else if (sign === \" \" && num >= 0) result = \" \" + result\n if (typeChar === \"E\") result = result.toUpperCase()\n } else if (typeChar === \"g\" || typeChar === \"G\") {\n const num = typeof value === \"number\" ? value : float(value as string | number)\n const prec = precision ?? 6\n result = num.toPrecision(prec)\n if (sign === \"+\" && num >= 0) result = \"+\" + result\n else if (sign === \" \" && num >= 0) result = \" \" + result\n if (typeChar === \"G\") result = result.toUpperCase()\n } else if (typeChar === \"x\" || typeChar === \"X\") {\n const num =\n typeof value === \"number\" ? Math.trunc(value) : int(value as string | number | boolean)\n result = Math.abs(num).toString(16)\n if (hash) result = \"0x\" + result\n if (num < 0) result = \"-\" + result\n else if (sign === \"+\") result = \"+\" + result\n else if (sign === \" \") result = \" \" + result\n if (typeChar === \"X\") result = result.toUpperCase()\n } else if (typeChar === \"o\") {\n const num =\n typeof value === \"number\" ? Math.trunc(value) : int(value as string | number | boolean)\n result = Math.abs(num).toString(8)\n if (hash) result = \"0o\" + result\n if (num < 0) result = \"-\" + result\n else if (sign === \"+\") result = \"+\" + result\n else if (sign === \" \") result = \" \" + result\n } else if (typeChar === \"b\") {\n const num =\n typeof value === \"number\" ? Math.trunc(value) : int(value as string | number | boolean)\n result = Math.abs(num).toString(2)\n if (hash) result = \"0b\" + result\n if (num < 0) result = \"-\" + result\n else if (sign === \"+\") result = \"+\" + result\n else if (sign === \" \") result = \" \" + result\n } else if (typeChar === \"c\") {\n const code = typeof value === \"number\" ? value : int(value as string | number | boolean)\n result = String.fromCharCode(code)\n } else if (typeChar === \"%\") {\n const num = typeof value === \"number\" ? value : float(value as string | number)\n const prec = precision ?? 6\n result = (num * 100).toFixed(prec) + \"%\"\n if (sign === \"+\" && num >= 0) result = \"+\" + result\n else if (sign === \" \" && num >= 0) result = \" \" + result\n } else if (typeChar === \"n\") {\n const num = typeof value === \"number\" ? value : float(value as string | number)\n result = num.toLocaleString()\n } else {\n result = str(value)\n }\n\n if (width > result.length) {\n const padding = fill.repeat(width - result.length)\n if (align === \"<\") {\n result = result + padding\n } else if (align === \">\" || align === \"\") {\n result = padding + result\n } else if (align === \"^\") {\n const leftPad = Math.floor((width - result.length) / 2)\n const rightPad = width - result.length - leftPad\n result = fill.repeat(leftPad) + result + fill.repeat(rightPad)\n } else if (align === \"=\") {\n const signMatch = result.match(/^([+\\- ]|0[xXoObB])?(.*)$/)\n if (signMatch) {\n const signPart = signMatch[1] ?? \"\"\n const numPart = signMatch[2] ?? \"\"\n result = signPart + padding + numPart\n }\n }\n }\n\n return result\n}\n","/**\n * Python list methods for TypeScript\n * Usage: py.list.remove(), py.list.sort(), etc.\n */\n\nexport const list = {\n /**\n * Python list.append() - modifies array in place\n */\n append<T>(arr: T[], item: T): void {\n arr.push(item)\n },\n\n /**\n * Python list.extend() - modifies array in place\n */\n extend<T>(arr: T[], items: Iterable<T>): void {\n arr.push(...items)\n },\n\n /**\n * Python list.insert() - modifies array in place\n */\n insert<T>(arr: T[], index: number, item: T): void {\n arr.splice(index, 0, item)\n },\n\n /**\n * Python list.remove() - removes first occurrence, modifies in place\n */\n remove<T>(arr: T[], value: T): void {\n const index = arr.indexOf(value)\n if (index === -1) {\n throw new Error(\"list.remove(x): x not in list\")\n }\n arr.splice(index, 1)\n },\n\n /**\n * Python list.pop() - removes and returns item at index\n */\n pop<T>(arr: T[], index?: number): T {\n if (arr.length === 0) {\n throw new Error(\"pop from empty list\")\n }\n const i = index ?? arr.length - 1\n const normalizedIndex = i < 0 ? arr.length + i : i\n if (normalizedIndex < 0 || normalizedIndex >= arr.length) {\n throw new Error(\"pop index out of range\")\n }\n return arr.splice(normalizedIndex, 1)[0] as T\n },\n\n /**\n * Python list.clear() - removes all items\n */\n clear(arr: unknown[]): void {\n arr.length = 0\n },\n\n /**\n * Python list.index() - finds first occurrence\n */\n index<T>(arr: T[], value: T, start?: number, end?: number): number {\n const searchStart = start ?? 0\n const searchEnd = end ?? arr.length\n for (let i = searchStart; i < searchEnd; i++) {\n if (arr[i] === value) {\n return i\n }\n }\n throw new Error(\"x not in list\")\n },\n\n /**\n * Python list.count() - counts occurrences\n */\n count<T>(arr: T[], value: T): number {\n let count = 0\n for (const item of arr) {\n if (item === value) count++\n }\n return count\n },\n\n /**\n * Python list.sort() with key function - modifies in place\n */\n sort<T>(arr: T[], options?: { key?: (x: T) => unknown; reverse?: boolean }): void {\n const key = options?.key ?? ((x: T) => x as unknown)\n const reverse = options?.reverse ?? false\n arr.sort((a, b) => {\n const aKey = key(a) as string | number\n const bKey = key(b) as string | number\n let cmp = 0\n if (aKey < bKey) cmp = -1\n else if (aKey > bKey) cmp = 1\n return reverse ? -cmp : cmp\n })\n },\n\n /**\n * Python list.reverse() - reverses in place\n */\n reverse(arr: unknown[]): void {\n arr.reverse()\n },\n\n /**\n * Python list.copy() - shallow copy\n */\n copy<T>(arr: T[]): T[] {\n return [...arr]\n },\n\n /**\n * Python slice assignment: arr[start:end:step] = values\n * Replaces a slice of the array with new values, modifying in place\n */\n sliceAssign<T>(\n arr: T[],\n start: number | undefined,\n end: number | undefined,\n step: number | undefined,\n values: T[]\n ): void {\n const len = arr.length\n const actualStep = step ?? 1\n\n // Normalize start and end\n let actualStart = start ?? (actualStep > 0 ? 0 : len - 1)\n let actualEnd = end ?? (actualStep > 0 ? len : -len - 1)\n\n // Handle negative indices\n if (actualStart < 0) actualStart = Math.max(0, len + actualStart)\n if (actualEnd < 0) actualEnd = Math.max(0, len + actualEnd)\n\n // Clamp to array bounds\n actualStart = Math.min(actualStart, len)\n actualEnd = Math.min(actualEnd, len)\n\n if (actualStep === 1) {\n // Simple case: contiguous slice\n const deleteCount = Math.max(0, actualEnd - actualStart)\n arr.splice(actualStart, deleteCount, ...values)\n } else {\n // Extended slice with step\n // Collect indices that will be replaced\n const indices: number[] = []\n if (actualStep > 0) {\n for (let i = actualStart; i < actualEnd; i += actualStep) {\n indices.push(i)\n }\n } else {\n for (let i = actualStart; i > actualEnd; i += actualStep) {\n indices.push(i)\n }\n }\n\n // For extended slices, lengths must match\n if (indices.length !== values.length) {\n throw new Error(\n `attempt to assign sequence of size ${String(values.length)} to extended slice of size ${String(indices.length)}`\n )\n }\n\n // Replace values at each index\n for (let i = 0; i < indices.length; i++) {\n const idx = indices[i]\n if (idx !== undefined) {\n arr[idx] = values[i] as T\n }\n }\n }\n }\n}\n","/**\n * Python dict methods for TypeScript\n * Usage: py.dict.get(), py.dict.keys(), etc.\n */\n\nexport const dict = {\n /**\n * Python dict.get() - get value with optional default\n */\n get<K extends string | number | symbol, V>(\n obj: Record<K, V>,\n key: K,\n defaultValue?: V\n ): V | undefined {\n return key in obj ? obj[key] : defaultValue\n },\n\n /**\n * Python dict.setdefault() - get value or set default\n */\n setdefault<K extends string | number | symbol, V>(obj: Record<K, V>, key: K, defaultValue: V): V {\n if (!(key in obj)) {\n obj[key] = defaultValue\n }\n return obj[key]\n },\n\n /**\n * Python dict.pop() - remove and return value\n */\n pop<K extends string | number | symbol, V>(\n obj: Record<K, V>,\n key: K,\n defaultValue?: V\n ): V | undefined {\n if (key in obj) {\n const value = obj[key]\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete obj[key]\n return value\n }\n if (defaultValue !== undefined) {\n return defaultValue\n }\n throw new Error(\"KeyError\")\n },\n\n /**\n * Python dict.popitem() - remove and return last item\n */\n popitem<K extends string | number | symbol, V>(obj: Record<K, V>): [K, V] {\n const keys = Object.keys(obj) as K[]\n if (keys.length === 0) {\n throw new Error(\"dictionary is empty\")\n }\n const key = keys[keys.length - 1] as K\n const value = obj[key]\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete obj[key]\n return [key, value]\n },\n\n /**\n * Python dict.update() - update with another dict\n */\n update<K extends string | number | symbol, V>(\n obj: Record<K, V>,\n other: Record<K, V> | Iterable<[K, V]>\n ): void {\n if (Symbol.iterator in other) {\n for (const [k, v] of other) {\n obj[k] = v\n }\n } else {\n Object.assign(obj, other)\n }\n },\n\n /**\n * Python dict.clear() - remove all items\n */\n clear<K extends string | number | symbol, V>(obj: Record<K, V>): void {\n for (const key of Object.keys(obj)) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete obj[key as K]\n }\n },\n\n /**\n * Python dict.copy() - shallow copy\n */\n copy<K extends string | number | symbol, V>(obj: Record<K, V>): Record<K, V> {\n return { ...obj }\n },\n\n /**\n * Python dict.keys() - returns iterable of keys\n */\n keys<K extends string | number | symbol, V>(obj: Record<K, V>): K[] {\n return Object.keys(obj) as K[]\n },\n\n /**\n * Python dict.values() - returns iterable of values\n */\n values<K extends string | number | symbol, V>(obj: Record<K, V>): V[] {\n return Object.values(obj)\n },\n\n /**\n * Python dict.items() - returns iterable of [key, value] pairs\n */\n items<K extends string | number | symbol, V>(obj: Record<K, V>): [K, V][] {\n return Object.entries(obj) as [K, V][]\n },\n\n /**\n * Python dict.fromkeys() - create dict from keys\n */\n fromkeys<K extends string | number | symbol, V>(keys: K[], value?: V): Record<K, V | undefined> {\n const result = {} as Record<K, V | undefined>\n for (const key of keys) {\n result[key] = value\n }\n return result\n }\n}\n","/**\n * Python set methods for TypeScript\n * Usage: py.set.intersection(), py.set.union(), etc.\n */\n\nexport const set = {\n /**\n * Python set.add() - add element\n */\n add<T>(s: Set<T>, item: T): void {\n s.add(item)\n },\n\n /**\n * Python set.remove() - remove element, raises error if not found\n */\n remove<T>(s: Set<T>, item: T): void {\n if (!s.has(item)) {\n throw new Error(\"KeyError\")\n }\n s.delete(item)\n },\n\n /**\n * Python set.discard() - remove element if present\n */\n discard<T>(s: Set<T>, item: T): void {\n s.delete(item)\n },\n\n /**\n * Python set.pop() - remove and return arbitrary element\n */\n pop<T>(s: Set<T>): T {\n if (s.size === 0) {\n throw new Error(\"pop from an empty set\")\n }\n const item = s.values().next().value as T\n s.delete(item)\n return item\n },\n\n /**\n * Python set.clear() - remove all elements\n */\n clear<T>(s: Set<T>): void {\n s.clear()\n },\n\n /**\n * Python set.copy() - shallow copy\n */\n copy<T>(s: Set<T>): Set<T> {\n return new Set(s)\n },\n\n /**\n * Python set.update() - add elements from iterable\n */\n update<T>(s: Set<T>, ...iterables: Iterable<T>[]): void {\n for (const iterable of iterables) {\n for (const item of iterable) {\n s.add(item)\n }\n }\n },\n\n /**\n * Python set.union() - returns new set with all elements\n */\n union<T>(a: Set<T>, ...others: Iterable<T>[]): Set<T> {\n const result = new Set(a)\n for (const other of others) {\n for (const item of other) {\n result.add(item)\n }\n }\n return result\n },\n\n /**\n * Python set.intersection() - returns new set with common elements\n */\n intersection<T>(a: Set<T>, b: Set<T>): Set<T> {\n const result = new Set<T>()\n for (const item of a) {\n if (b.has(item)) result.add(item)\n }\n return result\n },\n\n /**\n * Python set.intersection_update() - keep only common elements\n */\n intersectionUpdate<T>(a: Set<T>, b: Set<T>): void {\n for (const item of a) {\n if (!b.has(item)) a.delete(item)\n }\n },\n\n /**\n * Python set.difference() - returns new set with elements in a but not in b\n */\n difference<T>(a: Set<T>, b: Set<T>): Set<T> {\n const result = new Set<T>()\n for (const item of a) {\n if (!b.has(item)) result.add(item)\n }\n return result\n },\n\n /**\n * Python set.difference_update() - remove elements found in b\n */\n differenceUpdate<T>(a: Set<T>, b: Set<T>): void {\n for (const item of b) {\n a.delete(item)\n }\n },\n\n /**\n * Python set.symmetric_difference() - returns new set with elements in either but not both\n */\n symmetricDifference<T>(a: Set<T>, b: Set<T>): Set<T> {\n const result = new Set<T>()\n for (const item of a) {\n if (!b.has(item)) result.add(item)\n }\n for (const item of b) {\n if (!a.has(item)) result.add(item)\n }\n return result\n },\n\n /**\n * Python set.symmetric_difference_update() - update with symmetric difference\n */\n symmetricDifferenceUpdate<T>(a: Set<T>, b: Set<T>): void {\n const toAdd: T[] = []\n const toRemove: T[] = []\n for (const item of a) {\n if (b.has(item)) toRemove.push(item)\n }\n for (const item of b) {\n if (!a.has(item)) toAdd.push(item)\n }\n for (const item of toRemove) a.delete(item)\n for (const item of toAdd) a.add(item)\n },\n\n /**\n * Python set.issubset() - test if all elements are in other\n */\n issubset<T>(a: Set<T>, b: Set<T>): boolean {\n for (const item of a) {\n if (!b.has(item)) return false\n }\n return true\n },\n\n /**\n * Python set.issuperset() - test if all other elements are in this set\n */\n issuperset<T>(a: Set<T>, b: Set<T>): boolean {\n for (const item of b) {\n if (!a.has(item)) return false\n }\n return true\n },\n\n /**\n * Python set.isdisjoint() - test if no common elements\n */\n isdisjoint<T>(a: Set<T>, b: Set<T>): boolean {\n for (const item of a) {\n if (b.has(item)) return false\n }\n return true\n }\n}\n","/**\n * Python Runtime Library for TypeScript\n *\n * Import styles:\n *\n * 1. Builtins (global Python functions):\n * import { len, range, sorted, min, max } from \"pythonlib\"\n *\n * 2. Module imports (like Python):\n * import { dump, loads } from \"pythonlib/json\"\n * import { match, search, sub } from \"pythonlib/re\"\n * import { chain, combinations } from \"pythonlib/itertools\"\n * import { Counter, defaultdict } from \"pythonlib/collections\"\n *\n * 3. Module namespaces (alternative):\n * import { json, re, itertools } from \"pythonlib\"\n * json.dump(...), re.match(...), itertools.chain(...)\n */\n\n// =============================================================================\n// Module imports (for namespace exports)\n// =============================================================================\n\nimport * as itertoolsModule from \"./itertools.js\"\nimport * as functoolsModule from \"./functools.js\"\nimport * as collectionsModule from \"./collections.js\"\nimport * as mathModule from \"./math.js\"\nimport * as randomModule from \"./random.js\"\nimport * as jsonModule from \"./json.js\"\nimport * as osModule from \"./os.js\"\nimport * as datetimeModule from \"./datetime.js\"\nimport * as reModule from \"./re.js\"\nimport * as stringModule from \"./string.js\"\nimport * as core from \"./core.js\"\nimport * as builtins from \"./builtins.js\"\nimport { list as listMethods } from \"./list.js\"\nimport { dict as dictMethods } from \"./dict.js\"\nimport { set as setMethods } from \"./set.js\"\n\n// =============================================================================\n// Module namespace exports (for: import { itertools } from \"pythonlib\")\n// =============================================================================\n\nexport const itertools = itertoolsModule\nexport const functools = functoolsModule\nexport const collections = collectionsModule\nexport const math = mathModule\nexport const random = randomModule\nexport const json = jsonModule\nexport const os = osModule\nexport const datetime = datetimeModule\nexport const re = reModule\nexport const string = {\n ...stringModule.string,\n ascii_lowercase: stringModule.ascii_lowercase,\n ascii_uppercase: stringModule.ascii_uppercase,\n ascii_letters: stringModule.ascii_letters,\n digits: stringModule.digits,\n hexdigits: stringModule.hexdigits,\n octdigits: stringModule.octdigits,\n punctuation: stringModule.punctuation,\n whitespace: stringModule.whitespace,\n printable: stringModule.printable,\n capwords: stringModule.capwords,\n Template: stringModule.Template\n}\n\n// =============================================================================\n// Core built-in types with methods (list, dict, set)\n// =============================================================================\n\ntype ListConstructor = {\n <T>(iterable?: Iterable<T>): T[]\n} & typeof listMethods\n\ntype DictConstructor = {\n <K, V>(entries?: Iterable<[K, V]>): Map<K, V>\n} & typeof dictMethods\n\ntype SetConstructor = {\n <T>(iterable?: Iterable<T>): Set<T>\n} & typeof setMethods\n\nexport const list: ListConstructor = Object.assign(\n <T>(iterable?: Iterable<T>): T[] => builtins.list(iterable),\n listMethods\n)\n\nexport const dict: DictConstructor = Object.assign(\n <K, V>(entries?: Iterable<[K, V]>): Map<K, V> => builtins.dict(entries),\n dictMethods\n)\n\nexport const set: SetConstructor = Object.assign(\n <T>(iterable?: Iterable<T>): Set<T> => builtins.set(iterable),\n setMethods\n)\n\n// =============================================================================\n// Core operations (Python-specific semantics)\n// =============================================================================\n\nexport const floordiv = core.floordiv\nexport const mod = core.mod\nexport const divmod = core.divmod\nexport const sprintf = core.sprintf\nexport const strFormat = core.strFormat\nexport const slice = core.slice\nexport const at = core.at\nexport const contains = core.contains\nexport const is = core.is\nexport { repeat as repeatValue } from \"./core.js\"\nexport { pow } from \"./core.js\"\n\n// =============================================================================\n// Built-in functions (Python global scope)\n// =============================================================================\n\n// Iteration\nexport const range = builtins.range\nexport const enumerate = builtins.enumerate\nexport const zip = builtins.zip\nexport const iter = builtins.iter\nexport const reversed = builtins.reversed\nexport const sorted = builtins.sorted\nexport const map = builtins.map\nexport const filter = builtins.filter\n\n// Collection constructors\nexport const tuple = builtins.tuple\n\n// Aggregation\nexport const len = builtins.len\nexport const abs = builtins.abs\nexport const min = builtins.min\nexport const max = builtins.max\nexport const sum = builtins.sum\nexport const all = builtins.all\nexport const any = builtins.any\nexport const round = builtins.round\n\n// Character/number conversion\nexport const ord = builtins.ord\nexport const chr = builtins.chr\nexport const hex = builtins.hex\nexport const oct = builtins.oct\nexport const bin = builtins.bin\n\n// Type conversion\nexport const int = builtins.int\nexport const float = builtins.float\nexport const str = builtins.str\nexport const repr = builtins.repr\nexport const bool = builtins.bool\nexport const ascii = builtins.ascii\n\n// Type checking & misc\nexport const isinstance = builtins.isinstance\nexport const type = builtins.type\nexport const input = builtins.input\nexport const format = builtins.format\n\n// =============================================================================\n// Legacy py.* namespace (deprecated, for backwards compatibility)\n// =============================================================================\n\nexport const py = {\n // Namespaced methods\n string: stringModule.string,\n list,\n dict,\n set,\n\n // Core operations\n floordiv: core.floordiv,\n pow: core.pow,\n mod: core.mod,\n divmod: core.divmod,\n sprintf: core.sprintf,\n strFormat: core.strFormat,\n slice: core.slice,\n at: core.at,\n repeat: core.repeat,\n in: core.contains,\n is: core.is,\n\n // Iterables\n range: builtins.range,\n enumerate: builtins.enumerate,\n zip: builtins.zip,\n iter: builtins.iter,\n reversed: builtins.reversed,\n sorted: builtins.sorted,\n map: builtins.map,\n filter: builtins.filter,\n\n // Collection constructors\n tuple: builtins.tuple,\n\n // Built-in functions\n len: builtins.len,\n abs: builtins.abs,\n min: builtins.min,\n max: builtins.max,\n sum: builtins.sum,\n all: builtins.all,\n any: builtins.any,\n round: builtins.round,\n ord: builtins.ord,\n chr: builtins.chr,\n hex: builtins.hex,\n oct: builtins.oct,\n bin: builtins.bin,\n\n // Type conversions\n int: builtins.int,\n float: builtins.float,\n str: builtins.str,\n repr: builtins.repr,\n bool: builtins.bool,\n ascii: builtins.ascii,\n\n // Type checking\n isinstance: builtins.isinstance,\n type: builtins.type,\n input: builtins.input,\n format: builtins.format,\n\n // Modules\n itertools: itertoolsModule,\n functools: functoolsModule,\n math: mathModule,\n random: randomModule,\n json: jsonModule,\n os: osModule,\n datetime: datetimeModule,\n re: reModule,\n\n // collections\n Counter: collectionsModule.Counter,\n defaultdict: collectionsModule.defaultdict,\n deque: collectionsModule.deque,\n\n // string module\n Template: stringModule.Template,\n ascii_lowercase: stringModule.ascii_lowercase,\n ascii_uppercase: stringModule.ascii_uppercase,\n ascii_letters: stringModule.ascii_letters,\n digits: stringModule.digits,\n hexdigits: stringModule.hexdigits,\n octdigits: stringModule.octdigits,\n punctuation: stringModule.punctuation,\n whitespace: stringModule.whitespace,\n printable: stringModule.printable,\n capwords: stringModule.capwords\n}\n\n// Set the py reference for builtins (needed for str() and repr())\nbuiltins._setPyRef(py)\n\nexport default py\n"],"mappings":"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","names":["type","len","digits","list","len","dict","set","string","list","dict","set","floordiv","mod","divmod","sprintf","strFormat","slice","at","contains","is","range","enumerate","zip","iter","reversed","sorted","map","filter","tuple","len","abs","min","max","sum","all","any","round","ord","chr","hex","oct","bin","int","float","str","repr","bool","ascii","isinstance","type","input","format","py"]}
1
+ {"version":3,"sources":["../src/core.ts","../src/builtins.ts","../src/list.ts","../src/dict.ts","../src/set.ts","../src/index.ts"],"sourcesContent":["/**\n * Core Python operations for TypeScript\n * Arithmetic operations with Python semantics, slicing, etc.\n */\n\n// ============================================================\n// Arithmetic Operations (Python semantics)\n// ============================================================\n\n/**\n * Floor division (Python //)\n * Always rounds towards negative infinity, unlike Math.floor for negatives\n */\nexport function floorDiv(a: number, b: number): number {\n return Math.floor(a / b)\n}\n\n/**\n * Power operator (Python **)\n */\nexport function pow(base: number, exp: number): number {\n return Math.pow(base, exp)\n}\n\n/**\n * Modulo (Python %)\n * Python's % always returns a result with the same sign as the divisor\n */\nexport function mod(a: number, b: number): number {\n return ((a % b) + b) % b\n}\n\n/**\n * Python divMod()\n */\nexport function divMod(a: number, b: number): [number, number] {\n return [floorDiv(a, b), mod(a, b)]\n}\n\n// ============================================================\n// String Formatting\n// ============================================================\n\n/**\n * Python %-style string formatting\n * Handles %s, %d, %i, %f, %r, %x, %o, etc.\n */\nexport function sprintf(template: string, args: unknown): string {\n const values = Array.isArray(args) ? args : [args]\n let index = 0\n return template.replace(\n /%([+-]?\\d*\\.?\\d*)([sdifxXorec%])/g,\n (match: string, flags: string, type: string) => {\n if (type === \"%\") return \"%\"\n if (index >= values.length) return match\n const value: unknown = values[index++]\n switch (type) {\n case \"s\":\n return String(value)\n case \"d\":\n case \"i\":\n return String(Math.floor(Number(value)))\n case \"f\":\n if (flags && flags.includes(\".\")) {\n const precision = parseInt(flags.split(\".\")[1] ?? \"6\", 10)\n return Number(value).toFixed(precision)\n }\n return String(Number(value))\n case \"x\":\n return Math.floor(Number(value)).toString(16)\n case \"X\":\n return Math.floor(Number(value)).toString(16).toUpperCase()\n case \"o\":\n return Math.floor(Number(value)).toString(8)\n case \"r\":\n return JSON.stringify(value)\n case \"e\":\n return Number(value).toExponential()\n case \"c\":\n return String.fromCharCode(Number(value))\n default:\n return String(value)\n }\n }\n )\n}\n\n/**\n * Python str.format() style string formatting\n * Handles {} positional and {name} named placeholders\n */\nexport function strFormat(template: string, ...args: unknown[]): string {\n let positionalIndex = 0\n const lastArg = args[args.length - 1]\n const namedParams =\n lastArg && typeof lastArg === \"object\" && !Array.isArray(lastArg)\n ? (lastArg as Record<string, unknown>)\n : {}\n\n return template.replace(/\\{([^}]*)\\}/g, (match, key: string) => {\n if (key === \"\") {\n if (positionalIndex < args.length) {\n return String(args[positionalIndex++])\n }\n return match\n }\n\n const numIndex = parseInt(key, 10)\n if (!isNaN(numIndex) && numIndex < args.length) {\n return String(args[numIndex])\n }\n\n if (key in namedParams) {\n return String(namedParams[key])\n }\n\n return match\n })\n}\n\n// ============================================================\n// Slicing\n// ============================================================\n\nfunction normalizeIndex(index: number, length: number, forNegativeStep = false): number {\n if (index < 0) {\n index = length + index\n }\n\n if (forNegativeStep) {\n return Math.max(-1, Math.min(length - 1, index))\n }\n\n return Math.max(0, Math.min(length, index))\n}\n\n/**\n * Python-style slice operation\n * Supports negative indices and step\n */\nexport function slice<T>(\n obj: string | T[],\n start?: number,\n stop?: number,\n step?: number\n): string | T[] {\n const len = obj.length\n const actualStep = step ?? 1\n\n if (actualStep === 0) {\n throw new Error(\"slice step cannot be zero\")\n }\n\n let actualStart: number\n let actualStop: number\n\n if (actualStep > 0) {\n actualStart = start === undefined ? 0 : normalizeIndex(start, len)\n actualStop = stop === undefined ? len : normalizeIndex(stop, len)\n } else {\n actualStart = start === undefined ? len - 1 : normalizeIndex(start, len, true)\n actualStop = stop === undefined ? -1 : normalizeIndex(stop, len, true)\n }\n\n const result: T[] = []\n\n if (actualStep > 0) {\n for (let i = actualStart; i < actualStop; i += actualStep) {\n if (i >= 0 && i < len) {\n result.push((obj as T[])[i] as T)\n }\n }\n } else {\n for (let i = actualStart; i > actualStop; i += actualStep) {\n if (i >= 0 && i < len) {\n result.push((obj as T[])[i] as T)\n }\n }\n }\n\n if (typeof obj === \"string\") {\n return result.join(\"\")\n }\n\n return result\n}\n\n/**\n * Python-style index access with support for negative indices\n */\nexport function at<T>(obj: string | T[], index: number): T | string {\n const len = obj.length\n const normalizedIndex = index < 0 ? len + index : index\n if (normalizedIndex < 0 || normalizedIndex >= len) {\n throw new Error(\"IndexError: list index out of range\")\n }\n return (obj as T[])[normalizedIndex] as T\n}\n\n/**\n * Python-style string/array repetition\n */\nexport function repeat<T>(obj: string | T[], count: number): string | T[] {\n if (count <= 0) {\n return typeof obj === \"string\" ? \"\" : []\n }\n if (typeof obj === \"string\") {\n return obj.repeat(count)\n }\n const result: T[] = []\n for (let i = 0; i < count; i++) {\n result.push(...obj)\n }\n return result\n}\n\n// ============================================================\n// Membership & Identity\n// ============================================================\n\n/**\n * Python 'in' operator\n */\nexport function contains<T>(\n item: T,\n container: Iterable<T> | string | Map<T, unknown> | Set<T>\n): boolean {\n if (typeof container === \"string\") {\n return container.includes(item as unknown as string)\n }\n if (container instanceof Map) {\n return container.has(item)\n }\n if (container instanceof Set) {\n return container.has(item)\n }\n if (Array.isArray(container)) {\n return container.includes(item)\n }\n for (const element of container) {\n if (element === item) {\n return true\n }\n }\n return false\n}\n\n/**\n * Python 'is' operator (identity comparison)\n */\nexport function is(a: unknown, b: unknown): boolean {\n return a === b\n}\n","/**\n * Python built-in functions for TypeScript\n *\n * Provides core Python built-in functions like len, range, enumerate, sorted, min, max, etc.\n *\n * @see {@link https://docs.python.org/3/library/functions.html | Python built-in functions documentation}\n */\n\n// ============================================================\n// Iterables\n// ============================================================\n\n/**\n * Python range() function\n */\nexport function range(startOrStop: number, stop?: number, step?: number): Iterable<number> {\n let start: number\n let end: number\n let stepVal: number\n\n if (stop === undefined) {\n start = 0\n end = startOrStop\n stepVal = 1\n } else {\n start = startOrStop\n end = stop\n stepVal = step ?? 1\n }\n\n if (stepVal === 0) {\n throw new Error(\"range() arg 3 must not be zero\")\n }\n\n return {\n *[Symbol.iterator]() {\n if (stepVal > 0) {\n for (let i = start; i < end; i += stepVal) {\n yield i\n }\n } else {\n for (let i = start; i > end; i += stepVal) {\n yield i\n }\n }\n }\n }\n}\n\n/**\n * Python enumerate() function\n */\nexport function enumerate<T>(iterable: Iterable<T>, start = 0): Iterable<[number, T]> {\n return {\n *[Symbol.iterator]() {\n let index = start\n for (const item of iterable) {\n yield [index++, item] as [number, T]\n }\n }\n }\n}\n\n/**\n * Python zip() function\n */\nexport function zip<T extends unknown[][]>(\n ...iterables: { [K in keyof T]: Iterable<T[K]> }\n): Iterable<T> {\n return {\n *[Symbol.iterator]() {\n const iterators = iterables.map((it) => (it as Iterable<unknown>)[Symbol.iterator]())\n\n for (;;) {\n const results = iterators.map((it) => it.next())\n\n if (results.some((r) => r.done)) {\n break\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n yield results.map((r) => r.value) as T\n }\n }\n }\n}\n\n/**\n * Safe iteration helper for for-in loops\n */\nexport function iter<T>(\n obj: Iterable<T> | Record<string, unknown> | null | undefined\n): Iterable<T> | string[] {\n if (obj === null || obj === undefined) {\n return []\n }\n if (typeof (obj as Iterable<T>)[Symbol.iterator] === \"function\") {\n return obj as Iterable<T>\n }\n if (typeof obj === \"object\") {\n return Object.keys(obj)\n }\n return []\n}\n\n/**\n * Python reversed() function\n */\nexport function reversed<T>(iterable: Iterable<T>): Iterable<T> {\n const arr = Array.from(iterable)\n return {\n *[Symbol.iterator]() {\n for (let i = arr.length - 1; i >= 0; i--) {\n yield arr[i] as T\n }\n }\n }\n}\n\n/**\n * Python sorted() function\n */\nexport function sorted<T>(\n iterable: Iterable<T>,\n options?: { key?: (x: T) => unknown; reverse?: boolean }\n): T[] {\n const arr = Array.from(iterable)\n const key = options?.key ?? ((x: T) => x)\n const reverse = options?.reverse ?? false\n\n arr.sort((a, b) => {\n const aKey = key(a)\n const bKey = key(b)\n\n let cmp: number\n if (typeof aKey === \"string\" && typeof bKey === \"string\") {\n cmp = aKey.localeCompare(bKey)\n } else {\n cmp = (aKey as number) - (bKey as number)\n }\n\n return reverse ? -cmp : cmp\n })\n\n return arr\n}\n\n/**\n * Python map() function\n */\nexport function map<T, U>(fn: (x: T) => U, iterable: Iterable<T>): Iterable<U> {\n return {\n *[Symbol.iterator]() {\n for (const item of iterable) {\n yield fn(item)\n }\n }\n }\n}\n\n/**\n * Python filter() function\n */\nexport function filter<T>(fn: ((x: T) => boolean) | null, iterable: Iterable<T>): Iterable<T> {\n return {\n *[Symbol.iterator]() {\n for (const item of iterable) {\n if (fn === null ? bool(item) : fn(item)) {\n yield item\n }\n }\n }\n }\n}\n\n// ============================================================\n// Collections Constructors\n// ============================================================\n\n/**\n * Convert to list (array)\n */\nexport function list<T>(iterable?: Iterable<T>): T[] {\n if (iterable === undefined) {\n return []\n }\n return Array.from(iterable)\n}\n\n/**\n * Create a Map (Python dict)\n */\nexport function dict<K, V>(entries?: Iterable<[K, V]>): Map<K, V> {\n return new Map(entries)\n}\n\n/**\n * Create a Set\n */\nexport function set<T>(iterable?: Iterable<T>): Set<T> {\n return new Set(iterable)\n}\n\n/**\n * Create a tuple (readonly array)\n */\nexport function tuple<T extends unknown[]>(...items: T): Readonly<T> {\n return Object.freeze([...items]) as Readonly<T>\n}\n\n// ============================================================\n// Built-in Functions\n// ============================================================\n\n/**\n * Python len() function\n */\nexport function len(\n obj: string | unknown[] | Map<unknown, unknown> | Set<unknown> | { length: number }\n): number {\n if (typeof obj === \"string\" || Array.isArray(obj)) {\n return obj.length\n }\n if (obj instanceof Map || obj instanceof Set) {\n return obj.size\n }\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (typeof obj === \"object\" && obj !== null && \"length\" in obj) {\n return obj.length\n }\n throw new TypeError(\"object has no len()\")\n}\n\n/**\n * Python abs() function\n */\nexport function abs(x: number): number {\n return Math.abs(x)\n}\n\n/**\n * Python min() function\n */\nexport function min<T>(...args: T[] | [Iterable<T>]): T {\n const first = args[0]\n if (\n args.length === 1 &&\n typeof first === \"object\" &&\n first !== null &&\n Symbol.iterator in first\n ) {\n const arr = [...first]\n if (arr.length === 0) {\n throw new Error(\"min() arg is an empty sequence\")\n }\n return arr.reduce((a, b) => (a < b ? a : b))\n }\n\n if (args.length === 0) {\n throw new Error(\"min expected at least 1 argument, got 0\")\n }\n\n return (args as T[]).reduce((a, b) => (a < b ? a : b))\n}\n\n/**\n * Python max() function\n */\nexport function max<T>(...args: T[] | [Iterable<T>]): T {\n const first = args[0]\n if (\n args.length === 1 &&\n typeof first === \"object\" &&\n first !== null &&\n Symbol.iterator in first\n ) {\n const arr = [...first]\n if (arr.length === 0) {\n throw new Error(\"max() arg is an empty sequence\")\n }\n return arr.reduce((a, b) => (a > b ? a : b))\n }\n\n if (args.length === 0) {\n throw new Error(\"max expected at least 1 argument, got 0\")\n }\n\n return (args as T[]).reduce((a, b) => (a > b ? a : b))\n}\n\n/**\n * Python sum() function\n */\nexport function sum(iterable: Iterable<number>, start = 0): number {\n let total = start\n for (const item of iterable) {\n total += item\n }\n return total\n}\n\n/**\n * Python all() function\n */\nexport function all(iterable: Iterable<unknown>): boolean {\n for (const item of iterable) {\n if (!bool(item)) return false\n }\n return true\n}\n\n/**\n * Python any() function\n */\nexport function any(iterable: Iterable<unknown>): boolean {\n for (const item of iterable) {\n if (bool(item)) return true\n }\n return false\n}\n\n/**\n * Python round() function\n */\nexport function round(number: number, ndigits?: number): number {\n if (ndigits === undefined || ndigits === 0) {\n const rounded = Math.round(number)\n if (Math.abs(number % 1) === 0.5) {\n return rounded % 2 === 0 ? rounded : rounded - Math.sign(number)\n }\n return rounded\n }\n\n const factor = Math.pow(10, ndigits)\n return Math.round(number * factor) / factor\n}\n\n/**\n * Python ord()\n */\nexport function ord(char: string): number {\n if (char.length !== 1) {\n throw new Error(\"ord() expected a character\")\n }\n return char.charCodeAt(0)\n}\n\n/**\n * Python chr()\n */\nexport function chr(code: number): string {\n return String.fromCharCode(code)\n}\n\n/**\n * Python hex()\n */\nexport function hex(x: number): string {\n const prefix = x < 0 ? \"-0x\" : \"0x\"\n return prefix + Math.abs(Math.trunc(x)).toString(16)\n}\n\n/**\n * Python oct()\n */\nexport function oct(x: number): string {\n const prefix = x < 0 ? \"-0o\" : \"0o\"\n return prefix + Math.abs(Math.trunc(x)).toString(8)\n}\n\n/**\n * Python bin()\n */\nexport function bin(x: number): string {\n const prefix = x < 0 ? \"-0b\" : \"0b\"\n return prefix + Math.abs(Math.trunc(x)).toString(2)\n}\n\n// ============================================================\n// Type Conversions\n// ============================================================\n\n/**\n * Python int() function\n */\nexport function int(x: string | number | boolean, base?: number): number {\n if (typeof x === \"boolean\") {\n return x ? 1 : 0\n }\n if (typeof x === \"number\") {\n return Math.trunc(x)\n }\n const parsed = base !== undefined ? parseInt(x, base) : parseInt(x, 10)\n if (isNaN(parsed)) {\n throw new Error(`invalid literal for int(): '${x}'`)\n }\n return parsed\n}\n\n/**\n * Python float() function\n */\nexport function float(x: string | number): number {\n if (typeof x === \"number\") {\n return x\n }\n const parsed = parseFloat(x)\n if (isNaN(parsed)) {\n throw new Error(`could not convert string to float: '${x}'`)\n }\n return parsed\n}\n\n/**\n * Python str() function\n */\nexport function str(x: unknown): string {\n if (x === null) {\n return \"None\"\n }\n if (x === undefined) {\n return \"None\"\n }\n if (typeof x === \"boolean\") {\n return x ? \"True\" : \"False\"\n }\n if (Array.isArray(x)) {\n return \"[\" + x.map((item) => repr(item)).join(\", \") + \"]\"\n }\n if (x instanceof Map) {\n const entries = Array.from(x.entries())\n .map(([k, v]) => `${repr(k)}: ${repr(v)}`)\n .join(\", \")\n return \"{\" + entries + \"}\"\n }\n if (x instanceof Set) {\n if (x.size === 0) {\n return \"set()\"\n }\n return (\n \"{\" +\n Array.from(x)\n .map((item) => repr(item))\n .join(\", \") +\n \"}\"\n )\n }\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n return String(x)\n}\n\n/**\n * Python repr() function\n */\nexport function repr(x: unknown): string {\n if (typeof x === \"string\") {\n return `'${x}'`\n }\n return str(x)\n}\n\n/**\n * Python bool() function\n */\nexport function bool(x: unknown): boolean {\n if (x === null || x === undefined) {\n return false\n }\n if (typeof x === \"boolean\") {\n return x\n }\n if (typeof x === \"number\") {\n return x !== 0\n }\n if (typeof x === \"string\") {\n return x.length > 0\n }\n if (Array.isArray(x)) {\n return x.length > 0\n }\n if (x instanceof Map || x instanceof Set) {\n return x.size > 0\n }\n return true\n}\n\n/**\n * Python ascii() - returns ASCII representation\n */\nexport function ascii(x: unknown): string {\n const s = repr(x)\n let result = \"\"\n for (const char of s) {\n const code = char.charCodeAt(0)\n if (code > 127) {\n if (code > 0xffff) {\n result += `\\\\U${code.toString(16).padStart(8, \"0\")}`\n } else {\n result += `\\\\u${code.toString(16).padStart(4, \"0\")}`\n }\n } else {\n result += char\n }\n }\n return result\n}\n\n/**\n * Python isinstance() - simplified version\n */\nexport function isinstance(obj: unknown, classInfo: unknown): boolean {\n if (classInfo === Number || classInfo === \"int\" || classInfo === \"float\") {\n return typeof obj === \"number\"\n }\n if (classInfo === String || classInfo === \"str\") {\n return typeof obj === \"string\"\n }\n if (classInfo === Boolean || classInfo === \"bool\") {\n return typeof obj === \"boolean\"\n }\n if (classInfo === Array || classInfo === \"list\") {\n return Array.isArray(obj)\n }\n if (classInfo === Map || classInfo === \"dict\") {\n return obj instanceof Map\n }\n if (classInfo === Set || classInfo === \"set\") {\n return obj instanceof Set\n }\n if (typeof classInfo === \"function\") {\n return obj instanceof classInfo\n }\n return false\n}\n\n/**\n * Python type() - simplified version\n */\nexport function type(obj: unknown): string {\n if (obj === null) return \"NoneType\"\n if (typeof obj === \"number\") {\n return Number.isInteger(obj) ? \"int\" : \"float\"\n }\n if (typeof obj === \"string\") return \"str\"\n if (typeof obj === \"boolean\") return \"bool\"\n if (Array.isArray(obj)) return \"list\"\n if (obj instanceof Map) return \"dict\"\n if (obj instanceof Set) return \"set\"\n return typeof obj\n}\n\n/**\n * Python input() - for Node.js\n */\nexport function input(prompt?: string): string {\n if (prompt) {\n process.stdout.write(prompt)\n }\n throw new Error(\"input() requires async implementation\")\n}\n\n// ============================================================\n// Format Function\n// ============================================================\n\nfunction formatNumber(\n num: number,\n sign: string | undefined,\n _hash: string | undefined,\n grouping: string | undefined,\n precision?: number,\n isInteger = true\n): string {\n let result: string\n\n if (isInteger) {\n result = Math.trunc(num).toString()\n } else {\n result = num.toFixed(precision ?? 6)\n }\n\n if (grouping) {\n const sep = grouping === \"_\" ? \"_\" : \",\"\n const parts = result.split(\".\")\n const intPart = parts[0] as string\n const signChar = intPart[0] === \"-\" ? \"-\" : \"\"\n const digits = signChar ? intPart.slice(1) : intPart\n const grouped = digits.replace(/\\B(?=(\\d{3})+(?!\\d))/g, sep)\n parts[0] = signChar + grouped\n result = parts.join(\".\")\n }\n\n if (num >= 0) {\n if (sign === \"+\") {\n result = \"+\" + result\n } else if (sign === \" \") {\n result = \" \" + result\n }\n }\n\n return result\n}\n\n/**\n * Python format() - formats a value according to format spec\n */\nexport function format(value: unknown, spec: string): string {\n if (spec === \"\") {\n return str(value)\n }\n\n const match = spec.match(\n /^(.?[<>=^])?([+\\- ])?([#])?(0)?(\\d+)?([,_])?(?:\\.(\\d+))?([bcdeEfFgGnosxX%])?$/\n )\n\n if (!match) {\n return str(value)\n }\n\n const [, alignPart, sign, hash, zero, widthStr, grouping, precisionStr, typeChar] = match\n\n let fill = \" \"\n let align = \"\"\n if (alignPart) {\n if (alignPart.length === 2) {\n fill = alignPart[0] as string\n align = alignPart[1] as string\n } else {\n align = alignPart\n }\n }\n\n const width = widthStr ? parseInt(widthStr, 10) : 0\n const precision = precisionStr !== undefined ? parseInt(precisionStr, 10) : undefined\n\n if (zero && !alignPart) {\n fill = \"0\"\n align = \"=\"\n }\n\n let result: string\n\n if (typeChar === \"s\" || (!typeChar && typeof value === \"string\")) {\n result = str(value)\n if (precision !== undefined) {\n result = result.slice(0, precision)\n }\n } else if (\n typeChar === \"d\" ||\n (!typeChar && typeof value === \"number\" && Number.isInteger(value))\n ) {\n const num = typeof value === \"number\" ? value : int(value as string | number | boolean)\n result = formatNumber(num, sign, \"\", grouping)\n } else if (typeChar === \"f\" || typeChar === \"F\") {\n const num = typeof value === \"number\" ? value : float(value as string | number)\n const prec = precision ?? 6\n result = formatNumber(num, sign, \"\", grouping, prec, false)\n if (typeChar === \"F\") result = result.toUpperCase()\n } else if (typeChar === \"e\" || typeChar === \"E\") {\n const num = typeof value === \"number\" ? value : float(value as string | number)\n const prec = precision ?? 6\n result = num.toExponential(prec)\n if (sign === \"+\" && num >= 0) result = \"+\" + result\n else if (sign === \" \" && num >= 0) result = \" \" + result\n if (typeChar === \"E\") result = result.toUpperCase()\n } else if (typeChar === \"g\" || typeChar === \"G\") {\n const num = typeof value === \"number\" ? value : float(value as string | number)\n const prec = precision ?? 6\n result = num.toPrecision(prec)\n if (sign === \"+\" && num >= 0) result = \"+\" + result\n else if (sign === \" \" && num >= 0) result = \" \" + result\n if (typeChar === \"G\") result = result.toUpperCase()\n } else if (typeChar === \"x\" || typeChar === \"X\") {\n const num =\n typeof value === \"number\" ? Math.trunc(value) : int(value as string | number | boolean)\n result = Math.abs(num).toString(16)\n if (hash) result = \"0x\" + result\n if (num < 0) result = \"-\" + result\n else if (sign === \"+\") result = \"+\" + result\n else if (sign === \" \") result = \" \" + result\n if (typeChar === \"X\") result = result.toUpperCase()\n } else if (typeChar === \"o\") {\n const num =\n typeof value === \"number\" ? Math.trunc(value) : int(value as string | number | boolean)\n result = Math.abs(num).toString(8)\n if (hash) result = \"0o\" + result\n if (num < 0) result = \"-\" + result\n else if (sign === \"+\") result = \"+\" + result\n else if (sign === \" \") result = \" \" + result\n } else if (typeChar === \"b\") {\n const num =\n typeof value === \"number\" ? Math.trunc(value) : int(value as string | number | boolean)\n result = Math.abs(num).toString(2)\n if (hash) result = \"0b\" + result\n if (num < 0) result = \"-\" + result\n else if (sign === \"+\") result = \"+\" + result\n else if (sign === \" \") result = \" \" + result\n } else if (typeChar === \"c\") {\n const code = typeof value === \"number\" ? value : int(value as string | number | boolean)\n result = String.fromCharCode(code)\n } else if (typeChar === \"%\") {\n const num = typeof value === \"number\" ? value : float(value as string | number)\n const prec = precision ?? 6\n result = (num * 100).toFixed(prec) + \"%\"\n if (sign === \"+\" && num >= 0) result = \"+\" + result\n else if (sign === \" \" && num >= 0) result = \" \" + result\n } else if (typeChar === \"n\") {\n const num = typeof value === \"number\" ? value : float(value as string | number)\n result = num.toLocaleString()\n } else {\n result = str(value)\n }\n\n if (width > result.length) {\n const padding = fill.repeat(width - result.length)\n if (align === \"<\") {\n result = result + padding\n } else if (align === \">\" || align === \"\") {\n result = padding + result\n } else if (align === \"^\") {\n const leftPad = Math.floor((width - result.length) / 2)\n const rightPad = width - result.length - leftPad\n result = fill.repeat(leftPad) + result + fill.repeat(rightPad)\n } else if (align === \"=\") {\n const signMatch = result.match(/^([+\\- ]|0[xXoObB])?(.*)$/)\n if (signMatch) {\n const signPart = signMatch[1] ?? \"\"\n const numPart = signMatch[2] ?? \"\"\n result = signPart + padding + numPart\n }\n }\n }\n\n return result\n}\n","/**\n * Python list methods for TypeScript\n * Usage: py.list.remove(), py.list.sort(), etc.\n */\n\nexport const list = {\n /**\n * Python list.append() - modifies array in place\n */\n append<T>(arr: T[], item: T): void {\n arr.push(item)\n },\n\n /**\n * Python list.extend() - modifies array in place\n */\n extend<T>(arr: T[], items: Iterable<T>): void {\n arr.push(...items)\n },\n\n /**\n * Python list.insert() - modifies array in place\n */\n insert<T>(arr: T[], index: number, item: T): void {\n arr.splice(index, 0, item)\n },\n\n /**\n * Python list.remove() - removes first occurrence, modifies in place\n */\n remove<T>(arr: T[], value: T): void {\n const index = arr.indexOf(value)\n if (index === -1) {\n throw new Error(\"list.remove(x): x not in list\")\n }\n arr.splice(index, 1)\n },\n\n /**\n * Python list.pop() - removes and returns item at index\n */\n pop<T>(arr: T[], index?: number): T {\n if (arr.length === 0) {\n throw new Error(\"pop from empty list\")\n }\n const i = index ?? arr.length - 1\n const normalizedIndex = i < 0 ? arr.length + i : i\n if (normalizedIndex < 0 || normalizedIndex >= arr.length) {\n throw new Error(\"pop index out of range\")\n }\n return arr.splice(normalizedIndex, 1)[0] as T\n },\n\n /**\n * Python list.clear() - removes all items\n */\n clear(arr: unknown[]): void {\n arr.length = 0\n },\n\n /**\n * Python list.index() - finds first occurrence\n */\n index<T>(arr: T[], value: T, start?: number, end?: number): number {\n const searchStart = start ?? 0\n const searchEnd = end ?? arr.length\n for (let i = searchStart; i < searchEnd; i++) {\n if (arr[i] === value) {\n return i\n }\n }\n throw new Error(\"x not in list\")\n },\n\n /**\n * Python list.count() - counts occurrences\n */\n count<T>(arr: T[], value: T): number {\n let count = 0\n for (const item of arr) {\n if (item === value) count++\n }\n return count\n },\n\n /**\n * Python list.sort() with key function - modifies in place\n */\n sort<T>(arr: T[], options?: { key?: (x: T) => unknown; reverse?: boolean }): void {\n const key = options?.key ?? ((x: T) => x as unknown)\n const reverse = options?.reverse ?? false\n arr.sort((a, b) => {\n const aKey = key(a) as string | number\n const bKey = key(b) as string | number\n let cmp = 0\n if (aKey < bKey) cmp = -1\n else if (aKey > bKey) cmp = 1\n return reverse ? -cmp : cmp\n })\n },\n\n /**\n * Python list.reverse() - reverses in place\n */\n reverse(arr: unknown[]): void {\n arr.reverse()\n },\n\n /**\n * Python list.copy() - shallow copy\n */\n copy<T>(arr: T[]): T[] {\n return [...arr]\n },\n\n /**\n * Python slice assignment: arr[start:end:step] = values\n * Replaces a slice of the array with new values, modifying in place\n */\n sliceAssign<T>(\n arr: T[],\n start: number | undefined,\n end: number | undefined,\n step: number | undefined,\n values: T[]\n ): void {\n const len = arr.length\n const actualStep = step ?? 1\n\n // Normalize start and end\n let actualStart = start ?? (actualStep > 0 ? 0 : len - 1)\n let actualEnd = end ?? (actualStep > 0 ? len : -len - 1)\n\n // Handle negative indices\n if (actualStart < 0) actualStart = Math.max(0, len + actualStart)\n if (actualEnd < 0) actualEnd = Math.max(0, len + actualEnd)\n\n // Clamp to array bounds\n actualStart = Math.min(actualStart, len)\n actualEnd = Math.min(actualEnd, len)\n\n if (actualStep === 1) {\n // Simple case: contiguous slice\n const deleteCount = Math.max(0, actualEnd - actualStart)\n arr.splice(actualStart, deleteCount, ...values)\n } else {\n // Extended slice with step\n // Collect indices that will be replaced\n const indices: number[] = []\n if (actualStep > 0) {\n for (let i = actualStart; i < actualEnd; i += actualStep) {\n indices.push(i)\n }\n } else {\n for (let i = actualStart; i > actualEnd; i += actualStep) {\n indices.push(i)\n }\n }\n\n // For extended slices, lengths must match\n if (indices.length !== values.length) {\n throw new Error(\n `attempt to assign sequence of size ${String(values.length)} to extended slice of size ${String(indices.length)}`\n )\n }\n\n // Replace values at each index\n for (let i = 0; i < indices.length; i++) {\n const idx = indices[i]\n if (idx !== undefined) {\n arr[idx] = values[i] as T\n }\n }\n }\n }\n}\n","/**\n * Python dict methods for TypeScript\n * Usage: py.dict.get(), py.dict.keys(), etc.\n */\n\nexport const dict = {\n /**\n * Python dict.get() - get value with optional default\n */\n get<K extends string | number | symbol, V>(\n obj: Record<K, V>,\n key: K,\n defaultValue?: V\n ): V | undefined {\n return key in obj ? obj[key] : defaultValue\n },\n\n /**\n * Python dict.setDefault() - get value or set default\n */\n setDefault<K extends string | number | symbol, V>(obj: Record<K, V>, key: K, defaultValue: V): V {\n if (!(key in obj)) {\n obj[key] = defaultValue\n }\n return obj[key]\n },\n\n /**\n * Python dict.pop() - remove and return value\n */\n pop<K extends string | number | symbol, V>(\n obj: Record<K, V>,\n key: K,\n defaultValue?: V\n ): V | undefined {\n if (key in obj) {\n const value = obj[key]\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete obj[key]\n return value\n }\n if (defaultValue !== undefined) {\n return defaultValue\n }\n throw new Error(\"KeyError\")\n },\n\n /**\n * Python dict.popItem() - remove and return last item\n */\n popItem<K extends string | number | symbol, V>(obj: Record<K, V>): [K, V] {\n const keys = Object.keys(obj) as K[]\n if (keys.length === 0) {\n throw new Error(\"dictionary is empty\")\n }\n const key = keys[keys.length - 1] as K\n const value = obj[key]\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete obj[key]\n return [key, value]\n },\n\n /**\n * Python dict.update() - update with another dict\n */\n update<K extends string | number | symbol, V>(\n obj: Record<K, V>,\n other: Record<K, V> | Iterable<[K, V]>\n ): void {\n if (Symbol.iterator in other) {\n for (const [k, v] of other) {\n obj[k] = v\n }\n } else {\n Object.assign(obj, other)\n }\n },\n\n /**\n * Python dict.clear() - remove all items\n */\n clear<K extends string | number | symbol, V>(obj: Record<K, V>): void {\n for (const key of Object.keys(obj)) {\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n delete obj[key as K]\n }\n },\n\n /**\n * Python dict.copy() - shallow copy\n */\n copy<K extends string | number | symbol, V>(obj: Record<K, V>): Record<K, V> {\n return { ...obj }\n },\n\n /**\n * Python dict.keys() - returns iterable of keys\n */\n keys<K extends string | number | symbol, V>(obj: Record<K, V>): K[] {\n return Object.keys(obj) as K[]\n },\n\n /**\n * Python dict.values() - returns iterable of values\n */\n values<K extends string | number | symbol, V>(obj: Record<K, V>): V[] {\n return Object.values(obj)\n },\n\n /**\n * Python dict.items() - returns iterable of [key, value] pairs\n */\n items<K extends string | number | symbol, V>(obj: Record<K, V>): [K, V][] {\n return Object.entries(obj) as [K, V][]\n },\n\n /**\n * Python dict.fromKeys() - create dict from keys\n */\n fromKeys<K extends string | number | symbol, V>(keys: K[], value?: V): Record<K, V | undefined> {\n const result = {} as Record<K, V | undefined>\n for (const key of keys) {\n result[key] = value\n }\n return result\n }\n}\n","/**\n * Python set methods for TypeScript\n * Usage: py.set.intersection(), py.set.union(), etc.\n */\n\nexport const set = {\n /**\n * Python set.add() - add element\n */\n add<T>(s: Set<T>, item: T): void {\n s.add(item)\n },\n\n /**\n * Python set.remove() - remove element, raises error if not found\n */\n remove<T>(s: Set<T>, item: T): void {\n if (!s.has(item)) {\n throw new Error(\"KeyError\")\n }\n s.delete(item)\n },\n\n /**\n * Python set.discard() - remove element if present\n */\n discard<T>(s: Set<T>, item: T): void {\n s.delete(item)\n },\n\n /**\n * Python set.pop() - remove and return arbitrary element\n */\n pop<T>(s: Set<T>): T {\n if (s.size === 0) {\n throw new Error(\"pop from an empty set\")\n }\n const item = s.values().next().value as T\n s.delete(item)\n return item\n },\n\n /**\n * Python set.clear() - remove all elements\n */\n clear<T>(s: Set<T>): void {\n s.clear()\n },\n\n /**\n * Python set.copy() - shallow copy\n */\n copy<T>(s: Set<T>): Set<T> {\n return new Set(s)\n },\n\n /**\n * Python set.update() - add elements from iterable\n */\n update<T>(s: Set<T>, ...iterables: Iterable<T>[]): void {\n for (const iterable of iterables) {\n for (const item of iterable) {\n s.add(item)\n }\n }\n },\n\n /**\n * Python set.union() - returns new set with all elements\n */\n union<T>(a: Set<T>, ...others: Iterable<T>[]): Set<T> {\n const result = new Set(a)\n for (const other of others) {\n for (const item of other) {\n result.add(item)\n }\n }\n return result\n },\n\n /**\n * Python set.intersection() - returns new set with common elements\n */\n intersection<T>(a: Set<T>, b: Set<T>): Set<T> {\n const result = new Set<T>()\n for (const item of a) {\n if (b.has(item)) result.add(item)\n }\n return result\n },\n\n /**\n * Python set.intersection_update() - keep only common elements\n */\n intersectionUpdate<T>(a: Set<T>, b: Set<T>): void {\n for (const item of a) {\n if (!b.has(item)) a.delete(item)\n }\n },\n\n /**\n * Python set.difference() - returns new set with elements in a but not in b\n */\n difference<T>(a: Set<T>, b: Set<T>): Set<T> {\n const result = new Set<T>()\n for (const item of a) {\n if (!b.has(item)) result.add(item)\n }\n return result\n },\n\n /**\n * Python set.difference_update() - remove elements found in b\n */\n differenceUpdate<T>(a: Set<T>, b: Set<T>): void {\n for (const item of b) {\n a.delete(item)\n }\n },\n\n /**\n * Python set.symmetric_difference() - returns new set with elements in either but not both\n */\n symmetricDifference<T>(a: Set<T>, b: Set<T>): Set<T> {\n const result = new Set<T>()\n for (const item of a) {\n if (!b.has(item)) result.add(item)\n }\n for (const item of b) {\n if (!a.has(item)) result.add(item)\n }\n return result\n },\n\n /**\n * Python set.symmetric_difference_update() - update with symmetric difference\n */\n symmetricDifferenceUpdate<T>(a: Set<T>, b: Set<T>): void {\n const toAdd: T[] = []\n const toRemove: T[] = []\n for (const item of a) {\n if (b.has(item)) toRemove.push(item)\n }\n for (const item of b) {\n if (!a.has(item)) toAdd.push(item)\n }\n for (const item of toRemove) a.delete(item)\n for (const item of toAdd) a.add(item)\n },\n\n /**\n * Python set.isSubset() - test if all elements are in other\n */\n isSubset<T>(a: Set<T>, b: Set<T>): boolean {\n for (const item of a) {\n if (!b.has(item)) return false\n }\n return true\n },\n\n /**\n * Python set.isSuperset() - test if all other elements are in this set\n */\n isSuperset<T>(a: Set<T>, b: Set<T>): boolean {\n for (const item of b) {\n if (!a.has(item)) return false\n }\n return true\n },\n\n /**\n * Python set.isDisjoint() - test if no common elements\n */\n isDisjoint<T>(a: Set<T>, b: Set<T>): boolean {\n for (const item of a) {\n if (b.has(item)) return false\n }\n return true\n }\n}\n","/**\n * Python Runtime Library for TypeScript\n *\n * Import styles:\n *\n * 1. Builtins (global Python functions):\n * import { len, range, sorted, min, max } from \"pythonlib\"\n *\n * 2. Module imports (like Python):\n * import { dump, loads } from \"pythonlib/json\"\n * import { match, search, sub } from \"pythonlib/re\"\n * import { chain, combinations } from \"pythonlib/itertools\"\n * import { Counter, defaultdict } from \"pythonlib/collections\"\n *\n * 3. Module namespaces (alternative):\n * import { json, re, itertools } from \"pythonlib\"\n * json.dump(...), re.match(...), itertools.chain(...)\n */\n\n// =============================================================================\n// Module imports (for namespace exports)\n// =============================================================================\n\nimport * as itertoolsModule from \"./itertools.js\"\nimport * as functoolsModule from \"./functools.js\"\nimport * as collectionsModule from \"./collections.js\"\nimport * as mathModule from \"./math.js\"\nimport * as randomModule from \"./random.js\"\nimport * as jsonModule from \"./json.js\"\nimport * as osModule from \"./os.js\"\nimport * as datetimeModule from \"./datetime.js\"\nimport * as reModule from \"./re.js\"\nimport * as stringModule from \"./string.js\"\nimport * as core from \"./core.js\"\nimport * as builtins from \"./builtins.js\"\nimport { list as listMethods } from \"./list.js\"\nimport { dict as dictMethods } from \"./dict.js\"\nimport { set as setMethods } from \"./set.js\"\n\n// =============================================================================\n// Module namespace exports (for: import { itertools } from \"pythonlib\")\n// =============================================================================\n\nexport const itertools = itertoolsModule\nexport const functools = functoolsModule\nexport const collections = collectionsModule\nexport const math = mathModule\nexport const random = randomModule\nexport const json = jsonModule\nexport const os = osModule\nexport const datetime = datetimeModule\nexport const re = reModule\nexport const string = {\n ...stringModule.string,\n asciiLowercase: stringModule.asciiLowercase,\n asciiUppercase: stringModule.asciiUppercase,\n asciiLetters: stringModule.asciiLetters,\n digits: stringModule.digits,\n hexDigits: stringModule.hexDigits,\n octDigits: stringModule.octDigits,\n punctuation: stringModule.punctuation,\n whitespace: stringModule.whitespace,\n printable: stringModule.printable,\n capWords: stringModule.capWords,\n Template: stringModule.Template\n}\n\n// =============================================================================\n// Core built-in types with methods (list, dict, set)\n// =============================================================================\n\ntype ListConstructor = {\n <T>(iterable?: Iterable<T>): T[]\n} & typeof listMethods\n\ntype DictConstructor = {\n <K, V>(entries?: Iterable<[K, V]>): Map<K, V>\n} & typeof dictMethods\n\ntype SetConstructor = {\n <T>(iterable?: Iterable<T>): Set<T>\n} & typeof setMethods\n\nexport const list: ListConstructor = Object.assign(\n <T>(iterable?: Iterable<T>): T[] => builtins.list(iterable),\n listMethods\n)\n\nexport const dict: DictConstructor = Object.assign(\n <K, V>(entries?: Iterable<[K, V]>): Map<K, V> => builtins.dict(entries),\n dictMethods\n)\n\nexport const set: SetConstructor = Object.assign(\n <T>(iterable?: Iterable<T>): Set<T> => builtins.set(iterable),\n setMethods\n)\n\n// =============================================================================\n// Core operations (Python-specific semantics)\n// =============================================================================\n\nexport const floorDiv = core.floorDiv\nexport const mod = core.mod\nexport const divMod = core.divMod\nexport const sprintf = core.sprintf\nexport const strFormat = core.strFormat\nexport const slice = core.slice\nexport const at = core.at\nexport const contains = core.contains\nexport const is = core.is\nexport { repeat as repeatValue } from \"./core.js\"\nexport { pow } from \"./core.js\"\n\n// =============================================================================\n// Built-in functions (Python global scope)\n// =============================================================================\n\n// Iteration\nexport const range = builtins.range\nexport const enumerate = builtins.enumerate\nexport const zip = builtins.zip\nexport const iter = builtins.iter\nexport const reversed = builtins.reversed\nexport const sorted = builtins.sorted\nexport const map = builtins.map\nexport const filter = builtins.filter\n\n// Collection constructors\nexport const tuple = builtins.tuple\n\n// Aggregation\nexport const len = builtins.len\nexport const abs = builtins.abs\nexport const min = builtins.min\nexport const max = builtins.max\nexport const sum = builtins.sum\nexport const all = builtins.all\nexport const any = builtins.any\nexport const round = builtins.round\n\n// Character/number conversion\nexport const ord = builtins.ord\nexport const chr = builtins.chr\nexport const hex = builtins.hex\nexport const oct = builtins.oct\nexport const bin = builtins.bin\n\n// Type conversion\nexport const int = builtins.int\nexport const float = builtins.float\nexport const str = builtins.str\nexport const repr = builtins.repr\nexport const bool = builtins.bool\nexport const ascii = builtins.ascii\n\n// Type checking & misc\nexport const isinstance = builtins.isinstance\nexport const type = builtins.type\nexport const input = builtins.input\nexport const format = builtins.format\n"],"mappings":"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","names":["type","len","digits","list","len","dict","set","string","list","dict","set","floorDiv","mod","divMod","sprintf","strFormat","slice","at","contains","is","range","enumerate","zip","iter","reversed","sorted","map","filter","tuple","len","abs","min","max","sum","all","any","round","ord","chr","hex","oct","bin","int","float","str","repr","bool","ascii","isinstance","type","input","format"]}
@@ -3,6 +3,8 @@
3
3
  *
4
4
  * Provides iterator building blocks inspired by Python's itertools module.
5
5
  *
6
+ * @see {@link https://docs.python.org/3/library/itertools.html | Python itertools documentation}
7
+ *
6
8
  * Design Decision (ADR-0008):
7
9
  * - Most functions return eager arrays for better debugging and familiarity
8
10
  * - Only infinite sequences (cycle, repeat without count) use generators
@@ -50,19 +52,19 @@ declare function repeat<T>(obj: T, times?: number): T[] | Generator<T>;
50
52
  declare function islice<T>(iterable: Iterable<T>, start: number, stop?: number, step?: number): T[];
51
53
  /**
52
54
  * Take elements while predicate is true
53
- * takewhile(x => x < 5, [1, 4, 6, 4, 1]) -> [1, 4]
55
+ * takeWhile(x => x < 5, [1, 4, 6, 4, 1]) -> [1, 4]
54
56
  */
55
- declare function takewhile<T>(predicate: (x: T) => boolean, iterable: Iterable<T>): T[];
57
+ declare function takeWhile<T>(predicate: (x: T) => boolean, iterable: Iterable<T>): T[];
56
58
  /**
57
59
  * Skip elements while predicate is true, then return the rest
58
- * dropwhile(x => x < 5, [1, 4, 6, 4, 1]) -> [6, 4, 1]
60
+ * dropWhile(x => x < 5, [1, 4, 6, 4, 1]) -> [6, 4, 1]
59
61
  */
60
- declare function dropwhile<T>(predicate: (x: T) => boolean, iterable: Iterable<T>): T[];
62
+ declare function dropWhile<T>(predicate: (x: T) => boolean, iterable: Iterable<T>): T[];
61
63
  /**
62
64
  * Zip iterables together, filling missing values with fillvalue
63
- * zip_longest([1, 2, 3], ['a', 'b'], { fillvalue: '-' }) -> [[1, 'a'], [2, 'b'], [3, '-']]
65
+ * zipLongest([1, 2, 3], ['a', 'b'], { fillvalue: '-' }) -> [[1, 'a'], [2, 'b'], [3, '-']]
64
66
  */
65
- declare function zip_longest<T>(...args: [...Iterable<T>[], {
67
+ declare function zipLongest<T>(...args: [...Iterable<T>[], {
66
68
  fillvalue?: T;
67
69
  }] | Iterable<T>[]): T[][];
68
70
  /**
@@ -72,9 +74,9 @@ declare function zip_longest<T>(...args: [...Iterable<T>[], {
72
74
  declare function compress<T>(data: Iterable<T>, selectors: Iterable<unknown>): T[];
73
75
  /**
74
76
  * Return elements for which predicate is false
75
- * filterfalse(x => x % 2, [1, 2, 3, 4, 5]) -> [2, 4]
77
+ * filterFalse(x => x % 2, [1, 2, 3, 4, 5]) -> [2, 4]
76
78
  */
77
- declare function filterfalse<T>(predicate: (x: T) => unknown, iterable: Iterable<T>): T[];
79
+ declare function filterFalse<T>(predicate: (x: T) => unknown, iterable: Iterable<T>): T[];
78
80
  /**
79
81
  * Make an iterator that returns accumulated sums or accumulated results
80
82
  * accumulate([1, 2, 3, 4, 5]) -> [1, 3, 6, 10, 15]
@@ -108,31 +110,47 @@ declare function pairwise<T>(iterable: Iterable<T>): [T, T][];
108
110
  declare function productRepeat<T>(iterable: Iterable<T>, repeat?: number): T[][];
109
111
  /**
110
112
  * Return r-length combinations with replacement
111
- * combinations_with_replacement([1, 2, 3], 2) -> [[1, 1], [1, 2], [1, 3], [2, 2], [2, 3], [3, 3]]
113
+ * combinationsWithReplacement([1, 2, 3], 2) -> [[1, 1], [1, 2], [1, 3], [2, 2], [2, 3], [3, 3]]
114
+ */
115
+ declare function combinationsWithReplacement<T>(iterable: Iterable<T>, r: number): T[][];
116
+ /**
117
+ * Split an iterable into chunks of specified size.
118
+ * @inspired Remeda, Lodash
119
+ *
120
+ * chunk([1, 2, 3, 4, 5], 2) -> [[1, 2], [3, 4], [5]]
121
+ */
122
+ declare function chunk<T>(iterable: Iterable<T>, size: number): T[][];
123
+ /**
124
+ * Partition an iterable into two arrays based on a predicate.
125
+ * @inspired Remeda, Lodash
126
+ *
127
+ * partition([1, 2, 3, 4], x => x % 2 === 0) -> [[2, 4], [1, 3]]
112
128
  */
113
- declare function combinations_with_replacement<T>(iterable: Iterable<T>, r: number): T[][];
129
+ declare function partition<T>(iterable: Iterable<T>, predicate: (x: T) => boolean): [T[], T[]];
114
130
 
115
131
  declare const itertoolsModule_accumulate: typeof accumulate;
116
132
  declare const itertoolsModule_chain: typeof chain;
133
+ declare const itertoolsModule_chunk: typeof chunk;
117
134
  declare const itertoolsModule_combinations: typeof combinations;
118
- declare const itertoolsModule_combinations_with_replacement: typeof combinations_with_replacement;
135
+ declare const itertoolsModule_combinationsWithReplacement: typeof combinationsWithReplacement;
119
136
  declare const itertoolsModule_compress: typeof compress;
120
137
  declare const itertoolsModule_count: typeof count;
121
138
  declare const itertoolsModule_cycle: typeof cycle;
122
- declare const itertoolsModule_dropwhile: typeof dropwhile;
123
- declare const itertoolsModule_filterfalse: typeof filterfalse;
139
+ declare const itertoolsModule_dropWhile: typeof dropWhile;
140
+ declare const itertoolsModule_filterFalse: typeof filterFalse;
124
141
  declare const itertoolsModule_groupby: typeof groupby;
125
142
  declare const itertoolsModule_islice: typeof islice;
126
143
  declare const itertoolsModule_pairwise: typeof pairwise;
144
+ declare const itertoolsModule_partition: typeof partition;
127
145
  declare const itertoolsModule_permutations: typeof permutations;
128
146
  declare const itertoolsModule_product: typeof product;
129
147
  declare const itertoolsModule_productRepeat: typeof productRepeat;
130
148
  declare const itertoolsModule_repeat: typeof repeat;
131
- declare const itertoolsModule_takewhile: typeof takewhile;
149
+ declare const itertoolsModule_takeWhile: typeof takeWhile;
132
150
  declare const itertoolsModule_tee: typeof tee;
133
- declare const itertoolsModule_zip_longest: typeof zip_longest;
151
+ declare const itertoolsModule_zipLongest: typeof zipLongest;
134
152
  declare namespace itertoolsModule {
135
- export { itertoolsModule_accumulate as accumulate, itertoolsModule_chain as chain, itertoolsModule_combinations as combinations, itertoolsModule_combinations_with_replacement as combinations_with_replacement, itertoolsModule_compress as compress, itertoolsModule_count as count, itertoolsModule_cycle as cycle, itertoolsModule_dropwhile as dropwhile, itertoolsModule_filterfalse as filterfalse, itertoolsModule_groupby as groupby, itertoolsModule_islice as islice, itertoolsModule_pairwise as pairwise, itertoolsModule_permutations as permutations, itertoolsModule_product as product, itertoolsModule_productRepeat as productRepeat, itertoolsModule_repeat as repeat, itertoolsModule_takewhile as takewhile, itertoolsModule_tee as tee, itertoolsModule_zip_longest as zip_longest };
153
+ export { itertoolsModule_accumulate as accumulate, itertoolsModule_chain as chain, itertoolsModule_chunk as chunk, itertoolsModule_combinations as combinations, itertoolsModule_combinationsWithReplacement as combinationsWithReplacement, itertoolsModule_compress as compress, itertoolsModule_count as count, itertoolsModule_cycle as cycle, itertoolsModule_dropWhile as dropWhile, itertoolsModule_filterFalse as filterFalse, itertoolsModule_groupby as groupby, itertoolsModule_islice as islice, itertoolsModule_pairwise as pairwise, itertoolsModule_partition as partition, itertoolsModule_permutations as permutations, itertoolsModule_product as product, itertoolsModule_productRepeat as productRepeat, itertoolsModule_repeat as repeat, itertoolsModule_takeWhile as takeWhile, itertoolsModule_tee as tee, itertoolsModule_zipLongest as zipLongest };
136
154
  }
137
155
 
138
- export { combinations as a, product as b, chain as c, cycle as d, islice as e, dropwhile as f, compress as g, filterfalse as h, itertoolsModule as i, accumulate as j, groupby as k, count as l, tee as m, pairwise as n, productRepeat as o, permutations as p, combinations_with_replacement as q, repeat as r, takewhile as t, zip_longest as z };
156
+ export { combinations as a, product as b, chain as c, cycle as d, islice as e, dropWhile as f, compress as g, filterFalse as h, itertoolsModule as i, accumulate as j, groupby as k, count as l, tee as m, pairwise as n, productRepeat as o, permutations as p, combinationsWithReplacement as q, repeat as r, chunk as s, takeWhile as t, partition as u, zipLongest as z };
@@ -1 +1 @@
1
- export { j as accumulate, c as chain, a as combinations, q as combinations_with_replacement, g as compress, l as count, d as cycle, f as dropwhile, h as filterfalse, k as groupby, e as islice, n as pairwise, p as permutations, b as product, o as productRepeat, r as repeat, t as takewhile, m as tee, z as zip_longest } from './itertools-Bj8XivI6.js';
1
+ export { j as accumulate, c as chain, s as chunk, a as combinations, q as combinationsWithReplacement, g as compress, l as count, d as cycle, f as dropWhile, h as filterFalse, k as groupby, e as islice, n as pairwise, u as partition, p as permutations, b as product, o as productRepeat, r as repeat, t as takeWhile, m as tee, z as zipLongest } from './itertools-Sjl1LB_0.js';
package/dist/itertools.js CHANGED
@@ -1,44 +1,48 @@
1
1
  import {
2
2
  accumulate,
3
3
  chain,
4
+ chunk,
4
5
  combinations,
5
- combinations_with_replacement,
6
+ combinationsWithReplacement,
6
7
  compress,
7
8
  count,
8
9
  cycle,
9
- dropwhile,
10
- filterfalse,
10
+ dropWhile,
11
+ filterFalse,
11
12
  groupby,
12
13
  islice,
13
14
  pairwise,
15
+ partition,
14
16
  permutations,
15
17
  product,
16
18
  productRepeat,
17
19
  repeat,
18
- takewhile,
20
+ takeWhile,
19
21
  tee,
20
- zip_longest
21
- } from "./chunk-TOI6IG3T.js";
22
+ zipLongest
23
+ } from "./chunk-HQ42WNKZ.js";
22
24
  import "./chunk-PZ5AY32C.js";
23
25
  export {
24
26
  accumulate,
25
27
  chain,
28
+ chunk,
26
29
  combinations,
27
- combinations_with_replacement,
30
+ combinationsWithReplacement,
28
31
  compress,
29
32
  count,
30
33
  cycle,
31
- dropwhile,
32
- filterfalse,
34
+ dropWhile,
35
+ filterFalse,
33
36
  groupby,
34
37
  islice,
35
38
  pairwise,
39
+ partition,
36
40
  permutations,
37
41
  product,
38
42
  productRepeat,
39
43
  repeat,
40
- takewhile,
44
+ takeWhile,
41
45
  tee,
42
- zip_longest
46
+ zipLongest
43
47
  };
44
48
  //# sourceMappingURL=itertools.js.map
@@ -3,6 +3,8 @@
3
3
  *
4
4
  * Provides JSON encoding and decoding functions matching Python's json module.
5
5
  * Maps directly to JavaScript's JSON object with Python-compatible options.
6
+ *
7
+ * @see {@link https://docs.python.org/3/library/json.html | Python json documentation}
6
8
  */
7
9
  type JsonValue = string | number | boolean | null | JsonValue[] | {
8
10
  [key: string]: JsonValue;
@@ -13,19 +15,19 @@ interface DumpsOptions {
13
15
  /** Separators for items and key-value pairs [item_sep, key_sep] */
14
16
  separators?: [string, string];
15
17
  /** Sort dictionary keys */
16
- sort_keys?: boolean;
18
+ sortKeys?: boolean;
17
19
  /** If false, non-ASCII characters are escaped. Default true */
18
- ensure_ascii?: boolean;
20
+ ensureAscii?: boolean;
19
21
  /** Custom serialization function */
20
22
  default?: (obj: unknown) => JsonValue;
21
23
  }
22
24
  interface LoadsOptions {
23
25
  /** Custom deserialization function */
24
- object_hook?: (obj: Record<string, unknown>) => unknown;
26
+ objectHook?: (obj: Record<string, unknown>) => unknown;
25
27
  /** Parse floats with this function */
26
- parse_float?: (s: string) => number;
28
+ parseFloatFn?: (s: string) => number;
27
29
  /** Parse integers with this function */
28
- parse_int?: (s: string) => number;
30
+ parseIntFn?: (s: string) => number;
29
31
  }
30
32
  /**
31
33
  * Serialize obj to a JSON formatted string.
package/dist/json.d.ts CHANGED
@@ -1 +1 @@
1
- export { a as dump, d as dumps, b as load, l as loads } from './json-Xpk0kwSd.js';
1
+ export { a as dump, d as dumps, b as load, l as loads } from './json-DAlvCadU.js';
package/dist/json.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  dumps,
4
4
  load,
5
5
  loads
6
- } from "./chunk-P3SGIF72.js";
6
+ } from "./chunk-6VQ7ITWO.js";
7
7
  import "./chunk-PZ5AY32C.js";
8
8
  export {
9
9
  dump,
@@ -3,6 +3,8 @@
3
3
  *
4
4
  * Provides mathematical functions and constants matching Python's math module.
5
5
  * Most functions map directly to JavaScript's Math object.
6
+ *
7
+ * @see {@link https://docs.python.org/3/library/math.html | Python math documentation}
6
8
  */
7
9
  /** Mathematical constant π = 3.141592... */
8
10
  declare const pi: number;
package/dist/math.d.ts CHANGED
@@ -1 +1 @@
1
- export { G as acos, N as acosh, F as asin, M as asinh, H as atan, I as atan2, O as atanh, A as cbrt, c as ceil, d as copysign, D as cos, K as cosh, P as degrees, e, r as exp, s as expm1, b as fabs, R as factorial, f as floor, S as fsum, h as gcd, B as hypot, i as inf, q as isclose, j as isfinite, k as isinf, o as isnan, l as lcm, u as log, x as log10, v as log1p, w as log2, g as modf, n as nan, p as pi, y as pow, T as prod, Q as radians, C as sin, J as sinh, z as sqrt, E as tan, L as tanh, t as tau, a as trunc } from './math-BrT4Aw3E.js';
1
+ export { G as acos, N as acosh, F as asin, M as asinh, H as atan, I as atan2, O as atanh, A as cbrt, c as ceil, d as copysign, D as cos, K as cosh, P as degrees, e, r as exp, s as expm1, b as fabs, R as factorial, f as floor, S as fsum, h as gcd, B as hypot, i as inf, q as isclose, j as isfinite, k as isinf, o as isnan, l as lcm, u as log, x as log10, v as log1p, w as log2, g as modf, n as nan, p as pi, y as pow, T as prod, Q as radians, C as sin, J as sinh, z as sqrt, E as tan, L as tanh, t as tau, a as trunc } from './math-DwEGjjQ-.js';
package/dist/math.js CHANGED
@@ -44,7 +44,7 @@ import {
44
44
  tanh,
45
45
  tau,
46
46
  trunc
47
- } from "./chunk-IVYYI2VR.js";
47
+ } from "./chunk-6POEDI34.js";
48
48
  import "./chunk-PZ5AY32C.js";
49
49
  export {
50
50
  acos,