@tracecode/harness 0.5.0 → 0.6.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 (60) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/LICENSE +67 -80
  3. package/README.md +31 -4
  4. package/dist/browser.cjs +974 -19
  5. package/dist/browser.cjs.map +1 -1
  6. package/dist/browser.d.cts +3 -2
  7. package/dist/browser.d.ts +3 -2
  8. package/dist/browser.js +974 -19
  9. package/dist/browser.js.map +1 -1
  10. package/dist/cli.cjs +24 -0
  11. package/dist/cli.cjs.map +1 -1
  12. package/dist/cli.js +24 -0
  13. package/dist/cli.js.map +1 -1
  14. package/dist/core.cjs +611 -4
  15. package/dist/core.cjs.map +1 -1
  16. package/dist/core.d.cts +20 -6
  17. package/dist/core.d.ts +20 -6
  18. package/dist/core.js +605 -4
  19. package/dist/core.js.map +1 -1
  20. package/dist/index.cjs +1055 -52
  21. package/dist/index.cjs.map +1 -1
  22. package/dist/index.d.cts +3 -3
  23. package/dist/index.d.ts +3 -3
  24. package/dist/index.js +1049 -52
  25. package/dist/index.js.map +1 -1
  26. package/dist/internal/browser.cjs +211 -0
  27. package/dist/internal/browser.cjs.map +1 -1
  28. package/dist/internal/browser.d.cts +62 -6
  29. package/dist/internal/browser.d.ts +62 -6
  30. package/dist/internal/browser.js +210 -0
  31. package/dist/internal/browser.js.map +1 -1
  32. package/dist/javascript.cjs +37 -19
  33. package/dist/javascript.cjs.map +1 -1
  34. package/dist/javascript.d.cts +2 -2
  35. package/dist/javascript.d.ts +2 -2
  36. package/dist/javascript.js +37 -19
  37. package/dist/javascript.js.map +1 -1
  38. package/dist/python.cjs +14 -14
  39. package/dist/python.cjs.map +1 -1
  40. package/dist/python.d.cts +8 -8
  41. package/dist/python.d.ts +8 -8
  42. package/dist/python.js +14 -14
  43. package/dist/python.js.map +1 -1
  44. package/dist/{runtime-types-DtaaAhHL.d.ts → runtime-types-89nchXlY.d.cts} +8 -4
  45. package/dist/{runtime-types--lBQ6rYu.d.cts → runtime-types-CCQ-ZLc9.d.ts} +8 -4
  46. package/dist/{types-DwIYM3Ku.d.cts → types-zyvpJKCi.d.cts} +1 -0
  47. package/dist/{types-DwIYM3Ku.d.ts → types-zyvpJKCi.d.ts} +1 -0
  48. package/package.json +12 -6
  49. package/workers/java/.build/classes/harness/browser/JavaRewriteLibrary.class +0 -0
  50. package/workers/java/java-worker.js +712 -0
  51. package/workers/java/src/harness/browser/JavaRewriteLibrary.java +54 -0
  52. package/workers/javascript/javascript-worker.js +343 -63
  53. package/workers/python/generated-python-harness-snippets.js +3 -3
  54. package/workers/python/pyodide-worker.js +419 -68
  55. package/workers/python/runtime-core.js +52 -3
  56. package/workers/vendor/java-browser-spike-helper.jar +0 -0
  57. package/workers/vendor/java-practice-rewriter.jar +0 -0
  58. package/workers/vendor/java-rewrite-bridge.jar +0 -0
  59. package/workers/vendor/javaparser-core-3.25.10.jar +0 -0
  60. package/workers/vendor/jdk.compiler-17.jar +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../packages/harness-javascript/src/typescript-runtime-declarations.ts","../packages/harness-javascript/src/javascript-executor.ts"],"sourcesContent":["export const TYPESCRIPT_RUNTIME_DECLARATIONS = `\ndeclare class ListNode {\n val: any;\n next: ListNode | SerializedListNode | SerializedRef | null;\n prev?: ListNode | SerializedListNode | SerializedRef | null;\n constructor(val?: any, next?: ListNode | null);\n}\n\ndeclare class TreeNode {\n val: any;\n left: TreeNode | SerializedTreeNode | SerializedRef | null;\n right: TreeNode | SerializedTreeNode | SerializedRef | null;\n constructor(val?: any, left?: TreeNode | null, right?: TreeNode | null);\n}\n\ntype SerializedRef = { __ref__: string };\n\ntype SerializedListNode = {\n __id__?: string;\n __type__?: 'ListNode';\n val?: any;\n next?: SerializedListNode | SerializedRef | ListNode | null;\n prev?: SerializedListNode | SerializedRef | ListNode | null;\n};\n\ntype SerializedTreeNode = {\n __id__?: string;\n __type__?: 'TreeNode';\n val?: any;\n left?: SerializedTreeNode | SerializedRef | TreeNode | null;\n right?: SerializedTreeNode | SerializedRef | TreeNode | null;\n};\n`;\n\nexport function withTypeScriptRuntimeDeclarations(sourceCode: string): string {\n return `${sourceCode}\\n\\n${TYPESCRIPT_RUNTIME_DECLARATIONS}\\n`;\n}\n\n","import type { RuntimeExecutionStyle } from '../../harness-core/src/runtime-types';\nimport type { CodeExecutionResult, ExecutionResult } from '../../harness-core/src/types';\nimport { withTypeScriptRuntimeDeclarations } from './typescript-runtime-declarations';\n\ntype TypeScriptModule = typeof import('typescript');\n\nlet typeScriptModulePromise: Promise<TypeScriptModule> | null = null;\n\ntype DynamicRunner = (...args: unknown[]) => unknown;\n\nasync function getTypeScriptModule(): Promise<TypeScriptModule> {\n if (!typeScriptModulePromise) {\n const specifier = 'typescript';\n typeScriptModulePromise = import(/* webpackIgnore: true */ specifier);\n }\n return typeScriptModulePromise;\n}\n\nfunction performanceNow(): number {\n if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\n return performance.now();\n }\n return Date.now();\n}\n\nfunction formatConsoleArg(value: unknown): string {\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean' || value === null || value === undefined) {\n return String(value);\n }\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nfunction createConsoleProxy(output: string[]): Console {\n const capture = (...args: unknown[]) => {\n output.push(args.map(formatConsoleArg).join(' '));\n };\n\n return {\n ...console,\n log: capture,\n info: capture,\n warn: capture,\n error: capture,\n debug: capture,\n };\n}\n\nfunction isLikelyTreeNodeValue(value: unknown): value is Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n const hasValue = 'val' in value || 'value' in value;\n const hasTreeLinks = 'left' in value || 'right' in value;\n return hasValue && hasTreeLinks;\n}\n\nfunction isLikelyListNodeValue(value: unknown): value is Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n const hasValue = 'val' in value || 'value' in value;\n const hasTreeLinks = 'left' in value || 'right' in value;\n const hasListLinks = 'next' in value || 'prev' in value;\n return hasValue && hasListLinks && !hasTreeLinks;\n}\n\nfunction getCustomClassName(value: unknown): string | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return null;\n if (value instanceof Map || value instanceof Set) return null;\n if (isLikelyTreeNodeValue(value) || isLikelyListNodeValue(value)) return null;\n const ctor = (value as { constructor?: { name?: unknown } }).constructor;\n const name = typeof ctor?.name === 'string' ? ctor.name : '';\n if (!name || name === 'Object' || name === 'Array' || name === 'Map' || name === 'Set') {\n return null;\n }\n return name;\n}\n\nfunction serializeValue(\n value: unknown,\n depth = 0,\n seen = new WeakSet<object>(),\n nodeRefState: { ids: Map<object, string>; nextId: number } = { ids: new Map<object, string>(), nextId: 1 }\n): unknown {\n if (depth > 48) return '<max depth>';\n if (value === null || value === undefined) return value;\n\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'bigint') {\n return Number.isSafeInteger(Number(value)) ? Number(value) : String(value);\n }\n if (typeof value === 'function') {\n return '<function>';\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => serializeValue(item, depth + 1, seen));\n }\n\n if (value instanceof Set) {\n return {\n __type__: 'set',\n values: [...value].map((item) => serializeValue(item, depth + 1, seen, nodeRefState)),\n };\n }\n\n if (value instanceof Map) {\n return {\n __type__: 'map',\n entries: [...value.entries()].map(([k, v]) => [\n serializeValue(k, depth + 1, seen, nodeRefState),\n serializeValue(v, depth + 1, seen, nodeRefState),\n ]),\n };\n }\n\n if (typeof value === 'object') {\n if (isLikelyTreeNodeValue(value) || isLikelyListNodeValue(value)) {\n const objectValue = value as object;\n const nodeValue = value as Record<string, unknown>;\n const existingId = nodeRefState.ids.get(objectValue);\n if (existingId) {\n return { __ref__: existingId };\n }\n\n const isTree = isLikelyTreeNodeValue(value);\n const nodePrefix = isTree ? 'tree' : 'list';\n const nodeId = `${nodePrefix}-${nodeRefState.nextId++}`;\n nodeRefState.ids.set(objectValue, nodeId);\n\n if (isTree) {\n return {\n __type__: 'TreeNode',\n __id__: nodeId,\n val: serializeValue(nodeValue.val ?? nodeValue.value ?? null, depth + 1, seen, nodeRefState),\n left: serializeValue(nodeValue.left ?? null, depth + 1, seen, nodeRefState),\n right: serializeValue(nodeValue.right ?? null, depth + 1, seen, nodeRefState),\n };\n }\n\n return {\n __type__: 'ListNode',\n __id__: nodeId,\n val: serializeValue(nodeValue.val ?? nodeValue.value ?? null, depth + 1, seen, nodeRefState),\n next: serializeValue(nodeValue.next ?? null, depth + 1, seen, nodeRefState),\n ...('prev' in nodeValue\n ? { prev: serializeValue(nodeValue.prev ?? null, depth + 1, seen, nodeRefState) }\n : {}),\n };\n }\n\n const customClassName = getCustomClassName(value);\n if (customClassName) {\n const objectValue = value as object;\n const existingId = nodeRefState.ids.get(objectValue);\n if (existingId) {\n return { __ref__: existingId };\n }\n\n const objectId = `object-${nodeRefState.nextId++}`;\n nodeRefState.ids.set(objectValue, objectId);\n\n if (seen.has(objectValue)) return { __ref__: objectId };\n seen.add(objectValue);\n const out: Record<string, unknown> = {\n __type__: 'object',\n __class__: customClassName,\n __id__: objectId,\n };\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n out[k] = serializeValue(v, depth + 1, seen, nodeRefState);\n }\n seen.delete(objectValue);\n return out;\n }\n\n if (seen.has(value as object)) return '<cycle>';\n seen.add(value as object);\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n out[k] = serializeValue(v, depth + 1, seen, nodeRefState);\n }\n seen.delete(value as object);\n return out;\n }\n\n return String(value);\n}\n\nfunction extractUserErrorLine(error: unknown): number | undefined {\n if (typeof error === 'object' && error && '__tracecodeLine' in error) {\n const line = Number((error as { __tracecodeLine?: unknown }).__tracecodeLine);\n if (Number.isFinite(line)) return line;\n }\n\n const stack =\n typeof error === 'object' && error && 'stack' in error\n ? String((error as { stack?: unknown }).stack ?? '')\n : '';\n if (!stack) return undefined;\n const match = stack.match(/<anonymous>:(\\d+):\\d+/);\n if (!match) return undefined;\n const line = Number.parseInt(match[1], 10);\n return Number.isFinite(line) ? line : undefined;\n}\n\nfunction isPlainObjectRecord(value: unknown): value is Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n return Object.prototype.toString.call(value) === '[object Object]';\n}\n\nfunction collectReferenceTargets(\n value: unknown,\n byId: Map<string, Record<string, unknown>>,\n seen: WeakSet<object>\n): void {\n if (value === null || value === undefined) return;\n if (typeof value !== 'object') return;\n if (seen.has(value)) return;\n seen.add(value);\n\n if (Array.isArray(value)) {\n for (const item of value) {\n collectReferenceTargets(item, byId, seen);\n }\n return;\n }\n\n if (!isPlainObjectRecord(value)) return;\n if (typeof value.__id__ === 'string' && value.__id__.length > 0 && !byId.has(value.__id__)) {\n byId.set(value.__id__, value);\n }\n\n for (const nested of Object.values(value)) {\n collectReferenceTargets(nested, byId, seen);\n }\n}\n\nfunction resolveReferenceGraph(\n value: unknown,\n byId: Map<string, Record<string, unknown>>,\n resolved: WeakMap<object, unknown>\n): unknown {\n if (value === null || value === undefined) return value;\n if (typeof value !== 'object') return value;\n\n if (resolved.has(value)) {\n return resolved.get(value);\n }\n\n if (Array.isArray(value)) {\n const out: unknown[] = [];\n resolved.set(value, out);\n for (const item of value) {\n out.push(resolveReferenceGraph(item, byId, resolved));\n }\n return out;\n }\n\n if (!isPlainObjectRecord(value)) {\n return value;\n }\n\n const keys = Object.keys(value);\n if (keys.length === 1 && typeof value.__ref__ === 'string') {\n const target = byId.get(value.__ref__);\n if (!target) return null;\n return resolveReferenceGraph(target, byId, resolved);\n }\n\n const out: Record<string, unknown> = {};\n resolved.set(value, out);\n for (const [key, nested] of Object.entries(value)) {\n out[key] = resolveReferenceGraph(nested, byId, resolved);\n }\n return out;\n}\n\nfunction normalizeInputs(inputs: Record<string, unknown>): Record<string, unknown> {\n if (!inputs || typeof inputs !== 'object' || Array.isArray(inputs)) return {};\n const byId = new Map<string, Record<string, unknown>>();\n collectReferenceTargets(inputs, byId, new WeakSet<object>());\n if (byId.size === 0) {\n return inputs;\n }\n const hydrated = resolveReferenceGraph(inputs, byId, new WeakMap<object, unknown>());\n if (!hydrated || typeof hydrated !== 'object' || Array.isArray(hydrated)) {\n return inputs;\n }\n return hydrated as Record<string, unknown>;\n}\n\ntype InputMaterializerKind = 'tree' | 'list';\n\nfunction buildTreeNodeFromLevelOrder(values: unknown[]): Record<string, unknown> | null {\n if (!Array.isArray(values) || values.length === 0) return null;\n const firstValue = values[0];\n if (firstValue === null || firstValue === undefined) return null;\n const root: Record<string, unknown> = {\n val: firstValue,\n value: firstValue,\n left: null,\n right: null,\n };\n const queue: Record<string, unknown>[] = [root];\n let index = 1;\n\n while (queue.length > 0 && index < values.length) {\n const node = queue.shift();\n if (!node) break;\n\n const leftValue = values[index++];\n if (leftValue !== null && leftValue !== undefined) {\n const leftNode: Record<string, unknown> = {\n val: leftValue,\n value: leftValue,\n left: null,\n right: null,\n };\n node.left = leftNode;\n queue.push(leftNode);\n }\n\n if (index >= values.length) break;\n\n const rightValue = values[index++];\n if (rightValue !== null && rightValue !== undefined) {\n const rightNode: Record<string, unknown> = {\n val: rightValue,\n value: rightValue,\n left: null,\n right: null,\n };\n node.right = rightNode;\n queue.push(rightNode);\n }\n }\n return root;\n}\n\nfunction materializeTreeInput(value: unknown): unknown {\n if (value === null || value === undefined) return value;\n if (Array.isArray(value)) {\n return buildTreeNodeFromLevelOrder(value);\n }\n if (!isPlainObjectRecord(value)) {\n return value;\n }\n const record = value as Record<string, unknown>;\n if (isLikelyTreeNodeValue(record)) {\n return {\n val: record.val ?? record.value ?? null,\n value: record.val ?? record.value ?? null,\n left: materializeTreeInput(record.left ?? null),\n right: materializeTreeInput(record.right ?? null),\n };\n }\n const taggedRecord = value as Record<string, unknown> & { __type__?: unknown };\n if (taggedRecord.__type__ === 'TreeNode') {\n return {\n val: taggedRecord.val ?? taggedRecord.value ?? null,\n value: taggedRecord.val ?? taggedRecord.value ?? null,\n left: materializeTreeInput(taggedRecord.left ?? null),\n right: materializeTreeInput(taggedRecord.right ?? null),\n };\n }\n return value;\n}\n\nfunction materializeListInput(\n value: unknown,\n refs: Map<string, Record<string, unknown>> = new Map(),\n materialized: WeakMap<object, Record<string, unknown>> = new WeakMap()\n): unknown {\n if (value === null || value === undefined) return value;\n if (Array.isArray(value)) {\n if (value.length === 0) return null;\n const head: Record<string, unknown> = {\n val: value[0],\n value: value[0],\n next: null,\n };\n let current: Record<string, unknown> = head;\n for (let i = 1; i < value.length; i++) {\n const nextNode: Record<string, unknown> = { val: value[i], value: value[i], next: null };\n current.next = nextNode;\n current = nextNode;\n }\n return head;\n }\n if (!isPlainObjectRecord(value)) {\n return value;\n }\n const record = value as Record<string, unknown>;\n if (typeof record.__ref__ === 'string') {\n return refs.get(record.__ref__) ?? null;\n }\n const taggedRecord = value as Record<string, unknown> & { __type__?: unknown };\n if (isLikelyListNodeValue(record) || taggedRecord.__type__ === 'ListNode') {\n const existingMaterialized = materialized.get(record as object);\n if (existingMaterialized) {\n return existingMaterialized;\n }\n const node: Record<string, unknown> = {\n val: taggedRecord.val ?? taggedRecord.value ?? null,\n value: taggedRecord.val ?? taggedRecord.value ?? null,\n next: null,\n };\n materialized.set(record as object, node);\n if (typeof taggedRecord.__id__ === 'string' && taggedRecord.__id__.length > 0) {\n refs.set(taggedRecord.__id__, node);\n }\n node.next = materializeListInput(taggedRecord.next ?? null, refs, materialized);\n return node;\n }\n return value;\n}\n\nfunction detectMaterializerKind(\n ts: TypeScriptModule,\n typeNode: import('typescript').TypeNode | undefined\n): InputMaterializerKind | null {\n if (!typeNode) return null;\n if (ts.isParenthesizedTypeNode(typeNode)) {\n return detectMaterializerKind(ts, typeNode.type);\n }\n if (ts.isUnionTypeNode(typeNode)) {\n for (const child of typeNode.types) {\n const resolved = detectMaterializerKind(ts, child);\n if (resolved) return resolved;\n }\n return null;\n }\n if (ts.isTypeReferenceNode(typeNode)) {\n const typeNameText = typeNode.typeName.getText();\n if (typeNameText === 'TreeNode') return 'tree';\n if (typeNameText === 'ListNode') return 'list';\n return null;\n }\n return null;\n}\n\nfunction collectInputMaterializers(\n ts: TypeScriptModule,\n functionLikeNode: FunctionLikeNode\n): Record<string, InputMaterializerKind> {\n const out: Record<string, InputMaterializerKind> = {};\n for (const parameter of functionLikeNode.parameters ?? []) {\n if (!ts.isIdentifier(parameter.name)) continue;\n if (parameter.name.text === 'this') continue;\n const kind = detectMaterializerKind(ts, parameter.type);\n if (kind) {\n out[parameter.name.text] = kind;\n }\n }\n return out;\n}\n\nasync function resolveInputMaterializers(\n code: string,\n functionName: string,\n executionStyle: RuntimeExecutionStyle,\n language: 'javascript' | 'typescript'\n): Promise<Record<string, InputMaterializerKind>> {\n if (!functionName || executionStyle === 'ops-class' || language !== 'typescript') {\n return {};\n }\n\n try {\n const ts = await getTypeScriptModule();\n const sourceFile = ts.createSourceFile(\n 'runtime-input.ts',\n code,\n ts.ScriptTarget.ES2020,\n true,\n ts.ScriptKind.TS\n );\n const target = findFunctionLikeNode(ts, sourceFile, functionName, executionStyle);\n if (!target) return {};\n return collectInputMaterializers(ts, target);\n } catch {\n return {};\n }\n}\n\nfunction applyInputMaterializers(\n inputs: Record<string, unknown>,\n materializers: Record<string, InputMaterializerKind>\n): Record<string, unknown> {\n if (Object.keys(materializers).length === 0) return inputs;\n const next: Record<string, unknown> = { ...inputs };\n for (const [name, kind] of Object.entries(materializers)) {\n if (!Object.prototype.hasOwnProperty.call(next, name)) continue;\n next[name] = kind === 'tree' ? materializeTreeInput(next[name]) : materializeListInput(next[name]);\n }\n return next;\n}\n\ntype FunctionLikeNode =\n | import('typescript').FunctionDeclaration\n | import('typescript').FunctionExpression\n | import('typescript').ArrowFunction\n | import('typescript').MethodDeclaration;\n\nfunction collectSimpleParameterNames(\n ts: TypeScriptModule,\n functionLikeNode: FunctionLikeNode\n): string[] | null {\n const names: string[] = [];\n\n for (const parameter of functionLikeNode.parameters ?? []) {\n if (!ts.isIdentifier(parameter.name)) {\n return null;\n }\n if (parameter.name.text === 'this') {\n continue;\n }\n names.push(parameter.name.text);\n }\n\n return names;\n}\n\nfunction getPropertyNameText(ts: TypeScriptModule, name: import('typescript').PropertyName | undefined): string | null {\n if (!name) return null;\n if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNumericLiteral(name)) {\n return name.text;\n }\n return null;\n}\n\nfunction findFunctionLikeNode(\n ts: TypeScriptModule,\n sourceFile: import('typescript').SourceFile,\n functionName: string,\n executionStyle: RuntimeExecutionStyle\n): FunctionLikeNode | null {\n let found: FunctionLikeNode | null = null;\n\n const visit = (node: import('typescript').Node): void => {\n if (found) return;\n\n if (executionStyle === 'solution-method' && ts.isClassDeclaration(node) && node.name?.text === 'Solution') {\n for (const member of node.members) {\n if (found) break;\n\n if (ts.isMethodDeclaration(member) && getPropertyNameText(ts, member.name) === functionName) {\n found = member;\n break;\n }\n\n if (\n ts.isPropertyDeclaration(member) &&\n getPropertyNameText(ts, member.name) === functionName &&\n member.initializer &&\n (ts.isArrowFunction(member.initializer) || ts.isFunctionExpression(member.initializer))\n ) {\n found = member.initializer;\n break;\n }\n }\n return;\n }\n\n if (executionStyle === 'function') {\n if (ts.isFunctionDeclaration(node) && node.name?.text === functionName) {\n found = node;\n return;\n }\n\n if (\n ts.isVariableDeclaration(node) &&\n ts.isIdentifier(node.name) &&\n node.name.text === functionName &&\n node.initializer &&\n (ts.isArrowFunction(node.initializer) || ts.isFunctionExpression(node.initializer))\n ) {\n found = node.initializer;\n return;\n }\n }\n\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n return found;\n}\n\nasync function resolveOrderedInputKeys(\n code: string,\n functionName: string,\n inputs: Record<string, unknown>,\n executionStyle: RuntimeExecutionStyle,\n language: 'javascript' | 'typescript' = 'javascript'\n): Promise<string[]> {\n const fallbackKeys = Object.keys(inputs);\n if (!functionName || executionStyle === 'ops-class' || fallbackKeys.length <= 1) {\n return fallbackKeys;\n }\n\n try {\n const ts = await getTypeScriptModule();\n const sourceFile = ts.createSourceFile(\n `runtime-input.${language === 'typescript' ? 'ts' : 'js'}`,\n code,\n ts.ScriptTarget.ES2020,\n true,\n language === 'typescript' ? ts.ScriptKind.TS : ts.ScriptKind.JS\n );\n const target = findFunctionLikeNode(ts, sourceFile, functionName, executionStyle);\n if (!target) {\n return fallbackKeys;\n }\n\n const parameterNames = collectSimpleParameterNames(ts, target);\n if (!parameterNames || parameterNames.length === 0) {\n return fallbackKeys;\n }\n\n const matchedKeys = parameterNames.filter((name) => Object.prototype.hasOwnProperty.call(inputs, name));\n if (matchedKeys.length === 0) {\n return fallbackKeys;\n }\n\n const extras = fallbackKeys.filter((key) => !matchedKeys.includes(key));\n return [...matchedKeys, ...extras];\n } catch {\n return fallbackKeys;\n }\n}\n\nfunction buildRunner(code: string, executionStyle: RuntimeExecutionStyle, argNames: string[]): DynamicRunner {\n if (executionStyle === 'function') {\n return new Function(\n 'console',\n '__functionName',\n ...argNames,\n `\"use strict\";\n${code}\nlet __target;\ntry {\n __target = eval(__functionName);\n} catch (_err) {\n __target = undefined;\n}\nif (typeof __target !== 'function') {\n throw new Error('Function \"' + __functionName + '\" not found');\n}\nreturn __target(${argNames.join(', ')});`\n ) as DynamicRunner;\n }\n\n if (executionStyle === 'solution-method') {\n return new Function(\n 'console',\n '__functionName',\n ...argNames,\n `\"use strict\";\n${code}\nif (typeof Solution !== 'function') {\n throw new Error('Class \"Solution\" not found');\n}\nconst __solver = new Solution();\nconst __method = __solver[__functionName];\nif (typeof __method !== 'function') {\n throw new Error('Method \"Solution.' + __functionName + '\" not found');\n}\nreturn __method.call(__solver, ${argNames.join(', ')});`\n ) as DynamicRunner;\n }\n\n if (executionStyle === 'ops-class') {\n return new Function(\n 'console',\n '__className',\n '__operations',\n '__arguments',\n `\"use strict\";\n${code}\nif (!Array.isArray(__operations) || !Array.isArray(__arguments)) {\n throw new Error('ops-class execution requires inputs.operations and inputs.arguments (or ops/args)');\n}\nif (__operations.length !== __arguments.length) {\n throw new Error('operations and arguments must have the same length');\n}\nlet __targetClass;\ntry {\n __targetClass = eval(__className);\n} catch (_err) {\n __targetClass = undefined;\n}\nif (typeof __targetClass !== 'function') {\n throw new Error('Class \"' + __className + '\" not found');\n}\nlet __instance = null;\nconst __out = [];\nfor (let __i = 0; __i < __operations.length; __i++) {\n const __op = __operations[__i];\n let __callArgs = __arguments[__i];\n if (__callArgs === null || __callArgs === undefined) {\n __callArgs = [];\n }\n if (!Array.isArray(__callArgs)) {\n __callArgs = [__callArgs];\n }\n if (__i === 0) {\n __instance = new __targetClass(...__callArgs);\n __out.push(null);\n continue;\n }\n if (!__instance || typeof __instance[__op] !== 'function') {\n throw new Error('Required method \"' + __op + '\" is not implemented on ' + (__className || 'target class'));\n }\n __out.push(__instance[__op](...__callArgs));\n}\nreturn __out;`\n ) as DynamicRunner;\n }\n\n throw new Error(`Execution style \"${executionStyle}\" is not supported for JavaScript runtime yet.`);\n}\n\nfunction getOpsClassInputs(inputs: Record<string, unknown>): {\n operations: unknown[] | null;\n argumentsList: unknown[] | null;\n} {\n const operations = Array.isArray(inputs.operations)\n ? inputs.operations\n : (Array.isArray(inputs.ops) ? inputs.ops : null);\n const argumentsList = Array.isArray(inputs.arguments)\n ? inputs.arguments\n : (Array.isArray(inputs.args) ? inputs.args : null);\n return { operations, argumentsList };\n}\n\nasync function transpileTypeScript(code: string): Promise<string> {\n const ts = await getTypeScriptModule();\n const transpileInput = withTypeScriptRuntimeDeclarations(code);\n const transpiled = ts.transpileModule(transpileInput, {\n compilerOptions: {\n target: ts.ScriptTarget.ES2020,\n module: ts.ModuleKind.None,\n strict: false,\n esModuleInterop: true,\n },\n reportDiagnostics: true,\n fileName: 'solution.ts',\n });\n\n const diagnostics = Array.isArray(transpiled.diagnostics) ? transpiled.diagnostics : [];\n const errors = diagnostics.filter((diag) => diag.category === ts.DiagnosticCategory.Error);\n if (errors.length > 0) {\n const first = errors[0];\n const messageText = ts.flattenDiagnosticMessageText(first.messageText, '\\n');\n let lineNumber: number | undefined;\n if (first.file && typeof first.start === 'number') {\n const position = first.file.getLineAndCharacterOfPosition(first.start);\n lineNumber = position.line + 1;\n }\n const error = new Error(\n lineNumber\n ? `TypeScript transpilation failed (line ${lineNumber}): ${messageText}`\n : `TypeScript transpilation failed: ${messageText}`\n );\n if (lineNumber) {\n (error as Error & { __tracecodeLine?: number }).__tracecodeLine = lineNumber;\n }\n throw error;\n }\n\n return transpiled.outputText;\n}\n\nexport async function executeJavaScriptCode(\n code: string,\n functionName: string,\n inputs: Record<string, unknown>,\n executionStyle: RuntimeExecutionStyle = 'function',\n language: 'javascript' | 'typescript' = 'javascript'\n): Promise<CodeExecutionResult> {\n const consoleOutput: string[] = [];\n const consoleProxy = createConsoleProxy(consoleOutput);\n const normalizedInputs = normalizeInputs(inputs);\n const materializers = await resolveInputMaterializers(code, functionName, executionStyle, language);\n const materializedInputs = applyInputMaterializers(normalizedInputs, materializers);\n\n try {\n let output: unknown;\n\n if (executionStyle === 'ops-class') {\n const { operations, argumentsList } = getOpsClassInputs(materializedInputs);\n const runner = buildRunner(code, executionStyle, []);\n output = await Promise.resolve(runner(consoleProxy, functionName, operations, argumentsList));\n } else {\n const inputKeys = await resolveOrderedInputKeys(code, functionName, materializedInputs, executionStyle, language);\n const argNames = inputKeys.map((_, index) => `__arg${index}`);\n const argValues = inputKeys.map((key) => materializedInputs[key]);\n const runner = buildRunner(code, executionStyle, argNames);\n output = await Promise.resolve(runner(consoleProxy, functionName, ...argValues));\n }\n\n return {\n success: true,\n output: serializeValue(output),\n consoleOutput,\n };\n } catch (error) {\n return {\n success: false,\n output: null,\n error: error instanceof Error ? error.message : String(error),\n errorLine: extractUserErrorLine(error),\n consoleOutput,\n };\n }\n}\n\nexport async function executeJavaScriptWithTracing(\n code: string,\n functionName: string | null,\n inputs: Record<string, unknown>,\n executionStyle: RuntimeExecutionStyle = 'function',\n language: 'javascript' | 'typescript' = 'javascript'\n): Promise<ExecutionResult> {\n const startedAt = performanceNow();\n const codeResult = await executeJavaScriptCode(code, functionName ?? '', inputs, executionStyle, language);\n const executionTimeMs = performanceNow() - startedAt;\n\n if (!codeResult.success) {\n return {\n success: false,\n error: codeResult.error,\n errorLine: codeResult.errorLine,\n trace: [],\n executionTimeMs,\n consoleOutput: codeResult.consoleOutput ?? [],\n lineEventCount: 0,\n traceStepCount: 0,\n };\n }\n\n return {\n success: true,\n output: codeResult.output,\n trace: [],\n executionTimeMs,\n consoleOutput: codeResult.consoleOutput ?? [],\n lineEventCount: 0,\n traceStepCount: 0,\n };\n}\n\nexport async function executeTypeScriptCode(\n code: string,\n functionName: string,\n inputs: Record<string, unknown>,\n executionStyle: RuntimeExecutionStyle = 'function'\n): Promise<CodeExecutionResult> {\n const normalizedInputs = normalizeInputs(inputs);\n const materializers = await resolveInputMaterializers(code, functionName, executionStyle, 'typescript');\n const materializedInputs = applyInputMaterializers(normalizedInputs, materializers);\n const transpiledCode = await transpileTypeScript(code);\n return executeJavaScriptCode(transpiledCode, functionName, materializedInputs, executionStyle, 'typescript');\n}\n"],"mappings":"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","names":["out","line"]}
1
+ {"version":3,"sources":["../packages/harness-javascript/src/typescript-runtime-declarations.ts","../packages/harness-javascript/src/javascript-executor.ts"],"sourcesContent":["export const TYPESCRIPT_RUNTIME_DECLARATIONS = `\ndeclare class ListNode {\n val: any;\n next: ListNode | SerializedListNode | SerializedRef | null;\n prev?: ListNode | SerializedListNode | SerializedRef | null;\n constructor(val?: any, next?: ListNode | null);\n}\n\ndeclare class TreeNode {\n val: any;\n left: TreeNode | SerializedTreeNode | SerializedRef | null;\n right: TreeNode | SerializedTreeNode | SerializedRef | null;\n constructor(val?: any, left?: TreeNode | null, right?: TreeNode | null);\n}\n\ntype SerializedRef = { __ref__: string };\n\ntype SerializedListNode = {\n __id__?: string;\n __type__?: 'ListNode';\n val?: any;\n next?: SerializedListNode | SerializedRef | ListNode | null;\n prev?: SerializedListNode | SerializedRef | ListNode | null;\n};\n\ntype SerializedTreeNode = {\n __id__?: string;\n __type__?: 'TreeNode';\n val?: any;\n left?: SerializedTreeNode | SerializedRef | TreeNode | null;\n right?: SerializedTreeNode | SerializedRef | TreeNode | null;\n};\n`;\n\nexport function withTypeScriptRuntimeDeclarations(sourceCode: string): string {\n return `${sourceCode}\\n\\n${TYPESCRIPT_RUNTIME_DECLARATIONS}\\n`;\n}\n\n","import type { RuntimeExecutionStyle } from '../../harness-core/src/runtime-types';\nimport type { CodeExecutionResult, ExecutionResult } from '../../harness-core/src/types';\nimport { withTypeScriptRuntimeDeclarations } from './typescript-runtime-declarations';\n\ntype TypeScriptModule = typeof import('typescript');\n\nlet typeScriptModulePromise: Promise<TypeScriptModule> | null = null;\n\ntype DynamicRunner = (...args: unknown[]) => unknown;\n\nasync function getTypeScriptModule(): Promise<TypeScriptModule> {\n if (!typeScriptModulePromise) {\n const specifier = 'typescript';\n typeScriptModulePromise = import(/* webpackIgnore: true */ specifier);\n }\n return typeScriptModulePromise;\n}\n\nfunction performanceNow(): number {\n if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\n return performance.now();\n }\n return Date.now();\n}\n\nfunction formatConsoleArg(value: unknown): string {\n if (typeof value === 'string') return value;\n if (typeof value === 'number' || typeof value === 'boolean' || value === null || value === undefined) {\n return String(value);\n }\n try {\n return JSON.stringify(value);\n } catch {\n return String(value);\n }\n}\n\nfunction createConsoleProxy(output: string[]): Console {\n const capture = (...args: unknown[]) => {\n output.push(args.map(formatConsoleArg).join(' '));\n };\n\n return {\n ...console,\n log: capture,\n info: capture,\n warn: capture,\n error: capture,\n debug: capture,\n };\n}\n\nfunction isLikelyTreeNodeValue(value: unknown): value is Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n const record = value as Record<string, unknown>;\n if (record.__type__ === 'TreeNode') return true;\n const ctor = (value as { constructor?: { name?: unknown } }).constructor;\n return ctor?.name === 'TreeNode';\n}\n\nfunction isLikelyListNodeValue(value: unknown): value is Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n const record = value as Record<string, unknown>;\n if (record.__type__ === 'ListNode') return true;\n const ctor = (value as { constructor?: { name?: unknown } }).constructor;\n return ctor?.name === 'ListNode';\n}\n\nfunction getCustomClassName(value: unknown): string | null {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return null;\n if (value instanceof Map || value instanceof Set) return null;\n if (isLikelyTreeNodeValue(value) || isLikelyListNodeValue(value)) return null;\n const ctor = (value as { constructor?: { name?: unknown } }).constructor;\n const name = typeof ctor?.name === 'string' ? ctor.name : '';\n if (!name || name === 'Object' || name === 'Array' || name === 'Map' || name === 'Set') {\n return null;\n }\n return name;\n}\n\nfunction serializeValue(\n value: unknown,\n depth = 0,\n seen = new WeakSet<object>(),\n nodeRefState: { ids: Map<object, string>; nextId: number } = { ids: new Map<object, string>(), nextId: 1 }\n): unknown {\n if (depth > 48) return '<max depth>';\n if (value === null || value === undefined) return value;\n\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'bigint') {\n return Number.isSafeInteger(Number(value)) ? Number(value) : String(value);\n }\n if (typeof value === 'function') {\n return '<function>';\n }\n\n if (Array.isArray(value)) {\n return value.map((item) => serializeValue(item, depth + 1, seen));\n }\n\n if (value instanceof Set) {\n return {\n __type__: 'set',\n values: [...value].map((item) => serializeValue(item, depth + 1, seen, nodeRefState)),\n };\n }\n\n if (value instanceof Map) {\n return {\n __type__: 'map',\n entries: [...value.entries()].map(([k, v]) => [\n serializeValue(k, depth + 1, seen, nodeRefState),\n serializeValue(v, depth + 1, seen, nodeRefState),\n ]),\n };\n }\n\n if (typeof value === 'object') {\n if (isLikelyTreeNodeValue(value) || isLikelyListNodeValue(value)) {\n const objectValue = value as object;\n const nodeValue = value as Record<string, unknown>;\n const existingId = nodeRefState.ids.get(objectValue);\n if (existingId) {\n return { __ref__: existingId };\n }\n\n const isTree = isLikelyTreeNodeValue(value);\n const nodePrefix = isTree ? 'tree' : 'list';\n const nodeId = `${nodePrefix}-${nodeRefState.nextId++}`;\n nodeRefState.ids.set(objectValue, nodeId);\n\n const out: Record<string, unknown> = isTree\n ? {\n __type__: 'TreeNode',\n __id__: nodeId,\n val: serializeValue(nodeValue.val ?? nodeValue.value ?? null, depth + 1, seen, nodeRefState),\n left: serializeValue(nodeValue.left ?? null, depth + 1, seen, nodeRefState),\n right: serializeValue(nodeValue.right ?? null, depth + 1, seen, nodeRefState),\n }\n : {\n __type__: 'ListNode',\n __id__: nodeId,\n val: serializeValue(nodeValue.val ?? nodeValue.value ?? null, depth + 1, seen, nodeRefState),\n next: serializeValue(nodeValue.next ?? null, depth + 1, seen, nodeRefState),\n ...('prev' in nodeValue\n ? { prev: serializeValue(nodeValue.prev ?? null, depth + 1, seen, nodeRefState) }\n : {}),\n };\n\n const skipped = isTree\n ? new Set(['__id__', '__type__', '__class__', 'val', 'value', 'left', 'right'])\n : new Set(['__id__', '__type__', '__class__', 'val', 'value', 'next', 'prev']);\n for (const [k, v] of Object.entries(nodeValue)) {\n if (skipped.has(k)) continue;\n out[k] = serializeValue(v, depth + 1, seen, nodeRefState);\n }\n return out;\n }\n\n const customClassName = getCustomClassName(value);\n if (customClassName) {\n const objectValue = value as object;\n const existingId = nodeRefState.ids.get(objectValue);\n if (existingId) {\n return { __ref__: existingId };\n }\n\n const objectId = `object-${nodeRefState.nextId++}`;\n nodeRefState.ids.set(objectValue, objectId);\n\n if (seen.has(objectValue)) return { __ref__: objectId };\n seen.add(objectValue);\n const out: Record<string, unknown> = {\n __type__: 'object',\n __class__: customClassName,\n __id__: objectId,\n };\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n out[k] = serializeValue(v, depth + 1, seen, nodeRefState);\n }\n seen.delete(objectValue);\n return out;\n }\n\n if (seen.has(value as object)) return '<cycle>';\n seen.add(value as object);\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n out[k] = serializeValue(v, depth + 1, seen, nodeRefState);\n }\n seen.delete(value as object);\n return out;\n }\n\n return String(value);\n}\n\nfunction extractUserErrorLine(error: unknown): number | undefined {\n if (typeof error === 'object' && error && '__tracecodeLine' in error) {\n const line = Number((error as { __tracecodeLine?: unknown }).__tracecodeLine);\n if (Number.isFinite(line)) return line;\n }\n\n const stack =\n typeof error === 'object' && error && 'stack' in error\n ? String((error as { stack?: unknown }).stack ?? '')\n : '';\n if (!stack) return undefined;\n const match = stack.match(/<anonymous>:(\\d+):\\d+/);\n if (!match) return undefined;\n const line = Number.parseInt(match[1], 10);\n return Number.isFinite(line) ? line : undefined;\n}\n\nfunction isPlainObjectRecord(value: unknown): value is Record<string, unknown> {\n if (!value || typeof value !== 'object' || Array.isArray(value)) return false;\n return Object.prototype.toString.call(value) === '[object Object]';\n}\n\nfunction collectReferenceTargets(\n value: unknown,\n byId: Map<string, Record<string, unknown>>,\n seen: WeakSet<object>\n): void {\n if (value === null || value === undefined) return;\n if (typeof value !== 'object') return;\n if (seen.has(value)) return;\n seen.add(value);\n\n if (Array.isArray(value)) {\n for (const item of value) {\n collectReferenceTargets(item, byId, seen);\n }\n return;\n }\n\n if (!isPlainObjectRecord(value)) return;\n if (typeof value.__id__ === 'string' && value.__id__.length > 0 && !byId.has(value.__id__)) {\n byId.set(value.__id__, value);\n }\n\n for (const nested of Object.values(value)) {\n collectReferenceTargets(nested, byId, seen);\n }\n}\n\nfunction resolveReferenceGraph(\n value: unknown,\n byId: Map<string, Record<string, unknown>>,\n resolved: WeakMap<object, unknown>\n): unknown {\n if (value === null || value === undefined) return value;\n if (typeof value !== 'object') return value;\n\n if (resolved.has(value)) {\n return resolved.get(value);\n }\n\n if (Array.isArray(value)) {\n const out: unknown[] = [];\n resolved.set(value, out);\n for (const item of value) {\n out.push(resolveReferenceGraph(item, byId, resolved));\n }\n return out;\n }\n\n if (!isPlainObjectRecord(value)) {\n return value;\n }\n\n const keys = Object.keys(value);\n if (keys.length === 1 && typeof value.__ref__ === 'string') {\n const target = byId.get(value.__ref__);\n if (!target) return null;\n return resolveReferenceGraph(target, byId, resolved);\n }\n\n const out: Record<string, unknown> = {};\n resolved.set(value, out);\n for (const [key, nested] of Object.entries(value)) {\n out[key] = resolveReferenceGraph(nested, byId, resolved);\n }\n return out;\n}\n\nfunction normalizeInputs(inputs: Record<string, unknown>): Record<string, unknown> {\n if (!inputs || typeof inputs !== 'object' || Array.isArray(inputs)) return {};\n const byId = new Map<string, Record<string, unknown>>();\n collectReferenceTargets(inputs, byId, new WeakSet<object>());\n if (byId.size === 0) {\n return inputs;\n }\n const hydrated = resolveReferenceGraph(inputs, byId, new WeakMap<object, unknown>());\n if (!hydrated || typeof hydrated !== 'object' || Array.isArray(hydrated)) {\n return inputs;\n }\n return hydrated as Record<string, unknown>;\n}\n\ntype InputMaterializerKind = 'tree' | 'list';\n\nfunction buildTreeNodeFromLevelOrder(values: unknown[]): Record<string, unknown> | null {\n if (!Array.isArray(values) || values.length === 0) return null;\n const firstValue = values[0];\n if (firstValue === null || firstValue === undefined) return null;\n const root: Record<string, unknown> = {\n val: firstValue,\n value: firstValue,\n left: null,\n right: null,\n };\n const queue: Record<string, unknown>[] = [root];\n let index = 1;\n\n while (queue.length > 0 && index < values.length) {\n const node = queue.shift();\n if (!node) break;\n\n const leftValue = values[index++];\n if (leftValue !== null && leftValue !== undefined) {\n const leftNode: Record<string, unknown> = {\n val: leftValue,\n value: leftValue,\n left: null,\n right: null,\n };\n node.left = leftNode;\n queue.push(leftNode);\n }\n\n if (index >= values.length) break;\n\n const rightValue = values[index++];\n if (rightValue !== null && rightValue !== undefined) {\n const rightNode: Record<string, unknown> = {\n val: rightValue,\n value: rightValue,\n left: null,\n right: null,\n };\n node.right = rightNode;\n queue.push(rightNode);\n }\n }\n return root;\n}\n\nfunction materializeTreeInput(value: unknown): unknown {\n if (value === null || value === undefined) return value;\n if (Array.isArray(value)) {\n return buildTreeNodeFromLevelOrder(value);\n }\n if (!isPlainObjectRecord(value)) {\n return value;\n }\n const record = value as Record<string, unknown>;\n if (isLikelyTreeNodeValue(record)) {\n const node: Record<string, unknown> = {\n val: record.val ?? record.value ?? null,\n value: record.val ?? record.value ?? null,\n left: materializeTreeInput(record.left ?? null),\n right: materializeTreeInput(record.right ?? null),\n };\n for (const [key, nested] of Object.entries(record)) {\n if (key === '__id__' || key === '__type__' || key === 'val' || key === 'value' || key === 'left' || key === 'right') continue;\n node[key] = materializeTreeInput(nested);\n }\n return node;\n }\n const taggedRecord = value as Record<string, unknown> & { __type__?: unknown };\n if (taggedRecord.__type__ === 'TreeNode') {\n const node: Record<string, unknown> = {\n val: taggedRecord.val ?? taggedRecord.value ?? null,\n value: taggedRecord.val ?? taggedRecord.value ?? null,\n left: materializeTreeInput(taggedRecord.left ?? null),\n right: materializeTreeInput(taggedRecord.right ?? null),\n };\n for (const [key, nested] of Object.entries(taggedRecord)) {\n if (key === '__id__' || key === '__type__' || key === 'val' || key === 'value' || key === 'left' || key === 'right') continue;\n node[key] = materializeTreeInput(nested);\n }\n return node;\n }\n return value;\n}\n\nfunction materializeListInput(\n value: unknown,\n refs: Map<string, Record<string, unknown>> = new Map(),\n materialized: WeakMap<object, Record<string, unknown>> = new WeakMap()\n): unknown {\n if (value === null || value === undefined) return value;\n if (Array.isArray(value)) {\n if (value.length === 0) return null;\n const head: Record<string, unknown> = {\n val: value[0],\n value: value[0],\n next: null,\n };\n let current: Record<string, unknown> = head;\n for (let i = 1; i < value.length; i++) {\n const nextNode: Record<string, unknown> = { val: value[i], value: value[i], next: null };\n current.next = nextNode;\n current = nextNode;\n }\n return head;\n }\n if (!isPlainObjectRecord(value)) {\n return value;\n }\n const record = value as Record<string, unknown>;\n if (typeof record.__ref__ === 'string') {\n return refs.get(record.__ref__) ?? null;\n }\n const taggedRecord = value as Record<string, unknown> & { __type__?: unknown };\n if (isLikelyListNodeValue(record) || taggedRecord.__type__ === 'ListNode') {\n const existingMaterialized = materialized.get(record as object);\n if (existingMaterialized) {\n return existingMaterialized;\n }\n const node: Record<string, unknown> = {\n val: taggedRecord.val ?? taggedRecord.value ?? null,\n value: taggedRecord.val ?? taggedRecord.value ?? null,\n next: null,\n };\n materialized.set(record as object, node);\n if (typeof taggedRecord.__id__ === 'string' && taggedRecord.__id__.length > 0) {\n refs.set(taggedRecord.__id__, node);\n }\n node.next = materializeListInput(taggedRecord.next ?? null, refs, materialized);\n for (const [key, nested] of Object.entries(taggedRecord)) {\n if (key === '__id__' || key === '__type__' || key === '__class__' || key === 'val' || key === 'value' || key === 'next') continue;\n node[key] = materializeListInput(nested, refs, materialized);\n }\n return node;\n }\n return value;\n}\n\nfunction detectMaterializerKind(\n ts: TypeScriptModule,\n typeNode: import('typescript').TypeNode | undefined\n): InputMaterializerKind | null {\n if (!typeNode) return null;\n if (ts.isParenthesizedTypeNode(typeNode)) {\n return detectMaterializerKind(ts, typeNode.type);\n }\n if (ts.isUnionTypeNode(typeNode)) {\n for (const child of typeNode.types) {\n const resolved = detectMaterializerKind(ts, child);\n if (resolved) return resolved;\n }\n return null;\n }\n if (ts.isTypeReferenceNode(typeNode)) {\n const typeNameText = typeNode.typeName.getText();\n if (typeNameText === 'TreeNode') return 'tree';\n if (typeNameText === 'ListNode') return 'list';\n return null;\n }\n return null;\n}\n\nfunction collectInputMaterializers(\n ts: TypeScriptModule,\n functionLikeNode: FunctionLikeNode\n): Record<string, InputMaterializerKind> {\n const out: Record<string, InputMaterializerKind> = {};\n for (const parameter of functionLikeNode.parameters ?? []) {\n if (!ts.isIdentifier(parameter.name)) continue;\n if (parameter.name.text === 'this') continue;\n const kind = detectMaterializerKind(ts, parameter.type);\n if (kind) {\n out[parameter.name.text] = kind;\n }\n }\n return out;\n}\n\nasync function resolveInputMaterializers(\n code: string,\n functionName: string,\n executionStyle: RuntimeExecutionStyle,\n language: 'javascript' | 'typescript'\n): Promise<Record<string, InputMaterializerKind>> {\n if (!functionName || executionStyle === 'ops-class' || language !== 'typescript') {\n return {};\n }\n\n try {\n const ts = await getTypeScriptModule();\n const sourceFile = ts.createSourceFile(\n 'runtime-input.ts',\n code,\n ts.ScriptTarget.ES2020,\n true,\n ts.ScriptKind.TS\n );\n const target = findFunctionLikeNode(ts, sourceFile, functionName, executionStyle);\n if (!target) return {};\n return collectInputMaterializers(ts, target);\n } catch {\n return {};\n }\n}\n\nfunction applyInputMaterializers(\n inputs: Record<string, unknown>,\n materializers: Record<string, InputMaterializerKind>\n): Record<string, unknown> {\n if (Object.keys(materializers).length === 0) return inputs;\n const next: Record<string, unknown> = { ...inputs };\n for (const [name, kind] of Object.entries(materializers)) {\n if (!Object.prototype.hasOwnProperty.call(next, name)) continue;\n next[name] = kind === 'tree' ? materializeTreeInput(next[name]) : materializeListInput(next[name]);\n }\n return next;\n}\n\ntype FunctionLikeNode =\n | import('typescript').FunctionDeclaration\n | import('typescript').FunctionExpression\n | import('typescript').ArrowFunction\n | import('typescript').MethodDeclaration;\n\nfunction collectSimpleParameterNames(\n ts: TypeScriptModule,\n functionLikeNode: FunctionLikeNode\n): string[] | null {\n const names: string[] = [];\n\n for (const parameter of functionLikeNode.parameters ?? []) {\n if (!ts.isIdentifier(parameter.name)) {\n return null;\n }\n if (parameter.name.text === 'this') {\n continue;\n }\n names.push(parameter.name.text);\n }\n\n return names;\n}\n\nfunction getPropertyNameText(ts: TypeScriptModule, name: import('typescript').PropertyName | undefined): string | null {\n if (!name) return null;\n if (ts.isIdentifier(name) || ts.isStringLiteral(name) || ts.isNumericLiteral(name)) {\n return name.text;\n }\n return null;\n}\n\nfunction findFunctionLikeNode(\n ts: TypeScriptModule,\n sourceFile: import('typescript').SourceFile,\n functionName: string,\n executionStyle: RuntimeExecutionStyle\n): FunctionLikeNode | null {\n let found: FunctionLikeNode | null = null;\n\n const visit = (node: import('typescript').Node): void => {\n if (found) return;\n\n if (executionStyle === 'solution-method' && ts.isClassDeclaration(node) && node.name?.text === 'Solution') {\n for (const member of node.members) {\n if (found) break;\n\n if (ts.isMethodDeclaration(member) && getPropertyNameText(ts, member.name) === functionName) {\n found = member;\n break;\n }\n\n if (\n ts.isPropertyDeclaration(member) &&\n getPropertyNameText(ts, member.name) === functionName &&\n member.initializer &&\n (ts.isArrowFunction(member.initializer) || ts.isFunctionExpression(member.initializer))\n ) {\n found = member.initializer;\n break;\n }\n }\n return;\n }\n\n if (executionStyle === 'function') {\n if (ts.isFunctionDeclaration(node) && node.name?.text === functionName) {\n found = node;\n return;\n }\n\n if (\n ts.isVariableDeclaration(node) &&\n ts.isIdentifier(node.name) &&\n node.name.text === functionName &&\n node.initializer &&\n (ts.isArrowFunction(node.initializer) || ts.isFunctionExpression(node.initializer))\n ) {\n found = node.initializer;\n return;\n }\n }\n\n ts.forEachChild(node, visit);\n };\n\n visit(sourceFile);\n return found;\n}\n\nasync function resolveOrderedInputKeys(\n code: string,\n functionName: string,\n inputs: Record<string, unknown>,\n executionStyle: RuntimeExecutionStyle,\n language: 'javascript' | 'typescript' = 'javascript'\n): Promise<string[]> {\n const fallbackKeys = Object.keys(inputs);\n if (!functionName || executionStyle === 'ops-class' || fallbackKeys.length <= 1) {\n return fallbackKeys;\n }\n\n try {\n const ts = await getTypeScriptModule();\n const sourceFile = ts.createSourceFile(\n `runtime-input.${language === 'typescript' ? 'ts' : 'js'}`,\n code,\n ts.ScriptTarget.ES2020,\n true,\n language === 'typescript' ? ts.ScriptKind.TS : ts.ScriptKind.JS\n );\n const target = findFunctionLikeNode(ts, sourceFile, functionName, executionStyle);\n if (!target) {\n return fallbackKeys;\n }\n\n const parameterNames = collectSimpleParameterNames(ts, target);\n if (!parameterNames || parameterNames.length === 0) {\n return fallbackKeys;\n }\n\n const matchedKeys = parameterNames.filter((name) => Object.prototype.hasOwnProperty.call(inputs, name));\n if (matchedKeys.length === 0) {\n return fallbackKeys;\n }\n\n const extras = fallbackKeys.filter((key) => !matchedKeys.includes(key));\n return [...matchedKeys, ...extras];\n } catch {\n return fallbackKeys;\n }\n}\n\nfunction buildRunner(code: string, executionStyle: RuntimeExecutionStyle, argNames: string[]): DynamicRunner {\n if (executionStyle === 'function') {\n return new Function(\n 'console',\n '__functionName',\n ...argNames,\n `\"use strict\";\n${code}\nlet __target;\ntry {\n __target = eval(__functionName);\n} catch (_err) {\n __target = undefined;\n}\nif (typeof __target !== 'function') {\n throw new Error('Function \"' + __functionName + '\" not found');\n}\nreturn __target(${argNames.join(', ')});`\n ) as DynamicRunner;\n }\n\n if (executionStyle === 'solution-method') {\n return new Function(\n 'console',\n '__functionName',\n ...argNames,\n `\"use strict\";\n${code}\nif (typeof Solution !== 'function') {\n throw new Error('Class \"Solution\" not found');\n}\nconst __solver = new Solution();\nconst __method = __solver[__functionName];\nif (typeof __method !== 'function') {\n throw new Error('Method \"Solution.' + __functionName + '\" not found');\n}\nreturn __method.call(__solver, ${argNames.join(', ')});`\n ) as DynamicRunner;\n }\n\n if (executionStyle === 'ops-class') {\n return new Function(\n 'console',\n '__className',\n '__operations',\n '__arguments',\n `\"use strict\";\n${code}\nif (!Array.isArray(__operations) || !Array.isArray(__arguments)) {\n throw new Error('ops-class execution requires inputs.operations and inputs.arguments (or ops/args)');\n}\nif (__operations.length !== __arguments.length) {\n throw new Error('operations and arguments must have the same length');\n}\nlet __targetClass;\ntry {\n __targetClass = eval(__className);\n} catch (_err) {\n __targetClass = undefined;\n}\nif (typeof __targetClass !== 'function') {\n throw new Error('Class \"' + __className + '\" not found');\n}\nlet __instance = null;\nconst __out = [];\nfor (let __i = 0; __i < __operations.length; __i++) {\n const __op = __operations[__i];\n let __callArgs = __arguments[__i];\n if (__callArgs === null || __callArgs === undefined) {\n __callArgs = [];\n }\n if (!Array.isArray(__callArgs)) {\n __callArgs = [__callArgs];\n }\n if (__i === 0) {\n __instance = new __targetClass(...__callArgs);\n __out.push(null);\n continue;\n }\n if (!__instance || typeof __instance[__op] !== 'function') {\n throw new Error('Required method \"' + __op + '\" is not implemented on ' + (__className || 'target class'));\n }\n __out.push(__instance[__op](...__callArgs));\n}\nreturn __out;`\n ) as DynamicRunner;\n }\n\n throw new Error(`Execution style \"${executionStyle}\" is not supported for JavaScript runtime yet.`);\n}\n\nfunction getOpsClassInputs(inputs: Record<string, unknown>): {\n operations: unknown[] | null;\n argumentsList: unknown[] | null;\n} {\n const operations = Array.isArray(inputs.operations)\n ? inputs.operations\n : (Array.isArray(inputs.ops) ? inputs.ops : null);\n const argumentsList = Array.isArray(inputs.arguments)\n ? inputs.arguments\n : (Array.isArray(inputs.args) ? inputs.args : null);\n return { operations, argumentsList };\n}\n\nasync function transpileTypeScript(code: string): Promise<string> {\n const ts = await getTypeScriptModule();\n const transpileInput = withTypeScriptRuntimeDeclarations(code);\n const transpiled = ts.transpileModule(transpileInput, {\n compilerOptions: {\n target: ts.ScriptTarget.ES2020,\n module: ts.ModuleKind.None,\n strict: false,\n esModuleInterop: true,\n },\n reportDiagnostics: true,\n fileName: 'solution.ts',\n });\n\n const diagnostics = Array.isArray(transpiled.diagnostics) ? transpiled.diagnostics : [];\n const errors = diagnostics.filter((diag) => diag.category === ts.DiagnosticCategory.Error);\n if (errors.length > 0) {\n const first = errors[0];\n const messageText = ts.flattenDiagnosticMessageText(first.messageText, '\\n');\n let lineNumber: number | undefined;\n if (first.file && typeof first.start === 'number') {\n const position = first.file.getLineAndCharacterOfPosition(first.start);\n lineNumber = position.line + 1;\n }\n const error = new Error(\n lineNumber\n ? `TypeScript transpilation failed (line ${lineNumber}): ${messageText}`\n : `TypeScript transpilation failed: ${messageText}`\n );\n if (lineNumber) {\n (error as Error & { __tracecodeLine?: number }).__tracecodeLine = lineNumber;\n }\n throw error;\n }\n\n return transpiled.outputText;\n}\n\nexport async function executeJavaScriptCode(\n code: string,\n functionName: string,\n inputs: Record<string, unknown>,\n executionStyle: RuntimeExecutionStyle = 'function',\n language: 'javascript' | 'typescript' = 'javascript'\n): Promise<CodeExecutionResult> {\n const consoleOutput: string[] = [];\n const consoleProxy = createConsoleProxy(consoleOutput);\n const normalizedInputs = normalizeInputs(inputs);\n const materializers = await resolveInputMaterializers(code, functionName, executionStyle, language);\n const materializedInputs = applyInputMaterializers(normalizedInputs, materializers);\n\n try {\n let output: unknown;\n\n if (executionStyle === 'ops-class') {\n const { operations, argumentsList } = getOpsClassInputs(materializedInputs);\n const runner = buildRunner(code, executionStyle, []);\n output = await Promise.resolve(runner(consoleProxy, functionName, operations, argumentsList));\n } else {\n const inputKeys = await resolveOrderedInputKeys(code, functionName, materializedInputs, executionStyle, language);\n const argNames = inputKeys.map((_, index) => `__arg${index}`);\n const argValues = inputKeys.map((key) => materializedInputs[key]);\n const runner = buildRunner(code, executionStyle, argNames);\n output = await Promise.resolve(runner(consoleProxy, functionName, ...argValues));\n }\n\n return {\n success: true,\n output: serializeValue(output),\n consoleOutput,\n };\n } catch (error) {\n return {\n success: false,\n output: null,\n error: error instanceof Error ? error.message : String(error),\n errorLine: extractUserErrorLine(error),\n consoleOutput,\n };\n }\n}\n\nexport async function executeJavaScriptWithTracing(\n code: string,\n functionName: string | null,\n inputs: Record<string, unknown>,\n executionStyle: RuntimeExecutionStyle = 'function',\n language: 'javascript' | 'typescript' = 'javascript'\n): Promise<ExecutionResult> {\n const startedAt = performanceNow();\n const codeResult = await executeJavaScriptCode(code, functionName ?? '', inputs, executionStyle, language);\n const executionTimeMs = performanceNow() - startedAt;\n\n if (!codeResult.success) {\n return {\n success: false,\n error: codeResult.error,\n errorLine: codeResult.errorLine,\n trace: [],\n executionTimeMs,\n consoleOutput: codeResult.consoleOutput ?? [],\n lineEventCount: 0,\n traceStepCount: 0,\n };\n }\n\n return {\n success: true,\n output: codeResult.output,\n trace: [],\n executionTimeMs,\n consoleOutput: codeResult.consoleOutput ?? [],\n lineEventCount: 0,\n traceStepCount: 0,\n };\n}\n\nexport async function executeTypeScriptCode(\n code: string,\n functionName: string,\n inputs: Record<string, unknown>,\n executionStyle: RuntimeExecutionStyle = 'function'\n): Promise<CodeExecutionResult> {\n const normalizedInputs = normalizeInputs(inputs);\n const materializers = await resolveInputMaterializers(code, functionName, executionStyle, 'typescript');\n const materializedInputs = applyInputMaterializers(normalizedInputs, materializers);\n const transpiledCode = await transpileTypeScript(code);\n return executeJavaScriptCode(transpiledCode, functionName, materializedInputs, executionStyle, 'typescript');\n}\n"],"mappings":"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","names":["out","line"]}
package/dist/python.cjs CHANGED
@@ -139,7 +139,7 @@ def _serialize(obj, depth=0, node_refs=None):
139
139
  except TypeError:
140
140
  sorted_vals = [_serialize(x, depth + 1, node_refs) for x in obj]
141
141
  return {"__type__": "set", "values": sorted_vals}
142
- elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and (hasattr(obj, 'left') or hasattr(obj, 'right')):
142
+ elif isinstance(obj, TreeNode):
143
143
  obj_ref = id(obj)
144
144
  if obj_ref in node_refs:
145
145
  return {"__ref__": node_refs[obj_ref]}
@@ -155,7 +155,7 @@ def _serialize(obj, depth=0, node_refs=None):
155
155
  if hasattr(obj, 'right'):
156
156
  result["right"] = _serialize(obj.right, depth + 1, node_refs)
157
157
  return result
158
- elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and hasattr(obj, 'next'):
158
+ elif isinstance(obj, ListNode):
159
159
  obj_ref = id(obj)
160
160
  if obj_ref in node_refs:
161
161
  return {"__ref__": node_refs[obj_ref]}
@@ -233,14 +233,14 @@ def _serialize(obj, depth=0):
233
233
  return {"__type__": "set", "values": sorted([_serialize(x, depth + 1) for x in obj])}
234
234
  except TypeError:
235
235
  return {"__type__": "set", "values": [_serialize(x, depth + 1) for x in obj]}
236
- elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and (hasattr(obj, 'left') or hasattr(obj, 'right')):
236
+ elif isinstance(obj, TreeNode):
237
237
  result = {"__type__": "TreeNode", "val": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}
238
238
  if hasattr(obj, 'left'):
239
239
  result["left"] = _serialize(obj.left, depth + 1)
240
240
  if hasattr(obj, 'right'):
241
241
  result["right"] = _serialize(obj.right, depth + 1)
242
242
  return result
243
- elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and hasattr(obj, 'next'):
243
+ elif isinstance(obj, ListNode):
244
244
  result = {"__type__": "ListNode", "val": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}
245
245
  result["next"] = _serialize(obj.next, depth + 1)
246
246
  return result
@@ -315,14 +315,14 @@ def _serialize(obj, depth=0):
315
315
  return {"__type__": "set", "values": sorted([_serialize(x, depth + 1) for x in obj])}
316
316
  except TypeError:
317
317
  return {"__type__": "set", "values": [_serialize(x, depth + 1) for x in obj]}
318
- elif hasattr(obj, 'val') and (hasattr(obj, 'left') or hasattr(obj, 'right')):
318
+ elif isinstance(obj, TreeNode):
319
319
  result = {"__type__": "TreeNode", "val": _serialize(getattr(obj, 'val', None), depth + 1)}
320
320
  if hasattr(obj, 'left'):
321
321
  result["left"] = _serialize(obj.left, depth + 1)
322
322
  if hasattr(obj, 'right'):
323
323
  result["right"] = _serialize(obj.right, depth + 1)
324
324
  return result
325
- elif hasattr(obj, 'val') and hasattr(obj, 'next'):
325
+ elif isinstance(obj, ListNode):
326
326
  result = {"__type__": "ListNode", "val": _serialize(getattr(obj, 'val', None), depth + 1)}
327
327
  result["next"] = _serialize(obj.next, depth + 1)
328
328
  return result
@@ -354,14 +354,14 @@ def _serialize(obj, depth=0):
354
354
  return {"__type__": "set", "values": sorted([_serialize(x, depth + 1) for x in obj])}
355
355
  except TypeError:
356
356
  return {"__type__": "set", "values": [_serialize(x, depth + 1) for x in obj]}
357
- elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and (hasattr(obj, 'left') or hasattr(obj, 'right')):
357
+ elif isinstance(obj, TreeNode):
358
358
  result = {"__type__": "TreeNode", "val": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}
359
359
  if hasattr(obj, 'left'):
360
360
  result["left"] = _serialize(obj.left, depth + 1)
361
361
  if hasattr(obj, 'right'):
362
362
  result["right"] = _serialize(obj.right, depth + 1)
363
363
  return result
364
- elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and hasattr(obj, 'next'):
364
+ elif isinstance(obj, ListNode):
365
365
  result = {"__type__": "ListNode", "val": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}
366
366
  result["next"] = _serialize(obj.next, depth + 1)
367
367
  return result
@@ -589,7 +589,7 @@ def _serialize(obj, depth=0, node_refs=None):
589
589
  except TypeError:
590
590
  sorted_vals = [_serialize(x, depth + 1, node_refs) for x in obj]
591
591
  return {"__type__": "set", "values": sorted_vals}
592
- elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and (hasattr(obj, 'left') or hasattr(obj, 'right')):
592
+ elif isinstance(obj, TreeNode):
593
593
  obj_ref = id(obj)
594
594
  if obj_ref in node_refs:
595
595
  return {"__ref__": node_refs[obj_ref]}
@@ -605,7 +605,7 @@ def _serialize(obj, depth=0, node_refs=None):
605
605
  if hasattr(obj, 'right'):
606
606
  result["right"] = _serialize(obj.right, depth + 1, node_refs)
607
607
  return result
608
- elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and hasattr(obj, 'next'):
608
+ elif isinstance(obj, ListNode):
609
609
  obj_ref = id(obj)
610
610
  if obj_ref in node_refs:
611
611
  return {"__ref__": node_refs[obj_ref]}
@@ -683,14 +683,14 @@ def _serialize(obj, depth=0):
683
683
  return {"__type__": "set", "values": sorted([_serialize(x, depth + 1) for x in obj])}
684
684
  except TypeError:
685
685
  return {"__type__": "set", "values": [_serialize(x, depth + 1) for x in obj]}
686
- elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and (hasattr(obj, 'left') or hasattr(obj, 'right')):
686
+ elif isinstance(obj, TreeNode):
687
687
  result = {"__type__": "TreeNode", "val": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}
688
688
  if hasattr(obj, 'left'):
689
689
  result["left"] = _serialize(obj.left, depth + 1)
690
690
  if hasattr(obj, 'right'):
691
691
  result["right"] = _serialize(obj.right, depth + 1)
692
692
  return result
693
- elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and hasattr(obj, 'next'):
693
+ elif isinstance(obj, ListNode):
694
694
  result = {"__type__": "ListNode", "val": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}
695
695
  result["next"] = _serialize(obj.next, depth + 1)
696
696
  return result
@@ -765,14 +765,14 @@ def _serialize(obj, depth=0):
765
765
  return {"__type__": "set", "values": sorted([_serialize(x, depth + 1) for x in obj])}
766
766
  except TypeError:
767
767
  return {"__type__": "set", "values": [_serialize(x, depth + 1) for x in obj]}
768
- elif hasattr(obj, 'val') and (hasattr(obj, 'left') or hasattr(obj, 'right')):
768
+ elif isinstance(obj, TreeNode):
769
769
  result = {"__type__": "TreeNode", "val": _serialize(getattr(obj, 'val', None), depth + 1)}
770
770
  if hasattr(obj, 'left'):
771
771
  result["left"] = _serialize(obj.left, depth + 1)
772
772
  if hasattr(obj, 'right'):
773
773
  result["right"] = _serialize(obj.right, depth + 1)
774
774
  return result
775
- elif hasattr(obj, 'val') and hasattr(obj, 'next'):
775
+ elif isinstance(obj, ListNode):
776
776
  result = {"__type__": "ListNode", "val": _serialize(getattr(obj, 'val', None), depth + 1)}
777
777
  result["next"] = _serialize(obj.next, depth + 1)
778
778
  return result
@@ -1 +1 @@
1
- {"version":3,"sources":["../packages/harness-python/src/index.ts","../packages/harness-python/src/generated/python-harness-snippets.ts","../packages/harness-python/src/python-harness.ts","../packages/harness-python/src/python-harness-template.ts"],"sourcesContent":["export * from './python-harness';\nexport * from './python-harness-template';\nexport * from './generated/python-harness-snippets';\n","/**\n * AUTO-GENERATED FILE. DO NOT EDIT MANUALLY.\n *\n * Source: packages/harness-python/src/python-harness-template.ts\n * Generator: scripts/generate-python-harness-artifacts.ts\n */\n\n// @ts-nocheck\n\nexport function toPythonLiteral(value){if(value===null||value===void 0){return\"None\"}if(typeof value===\"boolean\"){return value?\"True\":\"False\"}if(typeof value===\"number\"){return String(value)}if(typeof value===\"string\"){return JSON.stringify(value)}if(Array.isArray(value)){return\"[\"+value.map(toPythonLiteral).join(\", \")+\"]\"}if(typeof value===\"object\"){const entries=Object.entries(value).map(([k,v])=>`${JSON.stringify(k)}: ${toPythonLiteral(v)}`).join(\", \");return\"{\"+entries+\"}\"}return JSON.stringify(value)}\n\nexport const PYTHON_CLASS_DEFINITIONS = \"\\nclass TreeNode:\\n def __init__(self, val=0, left=None, right=None):\\n self.val = val\\n self.value = val\\n self.left = left\\n self.right = right\\n def __getitem__(self, key):\\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', None))\\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', None))\\n if key == 'left': return self.left\\n if key == 'right': return self.right\\n raise KeyError(key)\\n def get(self, key, default=None):\\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', default))\\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', default))\\n if key == 'left': return self.left\\n if key == 'right': return self.right\\n return default\\n def __repr__(self):\\n return f\\\"TreeNode({getattr(self, 'val', getattr(self, 'value', None))})\\\"\\n\\nclass ListNode:\\n def __init__(self, val=0, next=None):\\n self.val = val\\n self.value = val\\n self.next = next\\n def __getitem__(self, key):\\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', None))\\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', None))\\n if key == 'next': return self.next\\n raise KeyError(key)\\n def get(self, key, default=None):\\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', default))\\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', default))\\n if key == 'next': return self.next\\n return default\\n def __repr__(self):\\n return f\\\"ListNode({getattr(self, 'val', getattr(self, 'value', None))})\\\"\\n\";\n\nexport const PYTHON_CONVERSION_HELPERS = \"\\ndef _ensure_node_value_aliases(node):\\n if node is None:\\n return node\\n try:\\n has_val = hasattr(node, 'val')\\n has_value = hasattr(node, 'value')\\n if has_value and not has_val:\\n try:\\n setattr(node, 'val', getattr(node, 'value'))\\n except Exception:\\n pass\\n elif has_val and not has_value:\\n try:\\n setattr(node, 'value', getattr(node, 'val'))\\n except Exception:\\n pass\\n except Exception:\\n pass\\n return node\\n\\ndef _dict_to_tree(d):\\n if d is None:\\n return None\\n if not isinstance(d, dict):\\n return d\\n if 'val' not in d and 'value' not in d:\\n return d\\n node = TreeNode(d.get('val', d.get('value', 0)))\\n _ensure_node_value_aliases(node)\\n node.left = _dict_to_tree(d.get('left'))\\n node.right = _dict_to_tree(d.get('right'))\\n return node\\n\\ndef _dict_to_list(d, _refs=None):\\n if _refs is None:\\n _refs = {}\\n if d is None:\\n return None\\n if not isinstance(d, dict):\\n return d\\n if '__ref__' in d:\\n return _refs.get(d.get('__ref__'))\\n if 'val' not in d and 'value' not in d:\\n return d\\n node = ListNode(d.get('val', d.get('value', 0)))\\n _ensure_node_value_aliases(node)\\n node_id = d.get('__id__')\\n if isinstance(node_id, str) and node_id:\\n _refs[node_id] = node\\n node.next = _dict_to_list(d.get('next'), _refs)\\n return node\\n\";\n\nexport const PYTHON_TRACE_SERIALIZE_FUNCTION = \"\\n# Sentinel to mark skipped values (functions, etc.) - distinct from None\\n_SKIP_SENTINEL = \\\"__TRACECODE_SKIP__\\\"\\n_MAX_SERIALIZE_DEPTH = 48\\n_MAX_OBJECT_FIELDS = 32\\n\\ndef _serialize(obj, depth=0, node_refs=None):\\n if node_refs is None:\\n node_refs = {}\\n if isinstance(obj, (bool, int, str, type(None))):\\n return obj\\n elif isinstance(obj, float):\\n if not math.isfinite(obj):\\n if math.isnan(obj):\\n return \\\"NaN\\\"\\n return \\\"Infinity\\\" if obj > 0 else \\\"-Infinity\\\"\\n return obj\\n if depth > _MAX_SERIALIZE_DEPTH:\\n return \\\"<max depth>\\\"\\n elif isinstance(obj, (list, tuple)):\\n return [_serialize(x, depth + 1, node_refs) for x in obj]\\n elif getattr(obj, '__class__', None) and getattr(obj.__class__, '__name__', '') == 'deque':\\n return [_serialize(x, depth + 1, node_refs) for x in obj]\\n elif isinstance(obj, dict):\\n return {str(k): _serialize(v, depth + 1, node_refs) for k, v in obj.items()}\\n elif isinstance(obj, set):\\n # Use try/except for sorting to handle heterogeneous sets\\n try:\\n sorted_vals = sorted([_serialize(x, depth + 1, node_refs) for x in obj])\\n except TypeError:\\n sorted_vals = [_serialize(x, depth + 1, node_refs) for x in obj]\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": sorted_vals}\\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and (hasattr(obj, 'left') or hasattr(obj, 'right')):\\n obj_ref = id(obj)\\n if obj_ref in node_refs:\\n return {\\\"__ref__\\\": node_refs[obj_ref]}\\n node_id = f\\\"tree-{obj_ref}\\\"\\n node_refs[obj_ref] = node_id\\n result = {\\n \\\"__type__\\\": \\\"TreeNode\\\",\\n \\\"__id__\\\": node_id,\\n \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, node_refs),\\n }\\n if hasattr(obj, 'left'):\\n result[\\\"left\\\"] = _serialize(obj.left, depth + 1, node_refs)\\n if hasattr(obj, 'right'):\\n result[\\\"right\\\"] = _serialize(obj.right, depth + 1, node_refs)\\n return result\\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and hasattr(obj, 'next'):\\n obj_ref = id(obj)\\n if obj_ref in node_refs:\\n return {\\\"__ref__\\\": node_refs[obj_ref]}\\n node_id = f\\\"list-{obj_ref}\\\"\\n node_refs[obj_ref] = node_id\\n result = {\\n \\\"__type__\\\": \\\"ListNode\\\",\\n \\\"__id__\\\": node_id,\\n \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, node_refs),\\n }\\n result[\\\"next\\\"] = _serialize(obj.next, depth + 1, node_refs)\\n return result\\n elif hasattr(obj, '__dict__'):\\n obj_ref = id(obj)\\n if obj_ref in node_refs:\\n return {\\\"__ref__\\\": node_refs[obj_ref]}\\n node_id = f\\\"object-{obj_ref}\\\"\\n node_refs[obj_ref] = node_id\\n class_name = getattr(getattr(obj, '__class__', None), '__name__', 'object')\\n result = {\\n \\\"__type__\\\": \\\"object\\\",\\n \\\"__class__\\\": class_name,\\n \\\"__id__\\\": node_id,\\n }\\n try:\\n raw_fields = getattr(obj, '__dict__', None)\\n except Exception:\\n raw_fields = None\\n if isinstance(raw_fields, dict):\\n added = 0\\n for key, value in raw_fields.items():\\n key_str = str(key)\\n if key_str.startswith('_'):\\n continue\\n if callable(value):\\n continue\\n result[key_str] = _serialize(value, depth + 1, node_refs)\\n added += 1\\n if added >= _MAX_OBJECT_FIELDS:\\n result[\\\"__truncated__\\\"] = True\\n break\\n return result\\n elif callable(obj):\\n # Skip functions entirely - return sentinel\\n return _SKIP_SENTINEL\\n else:\\n repr_str = repr(obj)\\n # Filter out function-like representations (e.g., <function foo at 0x...>)\\n if repr_str.startswith('<') and repr_str.endswith('>'):\\n return _SKIP_SENTINEL\\n return repr_str\\n\";\n\nexport const PYTHON_EXECUTE_SERIALIZE_FUNCTION = \"\\n_MAX_SERIALIZE_DEPTH = 48\\n\\ndef _serialize(obj, depth=0):\\n if isinstance(obj, (bool, int, str, type(None))):\\n return obj\\n elif isinstance(obj, float):\\n if not math.isfinite(obj):\\n if math.isnan(obj):\\n return \\\"NaN\\\"\\n return \\\"Infinity\\\" if obj > 0 else \\\"-Infinity\\\"\\n return obj\\n if depth > _MAX_SERIALIZE_DEPTH:\\n return \\\"<max depth>\\\"\\n elif isinstance(obj, (list, tuple)):\\n return [_serialize(x, depth + 1) for x in obj]\\n elif getattr(obj, '__class__', None) and getattr(obj.__class__, '__name__', '') == 'deque':\\n return [_serialize(x, depth + 1) for x in obj]\\n elif isinstance(obj, dict):\\n return {str(k): _serialize(v, depth + 1) for k, v in obj.items()}\\n elif isinstance(obj, set):\\n try:\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": sorted([_serialize(x, depth + 1) for x in obj])}\\n except TypeError:\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": [_serialize(x, depth + 1) for x in obj]}\\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and (hasattr(obj, 'left') or hasattr(obj, 'right')):\\n result = {\\\"__type__\\\": \\\"TreeNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}\\n if hasattr(obj, 'left'):\\n result[\\\"left\\\"] = _serialize(obj.left, depth + 1)\\n if hasattr(obj, 'right'):\\n result[\\\"right\\\"] = _serialize(obj.right, depth + 1)\\n return result\\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and hasattr(obj, 'next'):\\n result = {\\\"__type__\\\": \\\"ListNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}\\n result[\\\"next\\\"] = _serialize(obj.next, depth + 1)\\n return result\\n elif callable(obj):\\n return None\\n else:\\n repr_str = repr(obj)\\n if repr_str.startswith('<') and repr_str.endswith('>'):\\n return None\\n return repr_str\\n\";\n\nexport const PYTHON_PRACTICE_MATERIALIZE_SERIALIZE_FUNCTION = \"\\ndef _serialize(obj, depth=0, state=None):\\n if state is None:\\n state = {\\\"nodes\\\": 0, \\\"seen\\\": set()}\\n if depth > 64:\\n return \\\"__MAX_DEPTH__\\\"\\n if isinstance(obj, (int, float, str, bool, type(None))):\\n return obj\\n\\n state[\\\"nodes\\\"] += 1\\n if state[\\\"nodes\\\"] > 600:\\n return \\\"__MAX_NODES__\\\"\\n\\n if isinstance(obj, (list, tuple)):\\n return [_serialize(x, depth + 1, state) for x in obj]\\n elif isinstance(obj, dict):\\n return {str(k): _serialize(v, depth + 1, state) for k, v in obj.items()}\\n elif isinstance(obj, set):\\n serialized = [_serialize(x, depth + 1, state) for x in obj]\\n try:\\n serialized = sorted(serialized)\\n except TypeError:\\n pass\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": serialized}\\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and (hasattr(obj, 'left') or hasattr(obj, 'right')):\\n obj_id = id(obj)\\n if obj_id in state[\\\"seen\\\"]:\\n return \\\"__CYCLE__\\\"\\n state[\\\"seen\\\"].add(obj_id)\\n result = {\\\"__type__\\\": \\\"TreeNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, state)}\\n if hasattr(obj, 'left'):\\n result[\\\"left\\\"] = _serialize(obj.left, depth + 1, state)\\n if hasattr(obj, 'right'):\\n result[\\\"right\\\"] = _serialize(obj.right, depth + 1, state)\\n state[\\\"seen\\\"].remove(obj_id)\\n return result\\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and hasattr(obj, 'next'):\\n obj_id = id(obj)\\n if obj_id in state[\\\"seen\\\"]:\\n return \\\"__CYCLE__\\\"\\n state[\\\"seen\\\"].add(obj_id)\\n result = {\\\"__type__\\\": \\\"ListNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, state)}\\n result[\\\"next\\\"] = _serialize(obj.next, depth + 1, state)\\n state[\\\"seen\\\"].remove(obj_id)\\n return result\\n else:\\n return repr(obj)\\n\";\n\nexport const PYTHON_INTERVIEW_MATERIALIZE_SERIALIZE_FUNCTION = \"\\ndef _serialize(obj, depth=0):\\n if depth > 10:\\n return \\\"<max depth>\\\"\\n if isinstance(obj, (int, float, str, bool, type(None))):\\n return obj\\n elif isinstance(obj, (list, tuple)):\\n return [_serialize(x, depth + 1) for x in obj]\\n elif isinstance(obj, dict):\\n return {str(k): _serialize(v, depth + 1) for k, v in obj.items()}\\n elif isinstance(obj, set):\\n try:\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": sorted([_serialize(x, depth + 1) for x in obj])}\\n except TypeError:\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": [_serialize(x, depth + 1) for x in obj]}\\n elif hasattr(obj, 'val') and (hasattr(obj, 'left') or hasattr(obj, 'right')):\\n result = {\\\"__type__\\\": \\\"TreeNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', None), depth + 1)}\\n if hasattr(obj, 'left'):\\n result[\\\"left\\\"] = _serialize(obj.left, depth + 1)\\n if hasattr(obj, 'right'):\\n result[\\\"right\\\"] = _serialize(obj.right, depth + 1)\\n return result\\n elif hasattr(obj, 'val') and hasattr(obj, 'next'):\\n result = {\\\"__type__\\\": \\\"ListNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', None), depth + 1)}\\n result[\\\"next\\\"] = _serialize(obj.next, depth + 1)\\n return result\\n else:\\n return repr(obj)\\n\";\n\nexport const PYTHON_SERIALIZE_FUNCTION = \"\\n_MAX_SERIALIZE_DEPTH = 48\\n\\ndef _serialize(obj, depth=0):\\n if isinstance(obj, (bool, int, str, type(None))):\\n return obj\\n elif isinstance(obj, float):\\n if not math.isfinite(obj):\\n if math.isnan(obj):\\n return \\\"NaN\\\"\\n return \\\"Infinity\\\" if obj > 0 else \\\"-Infinity\\\"\\n return obj\\n if depth > _MAX_SERIALIZE_DEPTH:\\n return \\\"<max depth>\\\"\\n elif isinstance(obj, (list, tuple)):\\n return [_serialize(x, depth + 1) for x in obj]\\n elif getattr(obj, '__class__', None) and getattr(obj.__class__, '__name__', '') == 'deque':\\n return [_serialize(x, depth + 1) for x in obj]\\n elif isinstance(obj, dict):\\n return {str(k): _serialize(v, depth + 1) for k, v in obj.items()}\\n elif isinstance(obj, set):\\n try:\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": sorted([_serialize(x, depth + 1) for x in obj])}\\n except TypeError:\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": [_serialize(x, depth + 1) for x in obj]}\\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and (hasattr(obj, 'left') or hasattr(obj, 'right')):\\n result = {\\\"__type__\\\": \\\"TreeNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}\\n if hasattr(obj, 'left'):\\n result[\\\"left\\\"] = _serialize(obj.left, depth + 1)\\n if hasattr(obj, 'right'):\\n result[\\\"right\\\"] = _serialize(obj.right, depth + 1)\\n return result\\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and hasattr(obj, 'next'):\\n result = {\\\"__type__\\\": \\\"ListNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}\\n result[\\\"next\\\"] = _serialize(obj.next, depth + 1)\\n return result\\n elif callable(obj):\\n return None\\n else:\\n repr_str = repr(obj)\\n if repr_str.startswith('<') and repr_str.endswith('>'):\\n return None\\n return repr_str\\n\";\n","/**\n * Python Harness Code\n *\n * Shared Python harness helpers for scripts and Node-side validation paths.\n *\n * Canonical source:\n * - packages/harness-python/src/python-harness-template.ts\n *\n * Generated artifacts (via scripts/generate-python-harness-artifacts.ts):\n * - packages/harness-python/src/generated/python-harness-snippets.ts (consumed here)\n * - workers/python/generated-python-harness-snippets.js\n *\n * Note: workers/python/pyodide-worker.js still contains runtime-specific embedded\n * harness code. Keep it aligned via:\n * pnpm test:python-harness-sync\n */\n\nimport {\n toPythonLiteral,\n PYTHON_CLASS_DEFINITIONS,\n PYTHON_CONVERSION_HELPERS,\n PYTHON_TRACE_SERIALIZE_FUNCTION,\n PYTHON_EXECUTE_SERIALIZE_FUNCTION,\n PYTHON_PRACTICE_MATERIALIZE_SERIALIZE_FUNCTION,\n PYTHON_INTERVIEW_MATERIALIZE_SERIALIZE_FUNCTION,\n PYTHON_SERIALIZE_FUNCTION,\n} from './generated/python-harness-snippets';\n\nexport {\n toPythonLiteral,\n PYTHON_CLASS_DEFINITIONS,\n PYTHON_CONVERSION_HELPERS,\n PYTHON_TRACE_SERIALIZE_FUNCTION,\n PYTHON_EXECUTE_SERIALIZE_FUNCTION,\n PYTHON_PRACTICE_MATERIALIZE_SERIALIZE_FUNCTION,\n PYTHON_INTERVIEW_MATERIALIZE_SERIALIZE_FUNCTION,\n PYTHON_SERIALIZE_FUNCTION,\n};\n\nexport function identifyConversions(inputs: Record<string, unknown>): {\n treeKeys: string[];\n listKeys: string[];\n} {\n const treeKeys: string[] = [];\n const listKeys: string[] = [];\n \n for (const [key, value] of Object.entries(inputs)) {\n if (\n value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n ('val' in (value as Record<string, unknown>) || 'value' in (value as Record<string, unknown>))\n ) {\n const obj = value as Record<string, unknown>;\n const hasLeft = 'left' in obj;\n const hasRight = 'right' in obj;\n const hasNext = 'next' in obj;\n \n if (hasLeft || hasRight) {\n treeKeys.push(key);\n } else if (hasNext) {\n listKeys.push(key);\n } else {\n // Default to tree for backwards compatibility (just 'val')\n treeKeys.push(key);\n }\n }\n }\n \n return { treeKeys, listKeys };\n}\n\n/**\n * Generate Python code for converting tree/list inputs.\n */\nexport function generateConversionCode(inputs: Record<string, unknown>): string {\n const { treeKeys, listKeys } = identifyConversions(inputs);\n \n const lines: string[] = [];\n \n for (const key of treeKeys) {\n lines.push(`${key} = _dict_to_tree(${key})`);\n }\n \n for (const key of listKeys) {\n lines.push(`${key} = _dict_to_list(${key})`);\n }\n \n return lines.join('\\n');\n}\n\n/**\n * Generate Python code for setting up inputs.\n */\nexport function generateInputSetup(inputs: Record<string, unknown>): string {\n return Object.entries(inputs)\n .map(([key, value]) => `${key} = ${toPythonLiteral(value)}`)\n .join('\\n');\n}\n\n/**\n * Generate a complete Python script for running a solution.\n * This is used by the validation script to run solutions via subprocess.\n */\nexport function generateSolutionScript(\n solutionCode: string,\n functionName: string,\n inputs: Record<string, unknown>\n): string {\n const inputSetup = generateInputSetup(inputs);\n const conversionCode = generateConversionCode(inputs);\n const paramList = Object.keys(inputs)\n .map((key) => `${key}=${key}`)\n .join(', ');\n \n return `\nimport json\nimport sys\n\n${PYTHON_CLASS_DEFINITIONS}\n\n${PYTHON_CONVERSION_HELPERS}\n\n${PYTHON_SERIALIZE_FUNCTION}\n\n# Solution code\n${solutionCode}\n\n# Set up inputs\n${inputSetup}\n\n# Convert tree/list inputs\n${conversionCode}\n\n# Run the function\ntry:\n _result = ${functionName}(${paramList})\n print(json.dumps({\"success\": True, \"output\": _serialize(_result)}))\nexcept Exception as e:\n print(json.dumps({\"success\": False, \"error\": f\"{type(e).__name__}: {str(e)}\"}))\n`;\n}\n","/**\n * Canonical Python Harness Template\n *\n * This file is the single source of truth for shared harness snippets.\n * Generated artifacts:\n * - packages/harness-python/src/generated/python-harness-snippets.ts\n * - workers/python/generated-python-harness-snippets.js\n */\n\n/**\n * Convert a JavaScript value to a Python literal string.\n * Handles null -> None, booleans -> True/False, and nested structures.\n */\nexport function templateToPythonLiteral(value: unknown): string {\n if (value === null || value === undefined) {\n return 'None';\n }\n if (typeof value === 'boolean') {\n return value ? 'True' : 'False';\n }\n if (typeof value === 'number') {\n return String(value);\n }\n if (typeof value === 'string') {\n return JSON.stringify(value);\n }\n if (Array.isArray(value)) {\n return '[' + value.map(templateToPythonLiteral).join(', ') + ']';\n }\n if (typeof value === 'object') {\n const entries = Object.entries(value as Record<string, unknown>)\n .map(([k, v]) => `${JSON.stringify(k)}: ${templateToPythonLiteral(v)}`)\n .join(', ');\n return '{' + entries + '}';\n }\n return JSON.stringify(value);\n}\n\n/**\n * Python class definitions for TreeNode and ListNode.\n * These must match the worker definitions.\n */\nexport const TEMPLATE_PYTHON_CLASS_DEFINITIONS = `\nclass TreeNode:\n def __init__(self, val=0, left=None, right=None):\n self.val = val\n self.value = val\n self.left = left\n self.right = right\n def __getitem__(self, key):\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', None))\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', None))\n if key == 'left': return self.left\n if key == 'right': return self.right\n raise KeyError(key)\n def get(self, key, default=None):\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', default))\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', default))\n if key == 'left': return self.left\n if key == 'right': return self.right\n return default\n def __repr__(self):\n return f\"TreeNode({getattr(self, 'val', getattr(self, 'value', None))})\"\n\nclass ListNode:\n def __init__(self, val=0, next=None):\n self.val = val\n self.value = val\n self.next = next\n def __getitem__(self, key):\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', None))\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', None))\n if key == 'next': return self.next\n raise KeyError(key)\n def get(self, key, default=None):\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', default))\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', default))\n if key == 'next': return self.next\n return default\n def __repr__(self):\n return f\"ListNode({getattr(self, 'val', getattr(self, 'value', None))})\"\n`;\n\n/**\n * Python helper functions for converting dicts to TreeNode/ListNode.\n */\nexport const TEMPLATE_PYTHON_CONVERSION_HELPERS = `\ndef _ensure_node_value_aliases(node):\n if node is None:\n return node\n try:\n has_val = hasattr(node, 'val')\n has_value = hasattr(node, 'value')\n if has_value and not has_val:\n try:\n setattr(node, 'val', getattr(node, 'value'))\n except Exception:\n pass\n elif has_val and not has_value:\n try:\n setattr(node, 'value', getattr(node, 'val'))\n except Exception:\n pass\n except Exception:\n pass\n return node\n\ndef _dict_to_tree(d):\n if d is None:\n return None\n if not isinstance(d, dict):\n return d\n if 'val' not in d and 'value' not in d:\n return d\n node = TreeNode(d.get('val', d.get('value', 0)))\n _ensure_node_value_aliases(node)\n node.left = _dict_to_tree(d.get('left'))\n node.right = _dict_to_tree(d.get('right'))\n return node\n\ndef _dict_to_list(d, _refs=None):\n if _refs is None:\n _refs = {}\n if d is None:\n return None\n if not isinstance(d, dict):\n return d\n if '__ref__' in d:\n return _refs.get(d.get('__ref__'))\n if 'val' not in d and 'value' not in d:\n return d\n node = ListNode(d.get('val', d.get('value', 0)))\n _ensure_node_value_aliases(node)\n node_id = d.get('__id__')\n if isinstance(node_id, str) and node_id:\n _refs[node_id] = node\n node.next = _dict_to_list(d.get('next'), _refs)\n return node\n`;\n\n/**\n * Trace-mode Python serialization function.\n * Includes function filtering and node reference tracking for cycle-safe traces.\n */\nexport const TEMPLATE_PYTHON_TRACE_SERIALIZE_FUNCTION = `\n# Sentinel to mark skipped values (functions, etc.) - distinct from None\n_SKIP_SENTINEL = \"__TRACECODE_SKIP__\"\n_MAX_SERIALIZE_DEPTH = 48\n_MAX_OBJECT_FIELDS = 32\n\ndef _serialize(obj, depth=0, node_refs=None):\n if node_refs is None:\n node_refs = {}\n if isinstance(obj, (bool, int, str, type(None))):\n return obj\n elif isinstance(obj, float):\n if not math.isfinite(obj):\n if math.isnan(obj):\n return \"NaN\"\n return \"Infinity\" if obj > 0 else \"-Infinity\"\n return obj\n if depth > _MAX_SERIALIZE_DEPTH:\n return \"<max depth>\"\n elif isinstance(obj, (list, tuple)):\n return [_serialize(x, depth + 1, node_refs) for x in obj]\n elif getattr(obj, '__class__', None) and getattr(obj.__class__, '__name__', '') == 'deque':\n return [_serialize(x, depth + 1, node_refs) for x in obj]\n elif isinstance(obj, dict):\n return {str(k): _serialize(v, depth + 1, node_refs) for k, v in obj.items()}\n elif isinstance(obj, set):\n # Use try/except for sorting to handle heterogeneous sets\n try:\n sorted_vals = sorted([_serialize(x, depth + 1, node_refs) for x in obj])\n except TypeError:\n sorted_vals = [_serialize(x, depth + 1, node_refs) for x in obj]\n return {\"__type__\": \"set\", \"values\": sorted_vals}\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and (hasattr(obj, 'left') or hasattr(obj, 'right')):\n obj_ref = id(obj)\n if obj_ref in node_refs:\n return {\"__ref__\": node_refs[obj_ref]}\n node_id = f\"tree-{obj_ref}\"\n node_refs[obj_ref] = node_id\n result = {\n \"__type__\": \"TreeNode\",\n \"__id__\": node_id,\n \"val\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, node_refs),\n }\n if hasattr(obj, 'left'):\n result[\"left\"] = _serialize(obj.left, depth + 1, node_refs)\n if hasattr(obj, 'right'):\n result[\"right\"] = _serialize(obj.right, depth + 1, node_refs)\n return result\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and hasattr(obj, 'next'):\n obj_ref = id(obj)\n if obj_ref in node_refs:\n return {\"__ref__\": node_refs[obj_ref]}\n node_id = f\"list-{obj_ref}\"\n node_refs[obj_ref] = node_id\n result = {\n \"__type__\": \"ListNode\",\n \"__id__\": node_id,\n \"val\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, node_refs),\n }\n result[\"next\"] = _serialize(obj.next, depth + 1, node_refs)\n return result\n elif hasattr(obj, '__dict__'):\n obj_ref = id(obj)\n if obj_ref in node_refs:\n return {\"__ref__\": node_refs[obj_ref]}\n node_id = f\"object-{obj_ref}\"\n node_refs[obj_ref] = node_id\n class_name = getattr(getattr(obj, '__class__', None), '__name__', 'object')\n result = {\n \"__type__\": \"object\",\n \"__class__\": class_name,\n \"__id__\": node_id,\n }\n try:\n raw_fields = getattr(obj, '__dict__', None)\n except Exception:\n raw_fields = None\n if isinstance(raw_fields, dict):\n added = 0\n for key, value in raw_fields.items():\n key_str = str(key)\n if key_str.startswith('_'):\n continue\n if callable(value):\n continue\n result[key_str] = _serialize(value, depth + 1, node_refs)\n added += 1\n if added >= _MAX_OBJECT_FIELDS:\n result[\"__truncated__\"] = True\n break\n return result\n elif callable(obj):\n # Skip functions entirely - return sentinel\n return _SKIP_SENTINEL\n else:\n repr_str = repr(obj)\n # Filter out function-like representations (e.g., <function foo at 0x...>)\n if repr_str.startswith('<') and repr_str.endswith('>'):\n return _SKIP_SENTINEL\n return repr_str\n`;\n\n/**\n * Execute-mode Python serialization function.\n * Preserves current execute/interview output semantics.\n */\nexport const TEMPLATE_PYTHON_EXECUTE_SERIALIZE_FUNCTION = `\n_MAX_SERIALIZE_DEPTH = 48\n\ndef _serialize(obj, depth=0):\n if isinstance(obj, (bool, int, str, type(None))):\n return obj\n elif isinstance(obj, float):\n if not math.isfinite(obj):\n if math.isnan(obj):\n return \"NaN\"\n return \"Infinity\" if obj > 0 else \"-Infinity\"\n return obj\n if depth > _MAX_SERIALIZE_DEPTH:\n return \"<max depth>\"\n elif isinstance(obj, (list, tuple)):\n return [_serialize(x, depth + 1) for x in obj]\n elif getattr(obj, '__class__', None) and getattr(obj.__class__, '__name__', '') == 'deque':\n return [_serialize(x, depth + 1) for x in obj]\n elif isinstance(obj, dict):\n return {str(k): _serialize(v, depth + 1) for k, v in obj.items()}\n elif isinstance(obj, set):\n try:\n return {\"__type__\": \"set\", \"values\": sorted([_serialize(x, depth + 1) for x in obj])}\n except TypeError:\n return {\"__type__\": \"set\", \"values\": [_serialize(x, depth + 1) for x in obj]}\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and (hasattr(obj, 'left') or hasattr(obj, 'right')):\n result = {\"__type__\": \"TreeNode\", \"val\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}\n if hasattr(obj, 'left'):\n result[\"left\"] = _serialize(obj.left, depth + 1)\n if hasattr(obj, 'right'):\n result[\"right\"] = _serialize(obj.right, depth + 1)\n return result\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and hasattr(obj, 'next'):\n result = {\"__type__\": \"ListNode\", \"val\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}\n result[\"next\"] = _serialize(obj.next, depth + 1)\n return result\n elif callable(obj):\n return None\n else:\n repr_str = repr(obj)\n if repr_str.startswith('<') and repr_str.endswith('>'):\n return None\n return repr_str\n`;\n\n/**\n * Practice materialization serializer with strict safety limits and markers.\n */\nexport const TEMPLATE_PYTHON_PRACTICE_MATERIALIZE_SERIALIZE_FUNCTION = `\ndef _serialize(obj, depth=0, state=None):\n if state is None:\n state = {\"nodes\": 0, \"seen\": set()}\n if depth > 64:\n return \"__MAX_DEPTH__\"\n if isinstance(obj, (int, float, str, bool, type(None))):\n return obj\n\n state[\"nodes\"] += 1\n if state[\"nodes\"] > 600:\n return \"__MAX_NODES__\"\n\n if isinstance(obj, (list, tuple)):\n return [_serialize(x, depth + 1, state) for x in obj]\n elif isinstance(obj, dict):\n return {str(k): _serialize(v, depth + 1, state) for k, v in obj.items()}\n elif isinstance(obj, set):\n serialized = [_serialize(x, depth + 1, state) for x in obj]\n try:\n serialized = sorted(serialized)\n except TypeError:\n pass\n return {\"__type__\": \"set\", \"values\": serialized}\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and (hasattr(obj, 'left') or hasattr(obj, 'right')):\n obj_id = id(obj)\n if obj_id in state[\"seen\"]:\n return \"__CYCLE__\"\n state[\"seen\"].add(obj_id)\n result = {\"__type__\": \"TreeNode\", \"val\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, state)}\n if hasattr(obj, 'left'):\n result[\"left\"] = _serialize(obj.left, depth + 1, state)\n if hasattr(obj, 'right'):\n result[\"right\"] = _serialize(obj.right, depth + 1, state)\n state[\"seen\"].remove(obj_id)\n return result\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and hasattr(obj, 'next'):\n obj_id = id(obj)\n if obj_id in state[\"seen\"]:\n return \"__CYCLE__\"\n state[\"seen\"].add(obj_id)\n result = {\"__type__\": \"ListNode\", \"val\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, state)}\n result[\"next\"] = _serialize(obj.next, depth + 1, state)\n state[\"seen\"].remove(obj_id)\n return result\n else:\n return repr(obj)\n`;\n\n/**\n * Interview materialization serializer, preserving current legacy behavior.\n */\nexport const TEMPLATE_PYTHON_INTERVIEW_MATERIALIZE_SERIALIZE_FUNCTION = `\ndef _serialize(obj, depth=0):\n if depth > 10:\n return \"<max depth>\"\n if isinstance(obj, (int, float, str, bool, type(None))):\n return obj\n elif isinstance(obj, (list, tuple)):\n return [_serialize(x, depth + 1) for x in obj]\n elif isinstance(obj, dict):\n return {str(k): _serialize(v, depth + 1) for k, v in obj.items()}\n elif isinstance(obj, set):\n try:\n return {\"__type__\": \"set\", \"values\": sorted([_serialize(x, depth + 1) for x in obj])}\n except TypeError:\n return {\"__type__\": \"set\", \"values\": [_serialize(x, depth + 1) for x in obj]}\n elif hasattr(obj, 'val') and (hasattr(obj, 'left') or hasattr(obj, 'right')):\n result = {\"__type__\": \"TreeNode\", \"val\": _serialize(getattr(obj, 'val', None), depth + 1)}\n if hasattr(obj, 'left'):\n result[\"left\"] = _serialize(obj.left, depth + 1)\n if hasattr(obj, 'right'):\n result[\"right\"] = _serialize(obj.right, depth + 1)\n return result\n elif hasattr(obj, 'val') and hasattr(obj, 'next'):\n result = {\"__type__\": \"ListNode\", \"val\": _serialize(getattr(obj, 'val', None), depth + 1)}\n result[\"next\"] = _serialize(obj.next, depth + 1)\n return result\n else:\n return repr(obj)\n`;\n\n/**\n * Backwards-compatible alias. Use TEMPLATE_PYTHON_EXECUTE_SERIALIZE_FUNCTION\n * for new callsites.\n */\nexport const TEMPLATE_PYTHON_SERIALIZE_FUNCTION = TEMPLATE_PYTHON_EXECUTE_SERIALIZE_FUNCTION;\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../packages/harness-python/src/index.ts","../packages/harness-python/src/generated/python-harness-snippets.ts","../packages/harness-python/src/python-harness.ts","../packages/harness-python/src/python-harness-template.ts"],"sourcesContent":["export * from './python-harness';\nexport * from './python-harness-template';\nexport * from './generated/python-harness-snippets';\n","/**\n * AUTO-GENERATED FILE. DO NOT EDIT MANUALLY.\n *\n * Source: packages/harness-python/src/python-harness-template.ts\n * Generator: scripts/generate-python-harness-artifacts.ts\n */\n\n// @ts-nocheck\n\nexport function toPythonLiteral(value){if(value===null||value===void 0){return\"None\"}if(typeof value===\"boolean\"){return value?\"True\":\"False\"}if(typeof value===\"number\"){return String(value)}if(typeof value===\"string\"){return JSON.stringify(value)}if(Array.isArray(value)){return\"[\"+value.map(toPythonLiteral).join(\", \")+\"]\"}if(typeof value===\"object\"){const entries=Object.entries(value).map(([k,v])=>`${JSON.stringify(k)}: ${toPythonLiteral(v)}`).join(\", \");return\"{\"+entries+\"}\"}return JSON.stringify(value)}\n\nexport const PYTHON_CLASS_DEFINITIONS = \"\\nclass TreeNode:\\n def __init__(self, val=0, left=None, right=None):\\n self.val = val\\n self.value = val\\n self.left = left\\n self.right = right\\n def __getitem__(self, key):\\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', None))\\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', None))\\n if key == 'left': return self.left\\n if key == 'right': return self.right\\n raise KeyError(key)\\n def get(self, key, default=None):\\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', default))\\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', default))\\n if key == 'left': return self.left\\n if key == 'right': return self.right\\n return default\\n def __repr__(self):\\n return f\\\"TreeNode({getattr(self, 'val', getattr(self, 'value', None))})\\\"\\n\\nclass ListNode:\\n def __init__(self, val=0, next=None):\\n self.val = val\\n self.value = val\\n self.next = next\\n def __getitem__(self, key):\\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', None))\\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', None))\\n if key == 'next': return self.next\\n raise KeyError(key)\\n def get(self, key, default=None):\\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', default))\\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', default))\\n if key == 'next': return self.next\\n return default\\n def __repr__(self):\\n return f\\\"ListNode({getattr(self, 'val', getattr(self, 'value', None))})\\\"\\n\";\n\nexport const PYTHON_CONVERSION_HELPERS = \"\\ndef _ensure_node_value_aliases(node):\\n if node is None:\\n return node\\n try:\\n has_val = hasattr(node, 'val')\\n has_value = hasattr(node, 'value')\\n if has_value and not has_val:\\n try:\\n setattr(node, 'val', getattr(node, 'value'))\\n except Exception:\\n pass\\n elif has_val and not has_value:\\n try:\\n setattr(node, 'value', getattr(node, 'val'))\\n except Exception:\\n pass\\n except Exception:\\n pass\\n return node\\n\\ndef _dict_to_tree(d):\\n if d is None:\\n return None\\n if not isinstance(d, dict):\\n return d\\n if 'val' not in d and 'value' not in d:\\n return d\\n node = TreeNode(d.get('val', d.get('value', 0)))\\n _ensure_node_value_aliases(node)\\n node.left = _dict_to_tree(d.get('left'))\\n node.right = _dict_to_tree(d.get('right'))\\n return node\\n\\ndef _dict_to_list(d, _refs=None):\\n if _refs is None:\\n _refs = {}\\n if d is None:\\n return None\\n if not isinstance(d, dict):\\n return d\\n if '__ref__' in d:\\n return _refs.get(d.get('__ref__'))\\n if 'val' not in d and 'value' not in d:\\n return d\\n node = ListNode(d.get('val', d.get('value', 0)))\\n _ensure_node_value_aliases(node)\\n node_id = d.get('__id__')\\n if isinstance(node_id, str) and node_id:\\n _refs[node_id] = node\\n node.next = _dict_to_list(d.get('next'), _refs)\\n return node\\n\";\n\nexport const PYTHON_TRACE_SERIALIZE_FUNCTION = \"\\n# Sentinel to mark skipped values (functions, etc.) - distinct from None\\n_SKIP_SENTINEL = \\\"__TRACECODE_SKIP__\\\"\\n_MAX_SERIALIZE_DEPTH = 48\\n_MAX_OBJECT_FIELDS = 32\\n\\ndef _serialize(obj, depth=0, node_refs=None):\\n if node_refs is None:\\n node_refs = {}\\n if isinstance(obj, (bool, int, str, type(None))):\\n return obj\\n elif isinstance(obj, float):\\n if not math.isfinite(obj):\\n if math.isnan(obj):\\n return \\\"NaN\\\"\\n return \\\"Infinity\\\" if obj > 0 else \\\"-Infinity\\\"\\n return obj\\n if depth > _MAX_SERIALIZE_DEPTH:\\n return \\\"<max depth>\\\"\\n elif isinstance(obj, (list, tuple)):\\n return [_serialize(x, depth + 1, node_refs) for x in obj]\\n elif getattr(obj, '__class__', None) and getattr(obj.__class__, '__name__', '') == 'deque':\\n return [_serialize(x, depth + 1, node_refs) for x in obj]\\n elif isinstance(obj, dict):\\n return {str(k): _serialize(v, depth + 1, node_refs) for k, v in obj.items()}\\n elif isinstance(obj, set):\\n # Use try/except for sorting to handle heterogeneous sets\\n try:\\n sorted_vals = sorted([_serialize(x, depth + 1, node_refs) for x in obj])\\n except TypeError:\\n sorted_vals = [_serialize(x, depth + 1, node_refs) for x in obj]\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": sorted_vals}\\n elif isinstance(obj, TreeNode):\\n obj_ref = id(obj)\\n if obj_ref in node_refs:\\n return {\\\"__ref__\\\": node_refs[obj_ref]}\\n node_id = f\\\"tree-{obj_ref}\\\"\\n node_refs[obj_ref] = node_id\\n result = {\\n \\\"__type__\\\": \\\"TreeNode\\\",\\n \\\"__id__\\\": node_id,\\n \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, node_refs),\\n }\\n if hasattr(obj, 'left'):\\n result[\\\"left\\\"] = _serialize(obj.left, depth + 1, node_refs)\\n if hasattr(obj, 'right'):\\n result[\\\"right\\\"] = _serialize(obj.right, depth + 1, node_refs)\\n return result\\n elif isinstance(obj, ListNode):\\n obj_ref = id(obj)\\n if obj_ref in node_refs:\\n return {\\\"__ref__\\\": node_refs[obj_ref]}\\n node_id = f\\\"list-{obj_ref}\\\"\\n node_refs[obj_ref] = node_id\\n result = {\\n \\\"__type__\\\": \\\"ListNode\\\",\\n \\\"__id__\\\": node_id,\\n \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, node_refs),\\n }\\n result[\\\"next\\\"] = _serialize(obj.next, depth + 1, node_refs)\\n return result\\n elif hasattr(obj, '__dict__'):\\n obj_ref = id(obj)\\n if obj_ref in node_refs:\\n return {\\\"__ref__\\\": node_refs[obj_ref]}\\n node_id = f\\\"object-{obj_ref}\\\"\\n node_refs[obj_ref] = node_id\\n class_name = getattr(getattr(obj, '__class__', None), '__name__', 'object')\\n result = {\\n \\\"__type__\\\": \\\"object\\\",\\n \\\"__class__\\\": class_name,\\n \\\"__id__\\\": node_id,\\n }\\n try:\\n raw_fields = getattr(obj, '__dict__', None)\\n except Exception:\\n raw_fields = None\\n if isinstance(raw_fields, dict):\\n added = 0\\n for key, value in raw_fields.items():\\n key_str = str(key)\\n if key_str.startswith('_'):\\n continue\\n if callable(value):\\n continue\\n result[key_str] = _serialize(value, depth + 1, node_refs)\\n added += 1\\n if added >= _MAX_OBJECT_FIELDS:\\n result[\\\"__truncated__\\\"] = True\\n break\\n return result\\n elif callable(obj):\\n # Skip functions entirely - return sentinel\\n return _SKIP_SENTINEL\\n else:\\n repr_str = repr(obj)\\n # Filter out function-like representations (e.g., <function foo at 0x...>)\\n if repr_str.startswith('<') and repr_str.endswith('>'):\\n return _SKIP_SENTINEL\\n return repr_str\\n\";\n\nexport const PYTHON_EXECUTE_SERIALIZE_FUNCTION = \"\\n_MAX_SERIALIZE_DEPTH = 48\\n\\ndef _serialize(obj, depth=0):\\n if isinstance(obj, (bool, int, str, type(None))):\\n return obj\\n elif isinstance(obj, float):\\n if not math.isfinite(obj):\\n if math.isnan(obj):\\n return \\\"NaN\\\"\\n return \\\"Infinity\\\" if obj > 0 else \\\"-Infinity\\\"\\n return obj\\n if depth > _MAX_SERIALIZE_DEPTH:\\n return \\\"<max depth>\\\"\\n elif isinstance(obj, (list, tuple)):\\n return [_serialize(x, depth + 1) for x in obj]\\n elif getattr(obj, '__class__', None) and getattr(obj.__class__, '__name__', '') == 'deque':\\n return [_serialize(x, depth + 1) for x in obj]\\n elif isinstance(obj, dict):\\n return {str(k): _serialize(v, depth + 1) for k, v in obj.items()}\\n elif isinstance(obj, set):\\n try:\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": sorted([_serialize(x, depth + 1) for x in obj])}\\n except TypeError:\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": [_serialize(x, depth + 1) for x in obj]}\\n elif isinstance(obj, TreeNode):\\n result = {\\\"__type__\\\": \\\"TreeNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}\\n if hasattr(obj, 'left'):\\n result[\\\"left\\\"] = _serialize(obj.left, depth + 1)\\n if hasattr(obj, 'right'):\\n result[\\\"right\\\"] = _serialize(obj.right, depth + 1)\\n return result\\n elif isinstance(obj, ListNode):\\n result = {\\\"__type__\\\": \\\"ListNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}\\n result[\\\"next\\\"] = _serialize(obj.next, depth + 1)\\n return result\\n elif callable(obj):\\n return None\\n else:\\n repr_str = repr(obj)\\n if repr_str.startswith('<') and repr_str.endswith('>'):\\n return None\\n return repr_str\\n\";\n\nexport const PYTHON_PRACTICE_MATERIALIZE_SERIALIZE_FUNCTION = \"\\ndef _serialize(obj, depth=0, state=None):\\n if state is None:\\n state = {\\\"nodes\\\": 0, \\\"seen\\\": set()}\\n if depth > 64:\\n return \\\"__MAX_DEPTH__\\\"\\n if isinstance(obj, (int, float, str, bool, type(None))):\\n return obj\\n\\n state[\\\"nodes\\\"] += 1\\n if state[\\\"nodes\\\"] > 600:\\n return \\\"__MAX_NODES__\\\"\\n\\n if isinstance(obj, (list, tuple)):\\n return [_serialize(x, depth + 1, state) for x in obj]\\n elif isinstance(obj, dict):\\n return {str(k): _serialize(v, depth + 1, state) for k, v in obj.items()}\\n elif isinstance(obj, set):\\n serialized = [_serialize(x, depth + 1, state) for x in obj]\\n try:\\n serialized = sorted(serialized)\\n except TypeError:\\n pass\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": serialized}\\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and (hasattr(obj, 'left') or hasattr(obj, 'right')):\\n obj_id = id(obj)\\n if obj_id in state[\\\"seen\\\"]:\\n return \\\"__CYCLE__\\\"\\n state[\\\"seen\\\"].add(obj_id)\\n result = {\\\"__type__\\\": \\\"TreeNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, state)}\\n if hasattr(obj, 'left'):\\n result[\\\"left\\\"] = _serialize(obj.left, depth + 1, state)\\n if hasattr(obj, 'right'):\\n result[\\\"right\\\"] = _serialize(obj.right, depth + 1, state)\\n state[\\\"seen\\\"].remove(obj_id)\\n return result\\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and hasattr(obj, 'next'):\\n obj_id = id(obj)\\n if obj_id in state[\\\"seen\\\"]:\\n return \\\"__CYCLE__\\\"\\n state[\\\"seen\\\"].add(obj_id)\\n result = {\\\"__type__\\\": \\\"ListNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, state)}\\n result[\\\"next\\\"] = _serialize(obj.next, depth + 1, state)\\n state[\\\"seen\\\"].remove(obj_id)\\n return result\\n else:\\n return repr(obj)\\n\";\n\nexport const PYTHON_INTERVIEW_MATERIALIZE_SERIALIZE_FUNCTION = \"\\ndef _serialize(obj, depth=0):\\n if depth > 10:\\n return \\\"<max depth>\\\"\\n if isinstance(obj, (int, float, str, bool, type(None))):\\n return obj\\n elif isinstance(obj, (list, tuple)):\\n return [_serialize(x, depth + 1) for x in obj]\\n elif isinstance(obj, dict):\\n return {str(k): _serialize(v, depth + 1) for k, v in obj.items()}\\n elif isinstance(obj, set):\\n try:\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": sorted([_serialize(x, depth + 1) for x in obj])}\\n except TypeError:\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": [_serialize(x, depth + 1) for x in obj]}\\n elif isinstance(obj, TreeNode):\\n result = {\\\"__type__\\\": \\\"TreeNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', None), depth + 1)}\\n if hasattr(obj, 'left'):\\n result[\\\"left\\\"] = _serialize(obj.left, depth + 1)\\n if hasattr(obj, 'right'):\\n result[\\\"right\\\"] = _serialize(obj.right, depth + 1)\\n return result\\n elif isinstance(obj, ListNode):\\n result = {\\\"__type__\\\": \\\"ListNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', None), depth + 1)}\\n result[\\\"next\\\"] = _serialize(obj.next, depth + 1)\\n return result\\n else:\\n return repr(obj)\\n\";\n\nexport const PYTHON_SERIALIZE_FUNCTION = \"\\n_MAX_SERIALIZE_DEPTH = 48\\n\\ndef _serialize(obj, depth=0):\\n if isinstance(obj, (bool, int, str, type(None))):\\n return obj\\n elif isinstance(obj, float):\\n if not math.isfinite(obj):\\n if math.isnan(obj):\\n return \\\"NaN\\\"\\n return \\\"Infinity\\\" if obj > 0 else \\\"-Infinity\\\"\\n return obj\\n if depth > _MAX_SERIALIZE_DEPTH:\\n return \\\"<max depth>\\\"\\n elif isinstance(obj, (list, tuple)):\\n return [_serialize(x, depth + 1) for x in obj]\\n elif getattr(obj, '__class__', None) and getattr(obj.__class__, '__name__', '') == 'deque':\\n return [_serialize(x, depth + 1) for x in obj]\\n elif isinstance(obj, dict):\\n return {str(k): _serialize(v, depth + 1) for k, v in obj.items()}\\n elif isinstance(obj, set):\\n try:\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": sorted([_serialize(x, depth + 1) for x in obj])}\\n except TypeError:\\n return {\\\"__type__\\\": \\\"set\\\", \\\"values\\\": [_serialize(x, depth + 1) for x in obj]}\\n elif isinstance(obj, TreeNode):\\n result = {\\\"__type__\\\": \\\"TreeNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}\\n if hasattr(obj, 'left'):\\n result[\\\"left\\\"] = _serialize(obj.left, depth + 1)\\n if hasattr(obj, 'right'):\\n result[\\\"right\\\"] = _serialize(obj.right, depth + 1)\\n return result\\n elif isinstance(obj, ListNode):\\n result = {\\\"__type__\\\": \\\"ListNode\\\", \\\"val\\\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}\\n result[\\\"next\\\"] = _serialize(obj.next, depth + 1)\\n return result\\n elif callable(obj):\\n return None\\n else:\\n repr_str = repr(obj)\\n if repr_str.startswith('<') and repr_str.endswith('>'):\\n return None\\n return repr_str\\n\";\n","/**\n * Python Harness Code\n *\n * Shared Python harness helpers for scripts and Node-side validation paths.\n *\n * Canonical source:\n * - packages/harness-python/src/python-harness-template.ts\n *\n * Generated artifacts (via scripts/generate-python-harness-artifacts.ts):\n * - packages/harness-python/src/generated/python-harness-snippets.ts (consumed here)\n * - workers/python/generated-python-harness-snippets.js\n *\n * Note: workers/python/pyodide-worker.js still contains runtime-specific embedded\n * harness code. Keep it aligned via:\n * pnpm test:python-harness-sync\n */\n\nimport {\n toPythonLiteral,\n PYTHON_CLASS_DEFINITIONS,\n PYTHON_CONVERSION_HELPERS,\n PYTHON_TRACE_SERIALIZE_FUNCTION,\n PYTHON_EXECUTE_SERIALIZE_FUNCTION,\n PYTHON_PRACTICE_MATERIALIZE_SERIALIZE_FUNCTION,\n PYTHON_INTERVIEW_MATERIALIZE_SERIALIZE_FUNCTION,\n PYTHON_SERIALIZE_FUNCTION,\n} from './generated/python-harness-snippets';\n\nexport {\n toPythonLiteral,\n PYTHON_CLASS_DEFINITIONS,\n PYTHON_CONVERSION_HELPERS,\n PYTHON_TRACE_SERIALIZE_FUNCTION,\n PYTHON_EXECUTE_SERIALIZE_FUNCTION,\n PYTHON_PRACTICE_MATERIALIZE_SERIALIZE_FUNCTION,\n PYTHON_INTERVIEW_MATERIALIZE_SERIALIZE_FUNCTION,\n PYTHON_SERIALIZE_FUNCTION,\n};\n\nexport function identifyConversions(inputs: Record<string, unknown>): {\n treeKeys: string[];\n listKeys: string[];\n} {\n const treeKeys: string[] = [];\n const listKeys: string[] = [];\n \n for (const [key, value] of Object.entries(inputs)) {\n if (\n value &&\n typeof value === 'object' &&\n !Array.isArray(value) &&\n ('val' in (value as Record<string, unknown>) || 'value' in (value as Record<string, unknown>))\n ) {\n const obj = value as Record<string, unknown>;\n const hasLeft = 'left' in obj;\n const hasRight = 'right' in obj;\n const hasNext = 'next' in obj;\n \n if (hasLeft || hasRight) {\n treeKeys.push(key);\n } else if (hasNext) {\n listKeys.push(key);\n } else {\n // Default to tree for backwards compatibility (just 'val')\n treeKeys.push(key);\n }\n }\n }\n \n return { treeKeys, listKeys };\n}\n\n/**\n * Generate Python code for converting tree/list inputs.\n */\nexport function generateConversionCode(inputs: Record<string, unknown>): string {\n const { treeKeys, listKeys } = identifyConversions(inputs);\n \n const lines: string[] = [];\n \n for (const key of treeKeys) {\n lines.push(`${key} = _dict_to_tree(${key})`);\n }\n \n for (const key of listKeys) {\n lines.push(`${key} = _dict_to_list(${key})`);\n }\n \n return lines.join('\\n');\n}\n\n/**\n * Generate Python code for setting up inputs.\n */\nexport function generateInputSetup(inputs: Record<string, unknown>): string {\n return Object.entries(inputs)\n .map(([key, value]) => `${key} = ${toPythonLiteral(value)}`)\n .join('\\n');\n}\n\n/**\n * Generate a complete Python script for running a solution.\n * This is used by the validation script to run solutions via subprocess.\n */\nexport function generateSolutionScript(\n solutionCode: string,\n functionName: string,\n inputs: Record<string, unknown>\n): string {\n const inputSetup = generateInputSetup(inputs);\n const conversionCode = generateConversionCode(inputs);\n const paramList = Object.keys(inputs)\n .map((key) => `${key}=${key}`)\n .join(', ');\n \n return `\nimport json\nimport sys\n\n${PYTHON_CLASS_DEFINITIONS}\n\n${PYTHON_CONVERSION_HELPERS}\n\n${PYTHON_SERIALIZE_FUNCTION}\n\n# Solution code\n${solutionCode}\n\n# Set up inputs\n${inputSetup}\n\n# Convert tree/list inputs\n${conversionCode}\n\n# Run the function\ntry:\n _result = ${functionName}(${paramList})\n print(json.dumps({\"success\": True, \"output\": _serialize(_result)}))\nexcept Exception as e:\n print(json.dumps({\"success\": False, \"error\": f\"{type(e).__name__}: {str(e)}\"}))\n`;\n}\n","/**\n * Canonical Python Harness Template\n *\n * This file is the single source of truth for shared harness snippets.\n * Generated artifacts:\n * - packages/harness-python/src/generated/python-harness-snippets.ts\n * - workers/python/generated-python-harness-snippets.js\n */\n\n/**\n * Convert a JavaScript value to a Python literal string.\n * Handles null -> None, booleans -> True/False, and nested structures.\n */\nexport function templateToPythonLiteral(value: unknown): string {\n if (value === null || value === undefined) {\n return 'None';\n }\n if (typeof value === 'boolean') {\n return value ? 'True' : 'False';\n }\n if (typeof value === 'number') {\n return String(value);\n }\n if (typeof value === 'string') {\n return JSON.stringify(value);\n }\n if (Array.isArray(value)) {\n return '[' + value.map(templateToPythonLiteral).join(', ') + ']';\n }\n if (typeof value === 'object') {\n const entries = Object.entries(value as Record<string, unknown>)\n .map(([k, v]) => `${JSON.stringify(k)}: ${templateToPythonLiteral(v)}`)\n .join(', ');\n return '{' + entries + '}';\n }\n return JSON.stringify(value);\n}\n\n/**\n * Python class definitions for TreeNode and ListNode.\n * These must match the worker definitions.\n */\nexport const TEMPLATE_PYTHON_CLASS_DEFINITIONS = `\nclass TreeNode:\n def __init__(self, val=0, left=None, right=None):\n self.val = val\n self.value = val\n self.left = left\n self.right = right\n def __getitem__(self, key):\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', None))\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', None))\n if key == 'left': return self.left\n if key == 'right': return self.right\n raise KeyError(key)\n def get(self, key, default=None):\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', default))\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', default))\n if key == 'left': return self.left\n if key == 'right': return self.right\n return default\n def __repr__(self):\n return f\"TreeNode({getattr(self, 'val', getattr(self, 'value', None))})\"\n\nclass ListNode:\n def __init__(self, val=0, next=None):\n self.val = val\n self.value = val\n self.next = next\n def __getitem__(self, key):\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', None))\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', None))\n if key == 'next': return self.next\n raise KeyError(key)\n def get(self, key, default=None):\n if key == 'val': return getattr(self, 'val', getattr(self, 'value', default))\n if key == 'value': return getattr(self, 'value', getattr(self, 'val', default))\n if key == 'next': return self.next\n return default\n def __repr__(self):\n return f\"ListNode({getattr(self, 'val', getattr(self, 'value', None))})\"\n`;\n\n/**\n * Python helper functions for converting dicts to TreeNode/ListNode.\n */\nexport const TEMPLATE_PYTHON_CONVERSION_HELPERS = `\ndef _ensure_node_value_aliases(node):\n if node is None:\n return node\n try:\n has_val = hasattr(node, 'val')\n has_value = hasattr(node, 'value')\n if has_value and not has_val:\n try:\n setattr(node, 'val', getattr(node, 'value'))\n except Exception:\n pass\n elif has_val and not has_value:\n try:\n setattr(node, 'value', getattr(node, 'val'))\n except Exception:\n pass\n except Exception:\n pass\n return node\n\ndef _dict_to_tree(d):\n if d is None:\n return None\n if not isinstance(d, dict):\n return d\n if 'val' not in d and 'value' not in d:\n return d\n node = TreeNode(d.get('val', d.get('value', 0)))\n _ensure_node_value_aliases(node)\n node.left = _dict_to_tree(d.get('left'))\n node.right = _dict_to_tree(d.get('right'))\n return node\n\ndef _dict_to_list(d, _refs=None):\n if _refs is None:\n _refs = {}\n if d is None:\n return None\n if not isinstance(d, dict):\n return d\n if '__ref__' in d:\n return _refs.get(d.get('__ref__'))\n if 'val' not in d and 'value' not in d:\n return d\n node = ListNode(d.get('val', d.get('value', 0)))\n _ensure_node_value_aliases(node)\n node_id = d.get('__id__')\n if isinstance(node_id, str) and node_id:\n _refs[node_id] = node\n node.next = _dict_to_list(d.get('next'), _refs)\n return node\n`;\n\n/**\n * Trace-mode Python serialization function.\n * Includes function filtering and node reference tracking for cycle-safe traces.\n */\nexport const TEMPLATE_PYTHON_TRACE_SERIALIZE_FUNCTION = `\n# Sentinel to mark skipped values (functions, etc.) - distinct from None\n_SKIP_SENTINEL = \"__TRACECODE_SKIP__\"\n_MAX_SERIALIZE_DEPTH = 48\n_MAX_OBJECT_FIELDS = 32\n\ndef _serialize(obj, depth=0, node_refs=None):\n if node_refs is None:\n node_refs = {}\n if isinstance(obj, (bool, int, str, type(None))):\n return obj\n elif isinstance(obj, float):\n if not math.isfinite(obj):\n if math.isnan(obj):\n return \"NaN\"\n return \"Infinity\" if obj > 0 else \"-Infinity\"\n return obj\n if depth > _MAX_SERIALIZE_DEPTH:\n return \"<max depth>\"\n elif isinstance(obj, (list, tuple)):\n return [_serialize(x, depth + 1, node_refs) for x in obj]\n elif getattr(obj, '__class__', None) and getattr(obj.__class__, '__name__', '') == 'deque':\n return [_serialize(x, depth + 1, node_refs) for x in obj]\n elif isinstance(obj, dict):\n return {str(k): _serialize(v, depth + 1, node_refs) for k, v in obj.items()}\n elif isinstance(obj, set):\n # Use try/except for sorting to handle heterogeneous sets\n try:\n sorted_vals = sorted([_serialize(x, depth + 1, node_refs) for x in obj])\n except TypeError:\n sorted_vals = [_serialize(x, depth + 1, node_refs) for x in obj]\n return {\"__type__\": \"set\", \"values\": sorted_vals}\n elif isinstance(obj, TreeNode):\n obj_ref = id(obj)\n if obj_ref in node_refs:\n return {\"__ref__\": node_refs[obj_ref]}\n node_id = f\"tree-{obj_ref}\"\n node_refs[obj_ref] = node_id\n result = {\n \"__type__\": \"TreeNode\",\n \"__id__\": node_id,\n \"val\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, node_refs),\n }\n if hasattr(obj, 'left'):\n result[\"left\"] = _serialize(obj.left, depth + 1, node_refs)\n if hasattr(obj, 'right'):\n result[\"right\"] = _serialize(obj.right, depth + 1, node_refs)\n return result\n elif isinstance(obj, ListNode):\n obj_ref = id(obj)\n if obj_ref in node_refs:\n return {\"__ref__\": node_refs[obj_ref]}\n node_id = f\"list-{obj_ref}\"\n node_refs[obj_ref] = node_id\n result = {\n \"__type__\": \"ListNode\",\n \"__id__\": node_id,\n \"val\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, node_refs),\n }\n result[\"next\"] = _serialize(obj.next, depth + 1, node_refs)\n return result\n elif hasattr(obj, '__dict__'):\n obj_ref = id(obj)\n if obj_ref in node_refs:\n return {\"__ref__\": node_refs[obj_ref]}\n node_id = f\"object-{obj_ref}\"\n node_refs[obj_ref] = node_id\n class_name = getattr(getattr(obj, '__class__', None), '__name__', 'object')\n result = {\n \"__type__\": \"object\",\n \"__class__\": class_name,\n \"__id__\": node_id,\n }\n try:\n raw_fields = getattr(obj, '__dict__', None)\n except Exception:\n raw_fields = None\n if isinstance(raw_fields, dict):\n added = 0\n for key, value in raw_fields.items():\n key_str = str(key)\n if key_str.startswith('_'):\n continue\n if callable(value):\n continue\n result[key_str] = _serialize(value, depth + 1, node_refs)\n added += 1\n if added >= _MAX_OBJECT_FIELDS:\n result[\"__truncated__\"] = True\n break\n return result\n elif callable(obj):\n # Skip functions entirely - return sentinel\n return _SKIP_SENTINEL\n else:\n repr_str = repr(obj)\n # Filter out function-like representations (e.g., <function foo at 0x...>)\n if repr_str.startswith('<') and repr_str.endswith('>'):\n return _SKIP_SENTINEL\n return repr_str\n`;\n\n/**\n * Execute-mode Python serialization function.\n * Preserves current execute/interview output semantics.\n */\nexport const TEMPLATE_PYTHON_EXECUTE_SERIALIZE_FUNCTION = `\n_MAX_SERIALIZE_DEPTH = 48\n\ndef _serialize(obj, depth=0):\n if isinstance(obj, (bool, int, str, type(None))):\n return obj\n elif isinstance(obj, float):\n if not math.isfinite(obj):\n if math.isnan(obj):\n return \"NaN\"\n return \"Infinity\" if obj > 0 else \"-Infinity\"\n return obj\n if depth > _MAX_SERIALIZE_DEPTH:\n return \"<max depth>\"\n elif isinstance(obj, (list, tuple)):\n return [_serialize(x, depth + 1) for x in obj]\n elif getattr(obj, '__class__', None) and getattr(obj.__class__, '__name__', '') == 'deque':\n return [_serialize(x, depth + 1) for x in obj]\n elif isinstance(obj, dict):\n return {str(k): _serialize(v, depth + 1) for k, v in obj.items()}\n elif isinstance(obj, set):\n try:\n return {\"__type__\": \"set\", \"values\": sorted([_serialize(x, depth + 1) for x in obj])}\n except TypeError:\n return {\"__type__\": \"set\", \"values\": [_serialize(x, depth + 1) for x in obj]}\n elif isinstance(obj, TreeNode):\n result = {\"__type__\": \"TreeNode\", \"val\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}\n if hasattr(obj, 'left'):\n result[\"left\"] = _serialize(obj.left, depth + 1)\n if hasattr(obj, 'right'):\n result[\"right\"] = _serialize(obj.right, depth + 1)\n return result\n elif isinstance(obj, ListNode):\n result = {\"__type__\": \"ListNode\", \"val\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1)}\n result[\"next\"] = _serialize(obj.next, depth + 1)\n return result\n elif callable(obj):\n return None\n else:\n repr_str = repr(obj)\n if repr_str.startswith('<') and repr_str.endswith('>'):\n return None\n return repr_str\n`;\n\n/**\n * Practice materialization serializer with strict safety limits and markers.\n */\nexport const TEMPLATE_PYTHON_PRACTICE_MATERIALIZE_SERIALIZE_FUNCTION = `\ndef _serialize(obj, depth=0, state=None):\n if state is None:\n state = {\"nodes\": 0, \"seen\": set()}\n if depth > 64:\n return \"__MAX_DEPTH__\"\n if isinstance(obj, (int, float, str, bool, type(None))):\n return obj\n\n state[\"nodes\"] += 1\n if state[\"nodes\"] > 600:\n return \"__MAX_NODES__\"\n\n if isinstance(obj, (list, tuple)):\n return [_serialize(x, depth + 1, state) for x in obj]\n elif isinstance(obj, dict):\n return {str(k): _serialize(v, depth + 1, state) for k, v in obj.items()}\n elif isinstance(obj, set):\n serialized = [_serialize(x, depth + 1, state) for x in obj]\n try:\n serialized = sorted(serialized)\n except TypeError:\n pass\n return {\"__type__\": \"set\", \"values\": serialized}\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and (hasattr(obj, 'left') or hasattr(obj, 'right')):\n obj_id = id(obj)\n if obj_id in state[\"seen\"]:\n return \"__CYCLE__\"\n state[\"seen\"].add(obj_id)\n result = {\"__type__\": \"TreeNode\", \"val\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, state)}\n if hasattr(obj, 'left'):\n result[\"left\"] = _serialize(obj.left, depth + 1, state)\n if hasattr(obj, 'right'):\n result[\"right\"] = _serialize(obj.right, depth + 1, state)\n state[\"seen\"].remove(obj_id)\n return result\n elif (hasattr(obj, 'val') or hasattr(obj, 'value')) and hasattr(obj, 'next'):\n obj_id = id(obj)\n if obj_id in state[\"seen\"]:\n return \"__CYCLE__\"\n state[\"seen\"].add(obj_id)\n result = {\"__type__\": \"ListNode\", \"val\": _serialize(getattr(obj, 'val', getattr(obj, 'value', None)), depth + 1, state)}\n result[\"next\"] = _serialize(obj.next, depth + 1, state)\n state[\"seen\"].remove(obj_id)\n return result\n else:\n return repr(obj)\n`;\n\n/**\n * Interview materialization serializer, preserving current legacy behavior.\n */\nexport const TEMPLATE_PYTHON_INTERVIEW_MATERIALIZE_SERIALIZE_FUNCTION = `\ndef _serialize(obj, depth=0):\n if depth > 10:\n return \"<max depth>\"\n if isinstance(obj, (int, float, str, bool, type(None))):\n return obj\n elif isinstance(obj, (list, tuple)):\n return [_serialize(x, depth + 1) for x in obj]\n elif isinstance(obj, dict):\n return {str(k): _serialize(v, depth + 1) for k, v in obj.items()}\n elif isinstance(obj, set):\n try:\n return {\"__type__\": \"set\", \"values\": sorted([_serialize(x, depth + 1) for x in obj])}\n except TypeError:\n return {\"__type__\": \"set\", \"values\": [_serialize(x, depth + 1) for x in obj]}\n elif isinstance(obj, TreeNode):\n result = {\"__type__\": \"TreeNode\", \"val\": _serialize(getattr(obj, 'val', None), depth + 1)}\n if hasattr(obj, 'left'):\n result[\"left\"] = _serialize(obj.left, depth + 1)\n if hasattr(obj, 'right'):\n result[\"right\"] = _serialize(obj.right, depth + 1)\n return result\n elif isinstance(obj, ListNode):\n result = {\"__type__\": \"ListNode\", \"val\": _serialize(getattr(obj, 'val', None), depth + 1)}\n result[\"next\"] = _serialize(obj.next, depth + 1)\n return result\n else:\n return repr(obj)\n`;\n\n/**\n * Backwards-compatible alias. Use TEMPLATE_PYTHON_EXECUTE_SERIALIZE_FUNCTION\n * for new callsites.\n */\nexport const TEMPLATE_PYTHON_SERIALIZE_FUNCTION = TEMPLATE_PYTHON_EXECUTE_SERIALIZE_FUNCTION;\n"],"mappings":"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","names":[]}