databonk 0.0.4 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +491 -96
- package/dist/dataframe-Bz1B7bIr.d.cts +1001 -0
- package/dist/dataframe-Bz1B7bIr.d.ts +1001 -0
- package/dist/index.cjs +5 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +366 -0
- package/dist/index.d.ts +354 -31
- package/dist/index.js +4 -40
- package/dist/index.js.map +1 -1
- package/dist/parallel-fv5h4BkA.d.cts +152 -0
- package/dist/parallel-fv5h4BkA.d.ts +152 -0
- package/dist/parquet.cjs +3 -0
- package/dist/parquet.cjs.map +1 -0
- package/dist/parquet.d.cts +57 -0
- package/dist/parquet.d.ts +57 -0
- package/dist/parquet.js +3 -0
- package/dist/parquet.js.map +1 -0
- package/dist/scalar.wasm +0 -0
- package/dist/simd-threads.wasm +0 -0
- package/dist/simd.wasm +0 -0
- package/dist/workers.cjs +102 -0
- package/dist/workers.cjs.map +1 -0
- package/dist/workers.d.cts +74 -0
- package/dist/workers.d.ts +74 -0
- package/dist/workers.js +102 -0
- package/dist/workers.js.map +1 -0
- package/package.json +93 -32
- package/build/release.d.ts +0 -719
- package/build/release.js +0 -774
- package/build/release.wasm +0 -0
- package/build/release.wasm.map +0 -1
- package/build/release.wat +0 -22633
- package/dist/dataframe.d.ts +0 -82
- package/dist/dataframe.d.ts.map +0 -1
- package/dist/dataframe.js +0 -318
- package/dist/dataframe.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/loader.d.ts +0 -86
- package/dist/loader.d.ts.map +0 -1
- package/dist/loader.js +0 -147
- package/dist/loader.js.map +0 -1
- package/dist/shared-memory.d.ts +0 -64
- package/dist/shared-memory.d.ts.map +0 -1
- package/dist/shared-memory.js +0 -113
- package/dist/shared-memory.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/memory/loader.ts","../src/memory/views.ts","../src/memory/context.ts","../src/memory/dtype.ts","../src/memory/bitmap.ts","../src/memory/dictionary.ts","../src/memory/column.ts","../src/expr/ast.ts","../src/expr/errors.ts","../src/expr/dtypes.ts","../src/expr/frame.ts","../src/expr/runtime.ts","../src/temporal/civil.ts","../src/temporal/tz.ts","../src/temporal/vectorize.ts","../src/expr/compile.ts","../src/frame/errors.ts","../src/frame/runtime.ts","../src/frame/owned.ts","../src/frame/infer.ts","../src/frame/series.ts","../src/frame/util.ts","../src/frame/gather.ts","../src/frame/sort.ts","../src/frame/rowproxy.ts","../src/kernels/hash/index.ts","../src/frame/groupby.ts","../src/frame/join.ts","../src/frame/printer.ts","../src/frame/dataframe.ts","../src/io/csv.ts","../src/io/json.ts","../src/io/fb.ts","../src/io/arrow.ts","../src/index.ts"],"names":["SIMD_DETECT_MODULE","detectSimd","isNode","loadBytes","fileName","wasmDir","readFile","fileURLToPath","filePath","join","base","url","resp","loadWasmModule","opts","simd","bytes","instance","ex","ctorFor","dtype","keyOf","col","createViewOf","mod","syncedGeneration","syncedBuffer","registry","cache","build","Ctor","sync","g","k","viewOf","view","createMemoryContext","DTYPES","dtypeInfo","info","validityBytes","len","getBit","bitmap","i","setBit","byte","clearBit","textEncoder","textDecoder","decodeCaches","cacheFor","dict","entry","writeDictionary","ctx","uniques","count","encoded","s","bytesLen","e","offsetsPtr","bytesPtr","offsets","acc","writeDictionaryFromRawBytes","rawBytes","rawOffsets","decodeSlot","slot","hit","start","end","decodeDictionary","out","decodeStats","unifyDictionaries","dictA","dictB","a","b","merged","index","intern","j","remapA","remapB","freeDictionary","isNullish","v","root","length","dataPtr","validityPtr","tz","createColumn","values","createStringColumn","createBoolColumn","createI64Column","createTemporalColumn","createNumericColumn","numericFastPath","nulls","vbits","ts","sz","vdt","p","dP","vP","vb","idxData","nullMask","columnToArray","validityBitOffset","validity","idx","data","isBool","sliceColumn","n","size","freeColumn","toExpr","x","Expr","lit","_Expr","node","other","arith","compare","value","to","agg","DtProxy","StrProxy","render","operand","dt","name","op","left","right","component","ARITH_SYM","renderScalar","ExprError","message","dtypeMismatch","hint","tail","unsupportedDtype","unsupportedCast","from","unknownColumn","known","near","nearest","suffix","list","badLiteral","best","bestD","d","levenshtein","threshold","m","prev","curr","ai","cost","schemaOf","record","names","NUMERIC","INTEGER","FLOAT","TEMPORAL","isNumeric","intInRange","adoptableNumLit","litTExpr","widen","t","resolve","expr","schema","resolveNode","inferType","resolveArith","resolveNeg","resolveCompare","resolveBool","resolveNot","resolveFillNull","resolveCast","resolveAgg","resolveDt","resolveStrSlice","leftE","rightE","ln","rn","ld","rd","opDtype","litVal","typed","colTarget","arithLitVsTyped","typedT","litT","L","R","arithCommon","temporalArithResult","operandE","isEqNe","strLit","stringLit","boolLit","boolLitOf","cmp","cmpLitVsTyped","operandDtype","validateFill","CAST_OK","aggResult","callKernel","wasm","args","fn","callKernelBigInt","statsOf","trace","mask","Runtime","frame","purpose","ptr","buf","ALL_VALID","freeValidity","rt","materializeValidity","bitOffset","src","dst","popcountMask","maskPtr","u8","MS_PER_DAY_N","DAYS_BEFORE_MONTH","daysToCivil","days","z","era","doe","yoe","y","doy","mp","civilToDays","yAdj","isLeapYear","dayOfYear","isoWeekday","floorDivMs","ms","date32ToFields","year","month","day","timestampUtcToFields","msB","dayNum","msOfDay","hour","rem1","minute","rem2","second","millisecond","fmtCache","getFormatter","cached","fmt","getTzComponents","epochMs","parts","part","localDayNum","isValid","extractComponents","isDate32","hasTz","fields","compile","resultKind","evalAgg","evalExpr","finalizeColumn","compileFilter","predicate","toMask","effPtr","makeSelection","selIdx","selectedIndices","outData","got","filterToken","vbytes","outVp","copyDictionary","MIRROR","COMMUTATIVE","LOSSY_CAST","evalCol","broadcastScalar","evalArith","evalNeg","evalCompare","evalKleene","evalNot","evalIsNull","evalFillNull","evalCast","evalDt","evalStrSlice","evalNumericColumn","isScalarOperand","ls","rs","lcol","evalScalarCell","arithScalar","arithScalarLeft","l","r","arithVec","fillZeros","colOf","allNull","kd","sI64","needZeroMask","zeroMask","combineValidity","broadcastPredicate","applyCompareScalar","evalBoolCompare","evalUtf8Compare","scalarLeft","freeDict","toBoolCol","notBool","leftT","rightT","kernel","bothValid","scratch","valueValidity","freeVal","operandT","fillNullBool","fillNullUtf8","bigVal","vp","fill","strings","ownsDict","srcIdx","dstIdx","inData","inOwns","inValidity","tmpPtr","msView","outPtr","outView","outSize","lossy","c","srcCol","validityBitmap","extractResult","dataView","srcStrings","srcCount","slotRemap","resultUniques","sliced","newDict","opD","storage","nonNull","computeAgg","pkd","conv","ovPtr","rawCell","ok","castScalar","TWO_63","bv","tr","num","aa","bb","copyBytes","offBytes","FrameError","rawKernel","runtimeFromExports","exports","loadRuntime","defaultRt","init","useRuntime","defaultRuntime","OwnedColumn","inferDType","input","arr","DATE32_ALLOWED","SeriesDtProxy","series","offset","raw","shifted","srcBit","resultData","outputValues","valid","outCol","Series","SeriesStrProxy","outValues","bitOff","vmap","column","storageToken","alignValidity","freeAligned","dataBytes","gatherColumn","idxPtr","idxLen","tok","sortPerm","keyCols","descending","permPtr","perm","needScratch","scratchPtr","applyKey","callArgsort","desc","av","rankPtr","buildUtf8Rank","widePtr","widenBoolToI32","token","order","_","sx","sy","rankOfSlot","makeRowCursor","columns","cur","proxy","nextPow2","MIN_HT_CAP","SLOT_BYTES","allocZeroed","groupBuild","hashPtr","outGroupIds","htCapHint","htCap","htPtr","result","joinImpl","joinFn","lhPtr","lVp","lLen","rhPtr","rVp","rLen","outCap","outLPtr","outRPtr","lIdx","rIdx","joinHashInner","lhP","lV","lL","rhP","rV","rL","htP","htC","olP","orP","oC","joinHashLeft","AGG_NAMES","GroupBy","keys","spec","plan","groups","computeGroups","owned","firstRow","gatherFirst","gids","scatterReduce","key","req","outName","colName","resultDtype","aggDtype","res","hashInput","tmp","groupIdsPtr","groupCount","seen","reduceFirstLast","reduceNunique","reduceStdVar","cnt","extI64","isMin","cntNonNull","cntFinite","ext","isI64","sum","mean","sse","wantStd","sets","wantFirst","chosen","joinFrames","how","prepared","prepareKey","lHash","combinedHash","rHash","lvp","combinedValidity","rvp","freePtr","assembleOutput","outLen","keySet","leftNames","rightNames","leftNameSet","lIdxPtr","idxToWasm","rIdxSafePtr","rNullMaskBytes","buildNullMask","idxToWasmSafe","gatherWasm","hasNeg","bi","makeRootCol","cloneDictBytes","offsSize","newOffsetsPtr","newBytesPtr","buildGatherValidity","srcHasNulls","hasForcedNulls","GATHER_TOKEN","outIdxPtr","outDataPtr","TOK_I64_DIRECT","lCol","rCol","leftPtr","hashUtf8RowHashes","rightPtr","widenBool","dictCount","dictHashPtr","rowHashPtr","inputs","byteLen","inp","cols","nullable","srcs","owns","formatCell","cell","alignFor","pad","width","align","gap","formatTable","dtypes","bodyRows","aligns","footer","widths","w","row","line","cells","sep","DataFrame","_DataFrame","entries","named","records","rec","dropSet","keep","owner","replacement","next","replaced","sel","cursor","kept","by","rows","stats","numeric","describeColumn","filled","indices","HEAD","TAIL","truncated","emit","slices","scope","frames","track","df","finite","sorted","std","q","lo","hi","frac","DEFAULT_NULL_VALUES","INFER_ROWS","ChunkParser","delimiter","onRow","chunk","eof","ch","I32_MIN","I32_MAX","I64_MAX_N","I64_MIN_N","SAFE_MAX_N","isStrictInt","isI32","isI64Overflow","isAnyI64","isF64","promote","state","inferDtypeFromSample","sample","nullSet","seenNonNull","parseCellI64","DATE32_RE","parseCellDate32","mo","HAS_TZ_RE","parseCellTimestamp","parseCell","fromCSV","text","hasHeader","skipRows","maxRows","forceDtype","rawRows","parser","rtOpts","startIdx","colNames","dataStart","numCols","dataRows","emptyCols","emptyDtypes","emptyOpts","colSample","colData","finalOpts","fromJSON","json","toJSON","FBBuilder","initialSize","neededExtra","newLen","newSpace","dataLen","additionalBytes","alignSize","enc","relOff","def","childOff","numFields","tableOff","objectSize","vtableSize","fieldPosFromEnd","fieldOff","soffset","rootOff","FBTable","_FBTable","dv","pos","vtPos","vtSize","vtFieldOff","fieldRelOff","strPos","elemPos","elemSize","absPos","fbRoot","rootPos","META_V5","MH_SCHEMA","MH_DICT","MH_RECORD","TYPE_INT","TYPE_FLOAT","TYPE_UTF8","TYPE_BOOL","TYPE_DATE","TYPE_TIMESTAMP","TYPE_LARGE_UTF8","PREC_SINGLE","PREC_DOUBLE","STRUCT16","DATE_UNIT_DAY","DATE_UNIT_MILLI_DEFAULT","TIME_UNIT_SECOND","TIME_UNIT_MILLI","TIME_UNIT_MICRO","TIME_UNIT_NANO","SEC_MS_MAX","SEC_MS_MIN","pad8","packBools","unpackBools","extractValidity","totalBits","emptyTable","fb","buildInt","bits","signed","buildFloat","prec","buildDictEncoding","id","intT","buildDate","buildTimestamp","tzOff","buildField","dictId","colTz","nameOff","typeTag","typeT","dictOff","childrenOff","buildSchemaMeta","dictIds","tzs","fieldOffs","fieldsVec","schemaOff","msgOff","buildRBMeta","buildBatchMeta","buildDictMeta","headerType","nodeData","ndv","nodesVec","bufData","bdv","bufsVec","rowLen","rbOff","innerOff","pushBuffer","padded","buildBody","tot","off","ipcMessage","meta","body","rawLen","total","toArrow","nm","nextDictId","messages","offsetsSrc","bytesSrc","vBuf","oBuf","dBuf","rb","rbNodes","rbBufs","nullCount","vraw","boolV","rbBody","rbPlan","eos","IpcReader","metaSize","bodyLen","parseSchema","msg","f","dictEnc","plainUtf8","arrowUnit","unit","tzStr","fnv1aBytes","h","bytesRangeEqual","as_","ae","bs","buildDictFromPlainUtf8","htMask","ht","htHash","slotCap","slotS","slotE","found","di","ds","ns","ne","dictOffsets","dictBytes","ss","ee","parseDictBatch","db","dictLen","getBufOff","getBufLen","nBufs","oOff","bOff","bLen","parseRecordBatch","dicts","nNodes","fi","vOff","vLen","hasValidity","iOff","oOff2","dOff2","dLen2","arrowOffsets","arrowBytes","datOff","datLen","packed","u8data","srcTyped","rescaleTimestampToMs","vals","fromArrow","reader","schemaMsg","rbMsg","hType","rawCols","jsVals","rescaled","VERSION","hello"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * WASM memory-core loader with SIMD feature detection (ADR-004).\n *\n * Feature-detects SIMD via `WebAssembly.validate` on a tiny inlined SIMD module,\n * then instantiates the matching binary — `simd.wasm` or `scalar.wasm` — over\n * either a Node filesystem path or a browser URL. The module exports the\n * Phase-1 memory core (ABI §9): `memory`, `alloc`, `free`, `realloc`,\n * `mem_generation`.\n *\n * View access is NOT done here — hold no `TypedArray` outside `viewOf`\n * (ADR-001). See {@link createViewOf} in `./views.ts`.\n */\n\n/**\n * Minimal SIMD module for `WebAssembly.validate` feature detection (ADR-004):\n * `(module (func (result v128) i32.const 0 i8x16.splat i8x16.popcnt))`.\n * `validate` returns `true` iff the runtime supports the SIMD128 proposal.\n */\nconst SIMD_DETECT_MODULE = new Uint8Array([\n 0x00, 0x61, 0x73, 0x6d, 0x01, 0x00, 0x00, 0x00, 0x01, 0x05, 0x01, 0x60, 0x00,\n 0x01, 0x7b, 0x03, 0x02, 0x01, 0x00, 0x0a, 0x0a, 0x01, 0x08, 0x00, 0x41, 0x00,\n 0xfd, 0x0f, 0xfd, 0x62, 0x0b,\n]);\n\n/** True iff the current runtime supports wasm SIMD128 (ADR-004). */\nexport function detectSimd(): boolean {\n try {\n return WebAssembly.validate(SIMD_DETECT_MODULE);\n } catch {\n return false;\n }\n}\n\nconst isNode =\n typeof process !== 'undefined' &&\n process.versions != null &&\n process.versions.node != null;\n\n/** Raw exports of the memory-core wasm module (ABI §9, Phase 1). */\nexport interface WasmExports {\n /** The module's single linear memory (ADR-001; all column bytes live here). */\n readonly memory: WebAssembly.Memory;\n /** `alloc(size) -> ptr`: 16-byte-aligned, `0` on OOM (ABI §3). */\n alloc(size: number): number;\n /** `free(ptr)`: `free(0)` is a no-op (ABI §3). */\n free(ptr: number): void;\n /** `realloc(ptr, newSize) -> ptr`: preserves contents; `0` on OOM (ABI §3). */\n realloc(ptr: number, newSize: number): number;\n /** `mem_generation()`: changes on every successful `memory.grow` (ABI §2). */\n mem_generation(): number;\n}\n\n/** A loaded memory-core module plus which build was selected. */\nexport interface WasmMemoryModule extends WasmExports {\n /** `true` if the SIMD build was loaded, `false` for the scalar build. */\n readonly simd: boolean;\n}\n\n/** Options for {@link loadWasmModule}. */\nexport interface LoadOptions {\n /** Force a build. Default: auto-detect via {@link detectSimd}. */\n simd?: boolean;\n /**\n * Location of `scalar.wasm` / `simd.wasm`.\n * - Node: a filesystem directory path, or a `file:` / directory `URL`.\n * - Browser: a base `URL` (or URL string) the two files are fetched under.\n *\n * Default: resolved relative to this module (the built binaries are copied\n * next to the JS bundle in `dist/`).\n */\n wasmDir?: string | URL;\n}\n\nasync function loadBytes(\n fileName: string,\n wasmDir: string | URL | undefined,\n): Promise<BufferSource> {\n if (isNode) {\n const [{ readFile }, { fileURLToPath }] = await Promise.all([\n import('node:fs/promises'),\n import('node:url'),\n ]);\n let filePath: string;\n if (wasmDir === undefined) {\n filePath = fileURLToPath(new URL(fileName, import.meta.url));\n } else if (wasmDir instanceof URL) {\n filePath = fileURLToPath(new URL(fileName, wasmDir));\n } else if (wasmDir.startsWith('file:')) {\n filePath = fileURLToPath(new URL(fileName, wasmDir));\n } else {\n const { join } = await import('node:path');\n filePath = join(wasmDir, fileName);\n }\n return await readFile(filePath);\n }\n\n const base = wasmDir ?? new URL('.', import.meta.url);\n const url = new URL(fileName, base);\n const resp = await fetch(url);\n if (!resp.ok) {\n throw new Error(`Failed to fetch wasm at ${url.toString()}: ${resp.status}`);\n }\n return await resp.arrayBuffer();\n}\n\n/**\n * Feature-detect, load, and instantiate the memory-core wasm module.\n * Runs once per page/process (ADR-004); callers cache the returned module.\n */\nexport async function loadWasmModule(\n opts: LoadOptions = {},\n): Promise<WasmMemoryModule> {\n const simd = opts.simd ?? detectSimd();\n const fileName = simd ? 'simd.wasm' : 'scalar.wasm';\n const bytes = await loadBytes(fileName, opts.wasmDir);\n const { instance } = await WebAssembly.instantiate(bytes, {});\n const ex = instance.exports as unknown as WasmExports;\n return {\n memory: ex.memory,\n alloc: ex.alloc,\n free: ex.free,\n realloc: ex.realloc,\n mem_generation: ex.mem_generation,\n simd,\n };\n}\n","/**\n * The single sanctioned `viewOf()` accessor (ADR-001, ABI §2).\n *\n * `memory.grow` detaches every `TypedArray` over the old `ArrayBuffer`. To stay\n * correct without copying, ALL view access goes through one accessor that:\n * 1. caches `(generation, view)` per registered column buffer,\n * 2. checks `mem_generation()` before every use, and\n * 3. on a mismatch, rebuilds ALL registered views over the current\n * `memory.buffer`.\n *\n * No raw `TypedArray` may be cached anywhere else in the library.\n */\n\nimport type { WasmMemoryModule } from './loader.js';\n\n/** Storage dtypes whose data buffer maps to a numeric `TypedArray` (dtypes.md §1). `i64` maps to `BigInt64Array`. */\nexport type ViewDType = 'f64' | 'f32' | 'i32' | 'u32' | 'u8' | 'bool' | 'i64';\n\n/** Location + shape of a column buffer inside linear memory. */\nexport interface ColumnBuffer {\n /** Byte offset into `memory.buffer` (16-byte aligned; ABI §3). */\n readonly ptr: number;\n /** Element count (NOT bytes; ABI §4.3). */\n readonly length: number;\n /** Determines the `TypedArray` kind; `bool` is `u8` storage (dtypes.md §1). */\n readonly dtype: ViewDType;\n}\n\n/** The concrete `TypedArray` kinds a column view can be. `BigInt64Array` is used for `i64` columns. */\nexport type ColumnView =\n | Float64Array\n | Float32Array\n | Int32Array\n | Uint32Array\n | Uint8Array\n | BigInt64Array;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyTypedArrayCtor = new (buffer: ArrayBufferLike, byteOffset: number, length: number) => any;\n\nfunction ctorFor(dtype: ViewDType): AnyTypedArrayCtor {\n switch (dtype) {\n case 'f64':\n return Float64Array;\n case 'f32':\n return Float32Array;\n case 'i32':\n return Int32Array;\n case 'u32':\n return Uint32Array;\n case 'i64':\n return BigInt64Array;\n case 'u8':\n case 'bool':\n return Uint8Array;\n }\n}\n\nfunction keyOf(col: ColumnBuffer): string {\n return `${col.dtype}:${col.ptr}:${col.length}`;\n}\n\n/** The `viewOf` accessor returned by {@link createViewOf}. */\nexport interface ViewOf {\n /**\n * Return a live `TypedArray` for `col` over the current `memory.buffer`,\n * rebuilding every registered view first if memory has grown since last use.\n * The returned view must not be cached by callers — call `viewOf` again.\n */\n (col: ColumnBuffer): ColumnView;\n /** The generation the cache is currently synced to. */\n generation(): number;\n /** Stop tracking `col` (drops it from the registry and cache). */\n forget(col: ColumnBuffer): void;\n /** Drop all tracked columns and cached views. */\n clear(): void;\n}\n\n/**\n * Build the memory context's single `viewOf` accessor over `mod`'s linear\n * memory and generation counter.\n */\nexport function createViewOf(\n mod: Pick<WasmMemoryModule, 'memory' | 'mem_generation'>,\n): ViewOf {\n let syncedGeneration = -1;\n let syncedBuffer: ArrayBufferLike | null = null;\n const registry = new Map<string, ColumnBuffer>();\n const cache = new Map<string, ColumnView>();\n\n function build(col: ColumnBuffer): ColumnView {\n const Ctor = ctorFor(col.dtype);\n return new Ctor(mod.memory.buffer, col.ptr, col.length);\n }\n\n /** Rebuild all views if the generation advanced or the buffer was replaced. */\n function sync(): void {\n const g = mod.mem_generation();\n if (g !== syncedGeneration || syncedBuffer !== mod.memory.buffer) {\n syncedGeneration = g;\n syncedBuffer = mod.memory.buffer;\n cache.clear();\n for (const [k, col] of registry) {\n cache.set(k, build(col));\n }\n }\n }\n\n const viewOf = ((col: ColumnBuffer): ColumnView => {\n const k = keyOf(col);\n if (!registry.has(k)) {\n registry.set(k, col);\n }\n sync();\n let view = cache.get(k);\n if (view === undefined) {\n view = build(col);\n cache.set(k, view);\n }\n return view;\n }) as ViewOf;\n\n viewOf.generation = () => syncedGeneration;\n viewOf.forget = (col: ColumnBuffer) => {\n const k = keyOf(col);\n registry.delete(k);\n cache.delete(k);\n };\n viewOf.clear = () => {\n registry.clear();\n cache.clear();\n syncedGeneration = -1;\n syncedBuffer = null;\n };\n\n return viewOf;\n}\n","/**\n * A `MemoryContext` bundles the loaded wasm module (allocator + linear memory)\n * with its single {@link ViewOf} accessor (ADR-001). Every column / dictionary\n * operation in this layer takes a context: it allocates through `ctx.mod` and\n * reaches bytes only through `ctx.viewOf` — the one sanctioned TypedArray path.\n *\n * There is exactly **one** `viewOf` per module (one linear memory, one generation\n * counter), so there is exactly one context per module.\n */\n\nimport { createViewOf, type ViewOf } from './views.js';\nimport type { WasmMemoryModule } from './loader.js';\n\n/** The allocator + the single `viewOf` accessor over one module's linear memory. */\nexport interface MemoryContext {\n /** The loaded memory-core module (`alloc`/`free`/`realloc`/`memory`, ABI §3/§9). */\n readonly mod: WasmMemoryModule;\n /** The one sanctioned `TypedArray` accessor over `mod.memory` (ADR-001). */\n readonly viewOf: ViewOf;\n}\n\n/** Build the single {@link MemoryContext} for a loaded module. */\nexport function createMemoryContext(mod: WasmMemoryModule): MemoryContext {\n return { mod, viewOf: createViewOf(mod) };\n}\n","/**\n * Schema / dtype registry (Phase 1, deliverable P1.2 §3).\n *\n * One descriptor per v1 storage dtype (`contracts/dtypes.md` §1). The descriptor\n * carries everything the column, dictionary, and (Phase 2) kernel/expr layers need\n * to lay a dtype out in linear memory and name its kernels:\n * - `size` — bytes per stored element (utf8 stores an `i32` dictionary index),\n * - `view` — the {@link ViewDType} its data buffer maps to through `viewOf`,\n * - `ctor` — the matching `TypedArray` constructor for a JS-side staging copy,\n * - `wasm` — the kernel-name dtype token (ABI §6 `[family_]op_dtype[_variant]`),\n * - `float` — whether `NaN`/`±inf` are *values* (floats), never nulls (dtypes.md §4).\n */\n\nimport type { ViewDType } from './views.js';\n\n/**\n * The v2 column dtypes (`contracts/dtypes.md` §1/§6). `utf8` is dict-encoded; `i64` uses\n * BigInt64Array. `date32` and `timestamp` are logical dtypes that dispatch to i32/i64 physical\n * kernels respectively (ADR-010; `wasm` field carries the physical token).\n */\nexport type DType = 'f64' | 'f32' | 'i32' | 'u32' | 'bool' | 'utf8' | 'i64' | 'date32' | 'timestamp';\n\n/** `TypedArray` constructors a column data / auxiliary buffer can map to. */\nexport type TypedArrayCtor =\n | Float64ArrayConstructor\n | Float32ArrayConstructor\n | Int32ArrayConstructor\n | Uint32ArrayConstructor\n | Uint8ArrayConstructor\n | BigInt64ArrayConstructor;\n\n/** Static description of one v1 dtype (see module doc). */\nexport interface DTypeInfo {\n /** The dtype this describes. */\n readonly name: DType;\n /** Bytes per stored element. `utf8` = 4 (the `i32` index into its dictionary). */\n readonly size: number;\n /** `viewOf` dtype for this column's *data* buffer (`utf8` → its `i32` indices). */\n readonly view: ViewDType;\n /** `TypedArray` constructor matching {@link view} (for staging copies). */\n readonly ctor: TypedArrayCtor;\n /** Kernel-name dtype token (ABI §6). Same as {@link name} for every v1 dtype. */\n readonly wasm: string;\n /** True for `f64`/`f32`: a `NaN`/`±inf` is a valid *value*, never a null (dtypes.md §4). */\n readonly float: boolean;\n}\n\n/** The dtype registry: `DTYPES[dtype]` → its {@link DTypeInfo}. */\nexport const DTYPES: Record<DType, DTypeInfo> = {\n f64: { name: 'f64', size: 8, view: 'f64', ctor: Float64Array, wasm: 'f64', float: true },\n f32: { name: 'f32', size: 4, view: 'f32', ctor: Float32Array, wasm: 'f32', float: true },\n i32: { name: 'i32', size: 4, view: 'i32', ctor: Int32Array, wasm: 'i32', float: false },\n u32: { name: 'u32', size: 4, view: 'u32', ctor: Uint32Array, wasm: 'u32', float: false },\n // `bool` value storage is one u8 per element (0/1); validity is a separate bitmap.\n bool: { name: 'bool', size: 1, view: 'bool', ctor: Uint8Array, wasm: 'bool', float: false },\n // `utf8` data buffer is `i32[len]` dictionary indices (ABI §4.4); dict is separate.\n utf8: { name: 'utf8', size: 4, view: 'i32', ctor: Int32Array, wasm: 'utf8', float: false },\n // `i64` is 8-byte signed 64-bit; maps to BigInt64Array; bigint at JS boundary (ADR-009).\n i64: { name: 'i64', size: 8, view: 'i64', ctor: BigInt64Array, wasm: 'i64', float: false },\n // Logical temporals (ADR-010): physical storage is i32/i64; `wasm` token = physical kernel token.\n // `date32`: days since 1970-01-01 UTC (proleptic Gregorian). Physical = i32. JS boundary = number.\n date32: { name: 'date32', size: 4, view: 'i32', ctor: Int32Array, wasm: 'i32', float: false },\n // `timestamp`: ms since 1970-01-01 UTC (always UTC; tz = display metadata only). Physical = i64. JS boundary = bigint.\n timestamp: { name: 'timestamp', size: 8, view: 'i64', ctor: BigInt64Array, wasm: 'i64', float: false },\n};\n\n/** Descriptor for `dtype`. Throws on an unknown dtype (helpful for API callers). */\nexport function dtypeInfo(dtype: DType): DTypeInfo {\n const info = DTYPES[dtype];\n if (info === undefined) {\n throw new Error(`unknown dtype: ${String(dtype)}`);\n }\n return info;\n}\n","/**\n * Arrow validity-bitmap helpers (ABI §4.1): **LSB-first, `1 = valid`, `0 = null`**.\n *\n * A bitmap is `ceil(len / 8)` bytes; element `i` is valid iff\n * `bitmap[i >> 3] & (1 << (i & 7))` is nonzero. Bits past `len` in the final byte\n * are padding and are written `0` (kernels must not depend on them). These helpers\n * operate on a `Uint8Array` view obtained through `viewOf` — never a cached view.\n *\n * NOTE ON SLICES: a sliced column shares its parent's bitmap and reads it at a\n * *bit offset* (`Column.validityBitOffset`). Callers pass `bitOffset + i` here, so\n * these primitives stay offset-agnostic (`i` is an absolute bit index).\n */\n\n/** Bytes needed for a `len`-bit validity bitmap: `ceil(len / 8)`. */\nexport function validityBytes(len: number): number {\n return (len + 7) >> 3;\n}\n\n/** True iff bit `i` is set (element valid) in an LSB-first bitmap. */\nexport function getBit(bitmap: Uint8Array, i: number): boolean {\n return (bitmap[i >> 3]! & (1 << (i & 7))) !== 0;\n}\n\n/** Set bit `i` (mark element valid). */\nexport function setBit(bitmap: Uint8Array, i: number): void {\n const byte = i >> 3;\n bitmap[byte] = (bitmap[byte] ?? 0) | (1 << (i & 7));\n}\n\n/** Clear bit `i` (mark element null). */\nexport function clearBit(bitmap: Uint8Array, i: number): void {\n const byte = i >> 3;\n bitmap[byte] = (bitmap[byte] ?? 0) & ~(1 << (i & 7));\n}\n","/**\n * Dictionary string store (Phase 1, deliverable P1.2 §2; ABI §4.4, ADR-002).\n *\n * A `utf8` column's strings are dictionary-encoded into three wasm buffers:\n * - the column's own `i32[len]` **indices** (built in `column.ts`), plus this\n * dictionary's shared:\n * - **offsets** — `i32[count + 1]`, Arrow-style monotonic byte offsets,\n * `offsets[0] == 0`, string `k` = `bytes[offsets[k] .. offsets[k+1])`;\n * - **bytes** — `u8[offsets[count]]`, UTF-8 concatenation of the unique strings.\n *\n * Decode is **memoized per slot** on the JS side (ADR-002): each unique string\n * crosses the wasm→JS boundary at most once. The cache is keyed by *dictionary\n * identity* (a `WeakMap` on the `Dictionary` object) + slot index, so distinct\n * dictionaries never share decoded strings and the cache is GC'd with the dict.\n *\n * Unification (`unifyDictionaries`) is JS-side for Phase 1 — the wasm `unify_dict`\n * kernel arrives in Phase 2 (ABI §9, Agent D). It produces a merged unique list\n * plus per-slot index remaps so two columns can be compared under one dictionary.\n */\n\nimport type { MemoryContext } from './context.js';\n\nconst textEncoder = new TextEncoder();\nconst textDecoder = new TextDecoder();\n\n/**\n * The shared dictionary buffers of a `utf8` column (ABI §4.4). Immutable: build\n * once, decode many. `count == 0` is legal (all-null / empty column): `offsets`\n * is still `[0]` and `bytesLen == 0`.\n */\nexport interface Dictionary {\n /** Number of unique strings. */\n readonly count: number;\n /** Byte offset of the `i32[count + 1]` offsets buffer. */\n readonly offsetsPtr: number;\n /** Byte offset of the `u8[bytesLen]` UTF-8 bytes buffer. */\n readonly bytesPtr: number;\n /** Total UTF-8 byte length (`offsets[count]`). */\n readonly bytesLen: number;\n}\n\n/** Per-dictionary decode memoization state (ADR-002). */\ninterface DecodeCache {\n /** `slots[k]` = decoded string for slot `k`, or `undefined` until first decode. */\n readonly slots: Array<string | undefined>;\n /** Boundary-crossing accounting (test-observable): a miss decodes, a hit reuses. */\n readonly stats: { hits: number; misses: number };\n}\n\n/** Decode caches keyed by `Dictionary` identity so they GC with the dictionary. */\nconst decodeCaches = new WeakMap<Dictionary, DecodeCache>();\n\nfunction cacheFor(dict: Dictionary): DecodeCache {\n let entry = decodeCaches.get(dict);\n if (entry === undefined) {\n entry = { slots: new Array<string | undefined>(dict.count), stats: { hits: 0, misses: 0 } };\n decodeCaches.set(dict, entry);\n }\n return entry;\n}\n\n/**\n * Encode `uniques` (already-deduplicated strings) into fresh offsets + bytes\n * buffers in linear memory and return the {@link Dictionary} describing them.\n * Allocates all buffers *before* taking any view (a grow between alloc and write\n * would detach it, ADR-001).\n */\nexport function writeDictionary(ctx: MemoryContext, uniques: readonly string[]): Dictionary {\n const count = uniques.length;\n const encoded = uniques.map((s) => textEncoder.encode(s));\n let bytesLen = 0;\n for (const e of encoded) bytesLen += e.length;\n\n // Allocate both buffers first; then take views over the (possibly grown) buffer.\n const offsetsPtr = ctx.mod.alloc((count + 1) * 4);\n const bytesPtr = ctx.mod.alloc(bytesLen); // alloc(0) is a valid, un-dereferenced ptr\n\n const offsets = ctx.viewOf({ ptr: offsetsPtr, length: count + 1, dtype: 'i32' }) as Int32Array;\n const bytes = ctx.viewOf({ ptr: bytesPtr, length: bytesLen, dtype: 'u8' }) as Uint8Array;\n\n offsets[0] = 0;\n let acc = 0;\n for (let k = 0; k < count; k++) {\n const e = encoded[k]!;\n bytes.set(e, acc);\n acc += e.length;\n offsets[k + 1] = acc;\n }\n return { count, offsetsPtr, bytesPtr, bytesLen };\n}\n\n/**\n * Write a dictionary directly from raw UTF-8 bytes and Arrow-style offsets —\n * no JS string decode or encode (ABI §12 ingest note, ADR-002).\n *\n * `rawOffsets[k]..rawOffsets[k+1]` is the byte range of string `k` in\n * `rawBytes`; both arrays are already in our dictionaries' layout. This is a\n * pure bulk-copy: O(count + bytesLen), zero TextDecoder/TextEncoder calls.\n *\n * Allocates both wasm buffers before taking any view so a grow between the two\n * allocs cannot detach a live TypedArray (ADR-001).\n */\nexport function writeDictionaryFromRawBytes(\n ctx: MemoryContext,\n rawBytes: Uint8Array,\n rawOffsets: Int32Array,\n count: number,\n): Dictionary {\n const bytesLen = count > 0 ? (rawOffsets[count] ?? 0) : 0;\n\n // Allocate both buffers before taking any view (ADR-001 grow-invalidation rule).\n const offsetsPtr = ctx.mod.alloc((count + 1) * 4);\n const bytesPtr = ctx.mod.alloc(bytesLen); // alloc(0) is valid per ABI §3\n\n const offsets = ctx.viewOf({ ptr: offsetsPtr, length: count + 1, dtype: 'i32' }) as Int32Array;\n offsets.set(rawOffsets.subarray(0, count + 1));\n\n if (bytesLen > 0) {\n const bytes = ctx.viewOf({ ptr: bytesPtr, length: bytesLen, dtype: 'u8' }) as Uint8Array;\n bytes.set(rawBytes.subarray(0, bytesLen));\n }\n\n return { count, offsetsPtr, bytesPtr, bytesLen };\n}\n\n/**\n * Decode dictionary slot `slot` to a string, memoized (ADR-002). First call for a\n * slot reads its UTF-8 bytes across the boundary (a *miss*); later calls reuse the\n * cached string (a *hit*). `slot` must be in `[0, dict.count)`.\n */\nexport function decodeSlot(ctx: MemoryContext, dict: Dictionary, slot: number): string {\n const entry = cacheFor(dict);\n const hit = entry.slots[slot];\n if (hit !== undefined) {\n entry.stats.hits++;\n return hit;\n }\n entry.stats.misses++;\n const offsets = ctx.viewOf({ ptr: dict.offsetsPtr, length: dict.count + 1, dtype: 'i32' }) as Int32Array;\n const start = offsets[slot]!;\n const end = offsets[slot + 1]!;\n let s: string;\n if (end <= start) {\n s = '';\n } else {\n const bytes = ctx.viewOf({ ptr: dict.bytesPtr, length: dict.bytesLen, dtype: 'u8' }) as Uint8Array;\n s = textDecoder.decode(bytes.subarray(start, end));\n }\n entry.slots[slot] = s;\n return s;\n}\n\n/** Decode every slot of `dict` into a `string[]` (memoized per slot). */\nexport function decodeDictionary(ctx: MemoryContext, dict: Dictionary): string[] {\n const out = new Array<string>(dict.count);\n for (let i = 0; i < dict.count; i++) out[i] = decodeSlot(ctx, dict, i);\n return out;\n}\n\n/** Decode-cache accounting for `dict` (`{hits:0,misses:0}` if never decoded). */\nexport function decodeStats(dict: Dictionary): { hits: number; misses: number } {\n const entry = decodeCaches.get(dict);\n return entry === undefined ? { hits: 0, misses: 0 } : { ...entry.stats };\n}\n\n/** Result of unifying two dictionaries into a single merged one (JS-side). */\nexport interface DictUnifyResult {\n /** Merged unique strings; index `j` is a slot in the merged dictionary. */\n readonly merged: string[];\n /** `remapA[i]` = merged slot of dictionary-A slot `i` (`Int32Array`, ABI indices). */\n readonly remapA: Int32Array;\n /** `remapB[i]` = merged slot of dictionary-B slot `i`. */\n readonly remapB: Int32Array;\n}\n\n/**\n * Unify two dictionaries into one merged unique list plus per-slot index remaps\n * (JS-side; the wasm `unify_dict` kernel is Phase 2). Value-preserving by\n * construction: `merged[remapA[i]] === decode(dictA, i)` for every `i`. The\n * merged order is A's slots in order, then B's not-yet-seen slots.\n */\nexport function unifyDictionaries(\n ctx: MemoryContext,\n dictA: Dictionary,\n dictB: Dictionary,\n): DictUnifyResult {\n const a = decodeDictionary(ctx, dictA);\n const b = decodeDictionary(ctx, dictB);\n const merged: string[] = [];\n const index = new Map<string, number>();\n const intern = (s: string): number => {\n let j = index.get(s);\n if (j === undefined) {\n j = merged.length;\n merged.push(s);\n index.set(s, j);\n }\n return j;\n };\n const remapA = new Int32Array(a.length);\n const remapB = new Int32Array(b.length);\n for (let i = 0; i < a.length; i++) remapA[i] = intern(a[i]!);\n for (let i = 0; i < b.length; i++) remapB[i] = intern(b[i]!);\n return { merged, remapA, remapB };\n}\n\n/** Free a dictionary's buffers and drop them from the view registry. */\nexport function freeDictionary(ctx: MemoryContext, dict: Dictionary): void {\n ctx.viewOf.forget({ ptr: dict.offsetsPtr, length: dict.count + 1, dtype: 'i32' });\n ctx.viewOf.forget({ ptr: dict.bytesPtr, length: dict.bytesLen, dtype: 'u8' });\n ctx.mod.free(dict.offsetsPtr);\n ctx.mod.free(dict.bytesPtr);\n}\n","/**\n * Column representation (Phase 1, deliverable P1.2 §1/§4; ABI §4).\n *\n * A {@link Column} is a small JS descriptor over buffers living in wasm linear\n * memory (ADR-001); JS never owns the bytes. Per ABI §4 it carries `dtype`,\n * `length`, a `dataPtr`, a `validityPtr` (`0` = all-valid), and — for `utf8` —\n * the shared {@link Dictionary}.\n *\n * ## Zero-copy slice & the offset convention (deliverable §4)\n * `sliceColumn` shares the parent's buffers; no bytes move. Two offset kinds:\n *\n * - **data** is byte-addressable, so a slice bakes its start into `dataPtr`:\n * `dataPtr = parent.dataPtr + start * dtype.size`. Element `i`'s data byte\n * offset is `dataPtr + i * size`. **`dataPtr` is exactly the base pointer a\n * kernel receives** — the byte-offset math happens here, in the memory layer,\n * so Phase-2 kernels take `(dataPtr, len)` unchanged. Alignment is preserved:\n * offsetting by whole elements keeps the natural alignment `alloc` guarantees.\n *\n * - **validity** is *bit*-addressed, so a slice cannot move the pointer; it keeps\n * the parent's `validityPtr` and records `validityBitOffset` (the bit index of\n * element 0). Element `i`'s validity bit is `validityBitOffset + i` in the\n * bitmap at `validityPtr`. For a root column `validityBitOffset == 0`. A\n * Phase-2 kernel consuming a sliced column's validity must honor this bit\n * offset (or the memory layer realigns first); root columns — the common case —\n * pass `validityPtr` directly. `validityPtr == 0` always means all-valid.\n */\n\nimport { DTYPES, type DType } from './dtype.js';\nimport { validityBytes, getBit, setBit } from './bitmap.js';\nimport type { MemoryContext } from './context.js';\nimport {\n writeDictionary,\n decodeSlot,\n freeDictionary,\n type Dictionary,\n} from './dictionary.js';\n\n/** A column descriptor over wasm buffers (see module doc; ABI §4). */\nexport interface Column {\n /** Storage dtype (`contracts/dtypes.md` §1/§6). */\n readonly dtype: DType;\n /** Element count of this (possibly sliced) column. */\n readonly length: number;\n /** Base byte offset of element 0's data (slice start already baked in). */\n readonly dataPtr: number;\n /** Validity bitmap pointer, or `0` for an all-valid column (ABI §4.1). */\n readonly validityPtr: number;\n /** Bit index of element 0 within the bitmap at `validityPtr` (0 for roots). */\n readonly validityBitOffset: number;\n /** The shared dictionary for a `utf8` column; `null` for every other dtype. */\n readonly dict: Dictionary | null;\n /** True if this column owns its buffers (a root); slices share and own nothing. */\n readonly owned: boolean;\n /**\n * IANA timezone string for `timestamp` columns (ADR-010 §10 display/accessor metadata only).\n * `undefined` = UTC. Not present for any other dtype. The stored value is always UTC epoch ms;\n * tz only affects how dt accessors and the printer interpret the instant.\n */\n readonly tz?: string;\n}\n\n/** JS value shapes accepted by {@link createColumn}, per dtype. */\nexport type ColumnInput =\n | ArrayLike<number | null | undefined>\n | ArrayLike<bigint | number | null | undefined>\n | ArrayLike<boolean | null | undefined>\n | ArrayLike<string | null | undefined>\n | ArrayLike<Date | null | undefined>;\n\n/** One decoded column cell: a value, or `null` for a null slot. */\nexport type Cell = number | bigint | boolean | string | null;\n\n/** Structural handle for the single bulk-write method shared by all TypedArrays. */\ninterface Settable {\n set(src: ArrayLike<number>, offset?: number): void;\n}\n\nfunction isNullish(v: unknown): boolean {\n return v === null || v === undefined;\n}\n\nfunction root(\n dtype: DType,\n length: number,\n dataPtr: number,\n validityPtr: number,\n dict: Dictionary | null,\n tz?: string,\n): Column {\n return { dtype, length, dataPtr, validityPtr, validityBitOffset: 0, dict, owned: true, ...(tz !== undefined ? { tz } : {}) };\n}\n\n/**\n * Build a column from JS `values` for `dtype`. Two paths:\n * - **fast path** — a matching `TypedArray` (no nulls possible): bulk-copy into\n * linear memory, `validityPtr = 0`;\n * - **slow path** — a plain array: detect `null`/`undefined` (only these are\n * nulls — a `NaN` is a *value*, dtypes.md §4) and build the validity bitmap.\n *\n * Temporal dtypes (ADR-010):\n * - `date32`: accepts `number` (days since epoch), `Int32Array` (fast path), or `Date` (→ day).\n * - `timestamp`: accepts `bigint`/safe-int number (ms since epoch), `BigInt64Array`, `Date` (→ ms),\n * or ISO-8601 string (only via explicit dtype). `toArray` returns `bigint` ms per dtypes.md §11.\n * Optional `tz` attached as metadata for `timestamp` (display/accessor only, ADR-010).\n */\nexport function createColumn(ctx: MemoryContext, dtype: DType, values: ColumnInput, tz?: string): Column {\n if (dtype === 'utf8') {\n return createStringColumn(ctx, values as ArrayLike<string | null | undefined>);\n }\n if (dtype === 'bool') {\n return createBoolColumn(ctx, values as ArrayLike<boolean | null | undefined>);\n }\n if (dtype === 'i64') {\n return createI64Column(ctx, values as ArrayLike<bigint | number | null | undefined>);\n }\n if (dtype === 'timestamp' || dtype === 'date32') {\n return createTemporalColumn(ctx, dtype, values as ArrayLike<bigint | number | null | undefined>, tz);\n }\n return createNumericColumn(ctx, dtype, values as ArrayLike<number | null | undefined>);\n}\n\nfunction numericFastPath(dtype: DType, values: ArrayLike<unknown>): boolean {\n switch (dtype) {\n case 'f64':\n return values instanceof Float64Array;\n case 'f32':\n return values instanceof Float32Array;\n case 'i32':\n return values instanceof Int32Array;\n case 'u32':\n return values instanceof Uint32Array;\n default:\n return false;\n }\n}\n\nfunction createNumericColumn(\n ctx: MemoryContext,\n dtype: DType,\n values: ArrayLike<number | null | undefined>,\n): Column {\n const info = DTYPES[dtype];\n const len = values.length;\n\n if (numericFastPath(dtype, values)) {\n const dataPtr = ctx.mod.alloc(len * info.size);\n const view = ctx.viewOf({ ptr: dataPtr, length: len, dtype: info.view }) as unknown as Settable;\n view.set(values as unknown as ArrayLike<number>);\n return root(dtype, len, dataPtr, 0, null);\n }\n\n // Slow path: scan for nulls first (JS only), then allocate all buffers, then write.\n let nulls = 0;\n for (let i = 0; i < len; i++) if (isNullish(values[i])) nulls++;\n\n const dataPtr = ctx.mod.alloc(len * info.size);\n const validityPtr = nulls > 0 ? ctx.mod.alloc(validityBytes(len)) : 0;\n\n const view = ctx.viewOf({ ptr: dataPtr, length: len, dtype: info.view });\n let vbits: Uint8Array | null = null;\n if (validityPtr !== 0) {\n vbits = ctx.viewOf({ ptr: validityPtr, length: validityBytes(len), dtype: 'u8' }) as Uint8Array;\n vbits.fill(0); // clear pad bits + start all-null, then set valid bits\n }\n for (let i = 0; i < len; i++) {\n const v = values[i];\n if (isNullish(v)) {\n view[i] = 0;\n } else {\n view[i] = v as number; // TypedArray assignment coerces (f32 rounds, int truncates)\n if (vbits) setBit(vbits, i);\n }\n }\n return root(dtype, len, dataPtr, validityPtr, null);\n}\n\nfunction createBoolColumn(\n ctx: MemoryContext,\n values: ArrayLike<boolean | null | undefined>,\n): Column {\n const len = values.length;\n\n if (values instanceof Uint8Array) {\n // Fast path: caller-provided 0/1 storage, no nulls.\n const dataPtr = ctx.mod.alloc(len);\n const view = ctx.viewOf({ ptr: dataPtr, length: len, dtype: 'bool' }) as unknown as Settable;\n view.set(values);\n return root('bool', len, dataPtr, 0, null);\n }\n\n let nulls = 0;\n for (let i = 0; i < len; i++) if (isNullish(values[i])) nulls++;\n\n const dataPtr = ctx.mod.alloc(len);\n const validityPtr = nulls > 0 ? ctx.mod.alloc(validityBytes(len)) : 0;\n\n const view = ctx.viewOf({ ptr: dataPtr, length: len, dtype: 'bool' }) as Uint8Array;\n let vbits: Uint8Array | null = null;\n if (validityPtr !== 0) {\n vbits = ctx.viewOf({ ptr: validityPtr, length: validityBytes(len), dtype: 'u8' }) as Uint8Array;\n vbits.fill(0);\n }\n for (let i = 0; i < len; i++) {\n const v = values[i];\n if (isNullish(v)) {\n view[i] = 0;\n } else {\n view[i] = v ? 1 : 0;\n if (vbits) setBit(vbits, i);\n }\n }\n return root('bool', len, dataPtr, validityPtr, null);\n}\n\nfunction createI64Column(\n ctx: MemoryContext,\n values: ArrayLike<bigint | number | null | undefined>,\n): Column {\n const len = values.length;\n\n if (values instanceof BigInt64Array) {\n // Fast path: bulk-copy from a BigInt64Array, no nulls.\n const dataPtr = ctx.mod.alloc(len * 8);\n const view = ctx.viewOf({ ptr: dataPtr, length: len, dtype: 'i64' }) as BigInt64Array;\n view.set(values);\n return root('i64', len, dataPtr, 0, null);\n }\n\n // Slow path: scan for nulls and validate number values (ADR-009: safe-int only).\n let nulls = 0;\n for (let i = 0; i < len; i++) {\n const v = values[i];\n if (isNullish(v)) { nulls++; continue; }\n if (typeof v === 'number') {\n if (!Number.isInteger(v)) {\n throw new RangeError(`i64 column: non-integer number ${v} at index ${i} — use BigInt or null`);\n }\n if (!Number.isSafeInteger(v)) {\n throw new RangeError(`i64 column: unsafe integer ${v} at index ${i} — use BigInt (e.g. ${v}n)`);\n }\n }\n // typeof bigint: always safe\n }\n\n const dataPtr = ctx.mod.alloc(len * 8);\n const validityPtr = nulls > 0 ? ctx.mod.alloc(validityBytes(len)) : 0;\n\n const view = ctx.viewOf({ ptr: dataPtr, length: len, dtype: 'i64' }) as BigInt64Array;\n let vbits: Uint8Array | null = null;\n if (validityPtr !== 0) {\n vbits = ctx.viewOf({ ptr: validityPtr, length: validityBytes(len), dtype: 'u8' }) as Uint8Array;\n vbits.fill(0);\n }\n for (let i = 0; i < len; i++) {\n const v = values[i];\n if (isNullish(v)) {\n view[i] = 0n;\n } else {\n view[i] = typeof v === 'bigint' ? v : BigInt(v as number);\n if (vbits) setBit(vbits, i);\n }\n }\n return root('i64', len, dataPtr, validityPtr, null);\n}\n\n// ── Temporal column construction (ADR-010) ────────────────────────────────────\n\n/** Shared builder: date32 (i32 days) or timestamp (i64 ms). */\nfunction createTemporalColumn(\n ctx: MemoryContext, dtype: 'timestamp' | 'date32',\n values: ArrayLike<bigint | number | null | undefined>, tz?: string,\n): Column {\n const ts = dtype === 'timestamp', sz = ts ? 8 : 4, len = values.length;\n const vdt = ts ? 'i64' : 'i32';\n if (ts ? values instanceof BigInt64Array : values instanceof Int32Array) {\n const p = ctx.mod.alloc(Math.max(len * sz, 1));\n (ctx.viewOf({ ptr: p, length: len, dtype: vdt }) as BigInt64Array | Int32Array).set(values as any);\n return root(dtype, len, p, 0, null, tz);\n }\n let nulls = 0;\n for (let i = 0; i < len; i++) if (isNullish(values[i])) nulls++;\n const dP = ctx.mod.alloc(Math.max(len * sz, 1)), vP = nulls > 0 ? ctx.mod.alloc(validityBytes(len)) : 0;\n const view = ctx.viewOf({ ptr: dP, length: len, dtype: vdt }) as BigInt64Array | Int32Array;\n let vb: Uint8Array | null = null;\n if (vP) { vb = ctx.viewOf({ ptr: vP, length: validityBytes(len), dtype: 'u8' }) as Uint8Array; vb.fill(0); }\n for (let i = 0; i < len; i++) {\n const v = values[i];\n if (!isNullish(v)) {\n (view as any)[i] = ts ? (typeof v === 'bigint' ? v : BigInt(v as number)) : (v as number);\n if (vb) setBit(vb, i);\n } else { (view as any)[i] = ts ? 0n : 0; }\n }\n return root(dtype, len, dP, vP, null, tz);\n}\n\nfunction createStringColumn(\n ctx: MemoryContext,\n values: ArrayLike<string | null | undefined>,\n): Column {\n const len = values.length;\n const index = new Map<string, number>();\n const uniques: string[] = [];\n const idxData = new Int32Array(len); // JS staging copy of the i32 indices\n const nullMask = new Uint8Array(len); // 1 = null row\n let nulls = 0;\n\n for (let i = 0; i < len; i++) {\n const v = values[i];\n if (isNullish(v)) {\n nulls++;\n nullMask[i] = 1;\n idxData[i] = 0;\n } else {\n const s = v as string;\n let j = index.get(s);\n if (j === undefined) {\n j = uniques.length;\n uniques.push(s);\n index.set(s, j);\n }\n idxData[i] = j;\n }\n }\n\n // Allocate the index + validity buffers, then build the dictionary (which\n // allocs its own buffers). Take views only after ALL allocations complete.\n const dataPtr = ctx.mod.alloc(len * 4);\n const validityPtr = nulls > 0 ? ctx.mod.alloc(validityBytes(len)) : 0;\n const dict = writeDictionary(ctx, uniques);\n\n const idxView = ctx.viewOf({ ptr: dataPtr, length: len, dtype: 'i32' }) as unknown as Settable;\n idxView.set(idxData);\n if (validityPtr !== 0) {\n const vbits = ctx.viewOf({ ptr: validityPtr, length: validityBytes(len), dtype: 'u8' }) as Uint8Array;\n vbits.fill(0);\n for (let i = 0; i < len; i++) if (nullMask[i] === 0) setBit(vbits, i);\n }\n return root('utf8', len, dataPtr, validityPtr, dict);\n}\n\n/**\n * Export a column back to a JS array, with null slots as `null` (deliverable §1).\n * `f64`/`f32` `NaN`s round-trip as values; `bool` yields `boolean`; `utf8` yields\n * memoized-decoded strings.\n *\n * Temporal boundary per dtypes.md §11:\n * - `date32` → `number` (days since epoch), matching the physical i32 storage.\n * - `timestamp` → `bigint` (ms since epoch), matching the physical i64 storage.\n * Use `Series.toDates()` for convenient `Date[]` conversion.\n */\nexport function columnToArray(ctx: MemoryContext, col: Column): Cell[] {\n const { length, validityPtr, validityBitOffset } = col;\n const validity =\n validityPtr === 0\n ? null\n : (ctx.viewOf({\n ptr: validityPtr,\n length: validityBytes(validityBitOffset + length),\n dtype: 'u8',\n }) as Uint8Array);\n\n const out = new Array<Cell>(length);\n\n if (col.dtype === 'utf8') {\n const idx = ctx.viewOf({ ptr: col.dataPtr, length, dtype: 'i32' }) as Int32Array;\n const dict = col.dict!;\n for (let i = 0; i < length; i++) {\n out[i] =\n validity && !getBit(validity, validityBitOffset + i)\n ? null\n : decodeSlot(ctx, dict, idx[i]!);\n }\n return out;\n }\n\n // i64 and timestamp both use BigInt64Array; boundary = bigint (dtypes.md §11/§6).\n if (col.dtype === 'i64' || col.dtype === 'timestamp') {\n const data = ctx.viewOf({ ptr: col.dataPtr, length, dtype: 'i64' }) as BigInt64Array;\n for (let i = 0; i < length; i++) {\n out[i] = validity && !getBit(validity, validityBitOffset + i) ? null : data[i]!;\n }\n return out;\n }\n\n // date32 uses Int32Array; boundary = number (day count, dtypes.md §11/§6).\n if (col.dtype === 'date32') {\n const data = ctx.viewOf({ ptr: col.dataPtr, length, dtype: 'i32' }) as Int32Array;\n for (let i = 0; i < length; i++) {\n out[i] = validity && !getBit(validity, validityBitOffset + i) ? null : data[i]!;\n }\n return out;\n }\n\n const info = DTYPES[col.dtype];\n const data = ctx.viewOf({ ptr: col.dataPtr, length, dtype: info.view });\n const isBool = col.dtype === 'bool';\n for (let i = 0; i < length; i++) {\n if (validity && !getBit(validity, validityBitOffset + i)) {\n out[i] = null;\n } else {\n out[i] = isBool ? data[i] !== 0 : (data[i] as number);\n }\n }\n return out;\n}\n\n/**\n * Zero-copy slice `[start, end)` sharing the parent's buffers (deliverable §4).\n * `start`/`end` are clamped to `[0, length]`; `end < start` yields an empty slice.\n * See the module doc for the data/validity offset convention. Slice-of-slice\n * composes: offsets accumulate, buffers stay shared.\n */\nexport function sliceColumn(col: Column, start: number, end: number): Column {\n const s = Math.max(0, Math.min(start, col.length));\n const e = Math.max(s, Math.min(end, col.length));\n const n = e - s;\n const size = DTYPES[col.dtype].size;\n return {\n dtype: col.dtype,\n length: n,\n dataPtr: col.dataPtr + s * size,\n validityPtr: col.validityPtr,\n validityBitOffset: col.validityBitOffset + s,\n dict: col.dict,\n owned: false, // a slice never owns the shared buffers\n ...(col.tz !== undefined ? { tz: col.tz } : {}), // propagate tz metadata for timestamp slices\n };\n}\n\n/**\n * Free a column's owned buffers and drop them from the view registry. A no-op for\n * slices (`owned === false`) — they share buffers owned by the root. Frees the\n * dictionary too for an owned `utf8` column.\n */\nexport function freeColumn(ctx: MemoryContext, col: Column): void {\n if (!col.owned) return;\n const info = DTYPES[col.dtype];\n ctx.viewOf.forget({ ptr: col.dataPtr, length: col.length, dtype: info.view });\n ctx.mod.free(col.dataPtr);\n if (col.validityPtr !== 0) {\n ctx.viewOf.forget({\n ptr: col.validityPtr,\n length: validityBytes(col.validityBitOffset + col.length),\n dtype: 'u8',\n });\n ctx.mod.free(col.validityPtr);\n }\n if (col.dict !== null) {\n freeDictionary(ctx, col.dict);\n }\n}\n","/**\n * Expression AST (Phase 3, P3.1 deliverable §1).\n *\n * The public expression surface from spec §4. `col('a')` / `lit(v)` are the two\n * leaf builders; every operator is a chainable method returning a **new**\n * {@link Expr}. Nodes are immutable (deep-frozen), so an `Expr` can be shared and\n * re-compiled without aliasing hazards.\n *\n * col('a').gt(5).and(col('b').eq('x'))\n * col('a').add(col('b')).mul(2)\n * col('a').cast('f32').sum()\n *\n * Type resolution (result dtype, the single int→float widening rule, cast-insertion\n * points, unsupported-mix errors) lives in `./dtypes.ts`; lowering to kernel calls\n * lives in `./compile.ts`. This file is pure data + ergonomics — no wasm, no memory.\n */\n\nimport type { DType } from '../memory/dtype.js';\n\n/** Binary arithmetic operators (dtypes.md §3.1/§3.2). */\nexport type ArithOp = 'add' | 'sub' | 'mul' | 'div' | 'mod';\n\n/** dt accessor field names (dtypes.md §10, ADR-010). */\nexport type DtComponent =\n | 'year' | 'month' | 'day'\n | 'hour' | 'minute' | 'second' | 'millisecond'\n | 'weekday' | 'dayOfYear' | 'quarter';\n\n/** str namespace op names (dtypes.md §13). v1 has only 'slice'. */\nexport type StrOp = 'slice';\n/** Comparison operators → boolean/mask (dtypes.md §4.1). */\nexport type CompareOp = 'gt' | 'ge' | 'lt' | 'le' | 'eq' | 'ne';\n/** Short-circuit-free three-valued boolean operators (dtypes.md §4.2). */\nexport type BoolOp = 'and' | 'or';\n/** Reduction operators (dtypes.md §4.3). */\nexport type AggOp =\n | 'sum'\n | 'mean'\n | 'min'\n | 'max'\n | 'count'\n | 'nunique'\n | 'std'\n | 'var'\n | 'first'\n | 'last';\n\n/** A raw JS scalar that a literal / fill value can hold. */\nexport type ScalarValue = number | bigint | string | boolean;\n\n/** The immutable AST node inside every {@link Expr}. Discriminated on `kind`. */\nexport type ExprNode =\n | Readonly<{ kind: 'col'; name: string }>\n | Readonly<{ kind: 'lit'; value: ScalarValue; dtype: DType | null }>\n | Readonly<{ kind: 'arith'; op: ArithOp; left: Expr; right: Expr }>\n | Readonly<{ kind: 'neg'; operand: Expr }>\n | Readonly<{ kind: 'compare'; op: CompareOp; left: Expr; right: Expr }>\n | Readonly<{ kind: 'bool'; op: BoolOp; left: Expr; right: Expr }>\n | Readonly<{ kind: 'not'; operand: Expr }>\n | Readonly<{ kind: 'isNull'; operand: Expr }>\n | Readonly<{ kind: 'fillNull'; operand: Expr; value: ScalarValue }>\n | Readonly<{ kind: 'cast'; operand: Expr; to: DType }>\n | Readonly<{ kind: 'agg'; op: AggOp; operand: Expr }>\n /** dt accessor: extract a calendar field from a date32 or timestamp column. */\n | Readonly<{ kind: 'dt'; component: DtComponent; operand: Expr }>\n /**\n * str.slice: substring via JS String.prototype.slice semantics (dtypes.md §13).\n * Applied to dictionary values once (O(unique)), then indices remapped (O(rows)).\n */\n | Readonly<{ kind: 'strSlice'; operand: Expr; start: number; end: number | undefined }>;\n\n/** Anything accepted where an expression operand is expected. Raw scalars wrap to `lit`. */\nexport type ExprLike = Expr | ScalarValue;\n\n/** Wrap an {@link ExprLike} into an {@link Expr} (raw scalar → `lit`). */\nexport function toExpr(x: ExprLike): Expr {\n return x instanceof Expr ? x : lit(x);\n}\n\n/**\n * An immutable expression tree node with a chainable, pandas-familiar surface\n * (spec §4). Every method returns a new `Expr`; the receiver is never mutated.\n */\nexport class Expr {\n /** The frozen AST node this expression wraps. */\n readonly node: ExprNode;\n\n /** @internal — construct via {@link col}/{@link lit} or a chained method. */\n constructor(node: ExprNode) {\n this.node = Object.freeze(node);\n Object.freeze(this);\n }\n\n // ── arithmetic (dtypes.md §3.1/§3.2) ──────────────────────────────────────\n add(other: ExprLike): Expr {\n return arith('add', this, other);\n }\n sub(other: ExprLike): Expr {\n return arith('sub', this, other);\n }\n mul(other: ExprLike): Expr {\n return arith('mul', this, other);\n }\n div(other: ExprLike): Expr {\n return arith('div', this, other);\n }\n mod(other: ExprLike): Expr {\n return arith('mod', this, other);\n }\n neg(): Expr {\n return new Expr({ kind: 'neg', operand: this });\n }\n\n // ── comparison (dtypes.md §4.1) ───────────────────────────────────────────\n gt(other: ExprLike): Expr {\n return compare('gt', this, other);\n }\n ge(other: ExprLike): Expr {\n return compare('ge', this, other);\n }\n lt(other: ExprLike): Expr {\n return compare('lt', this, other);\n }\n le(other: ExprLike): Expr {\n return compare('le', this, other);\n }\n eq(other: ExprLike): Expr {\n return compare('eq', this, other);\n }\n ne(other: ExprLike): Expr {\n return compare('ne', this, other);\n }\n\n // ── boolean, three-valued Kleene (dtypes.md §4.2) ─────────────────────────\n and(other: ExprLike): Expr {\n return new Expr({ kind: 'bool', op: 'and', left: this, right: toExpr(other) });\n }\n or(other: ExprLike): Expr {\n return new Expr({ kind: 'bool', op: 'or', left: this, right: toExpr(other) });\n }\n not(): Expr {\n return new Expr({ kind: 'not', operand: this });\n }\n\n // ── null utilities (dtypes.md §4.5) ───────────────────────────────────────\n isNull(): Expr {\n return new Expr({ kind: 'isNull', operand: this });\n }\n /** `notNull` = `not(isNull)` (dtypes.md §4.5). */\n notNull(): Expr {\n return this.isNull().not();\n }\n fillNull(value: ScalarValue): Expr {\n return new Expr({ kind: 'fillNull', operand: this, value });\n }\n\n // ── cast (dtypes.md §2, explicit only) ────────────────────────────────────\n cast(to: DType): Expr {\n return new Expr({ kind: 'cast', operand: this, to });\n }\n\n // ── aggregations (dtypes.md §4.3) ─────────────────────────────────────────\n sum(): Expr {\n return agg('sum', this);\n }\n mean(): Expr {\n return agg('mean', this);\n }\n min(): Expr {\n return agg('min', this);\n }\n max(): Expr {\n return agg('max', this);\n }\n count(): Expr {\n return agg('count', this);\n }\n nunique(): Expr {\n return agg('nunique', this);\n }\n std(): Expr {\n return agg('std', this);\n }\n var(): Expr {\n return agg('var', this);\n }\n first(): Expr {\n return agg('first', this);\n }\n last(): Expr {\n return agg('last', this);\n }\n\n /**\n * dt accessor namespace for date32 / timestamp columns (dtypes.md §10, ADR-010).\n * Returns a {@link DtProxy} with `.year()`, `.month()`, `.day()`, `.hour()`,\n * `.minute()`, `.second()`, `.millisecond()`, `.weekday()`, `.dayOfYear()`, `.quarter()`.\n * Each method returns an `i32` Expr.\n */\n get dt(): DtProxy {\n return new DtProxy(this);\n }\n\n /**\n * str namespace for `utf8` columns (dtypes.md §13).\n * Returns a {@link StrProxy} with `.slice(start, end?)`.\n * Throws a dtype error at compile time if the column is not `utf8`.\n */\n get str(): StrProxy {\n return new StrProxy(this);\n }\n\n /** Readable, unambiguous rendering for `console.log` / error messages. */\n toString(): string {\n return render(this.node);\n }\n}\n\n/**\n * dt accessor proxy returned by `Expr.dt`. Every method produces an `i32` Expr\n * extracting the named calendar field from the parent date32 / timestamp column.\n */\nexport class DtProxy {\n constructor(private readonly operand: Expr) {}\n year(): Expr { return dt('year', this.operand); }\n month(): Expr { return dt('month', this.operand); }\n day(): Expr { return dt('day', this.operand); }\n hour(): Expr { return dt('hour', this.operand); }\n minute(): Expr { return dt('minute', this.operand); }\n second(): Expr { return dt('second', this.operand); }\n millisecond(): Expr { return dt('millisecond', this.operand); }\n weekday(): Expr { return dt('weekday', this.operand); }\n dayOfYear(): Expr { return dt('dayOfYear', this.operand); }\n quarter(): Expr { return dt('quarter', this.operand); }\n}\n\n/**\n * str accessor proxy returned by `Expr.str`. Provides string operations over\n * `utf8` columns; dtypes.md §13. A dtype error is raised at compile time (not\n * here) if the parent expression is not `utf8`.\n */\nexport class StrProxy {\n constructor(private readonly operand: Expr) {}\n\n /**\n * Substring via `JS String.prototype.slice` semantics (dtypes.md §13).\n *\n * - Negative `start`/`end`: count from the end of the string.\n * - `end` omitted: slice to the end of the string.\n * - Out-of-range indices clamp (same as JS).\n * - Null rows propagate null.\n * - UTF-16 code-unit indexing (same as every JS string API).\n * **Surrogate-pair caveat:** a supplementary character (emoji, CJK extension, etc.)\n * occupies two code units; `slice` may split a surrogate pair, producing an\n * unpaired surrogate (well-defined but unusual in JS, not valid UTF-8).\n * If you need grapheme-cluster or codepoint semantics, pre-process with JS before\n * loading into the frame.\n */\n slice(start: number, end?: number): Expr {\n return new Expr({ kind: 'strSlice', operand: this.operand, start, end });\n }\n}\n\n// ── leaf builders ───────────────────────────────────────────────────────────\n\n/** Reference the frame column named `name`. */\nexport function col(name: string): Expr {\n return new Expr({ kind: 'col', name });\n}\n\n/**\n * A scalar literal. Its dtype is normally inferred from the operand it is combined\n * with (an integer numeric literal adopts an integer column's dtype, a fractional\n * one triggers int→float widening — see `./dtypes.ts`). Pass `dtype` to pin it.\n */\nexport function lit(value: ScalarValue, dtype?: DType): Expr {\n return new Expr({ kind: 'lit', value, dtype: dtype ?? null });\n}\n\n// ── internal constructors ─────────────────────────────────────────────────────\n\nfunction arith(op: ArithOp, left: Expr, right: ExprLike): Expr {\n return new Expr({ kind: 'arith', op, left, right: toExpr(right) });\n}\n\nfunction compare(op: CompareOp, left: Expr, right: ExprLike): Expr {\n return new Expr({ kind: 'compare', op, left, right: toExpr(right) });\n}\n\nfunction agg(op: AggOp, operand: Expr): Expr {\n return new Expr({ kind: 'agg', op, operand });\n}\n\nfunction dt(component: DtComponent, operand: Expr): Expr {\n return new Expr({ kind: 'dt', component, operand });\n}\n\n// ── rendering ─────────────────────────────────────────────────────────────────\n\nconst ARITH_SYM: Record<ArithOp, string> = {\n add: '+',\n sub: '-',\n mul: '*',\n div: '/',\n mod: '%',\n};\n\nfunction renderScalar(v: ScalarValue): string {\n if (typeof v === 'string') return JSON.stringify(v);\n if (typeof v === 'bigint') return String(v); // no 'n' suffix per spec\n return String(v);\n}\n\nfunction render(node: ExprNode): string {\n switch (node.kind) {\n case 'col':\n return `col(${JSON.stringify(node.name)})`;\n case 'lit':\n return node.dtype\n ? `lit(${renderScalar(node.value)}, ${node.dtype})`\n : `lit(${renderScalar(node.value)})`;\n case 'arith':\n return `(${render(node.left.node)} ${ARITH_SYM[node.op]} ${render(node.right.node)})`;\n case 'neg':\n return `(-${render(node.operand.node)})`;\n case 'compare':\n return `${render(node.left.node)}.${node.op}(${render(node.right.node)})`;\n case 'bool':\n return `${render(node.left.node)}.${node.op}(${render(node.right.node)})`;\n case 'not':\n return `${render(node.operand.node)}.not()`;\n case 'isNull':\n return `${render(node.operand.node)}.isNull()`;\n case 'fillNull':\n return `${render(node.operand.node)}.fillNull(${renderScalar(node.value)})`;\n case 'cast':\n return `${render(node.operand.node)}.cast(${node.to})`;\n case 'agg':\n return `${render(node.operand.node)}.${node.op}()`;\n case 'dt':\n return `${render(node.operand.node)}.dt.${node.component}()`;\n case 'strSlice':\n return node.end === undefined\n ? `${render(node.operand.node)}.str.slice(${node.start})`\n : `${render(node.operand.node)}.str.slice(${node.start}, ${node.end})`;\n }\n}\n","/**\n * Expression-layer errors (Phase 3, P3.1). Spec §4 ergonomics: dtype mismatches\n * name **both** dtypes and the operation; unknown column names suggest the nearest\n * match. All expression-time failures are {@link ExprError} so the frame layer can\n * catch and re-surface them uniformly.\n */\n\nimport type { DType } from '../memory/dtype.js';\n\n/** Base class for every expression compile/eval error. */\nexport class ExprError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'ExprError';\n }\n}\n\n/**\n * A binary op was handed two dtypes it cannot combine (dtypes.md §3.1: only\n * int→float widening is implicit). Message names both dtypes and the op.\n */\nexport function dtypeMismatch(op: string, left: DType, right: DType, hint?: string): ExprError {\n const tail = hint ? ` ${hint}` : '';\n return new ExprError(\n `dtype mismatch in '${op}': cannot combine ${left} and ${right}.${tail}`,\n );\n}\n\n/** An op was applied to a dtype it does not support at all (e.g. arithmetic on utf8). */\nexport function unsupportedDtype(op: string, dtype: DType, hint?: string): ExprError {\n const tail = hint ? ` ${hint}` : '';\n return new ExprError(`operation '${op}' is not supported for dtype ${dtype}.${tail}`);\n}\n\n/** A cast that is not in the v1 matrix (dtypes.md §2, the ✗ cells). */\nexport function unsupportedCast(from: DType, to: DType): ExprError {\n return new ExprError(\n `cast from ${from} to ${to} is not supported in v1` +\n (from === 'utf8' || to === 'utf8'\n ? ' (numeric↔utf8 conversion is not a kernel cast; use CSV inference / toString).'\n : '.'),\n );\n}\n\n/** Column `name` was not found; suggest the closest known column if any. */\nexport function unknownColumn(name: string, known: readonly string[]): ExprError {\n const near = nearest(name, known);\n const suffix = near ? ` Did you mean '${near}'?` : '';\n const list = known.length ? ` Known columns: ${known.map((k) => `'${k}'`).join(', ')}.` : '';\n return new ExprError(`unknown column '${name}'.${suffix}${list}`);\n}\n\n/** A literal value's JS type does not match the dtype it must adopt. */\nexport function badLiteral(value: unknown, dtype: DType, op: string): ExprError {\n return new ExprError(\n `literal ${JSON.stringify(value)} is not a valid ${dtype} value for '${op}'.`,\n );\n}\n\n// ── nearest-name suggestion (Levenshtein, capped) ─────────────────────────────\n\n/** Closest known name to `name` within a small edit distance, else `null`. */\nexport function nearest(name: string, known: readonly string[]): string | null {\n let best: string | null = null;\n let bestD = Infinity;\n for (const k of known) {\n const d = levenshtein(name, k);\n if (d < bestD) {\n bestD = d;\n best = k;\n }\n }\n // Only suggest if the edit distance is small relative to the name length.\n const threshold = Math.max(2, Math.ceil(name.length / 3));\n return best !== null && bestD <= threshold ? best : null;\n}\n\nfunction levenshtein(a: string, b: string): number {\n const m = a.length;\n const n = b.length;\n if (m === 0) return n;\n if (n === 0) return m;\n let prev = new Array<number>(n + 1);\n let curr = new Array<number>(n + 1);\n for (let j = 0; j <= n; j++) prev[j] = j;\n for (let i = 1; i <= m; i++) {\n curr[0] = i;\n const ai = a.charCodeAt(i - 1);\n for (let j = 1; j <= n; j++) {\n const cost = ai === b.charCodeAt(j - 1) ? 0 : 1;\n curr[j] = Math.min(prev[j]! + 1, curr[j - 1]! + 1, prev[j - 1]! + cost);\n }\n [prev, curr] = [curr, prev];\n }\n return prev[n]!;\n}\n","/**\n * Type & validity resolution (Phase 3, P3.1 deliverable §2; dtypes.md §3.1 + §5).\n *\n * `resolve(expr, schema)` type-checks an {@link Expr} and lowers it to a **typed IR**\n * ({@link TExpr}) the compiler executes directly. It encodes:\n *\n * - result-dtype inference (arith lattice dtypes.md §3.1, comparison/boolean → `bool`,\n * aggregation result matrix dtypes.md §4.3),\n * - the single implicit conversion — **int→float widening in mixed arithmetic** —\n * materialised as an explicit {@link TCast} node so the compiler just emits a cast\n * kernel (dtypes.md §5 \"cast-insertion points\"),\n * - literal typing: a bare numeric literal adopts the dtype of the operand it is\n * combined with; a *fractional* literal against an integer column triggers the same\n * widening (documented extension of the §3.1 rule to literal operands),\n * - unsupported-mix errors naming **both** dtypes and the op (spec §4 ergonomics).\n *\n * Identity casts survive as `TCast{from===to}`; the compiler elides the kernel\n * (dtypes.md §2). Range/validity nulling is a runtime concern handled by the cast /\n * div / mod kernels, not here.\n */\n\nimport type { DType } from '../memory/dtype.js';\nimport {\n type Expr,\n type ExprNode,\n type ArithOp,\n type CompareOp,\n type BoolOp,\n type AggOp,\n type DtComponent,\n type ScalarValue,\n} from './ast.js';\nimport {\n dtypeMismatch,\n unsupportedDtype,\n unsupportedCast,\n unknownColumn,\n badLiteral,\n ExprError,\n} from './errors.js';\n\n// ── Schema ────────────────────────────────────────────────────────────────────\n\n/** The dtype view of a frame the type checker needs (a subset of `FrameView`). */\nexport interface Schema {\n /** Dtype of column `name`, or `undefined` if absent. */\n dtypeOf(name: string): DType | undefined;\n /** All column names (for nearest-match suggestions). */\n columnNames(): readonly string[];\n}\n\n/** Build a {@link Schema} from a plain `name → dtype` record (handy in tests). */\nexport function schemaOf(record: Readonly<Record<string, DType>>): Schema {\n const names = Object.keys(record);\n return {\n dtypeOf: (name) => record[name],\n columnNames: () => names,\n };\n}\n\n// ── Typed IR ──────────────────────────────────────────────────────────────────\n\n/** A type-resolved expression node. `dtype` is the node's result dtype. */\nexport type TExpr =\n | Readonly<{ kind: 'col'; name: string; dtype: DType }>\n | Readonly<{ kind: 'lit'; value: ScalarValue; dtype: DType }>\n | Readonly<{ kind: 'arith'; op: ArithOp; dtype: DType; left: TExpr; right: TExpr }>\n | Readonly<{ kind: 'neg'; dtype: DType; operand: TExpr }>\n | Readonly<{\n kind: 'compare';\n op: CompareOp;\n dtype: 'bool';\n operandDtype: DType;\n left: TExpr;\n right: TExpr;\n }>\n | Readonly<{ kind: 'bool'; op: BoolOp; dtype: 'bool'; left: TExpr; right: TExpr }>\n | Readonly<{ kind: 'not'; dtype: 'bool'; operand: TExpr }>\n | Readonly<{ kind: 'isNull'; dtype: 'bool'; operand: TExpr }>\n | Readonly<{ kind: 'fillNull'; dtype: DType; operand: TExpr; value: ScalarValue }>\n | Readonly<{ kind: 'cast'; dtype: DType; from: DType; operand: TExpr }>\n | Readonly<{\n kind: 'agg';\n op: AggOp;\n dtype: DType;\n operandDtype: DType;\n operand: TExpr;\n }>\n /** dt accessor: extract a calendar field (result dtype = 'i32', dtypes.md §10). */\n | Readonly<{ kind: 'dt'; component: DtComponent; dtype: 'i32'; operand: TExpr }>\n /** str.slice: substring on dictionary values (result dtype = 'utf8', dtypes.md §13). */\n | Readonly<{ kind: 'strSlice'; dtype: 'utf8'; operand: TExpr; start: number; end: number | undefined }>;\n\n/** `true` for a value dtype that participates in numeric arithmetic (dtypes.md §3.2). */\nconst NUMERIC: ReadonlySet<DType> = new Set<DType>(['f64', 'f32', 'i32', 'u32', 'i64']);\nconst INTEGER: ReadonlySet<DType> = new Set<DType>(['i32', 'u32', 'i64']);\nconst FLOAT: ReadonlySet<DType> = new Set<DType>(['f64', 'f32']);\n/** Logical temporal dtypes (ADR-010). NOT in NUMERIC; use restricted algebra (dtypes.md §9). */\nconst TEMPORAL: ReadonlySet<DType> = new Set<DType>(['date32', 'timestamp']);\n\nfunction isNumeric(d: DType): boolean {\n return NUMERIC.has(d);\n}\n\n/** Is `v` representable in the integer dtype `d` (for literal adoption)? */\nfunction intInRange(v: number, d: 'i32' | 'u32'): boolean {\n if (!Number.isInteger(v)) return false;\n return d === 'i32' ? v >= -2147483648 && v <= 2147483647 : v >= 0 && v <= 4294967295;\n}\n\n// ── Literal classification ────────────────────────────────────────────────────\n\n/** A bare numeric literal with no pinned dtype — the only *adoptable* operand. */\nfunction adoptableNumLit(e: Expr): number | null {\n const n = e.node;\n return n.kind === 'lit' && n.dtype === null && typeof n.value === 'number' ? n.value : null;\n}\n\nfunction litTExpr(value: ScalarValue, dtype: DType): TExpr {\n return { kind: 'lit', value, dtype };\n}\n\n/** Wrap `t` in a cast to `to` iff its dtype differs (used for widening). */\nfunction widen(t: TExpr, to: DType): TExpr {\n return t.dtype === to ? t : { kind: 'cast', dtype: to, from: t.dtype, operand: t };\n}\n\n// ── Public entry ──────────────────────────────────────────────────────────────\n\n/** Resolve `expr` against `schema`, returning the typed IR. Throws {@link ExprError}. */\nexport function resolve(expr: Expr, schema: Schema): TExpr {\n return resolveNode(expr, schema);\n}\n\n/** Convenience: the top-level result dtype of `expr` (`'bool'` for predicates). */\nexport function inferType(expr: Expr, schema: Schema): DType {\n return resolve(expr, schema).dtype;\n}\n\nfunction resolveNode(e: Expr, schema: Schema): TExpr {\n const node: ExprNode = e.node;\n switch (node.kind) {\n case 'col': {\n const dt = schema.dtypeOf(node.name);\n if (dt === undefined) throw unknownColumn(node.name, schema.columnNames());\n return { kind: 'col', name: node.name, dtype: dt };\n }\n case 'lit': {\n // A bare literal with no sibling context defaults: bigint→i64, int→i32, frac→f64.\n if (node.dtype !== null) return litTExpr(node.value, node.dtype);\n if (typeof node.value === 'bigint') return litTExpr(node.value, 'i64');\n if (typeof node.value === 'number') {\n return litTExpr(node.value, Number.isInteger(node.value) ? 'i32' : 'f64');\n }\n return litTExpr(node.value, typeof node.value === 'string' ? 'utf8' : 'bool');\n }\n case 'arith':\n return resolveArith(node.op, node.left, node.right, schema);\n case 'neg':\n return resolveNeg(node.operand, schema);\n case 'compare':\n return resolveCompare(node.op, node.left, node.right, schema);\n case 'bool':\n return resolveBool(node.op, node.left, node.right, schema);\n case 'not':\n return resolveNot(node.operand, schema);\n case 'isNull':\n return { kind: 'isNull', dtype: 'bool', operand: resolveNode(node.operand, schema) };\n case 'fillNull':\n return resolveFillNull(node.operand, node.value, schema);\n case 'cast':\n return resolveCast(node.operand, node.to, schema);\n case 'agg':\n return resolveAgg(node.op, node.operand, schema);\n case 'dt':\n return resolveDt(node.component, node.operand, schema);\n case 'strSlice':\n return resolveStrSlice(node.operand, node.start, node.end, schema);\n }\n}\n\n// ── Arithmetic (dtypes.md §3.1/§3.2) ──────────────────────────────────────────\n\nfunction resolveArith(op: ArithOp, leftE: Expr, rightE: Expr, schema: Schema): TExpr {\n const ln = adoptableNumLit(leftE);\n const rn = adoptableNumLit(rightE);\n\n // Both bare numeric literals → default each, then apply the lattice with no casts.\n if (ln !== null && rn !== null) {\n const ld: DType = Number.isInteger(ln) ? 'i32' : 'f64';\n const rd: DType = Number.isInteger(rn) ? 'i32' : 'f64';\n const opDtype = ld === rd ? ld : 'f64'; // i32⊕f64 → f64\n return {\n kind: 'arith',\n op,\n dtype: opDtype,\n left: litTExpr(ln, opDtype),\n right: litTExpr(rn, opDtype),\n };\n }\n\n // One bare numeric literal + one typed operand.\n if (ln !== null || rn !== null) {\n const litVal = (ln ?? rn) as number;\n const typed = resolveNode(ln !== null ? rightE : leftE, schema);\n const { opDtype, colTarget } = arithLitVsTyped(op, litVal, typed.dtype);\n const typedT = widen(typed, colTarget);\n const litT = litTExpr(litVal, opDtype);\n const left = ln !== null ? litT : typedT;\n const right = ln !== null ? typedT : litT;\n return { kind: 'arith', op, dtype: opDtype, left, right };\n }\n\n // Two typed operands.\n const L = resolveNode(leftE, schema);\n const R = resolveNode(rightE, schema);\n const opDtype = arithCommon(op, L.dtype, R.dtype);\n return { kind: 'arith', op, dtype: opDtype, left: widen(L, opDtype), right: widen(R, opDtype) };\n}\n\n/** Operation dtype for a literal vs a typed operand; `colTarget` = cast for the column. */\nfunction arithLitVsTyped(\n op: ArithOp,\n value: number,\n d: DType,\n): { opDtype: DType; colTarget: DType } {\n // Temporal restricted algebra (dtypes.md §9): literal offset; validation untested.\n if (d === 'timestamp') return { opDtype: 'timestamp', colTarget: 'timestamp' };\n if (d === 'date32') return { opDtype: 'date32', colTarget: 'date32' };\n if (!isNumeric(d)) {\n throw unsupportedDtype(op, d, 'arithmetic');\n }\n if (FLOAT.has(d)) return { opDtype: d, colTarget: d }; // literal adopts the float dtype\n if (d === 'i64') {\n // number literal vs i64 column: adopt as i64 if safe-int, else widen both to f64.\n if (Number.isSafeInteger(value)) return { opDtype: 'i64', colTarget: 'i64' };\n return { opDtype: 'f64', colTarget: 'f64' };\n }\n // i32/u32 column: adopt if the literal is an in-range integer, else widen to f64.\n if (intInRange(value, d as 'i32' | 'u32')) return { opDtype: d, colTarget: d };\n return { opDtype: 'f64', colTarget: 'f64' }; // fractional / out-of-range → int→float\n}\n\n/** Common arithmetic dtype for two typed operands (dtypes.md §3.1 + v2 §8 + §9 temporal). */\nfunction arithCommon(op: ArithOp, a: DType, b: DType): DType {\n // Temporal restricted algebra (dtypes.md §9): check before numeric rules.\n if (TEMPORAL.has(a) || TEMPORAL.has(b)) {\n return temporalArithResult(op, a, b);\n }\n if (!isNumeric(a)) throw unsupportedDtype(op, a, 'arithmetic');\n if (!isNumeric(b)) throw unsupportedDtype(op, b, 'arithmetic');\n if (a === b) return a;\n // v2 i64 lattice: i32/u32 ⊕ i64 → i64; i64 ⊕ f64 → f64; i64 ⊕ f32 → f64\n if ((a === 'i64' && (b === 'i32' || b === 'u32')) || (b === 'i64' && (a === 'i32' || a === 'u32'))) return 'i64';\n if ((a === 'i64' && FLOAT.has(b)) || (b === 'i64' && FLOAT.has(a))) return 'f64';\n // int → float widening (v1 rule, non-i64)\n if ((a === 'i32' || a === 'u32') && b === 'f64') return 'f64';\n if ((b === 'i32' || b === 'u32') && a === 'f64') return 'f64';\n if ((a === 'i32' || a === 'u32') && b === 'f32') return 'f32';\n if ((b === 'i32' || b === 'u32') && a === 'f32') return 'f32';\n throw dtypeMismatch(op, a, b, 'insert an explicit .cast() (only int→float widening is implicit).');\n}\n\n/**\n * Temporal restricted arithmetic (dtypes.md §9): only the listed pairs are legal.\n * Everything else throws a dtype error naming op + both dtypes.\n */\nfunction temporalArithResult(op: ArithOp, a: DType, b: DType): DType {\n // timestamp − timestamp → i64 (ms duration)\n if (op === 'sub' && a === 'timestamp' && b === 'timestamp') return 'i64';\n // timestamp ± integer-ms-column → timestamp\n if ((op === 'add' || op === 'sub') && a === 'timestamp' && INTEGER.has(b)) return 'timestamp';\n // commutative add: integer + timestamp\n if (op === 'add' && INTEGER.has(a) && b === 'timestamp') return 'timestamp';\n // date32 − date32 → i32 (days duration)\n if (op === 'sub' && a === 'date32' && b === 'date32') return 'i32';\n // date32 ± integer-days-column → date32 (i32/u32 only; not i64 per §9)\n if ((op === 'add' || op === 'sub') && a === 'date32' && (b === 'i32' || b === 'u32')) return 'date32';\n if (op === 'add' && (a === 'i32' || a === 'u32') && b === 'date32') return 'date32';\n throw new ExprError(`${op}(${a},${b})`);\n}\n\nfunction resolveNeg(operandE: Expr, schema: Schema): TExpr {\n const t = resolveNode(operandE, schema);\n if (!isNumeric(t.dtype)) {\n throw unsupportedDtype('neg', t.dtype);\n }\n return { kind: 'neg', dtype: t.dtype, operand: t };\n}\n\n// ── dt accessor (dtypes.md §10) ─────────────────────────────────────────────────\n\nfunction resolveDt(component: DtComponent, operandE: Expr, schema: Schema): TExpr {\n const t = resolveNode(operandE, schema);\n if (!TEMPORAL.has(t.dtype)) throw unsupportedDtype('dt', t.dtype);\n // Result is always i32 (field value: year, month, day, etc.; dtypes.md §10).\n return { kind: 'dt', component, dtype: 'i32', operand: t };\n}\n\n// ── str namespace (dtypes.md §13) ─────────────────────────────────────────────\n\nfunction resolveStrSlice(\n operandE: Expr,\n start: number,\n end: number | undefined,\n schema: Schema,\n): TExpr {\n const t = resolveNode(operandE, schema);\n if (t.dtype !== 'utf8') {\n throw unsupportedDtype('str.slice', t.dtype, `str namespace requires a utf8 column; got ${t.dtype}`);\n }\n return { kind: 'strSlice', dtype: 'utf8', operand: t, start, end };\n}\n\n// ── Comparisons (dtypes.md §4.1; exact-match except literal coercion) ──────────\n\nfunction resolveCompare(op: CompareOp, leftE: Expr, rightE: Expr, schema: Schema): TExpr {\n const isEqNe = op === 'eq' || op === 'ne';\n\n // String / bool literal vs a typed operand (utf8 / bool eq-ne).\n const strLit = stringLit(leftE) ?? stringLit(rightE);\n const boolLit = boolLitOf(leftE) ?? boolLitOf(rightE);\n\n const ln = adoptableNumLit(leftE);\n const rn = adoptableNumLit(rightE);\n\n // Both bare numeric literals → default each and compare in the common dtype.\n if (ln !== null && rn !== null) {\n const opDtype: DType = Number.isInteger(ln) && Number.isInteger(rn) ? 'i32' : 'f64';\n return cmp(op, opDtype, litTExpr(ln, opDtype), litTExpr(rn, opDtype));\n }\n\n // One bare numeric literal + one typed operand.\n if (ln !== null || rn !== null) {\n const litVal = (ln ?? rn) as number;\n const typed = resolveNode(ln !== null ? rightE : leftE, schema);\n // Temporal vs number literal: literal = physical unit (days for date32, ms for timestamp).\n if (typed.dtype === 'date32') {\n const litT = litTExpr(litVal, 'date32');\n return cmp(op, 'date32', ln !== null ? litT : typed, ln !== null ? typed : litT);\n }\n if (typed.dtype === 'timestamp') {\n const litT = litTExpr(litVal, 'timestamp');\n return cmp(op, 'timestamp', ln !== null ? litT : typed, ln !== null ? typed : litT);\n }\n if (!isNumeric(typed.dtype)) {\n throw dtypeMismatch(op, ln !== null ? 'f64' : typed.dtype, ln !== null ? typed.dtype : 'f64',\n 'cannot compare a number to a non-numeric column.');\n }\n const opDtype = cmpLitVsTyped(litVal, typed.dtype);\n const typedT = widen(typed, opDtype);\n const litT = litTExpr(litVal, opDtype);\n return cmp(op, opDtype, ln !== null ? litT : typedT, ln !== null ? typedT : litT);\n }\n\n // utf8: eq/ne against a string literal (dict-index compare); ordering unsupported.\n if (strLit !== null) {\n const typed = resolveNode(stringLit(leftE) !== null ? rightE : leftE, schema);\n if (typed.dtype !== 'utf8') {\n throw dtypeMismatch(op, 'utf8', typed.dtype, 'cannot compare a string to a non-utf8 column.');\n }\n if (!isEqNe) throw unsupportedDtype(op, 'utf8', 'string ordering');\n const litT = litTExpr(strLit, 'utf8');\n return cmp(op, 'utf8', stringLit(leftE) !== null ? litT : typed, stringLit(leftE) !== null ? typed : litT);\n }\n\n // bool: eq/ne against a boolean literal (lowered to identity / not).\n if (boolLit !== null) {\n const typed = resolveNode(boolLitOf(leftE) !== null ? rightE : leftE, schema);\n if (typed.dtype !== 'bool') {\n throw dtypeMismatch(op, 'bool', typed.dtype, 'cannot compare a boolean to a non-bool column.');\n }\n if (!isEqNe) throw unsupportedDtype(op, 'bool');\n const litT = litTExpr(boolLit, 'bool');\n return cmp(op, 'bool', boolLitOf(leftE) !== null ? litT : typed, boolLitOf(leftE) !== null ? typed : litT);\n }\n\n // Two typed operands: dtypes must match exactly (no widening in comparisons).\n const L = resolveNode(leftE, schema);\n const R = resolveNode(rightE, schema);\n if (L.dtype !== R.dtype) {\n throw dtypeMismatch(op, L.dtype, R.dtype, 'cast');\n }\n const d = L.dtype;\n if (d === 'utf8' || d === 'bool') {\n // column-vs-column utf8/bool comparison needs dict unification / xor — not in P3.1.\n throw unsupportedDtype(op, d, 'column-vs-column');\n }\n // Temporal dtypes are allowed in column-vs-column comparisons (route to physical kernel).\n return cmp(op, d, L, R);\n}\n\nfunction cmp(op: CompareOp, operandDtype: DType, left: TExpr, right: TExpr): TExpr {\n return { kind: 'compare', op, dtype: 'bool', operandDtype, left, right };\n}\n\n/** Operand dtype for a numeric literal vs a typed numeric column in a comparison. */\nfunction cmpLitVsTyped(value: number, d: DType): DType {\n if (FLOAT.has(d)) return d;\n if (d === 'i64') return Number.isSafeInteger(value) ? 'i64' : 'f64';\n // i32/u32 column: exact match if in-range integer, else literal-driven widen to f64.\n return intInRange(value, d as 'i32' | 'u32') ? d : 'f64';\n}\n\nfunction stringLit(e: Expr): string | null {\n const n = e.node;\n return n.kind === 'lit' && typeof n.value === 'string' ? n.value : null;\n}\nfunction boolLitOf(e: Expr): boolean | null {\n const n = e.node;\n return n.kind === 'lit' && typeof n.value === 'boolean' ? n.value : null;\n}\n\n// ── Boolean / not (dtypes.md §4.2) ────────────────────────────────────────────\n\nfunction resolveBool(op: BoolOp, leftE: Expr, rightE: Expr, schema: Schema): TExpr {\n const L = resolveNode(leftE, schema);\n const R = resolveNode(rightE, schema);\n if (L.dtype !== 'bool') throw unsupportedDtype(op, L.dtype, 'boolean');\n if (R.dtype !== 'bool') throw unsupportedDtype(op, R.dtype, 'boolean');\n return { kind: 'bool', op, dtype: 'bool', left: L, right: R };\n}\n\nfunction resolveNot(operandE: Expr, schema: Schema): TExpr {\n const t = resolveNode(operandE, schema);\n if (t.dtype !== 'bool') throw unsupportedDtype('not', t.dtype, 'boolean');\n return { kind: 'not', dtype: 'bool', operand: t };\n}\n\n// ── fillNull / cast (dtypes.md §4.5, §2) ──────────────────────────────────────\n\nfunction resolveFillNull(operandE: Expr, value: ScalarValue, schema: Schema): TExpr {\n const t = resolveNode(operandE, schema);\n validateFill(value, t.dtype);\n return { kind: 'fillNull', dtype: t.dtype, operand: t, value };\n}\n\nfunction validateFill(value: ScalarValue, d: DType): void {\n if (d === 'utf8') {\n if (typeof value !== 'string') throw badLiteral(value, d, 'fillNull');\n return;\n }\n if (d === 'bool') {\n if (typeof value !== 'boolean') throw badLiteral(value, d, 'fillNull');\n return;\n }\n // i64 and timestamp both use bigint at the boundary (dtypes.md §6/§11)\n if (d === 'i64' || d === 'timestamp') {\n if (typeof value !== 'bigint' && typeof value !== 'number') throw badLiteral(value, d, 'fillNull');\n if (typeof value === 'number' && !Number.isSafeInteger(value)) throw badLiteral(value, d, 'fillNull');\n return;\n }\n if (typeof value !== 'number') throw badLiteral(value, d, 'fillNull');\n if ((d === 'i32' || d === 'u32') && !intInRange(value, d)) throw badLiteral(value, d, 'fillNull');\n}\n\n/**\n * The v2 cast matrix (dtypes.md §2 + §8 + §7.2 temporal). `true` = allowed; missing = ✗.\n * Temporal reinterpret casts: date32↔i32, timestamp↔i64 (free, no kernel).\n * Scale casts: date32→timestamp (×86_400_000), timestamp→date32 (floor-div).\n */\nconst CAST_OK: Readonly<Record<DType, ReadonlySet<DType>>> = {\n f64: new Set(['f64', 'f32', 'i32', 'u32', 'bool', 'i64']),\n f32: new Set(['f64', 'f32', 'i32', 'u32', 'bool', 'i64']),\n // i32 + date32 reinterpret (dtypes.md §7.2)\n i32: new Set(['f64', 'f32', 'i32', 'u32', 'bool', 'i64', 'date32']),\n u32: new Set(['f64', 'f32', 'i32', 'u32', 'bool', 'i64']),\n bool: new Set(['f64', 'f32', 'i32', 'u32', 'bool', 'i64']),\n utf8: new Set(['utf8']),\n // i64 ↔ utf8 is ✗; i64 + timestamp reinterpret (dtypes.md §7.2)\n i64: new Set(['f64', 'f32', 'i32', 'u32', 'bool', 'i64', 'timestamp']),\n // date32: reinterpret to i32, scale to timestamp; identity\n date32: new Set(['i32', 'timestamp', 'date32']),\n // timestamp: reinterpret to i64, floor-div to date32; identity\n timestamp: new Set(['i64', 'date32', 'timestamp']),\n};\n\nfunction resolveCast(operandE: Expr, to: DType, schema: Schema): TExpr {\n const t = resolveNode(operandE, schema);\n const from = t.dtype;\n if (!CAST_OK[from]?.has(to)) throw unsupportedCast(from, to);\n return { kind: 'cast', dtype: to, from, operand: t };\n}\n\n// ── Aggregations (dtypes.md §4.3) ─────────────────────────────────────────────\n\nfunction resolveAgg(op: AggOp, operandE: Expr, schema: Schema): TExpr {\n const t = resolveNode(operandE, schema);\n const dtype = aggResult(op, t.dtype);\n return { kind: 'agg', op, dtype, operandDtype: t.dtype, operand: t };\n}\n\n/** Result dtype of aggregation `op` over operand dtype `d`; throws if unsupported. */\nexport function aggResult(op: AggOp, d: DType): DType {\n switch (op) {\n case 'count':\n return 'i32'; // non-null count, any dtype (dtypes.md §4.4)\n case 'nunique':\n if (isNumeric(d) || d === 'utf8' || TEMPORAL.has(d)) return 'i32';\n throw unsupportedDtype('nunique', d);\n case 'sum':\n if (FLOAT.has(d)) return d; // f64→f64, f32→f32\n if (d === 'i64') return 'i64'; // i64 sum → i64 (bigint wrapping, ADR-009)\n if (d === 'i32' || d === 'u32') return 'f64'; // int sums widen to f64 (ABI §9)\n throw unsupportedDtype('sum', d);\n case 'mean':\n case 'std':\n case 'var':\n if (isNumeric(d)) return 'f64';\n throw unsupportedDtype(op, d);\n case 'min':\n case 'max':\n if (isNumeric(d) || TEMPORAL.has(d)) return d;\n throw unsupportedDtype(op, d);\n case 'first':\n case 'last':\n if (isNumeric(d) || d === 'utf8' || TEMPORAL.has(d)) return d;\n throw unsupportedDtype(op, d);\n }\n}\n\nexport { ExprError };\n","/**\n * The surface the expression compiler consumes from a frame (Phase 3, P3.1).\n *\n * The DataFrame layer (P3.2) implements {@link FrameView} and hands it to\n * {@link compile}/{@link compileFilter}. It is deliberately tiny: column lookup by\n * name, a row count, and the memory + kernel handles the compiler needs to allocate\n * temporaries and dispatch kernels. Keeping it small keeps the compiler decoupled\n * from the concrete DataFrame implementation.\n */\n\nimport type { MemoryContext } from '../memory/context.js';\nimport type { Column } from '../memory/column.js';\nimport type { Schema } from './dtypes.js';\n\n/**\n * The loaded wasm instance's kernel exports. Every Phase-2 kernel (ABI §9) lives on\n * the **same** instance as the Phase-1 memory core, so `memory`/`alloc`/`free` here\n * are the identical bindings behind {@link MemoryContext.mod} — allocations made\n * through the context are visible to these kernels (same linear memory).\n *\n * Kernel functions are reached by their ABI name; {@link callKernel} does the typed\n * lookup so the rest of the compiler never touches the index signature directly.\n */\nexport interface KernelWasm {\n readonly memory: WebAssembly.Memory;\n alloc(size: number): number;\n free(ptr: number): void;\n realloc(ptr: number, newSize: number): number;\n mem_generation(): number;\n}\n\n/** A kernel export: flat C ABI, wasm value types in/out (ABI §5). */\nexport type KernelFn = (...args: number[]) => number;\n\n/** Look up and invoke kernel `name` on `wasm` (ABI §6 naming). */\nexport function callKernel(wasm: KernelWasm, name: string, args: readonly number[]): number {\n const fn = (wasm as unknown as Record<string, KernelFn | undefined>)[name];\n if (typeof fn !== 'function') {\n throw new Error(`kernel export not found: ${name}`);\n }\n return fn(...args);\n}\n\n/**\n * Like {@link callKernel} but accepts `bigint` args and may return `bigint` — needed\n * for i64 scalar kernels (e.g. `add_i64_scalar`) and i64 reductions (e.g. `sum_i64_null`).\n * The WebAssembly JS-API automatically maps wasm `i64` ↔ JS `BigInt`.\n */\nexport function callKernelBigInt(\n wasm: KernelWasm,\n name: string,\n args: readonly (number | bigint)[],\n): number | bigint {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const fn = (wasm as unknown as Record<string, ((...a: any[]) => number | bigint) | undefined>)[name];\n if (typeof fn !== 'function') {\n throw new Error(`kernel export not found: ${name}`);\n }\n return fn(...args);\n}\n\n/**\n * Everything the compiler needs from a frame to type-check, allocate, and run a plan.\n * Implements {@link Schema} (via `dtypeOf`/`columnNames`) so it doubles as the type\n * checker's schema.\n */\nexport interface FrameView extends Schema {\n /** Row count (`size`, dtypes.md §4.4). Every column has this length. */\n readonly length: number;\n /** Allocator + the single `viewOf` accessor over the wasm linear memory. */\n readonly ctx: MemoryContext;\n /** The kernel exports (same instance as `ctx.mod`, see {@link KernelWasm}). */\n readonly wasm: KernelWasm;\n /** Resolve column `name` to its {@link Column}, or `undefined` if absent. */\n getColumn(name: string): Column | undefined;\n}\n","/**\n * Compiler runtime (Phase 3, P3.1 deliverable §3 buffer lifecycle).\n *\n * A {@link Runtime} wraps a {@link FrameView}'s memory context + kernel exports and\n * is the single owner of every **temporary** the compiler allocates. It:\n *\n * - allocates/free's through the arena, tracking live temp pointers so the plan\n * leaves **zero** leaked buffers (verified against the arena high-water / free\n * balance in the leak tests),\n * - dispatches kernels by ABI name (ABI §6) and records an ordered {@link Trace}\n * of kernel calls + allocations so fusion is verifiable by plan inspection,\n * - hands out `viewOf` views (never cached — ADR-001).\n *\n * Ownership model: a pointer is in {@link Runtime.owned} iff the runtime allocated it\n * and has neither freed nor *transferred* it. Source-column buffers are never owned.\n * At the end of a plan the result's buffers are transferred out; everything else is\n * freed.\n */\n\nimport type { MemoryContext } from '../memory/context.js';\nimport type { FrameView, KernelWasm } from './frame.js';\nimport { callKernel, callKernelBigInt } from './frame.js';\nimport type { ViewDType, ColumnView, ColumnBuffer } from '../memory/views.js';\nimport { validityBytes, getBit, setBit } from '../memory/bitmap.js';\n\n/** Why a temp buffer was allocated (plan-inspection classification). */\nexport type AllocPurpose = 'data' | 'validity' | 'mask' | 'scratch' | 'dict' | 'index';\n\n/** Ordered record of what a plan did — the inspectable \"kernel-call plan\". */\nexport interface Trace {\n /** Kernel export names, in call order (ABI §6). */\n readonly kernels: string[];\n /** Allocations, in order, by purpose. */\n readonly allocs: Array<{ bytes: number; purpose: AllocPurpose }>;\n /** Free count (for balance checks). */\n frees: number;\n}\n\n/** Derived, test-friendly counters over a {@link Trace}. */\nexport interface ExecStats {\n /** Total kernel invocations. */\n readonly kernelCalls: number;\n /** Kernel names in call order. */\n readonly kernels: readonly string[];\n /** Total temp allocations. */\n readonly allocations: number;\n /** Data-buffer allocations only (the elementwise-fusion metric). */\n readonly dataAllocations: number;\n /** Mask-buffer allocations only (the compare→filter fusion metric). */\n readonly maskAllocations: number;\n /** Free calls issued. */\n readonly frees: number;\n}\n\nexport function statsOf(trace: Trace): ExecStats {\n let data = 0;\n let mask = 0;\n for (const a of trace.allocs) {\n if (a.purpose === 'data') data++;\n else if (a.purpose === 'mask') mask++;\n }\n return {\n kernelCalls: trace.kernels.length,\n kernels: trace.kernels.slice(),\n allocations: trace.allocs.length,\n dataAllocations: data,\n maskAllocations: mask,\n frees: trace.frees,\n };\n}\n\nexport class Runtime {\n readonly ctx: MemoryContext;\n readonly wasm: KernelWasm;\n /** Frame row count — every column and temp has this element length. */\n readonly len: number;\n /** Live temp pointers this runtime still owns. */\n readonly owned = new Set<number>();\n readonly trace: Trace = { kernels: [], allocs: [], frees: 0 };\n /** ColumnBuffers registered with `viewOf`, so they can be forgotten on free. */\n private readonly viewed: ColumnBuffer[] = [];\n\n constructor(frame: FrameView) {\n this.ctx = frame.ctx;\n this.wasm = frame.wasm;\n this.len = frame.length;\n }\n\n /** Bytes for a `len`-element validity bitmap. */\n get validityBytes(): number {\n return validityBytes(this.len);\n }\n\n /** Allocate `bytes` of temp scratch; tracks + records it. */\n alloc(bytes: number, purpose: AllocPurpose): number {\n const ptr = this.ctx.mod.alloc(bytes);\n if (ptr === 0) throw new Error(`out of wasm memory allocating ${bytes} bytes`);\n this.owned.add(ptr);\n this.trace.allocs.push({ bytes, purpose });\n return ptr;\n }\n\n /** Register an externally-allocated pointer (e.g. from `writeDictionary`) as a temp. */\n track(ptr: number, bytes: number, purpose: AllocPurpose): void {\n if (ptr === 0) return;\n this.owned.add(ptr);\n this.trace.allocs.push({ bytes, purpose });\n }\n\n /** Free a temp pointer if this runtime owns it (no-op otherwise). */\n free(ptr: number): void {\n if (ptr !== 0 && this.owned.delete(ptr)) {\n this.forgetViews(ptr);\n this.ctx.mod.free(ptr);\n this.trace.frees++;\n }\n }\n\n /** Transfer ownership of `ptr` out of the runtime (to the returned result). */\n transfer(ptr: number): void {\n this.owned.delete(ptr);\n this.forgetViews(ptr);\n }\n\n /** Free every temp still owned (call at the end of a plan). */\n freeAll(): void {\n for (const buf of this.viewed) this.ctx.viewOf.forget(buf);\n this.viewed.length = 0;\n for (const ptr of this.owned) {\n this.ctx.mod.free(ptr);\n this.trace.frees++;\n }\n this.owned.clear();\n }\n\n /** Dispatch kernel `name` (records the call). */\n call(name: string, ...args: number[]): number {\n this.trace.kernels.push(name);\n return callKernel(this.wasm, name, args);\n }\n\n /**\n * Like {@link call} but accepts `bigint` args and may return `bigint`.\n * Required for i64 scalar kernels and i64 reductions (wasm i64 ↔ JS BigInt).\n */\n callBigInt(name: string, ...args: (number | bigint)[]): number | bigint {\n this.trace.kernels.push(name);\n return callKernelBigInt(this.wasm, name, args);\n }\n\n /** A live `viewOf` view (never cache the result — ADR-001). */\n view(ptr: number, length: number, dtype: ViewDType): ColumnView {\n const buf: ColumnBuffer = { ptr, length, dtype };\n this.viewed.push(buf);\n return this.ctx.viewOf(buf);\n }\n\n /** Drop `viewOf` registrations for a freed/transferred pointer. */\n private forgetViews(ptr: number): void {\n for (let i = this.viewed.length - 1; i >= 0; i--) {\n const buf = this.viewed[i]!;\n if (buf.ptr === ptr) {\n this.ctx.viewOf.forget(buf);\n this.viewed.splice(i, 1);\n }\n }\n }\n}\n\n// ── validity / bit helpers ────────────────────────────────────────────────────\n\n/** A validity reference: `ptr === 0` means all-valid; `owns` = runtime-allocated. */\nexport interface Validity {\n readonly ptr: number;\n readonly owns: boolean;\n}\n\n/** The shared all-valid sentinel (ABI §4.1 `validity_ptr == 0`). */\nexport const ALL_VALID: Validity = { ptr: 0, owns: false };\n\n/** Free a validity buffer if it is runtime-owned. */\nexport function freeValidity(rt: Runtime, v: Validity): void {\n if (v.owns) rt.free(v.ptr);\n}\n\n/**\n * Return a bit-0-aligned validity pointer for a (possibly sliced) column\n * (`memory.d.ts` — a slice carries a bit offset). Root columns (offset 0) pass\n * through zero-copy; a mid-byte offset is realigned into an owned temp.\n */\nexport function materializeValidity(\n rt: Runtime,\n validityPtr: number,\n bitOffset: number,\n): Validity {\n if (validityPtr === 0) return ALL_VALID;\n if ((bitOffset & 7) === 0) {\n return { ptr: validityPtr + (bitOffset >> 3), owns: false };\n }\n const bytes = rt.validityBytes;\n const out = rt.alloc(bytes, 'validity');\n const src = rt.view(validityPtr, validityBytes(bitOffset + rt.len), 'u8') as Uint8Array;\n const dst = rt.view(out, bytes, 'u8') as Uint8Array;\n dst.fill(0);\n for (let i = 0; i < rt.len; i++) if (getBit(src, bitOffset + i)) setBit(dst, i);\n return { ptr: out, owns: true };\n}\n\n/** Population count of the first `len` bits of an Arrow-LSB mask. */\nexport function popcountMask(rt: Runtime, maskPtr: number, len: number): number {\n if (len === 0) return 0;\n const u8 = rt.view(maskPtr, validityBytes(len), 'u8') as Uint8Array;\n let n = 0;\n for (let i = 0; i < len; i++) if ((u8[i >> 3]! >> (i & 7)) & 1) n++;\n return n;\n}\n","/**\n * src/temporal/civil.ts\n *\n * Pure integer civil-calendar math for date32 and timestamp types.\n * No Date objects, no allocations in loops, no locale dependencies.\n *\n * Howard Hinnant civil_from_days / days_from_civil algorithms:\n * http://howardhinnant.github.io/date_algorithms.html\n * (public domain; C++ ported to JS integer arithmetic)\n *\n * Conformance: dtypes.md §10, ADR-010.\n * Weekday: ISO 8601 Mon=1..Sun=7, locked in ADR-010.\n */\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\n/** Proleptic Gregorian calendar date (year/month/day). */\nexport interface CivilDate {\n readonly year: number;\n readonly month: number; // [1, 12]\n readonly day: number; // [1, 31]\n}\n\n/**\n * Full civil date+time broken down from a millisecond timestamp.\n * Note: the last field is named `ms` (millisecond component [0, 999]),\n * not `millisecond`, to distinguish it from the epoch-ms input.\n */\nexport interface CivilDateTime extends CivilDate {\n readonly hour: number; // [0, 23]\n readonly minute: number; // [0, 59]\n readonly second: number; // [0, 59]\n readonly ms: number; // [0, 999]\n}\n\n/**\n * All dt accessor fields (dtypes.md §10). Field `millisecond` matches the\n * fixture / public accessor name.\n */\nexport interface CivilFields {\n readonly year: number;\n readonly month: number;\n readonly day: number;\n readonly hour: number;\n readonly minute: number;\n readonly second: number;\n readonly millisecond: number; // [0, 999]\n readonly weekday: number; // ISO 8601: Mon=1..Sun=7\n readonly dayOfYear: number; // [1, 366]\n readonly quarter: number; // [1, 4]\n}\n\n// ── Constants ────────────────────────────────────────────────────────────────\n\nconst MS_PER_DAY = 86_400_000;\nconst MS_PER_DAY_N = 86_400_000n;\n\n// Cumulative days before the start of each month in a non-leap year.\n// Index 0 = January: 0 days before Jan 1.\nconst DAYS_BEFORE_MONTH: readonly number[] = [\n 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334,\n];\n\n// ── Public pure functions ────────────────────────────────────────────────────\n\n/**\n * daysToCivil: proleptic Gregorian day number → {year, month, day}.\n *\n * Algorithm: Howard Hinnant civil_from_days\n * http://howardhinnant.github.io/date_algorithms.html\n * The era origin is 1 Mar 0000 (shifted by 719468 days from 1970-01-01).\n * Works for the full i32 date32 range and beyond.\n */\nexport function daysToCivil(days: number): CivilDate {\n const z = days + 719468;\n // Floor-divide z into 400-year eras (the C++ formula \"`(z>=0 ? z : z-146096)/146097`\"\n // with truncating C++ integer division is equivalent to Math.floor(z/146097)).\n const era = Math.floor(z / 146097);\n const doe = z - era * 146097; // day-of-era [0, 146096]\n const yoe = Math.floor(\n (doe - Math.floor(doe / 1460) + Math.floor(doe / 36524) - Math.floor(doe / 146096)) / 365,\n ); // year-of-era [0, 399]\n const y = yoe + era * 400;\n const doy = doe - (365 * yoe + Math.floor(yoe / 4) - Math.floor(yoe / 100)); // day-of-year [0, 365]\n const mp = Math.floor((5 * doy + 2) / 153); // month pos [0, 11]\n const d = doy - Math.floor((153 * mp + 2) / 5) + 1; // day [1, 31]\n const m = mp < 10 ? mp + 3 : mp - 9; // month [1, 12]\n return { year: y + (m <= 2 ? 1 : 0), month: m, day: d };\n}\n\n/**\n * civilToDays: {year, month, day} → proleptic Gregorian day number since 1970-01-01.\n *\n * Algorithm: Howard Hinnant days_from_civil\n * http://howardhinnant.github.io/date_algorithms.html\n * Exact inverse of daysToCivil.\n */\nexport function civilToDays(y: number, m: number, d: number): number {\n const yAdj = y - (m <= 2 ? 1 : 0);\n const era = Math.floor(yAdj / 400);\n const yoe = yAdj - era * 400; // [0, 399]\n const doy = Math.floor((153 * (m > 2 ? m - 3 : m + 9) + 2) / 5) + d - 1; // [0, 365]\n const doe = yoe * 365 + Math.floor(yoe / 4) - Math.floor(yoe / 100) + doy; // [0, 146096]\n return era * 146097 + doe - 719468;\n}\n\n/**\n * isLeapYear: proleptic Gregorian leap-year rule.\n * Divisible by 4, except centuries, except 400-year multiples.\n */\nexport function isLeapYear(y: number): boolean {\n return (y % 4 === 0 && y % 100 !== 0) || y % 400 === 0;\n}\n\n/**\n * dayOfYear: 1-based day of year (1 = Jan 1, 365/366 = Dec 31).\n */\nexport function dayOfYear(y: number, m: number, d: number): number {\n const base = (DAYS_BEFORE_MONTH[m - 1] ?? 0) + d;\n return m > 2 && isLeapYear(y) ? base + 1 : base;\n}\n\n/**\n * isoWeekday: ISO 8601 weekday from a day number (days since 1970-01-01).\n * Returns 1 (Monday) through 7 (Sunday).\n *\n * 1970-01-01 (day 0) is Thursday (= 4).\n * Derivation (ADR-010): w = ((days + 3) % 7 + 7) % 7; weekday = w + 1.\n * The `+7)%7` ensures negative-safe modulo (JS `%` can be negative).\n *\n * Verification fixtures (ADR-010):\n * day -4 (1969-12-28 Sun) → 7; day 0 (Thu) → 4; day 4 (Mon) → 1.\n */\nexport function isoWeekday(days: number): number {\n return (((days + 3) % 7 + 7) % 7) + 1;\n}\n\n/**\n * floorDivMs: floor-divide a BigInt epoch-ms value by 86_400_000.\n * Returns an integer day number in JS number range.\n *\n * BigInt `/` truncates toward zero; this corrects for negative non-exact\n * instants so that the result is always the mathematical floor.\n *\n * Worked examples (dtypes.md §7.2):\n * -1n → -1 (1969-12-31 23:59:59.999; trunc would give 0 — wrong)\n * -86_400_001n → -2 (1969-12-30 23:59:59.999; trunc would give -1 — wrong)\n * -86_400_000n → -1 (1969-12-31 00:00:00.000; exact multiple, trunc = floor)\n * 86_400_500n → 1 (1970-01-02 00:00:00.500; trunc = floor for positive)\n */\nexport function floorDivMs(ms: bigint): number {\n let d = ms / MS_PER_DAY_N;\n if (ms % MS_PER_DAY_N !== 0n && ms < 0n) d -= 1n;\n return Number(d);\n}\n\n/**\n * msToCivil: epoch-milliseconds → {year, month, day, hour, minute, second, ms}.\n * Input may be bigint (BigInt64Array element) or a safe-integer number.\n * Uses negative-safe floor division; the `ms` field is the millisecond component [0, 999].\n *\n * Cross-check: -1 ms → {1969, 12, 31, 23, 59, 59, 999}\n * floorDiv(-1, 86400000) = -1; msOfDay = -1 - (-1 * 86400000) = 86399999;\n * hour = 23, min = 59, sec = 59, ms = 999. ✓\n */\nexport function msToCivil(ms: bigint | number): CivilDateTime {\n const msB: bigint =\n typeof ms === 'bigint' ? ms : BigInt(Math.trunc(ms));\n const dayNum = floorDivMs(msB);\n // msOfDay is always in [0, MS_PER_DAY - 1]\n const msOfDay = Number(msB - BigInt(dayNum) * MS_PER_DAY_N);\n\n const { year, month, day } = daysToCivil(dayNum);\n const hour = Math.floor(msOfDay / 3_600_000);\n const rem1 = msOfDay % 3_600_000;\n const minute = Math.floor(rem1 / 60_000);\n const rem2 = rem1 % 60_000;\n const second = Math.floor(rem2 / 1_000);\n const msComponent = rem2 % 1_000;\n\n return { year, month, day, hour, minute, second, ms: msComponent };\n}\n\n// ── High-level field extractors ───────────────────────────────────────────────\n\n/**\n * date32ToFields: all dt accessor fields for a date32 day count.\n * Time-of-day fields are always 0 for date32 (dtypes.md §10).\n */\nexport function date32ToFields(days: number): CivilFields {\n const { year, month, day } = daysToCivil(days);\n return {\n year,\n month,\n day,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n weekday: isoWeekday(days),\n dayOfYear: dayOfYear(year, month, day),\n quarter: Math.ceil(month / 3),\n };\n}\n\n/**\n * timestampUtcToFields: all dt accessor fields for a UTC timestamp.\n * Uses integer civil math only — no Date objects, no Intl.\n */\nexport function timestampUtcToFields(ms: bigint | number): CivilFields {\n const msB: bigint =\n typeof ms === 'bigint' ? ms : BigInt(Math.trunc(ms));\n const dayNum = floorDivMs(msB);\n const msOfDay = Number(msB - BigInt(dayNum) * MS_PER_DAY_N);\n\n const { year, month, day } = daysToCivil(dayNum);\n const hour = Math.floor(msOfDay / 3_600_000);\n const rem1 = msOfDay % 3_600_000;\n const minute = Math.floor(rem1 / 60_000);\n const rem2 = rem1 % 60_000;\n const second = Math.floor(rem2 / 1_000);\n const millisecond = rem2 % 1_000;\n\n return {\n year,\n month,\n day,\n hour,\n minute,\n second,\n millisecond,\n weekday: isoWeekday(dayNum),\n dayOfYear: dayOfYear(year, month, day),\n quarter: Math.ceil(month / 3),\n };\n}\n","/**\n * src/temporal/tz.ts\n *\n * Timezone-aware component extraction for timestamp columns.\n * Uses a cached Intl.DateTimeFormat per IANA zone string to convert UTC epoch-ms\n * to local civil fields.\n *\n * ICU / Intl dependency:\n * Requires Node >= 18 with full-icu support (system ICU or --icu-data-dir).\n * All evergreen browsers include the full IANA tz database via ICU.\n * DST rules follow the platform ICU DB — the fixture values were computed with\n * Node v22.23.1 (ICU 78.2). Tests skip tz-aware cases and warn when the ICU\n * version differs from the fixture compute environment.\n *\n * Conformance: dtypes.md §10 (\"tz metadata behavior\"), ADR-010.\n */\n\nimport {\n civilToDays,\n isoWeekday,\n dayOfYear as doyFn,\n type CivilFields,\n} from './civil.js';\n\n// ── Formatter cache ───────────────────────────────────────────────────────────\n\n/** One Intl.DateTimeFormat instance per IANA tz string. Thread-local in browser workers. */\nconst fmtCache = new Map<string, Intl.DateTimeFormat>();\n\n/**\n * getFormatter: returns a cached Intl.DateTimeFormat for the given IANA tz string.\n * Throws a descriptive RangeError if the tz name is invalid.\n *\n * The formatter is configured with h23 hourCycle so that midnight is 00:xx and\n * there is no 12/24 ambiguity. formatToParts does not expose sub-second precision;\n * the millisecond component is derived from `epochMs % 1000` (tz-offset-independent).\n */\nfunction getFormatter(tz: string): Intl.DateTimeFormat {\n const cached = fmtCache.get(tz);\n if (cached !== undefined) return cached;\n\n let fmt: Intl.DateTimeFormat;\n try {\n fmt = new Intl.DateTimeFormat('en', {\n timeZone: tz,\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n hourCycle: 'h23',\n });\n } catch (e) {\n throw new RangeError(\n `Invalid IANA timezone: \"${tz}\". ${e instanceof Error ? e.message : String(e)}`,\n );\n }\n\n fmtCache.set(tz, fmt);\n return fmt;\n}\n\n// ── Public API ────────────────────────────────────────────────────────────────\n\n/**\n * getIcuVersion: returns the ICU version string from process.versions.icu if\n * available (Node.js), or undefined in browsers. Used by the test runner to\n * conditionally skip tz-aware fixture cases when ICU differs from the fixture\n * compute environment (Node v22.23.1 / ICU 78.2).\n */\nexport function getIcuVersion(): string | undefined {\n if (\n typeof process !== 'undefined' &&\n process.versions != null &&\n typeof process.versions['icu'] === 'string'\n ) {\n return process.versions['icu'];\n }\n return undefined;\n}\n\n/**\n * validateIanaZone: throws a descriptive RangeError if the tz name is invalid.\n * Useful for eager validation before storing tz metadata on a column.\n */\nexport function validateIanaZone(tz: string): void {\n getFormatter(tz); // throws on invalid tz\n}\n\n/**\n * getTzComponents: extract civil date+time fields for `epochMs` in the given\n * IANA `tz`. Returns the same CivilFields shape as the UTC path.\n *\n * Millisecond is derived from `((epochMs % 1000) + 1000) % 1000`, which is\n * correct for both positive and negative epoch-ms values and is independent of\n * the timezone offset (sub-second precision is not affected by tz).\n *\n * Weekday and dayOfYear are derived from the LOCAL year/month/day (the date in\n * the target timezone, not UTC), using the same ISO 8601 weekday algorithm as\n * the UTC path (ADR-010).\n *\n * @param epochMs - UTC epoch milliseconds as a JS number. The caller must\n * convert BigInt64Array values with Number() before passing here; this\n * function is safe for |epochMs| ≤ 2^53 (Number.MAX_SAFE_INTEGER).\n * @param tz - IANA timezone string, e.g. \"America/Chicago\", \"UTC\", \"+05:30\".\n * Throws RangeError on invalid zone names.\n */\nexport function getTzComponents(epochMs: number, tz: string): CivilFields {\n const fmt = getFormatter(tz);\n const parts = fmt.formatToParts(epochMs);\n\n let year = 0, month = 0, day = 0, hour = 0, minute = 0, second = 0;\n for (const part of parts) {\n switch (part.type) {\n case 'year': year = parseInt(part.value, 10); break;\n case 'month': month = parseInt(part.value, 10); break;\n case 'day': day = parseInt(part.value, 10); break;\n case 'hour': hour = parseInt(part.value, 10); break;\n case 'minute': minute = parseInt(part.value, 10); break;\n case 'second': second = parseInt(part.value, 10); break;\n }\n }\n\n // Sub-second component is tz-independent; handle negative epochMs correctly.\n const millisecond = ((epochMs % 1000) + 1000) % 1000;\n\n // weekday and dayOfYear are derived from the LOCAL date fields (year/month/day\n // as returned by Intl), not from the UTC date. The local day number is computed\n // via civilToDays so we can apply the same isoWeekday formula.\n const localDayNum = civilToDays(year, month, day);\n\n return {\n year,\n month,\n day,\n hour,\n minute,\n second,\n millisecond,\n weekday: isoWeekday(localDayNum),\n dayOfYear: doyFn(year, month, day),\n quarter: Math.ceil(month / 3),\n };\n}\n","/**\n * src/temporal/vectorize.ts\n *\n * Vectorized helpers for dt accessor extraction. These are the functions that\n * the future frame layer will call (Part 1 deliverable — frame integration\n * happens in a later task).\n *\n * Shape: extractComponents(view, validity, component, tz?) → {data, validity}\n * - view: BigInt64Array (timestamp) or Int32Array (date32)\n * - validity: null (all-valid) or Uint8Array (Arrow LSB bitmap, 1=valid)\n * - component: one of the dt accessor field names\n * - tz: optional IANA timezone string (timestamp only; undefined = UTC path)\n * - returns: Int32Array of extracted component values + a copied validity\n *\n * Performance notes:\n * - UTC path: no Intl calls; pure integer math via civil.ts.\n * - tz path: one cached Intl.DateTimeFormat per tz (no per-row Intl construct);\n * one formatToParts call per valid row. See tz.ts for the formatter cache.\n * - Null rows: output data is 0 (unspecified); validity bit is 0 (null).\n *\n * Conformance: dtypes.md §10–§11, ADR-010.\n */\n\nimport {\n date32ToFields,\n timestampUtcToFields,\n type CivilFields,\n} from './civil.js';\nimport { getTzComponents } from './tz.js';\n\n// ── Types ────────────────────────────────────────────────────────────────────\n\n/** Valid dt accessor component names (dtypes.md §10). */\nexport type DtComponent =\n | 'year' | 'month' | 'day'\n | 'hour' | 'minute' | 'second' | 'millisecond'\n | 'weekday' | 'dayOfYear' | 'quarter';\n\n/** Result of extractComponents: component data array + validity bitmap. */\nexport interface ExtractResult {\n /** Component value per element; 0 where null. */\n readonly data: Int32Array;\n /**\n * Copied validity bitmap (Arrow LSB, 1=valid), or null if the input was\n * all-valid and no rows are null. Matches the caller's validity input.\n */\n readonly validity: Uint8Array | null;\n}\n\n// ── Validity bitmap helpers ───────────────────────────────────────────────────\n\n/** Read one validity bit from an Arrow LSB bitmap. */\nfunction isValid(bitmap: Uint8Array, i: number): boolean {\n return ((bitmap[i >> 3] ?? 0) & (1 << (i & 7))) !== 0;\n}\n\n// ── Core function ─────────────────────────────────────────────────────────────\n\n/**\n * extractComponents: vectorized dt accessor extraction over a typed-array view.\n *\n * @param view - BigInt64Array for timestamp columns; Int32Array for date32.\n * @param validity - Arrow LSB bitmap (null = all-valid / no nulls in the column).\n * @param component - Which accessor field to extract.\n * @param tz - Optional IANA tz string for timestamp columns.\n * Undefined / absent → UTC path (no Intl calls).\n * @returns ExtractResult with data Int32Array and copied validity.\n */\nexport function extractComponents(\n view: BigInt64Array | Int32Array,\n validity: Uint8Array | null,\n component: DtComponent,\n tz?: string,\n): ExtractResult {\n const len = view.length;\n const data = new Int32Array(len);\n const isDate32 = view instanceof Int32Array;\n const hasTz = typeof tz === 'string' && tz.length > 0;\n\n for (let i = 0; i < len; i++) {\n // Null check: if validity bitmap present, skip null rows (leave data as 0)\n if (validity !== null && !isValid(validity, i)) {\n continue; // data[i] stays 0; validity bit stays 0 via copied bitmap\n }\n\n let fields: CivilFields;\n\n if (isDate32) {\n // Int32Array: date32 day counts\n fields = date32ToFields((view as Int32Array)[i] ?? 0);\n } else if (hasTz) {\n // BigInt64Array + tz: tz-aware path (one cached Intl.DateTimeFormat)\n const epochMs = Number((view as BigInt64Array)[i] ?? 0n);\n fields = getTzComponents(epochMs, tz as string);\n } else {\n // BigInt64Array + no tz: UTC integer-math path (no Intl)\n const ms = (view as BigInt64Array)[i] ?? 0n;\n fields = timestampUtcToFields(ms);\n }\n\n data[i] = fields[component];\n }\n\n return { data, validity };\n}\n","/**\n * Expression compiler + executor (Phase 3, P3.1 deliverables §3/§4).\n *\n * `compile(expr, frame)` type-checks (`./dtypes.ts`) then lowers the typed IR to an\n * ordered sequence of Phase-2 kernel calls over the frame's {@link Column}s, and runs\n * it. `compileFilter(predicate, frame)` produces a reusable {@link Selection} for the\n * `df.filter` path.\n *\n * ## Validity handling (dtypes.md §5)\n * Elementwise arithmetic/comparison kernels are data-only; null propagation is a\n * separate `validity_and` / unary copy. Integer `div`/`mod` additionally null out\n * zero-divisor rows (dtypes.md §3.2) via a `divisor != 0` mask AND'd into validity —\n * the data-only kernels cannot express that themselves.\n *\n * ## Fusion (spec P3.1)\n * - **compare → filter**: a comparison lowers straight to a 1-bit mask that `filter`\n * consumes; no bool column is materialised (see {@link compileFilter} /\n * {@link Selection.compact}). One mask, one compaction per column.\n * - **elementwise chains**: an op whose operand is an *owned* temp writes its output\n * **in place** into that buffer, so a linear chain reuses ONE data buffer instead\n * of allocating one per node (see {@link Runtime}).\n *\n * ## Buffer lifecycle\n * Every temporary is owned by the {@link Runtime}; the result's buffers are transferred\n * out (fully owned by the returned {@link Column}) and everything else is freed — no\n * leaks (verified against arena stats in the leak tests).\n */\n\nimport { DTYPES, type DType } from '../memory/dtype.js';\nimport type { MemoryContext } from '../memory/context.js';\nimport type { Column } from '../memory/column.js';\nimport type { DtComponent } from './ast.js';\nimport { getBit, setBit, validityBytes } from '../memory/bitmap.js';\nimport {\n writeDictionary,\n decodeDictionary,\n decodeSlot,\n type Dictionary,\n} from '../memory/dictionary.js';\nimport type { Cell } from '../memory/column.js';\n\nimport type { Expr, ArithOp, CompareOp, AggOp } from './ast.js';\nimport { resolve, type TExpr } from './dtypes.js';\nimport type { FrameView } from './frame.js';\nimport { ExprError } from './errors.js';\nimport {\n Runtime,\n statsOf,\n materializeValidity,\n popcountMask,\n freeValidity,\n ALL_VALID,\n type Validity,\n type ExecStats,\n} from './runtime.js';\nimport { extractComponents } from '../temporal/vectorize.js';\n\nexport type { ExecStats } from './runtime.js';\n\n// ── Public result types ───────────────────────────────────────────────────────\n\n/** Whether a compiled expression yields a column or a single scalar (aggregation). */\nexport type ResultKind = 'column' | 'scalar';\n\n/** A scalar (aggregation) result. */\nexport interface ScalarResult {\n readonly value: Cell;\n readonly dtype: DType;\n}\n\n/** The outcome of {@link CompiledPlan.execute}. */\nexport interface PlanResult {\n readonly kind: ResultKind;\n /** Present iff `kind === 'column'`. Caller owns it — free via `freeColumn`. */\n readonly column?: Column;\n /** Present iff `kind === 'scalar'`. */\n readonly scalar?: ScalarResult;\n /** Kernel-call + allocation counters for the run (plan inspection). */\n readonly stats: ExecStats;\n}\n\n/** A type-checked, ready-to-run expression. */\nexport interface CompiledPlan {\n /** Result dtype (`'bool'` for predicates; the scalar dtype for aggregations). */\n readonly dtype: DType;\n /** Whether {@link execute} yields a column or a scalar. */\n readonly resultKind: ResultKind;\n /** Run the plan over the bound frame, returning the result + stats. */\n execute(): PlanResult;\n}\n\n/**\n * Type-check `expr` against `frame` and bind it for execution. Throws\n * {@link ExprError} on any dtype/column error (before running anything).\n */\nexport function compile(expr: Expr, frame: FrameView): CompiledPlan {\n const t = resolve(expr, frame);\n const resultKind: ResultKind = t.kind === 'agg' ? 'scalar' : 'column';\n return {\n dtype: t.dtype,\n resultKind,\n execute(): PlanResult {\n const rt = new Runtime(frame);\n try {\n if (t.kind === 'agg') {\n const s = evalAgg(rt, frame, t);\n return { kind: 'scalar', scalar: s, stats: statsOf(rt.trace) };\n }\n const v = evalExpr(rt, frame, t);\n const column = finalizeColumn(rt, v);\n return { kind: 'column', column, stats: statsOf(rt.trace) };\n } finally {\n rt.freeAll();\n }\n },\n };\n}\n\n// ── Selection / filter ────────────────────────────────────────────────────────\n\n/**\n * A compiled selection over a frame: the effective row mask plus a `compact` that\n * materialises the kept rows of any column. Fusion (a): a bare comparison predicate\n * lowers to ONE mask; each `compact` is ONE `filter` kernel — no bool column.\n */\nexport interface Selection {\n /** Number of selected rows. */\n readonly count: number;\n /** Compact `col` to the selected rows (caller owns the result — `freeColumn`). */\n compact(col: Column): Column;\n /** Release the mask + scratch. Call once after all `compact`s. */\n free(): void;\n /** Live kernel/alloc counters (accumulates across `compact` calls). */\n readonly stats: ExecStats;\n}\n\n/** A type-checked predicate ready to produce a {@link Selection}. */\nexport interface CompiledFilter {\n execute(): Selection;\n}\n\n/**\n * Type-check `predicate` (must be boolean) and bind it as a filter. The `df.filter`\n * path calls `execute()` once, then `compact`s each surviving column.\n */\nexport function compileFilter(predicate: Expr, frame: FrameView): CompiledFilter {\n const t = resolve(predicate, frame);\n if (t.dtype !== 'bool') {\n throw new ExprError(\n `filter predicate must be boolean, got ${t.dtype}. Use a comparison / boolean expression.`,\n );\n }\n return {\n execute(): Selection {\n const rt = new Runtime(frame);\n const mask = toMask(rt, evalExpr(rt, frame, t));\n // Effective selection = predicate-true AND predicate-valid (null → dropped, §4.5).\n let effPtr: number;\n if (mask.validity.ptr === 0) {\n effPtr = mask.maskPtr; // already owned by rt\n } else if (mask.ownsMask) {\n rt.call('validity_and', mask.maskPtr, mask.validity.ptr, mask.maskPtr, rt.len);\n freeValidity(rt, mask.validity);\n effPtr = mask.maskPtr;\n } else {\n const out = rt.alloc(rt.validityBytes, 'mask');\n rt.call('validity_and', mask.maskPtr, mask.validity.ptr, out, rt.len);\n freeValidity(rt, mask.validity);\n effPtr = out;\n }\n const count = popcountMask(rt, effPtr, rt.len);\n return makeSelection(rt, frame, effPtr, count);\n },\n };\n}\n\nfunction makeSelection(rt: Runtime, frame: FrameView, effPtr: number, count: number): Selection {\n let selIdx: Int32Array | null = null; // lazily built for null-column validity compaction\n const selectedIndices = (): Int32Array => {\n if (selIdx) return selIdx;\n const out = new Int32Array(count);\n const mask = rt.view(effPtr, validityBytes(rt.len), 'u8') as Uint8Array;\n let k = 0;\n for (let i = 0; i < rt.len; i++) if ((mask[i >> 3]! >> (i & 7)) & 1) out[k++] = i;\n selIdx = out;\n return out;\n };\n\n return {\n count,\n compact(col: Column): Column {\n const info = DTYPES[col.dtype];\n const outData = frame.ctx.mod.alloc(Math.max(count * info.size, 1));\n // One compaction per column: filter the storage buffer by the effective mask.\n const got = rt.call(`filter_${filterToken(col.dtype)}`, col.dataPtr, effPtr, outData, rt.len);\n if (got !== count) {\n throw new Error(`filter count mismatch: kernel ${got}, expected ${count}`);\n }\n let validityPtr = 0;\n if (col.validityPtr !== 0) {\n const idx = selectedIndices();\n const src = rt.view(\n col.validityPtr,\n validityBytes(col.validityBitOffset + rt.len),\n 'u8',\n ) as Uint8Array;\n let nulls = 0;\n const vbytes = validityBytes(count);\n const outVp = frame.ctx.mod.alloc(Math.max(vbytes, 1));\n const dst = rt.view(outVp, vbytes, 'u8') as Uint8Array;\n dst.fill(0);\n for (let k = 0; k < count; k++) {\n if (getBit(src, col.validityBitOffset + idx[k]!)) setBit(dst, k);\n else nulls++;\n }\n if (nulls === 0) {\n frame.ctx.viewOf.forget({ ptr: outVp, length: vbytes, dtype: 'u8' });\n frame.ctx.mod.free(outVp);\n } else {\n validityPtr = outVp;\n }\n }\n const dict = col.dict ? copyDictionary(frame.ctx, col.dict) : null;\n return {\n dtype: col.dtype,\n length: count,\n dataPtr: outData,\n validityPtr,\n validityBitOffset: 0,\n dict,\n owned: true,\n };\n },\n free(): void {\n rt.freeAll();\n },\n get stats(): ExecStats {\n return statsOf(rt.trace);\n },\n };\n}\n\n// ── Intermediate value representations ────────────────────────────────────────\n\n/** A materialised numeric / utf8 column value. */\ninterface ColVal {\n readonly rep: 'column';\n readonly dtype: DType;\n dataPtr: number;\n ownsData: boolean;\n validity: Validity;\n dict: Dictionary | null;\n ownsDict: boolean;\n}\n/** A boolean value as a 1-bit mask + null-propagation validity (compare output). */\ninterface MaskVal {\n readonly rep: 'mask';\n maskPtr: number;\n ownsMask: boolean;\n validity: Validity;\n}\n/** A boolean value as a u8 bool column + validity (Kleene form). */\ninterface BoolColVal {\n readonly rep: 'boolcol';\n dataPtr: number;\n ownsData: boolean;\n validity: Validity;\n}\ntype Val = ColVal | MaskVal | BoolColVal;\n\nconst MIRROR: Record<CompareOp, CompareOp> = {\n gt: 'lt',\n lt: 'gt',\n ge: 'le',\n le: 'ge',\n eq: 'eq',\n ne: 'ne',\n};\nconst COMMUTATIVE: ReadonlySet<ArithOp> = new Set<ArithOp>(['add', 'mul']);\n/** Casts that can introduce range/NaN nulls (dtypes.md §2 ⚠ cells). */\nconst LOSSY_CAST: ReadonlySet<string> = new Set([\n 'f64_i32', 'f64_u32', 'f64_bool',\n 'f32_i32', 'f32_u32', 'f32_bool',\n 'i32_u32', 'u32_i32',\n // v2: float→i64 is lossy (range-null when |x|≥2^63 or NaN); i64→* is lossless (ADR-009)\n 'f64_i64', 'f32_i64',\n]);\n\nconst MS_PER_DAY_N = 86_400_000n;\n\n// ── Core evaluator ────────────────────────────────────────────────────────────\n\nfunction evalExpr(rt: Runtime, frame: FrameView, t: TExpr): Val {\n switch (t.kind) {\n case 'col':\n return evalCol(rt, frame, t.name, t.dtype);\n case 'lit':\n return broadcastScalar(rt, t.value, t.dtype);\n case 'arith':\n return evalArith(rt, frame, t);\n case 'neg':\n return evalNeg(rt, frame, t.dtype, t.operand);\n case 'compare':\n return evalCompare(rt, frame, t);\n case 'bool':\n return evalKleene(rt, frame, t.op, t.left, t.right);\n case 'not':\n return evalNot(rt, frame, t.operand);\n case 'isNull':\n return evalIsNull(rt, frame, t.operand);\n case 'fillNull':\n return evalFillNull(rt, frame, t.dtype, t.operand, t.value);\n case 'cast':\n return evalCast(rt, frame, t.from, t.dtype, t.operand);\n case 'agg': {\n const s = evalAgg(rt, frame, t);\n return broadcastScalar(rt, s.value, t.dtype);\n }\n case 'dt':\n return evalDt(rt, frame, t.component, t.operand);\n case 'strSlice':\n return evalStrSlice(rt, frame, t.operand, t.start, t.end);\n }\n}\n\nfunction evalCol(rt: Runtime, frame: FrameView, name: string, dtype: DType): Val {\n const col = frame.getColumn(name);\n if (!col) throw new ExprError(`column '${name}' vanished during execution`);\n const validity = materializeValidity(rt, col.validityPtr, col.validityBitOffset);\n if (dtype === 'bool') {\n return { rep: 'boolcol', dataPtr: col.dataPtr, ownsData: false, validity };\n }\n return {\n rep: 'column',\n dtype,\n dataPtr: col.dataPtr,\n ownsData: false,\n validity,\n dict: col.dict,\n ownsDict: false,\n };\n}\n\n/** Evaluate a non-scalar operand expected to be a numeric column. */\nfunction evalNumericColumn(rt: Runtime, frame: FrameView, t: TExpr): ColVal {\n const v = evalExpr(rt, frame, t);\n if (v.rep !== 'column') throw new Error(`internal: expected numeric column, got ${v.rep}`);\n return v;\n}\n\n// ── Arithmetic ────────────────────────────────────────────────────────────────\n\nfunction isScalarOperand(t: TExpr): boolean {\n return (\n t.kind === 'lit' ||\n t.kind === 'agg' ||\n (t.kind === 'cast' && isScalarOperand(t.operand))\n );\n}\n\nfunction evalArith(\n rt: Runtime,\n frame: FrameView,\n t: Extract<TExpr, { kind: 'arith' }>,\n): ColVal {\n const dtype = t.dtype;\n const ls = isScalarOperand(t.left);\n const rs = isScalarOperand(t.right);\n if (ls && rs) {\n const lcol = broadcastScalar(rt, evalScalarCell(rt, frame, t.left), dtype) as ColVal;\n return arithScalar(rt, frame, t.op, lcol, evalScalarCell(rt, frame, t.right), dtype);\n }\n if (rs) {\n const col = evalNumericColumn(rt, frame, t.left);\n return arithScalar(rt, frame, t.op, col, evalScalarCell(rt, frame, t.right), dtype);\n }\n if (ls) {\n const col = evalNumericColumn(rt, frame, t.right);\n return arithScalarLeft(rt, frame, t.op, evalScalarCell(rt, frame, t.left), col, dtype);\n }\n const l = evalNumericColumn(rt, frame, t.left);\n const r = evalNumericColumn(rt, frame, t.right);\n return arithVec(rt, frame, t.op, l, r, dtype);\n}\n\nfunction arithScalar(\n rt: Runtime,\n frame: FrameView,\n op: ArithOp,\n col: ColVal,\n s: Cell,\n dtype: DType,\n): ColVal {\n const size = DTYPES[dtype].size;\n const out = col.ownsData ? col.dataPtr : rt.alloc(rt.len * size, 'data');\n const integerDivZero =\n (op === 'div' || op === 'mod') &&\n ((dtype === 'i32' || dtype === 'u32') && s === 0 || dtype === 'i64' && s === 0n);\n\n if (s === null || integerDivZero) {\n // null scalar, or integer divide/mod by literal 0 → entire column is null.\n freeValidity(rt, col.validity);\n fillZeros(rt, out, rt.len * size);\n return colOf(dtype, out, allNull(rt), null, false);\n }\n // Physical kernel token (temporal types route to i32/i64 kernels, dtypes.md §7/ADR-010).\n const kd = DTYPES[dtype].wasm;\n if (kd === 'i64') {\n const sI64 = typeof s === 'bigint' ? s : BigInt(s as number);\n rt.callBigInt(`${op}_i64_scalar`, col.dataPtr, sI64, out, rt.len);\n } else {\n rt.call(`${op}_${kd}_scalar`, col.dataPtr, s as number, out, rt.len);\n }\n return colOf(dtype, out, col.validity, null, false);\n}\n\nfunction arithScalarLeft(\n rt: Runtime,\n frame: FrameView,\n op: ArithOp,\n s: Cell,\n col: ColVal,\n dtype: DType,\n): ColVal {\n if (COMMUTATIVE.has(op)) return arithScalar(rt, frame, op, col, s, dtype);\n // Non-commutative with the scalar on the left: materialise it and go vector.\n const lcol = broadcastScalar(rt, s, dtype) as ColVal;\n return arithVec(rt, frame, op, lcol, col, dtype);\n}\n\nfunction arithVec(\n rt: Runtime,\n frame: FrameView,\n op: ArithOp,\n l: ColVal,\n r: ColVal,\n dtype: DType,\n): ColVal {\n const size = DTYPES[dtype].size;\n const needZeroMask =\n (op === 'div' || op === 'mod') && (dtype === 'i32' || dtype === 'u32' || dtype === 'i64');\n\n // Compute the divisor≠0 mask BEFORE the data kernel may overwrite r's buffer.\n let zeroMask: Validity = ALL_VALID;\n if (needZeroMask) {\n const m = rt.alloc(rt.validityBytes, 'mask');\n if (dtype === 'i64') {\n rt.callBigInt('ne_i64_scalar_mask', r.dataPtr, 0n, m, rt.len);\n } else {\n rt.call(`ne_${dtype}_scalar_mask`, r.dataPtr, 0, m, rt.len);\n }\n zeroMask = { ptr: m, owns: true };\n }\n\n const out = l.ownsData ? l.dataPtr : r.ownsData ? r.dataPtr : rt.alloc(rt.len * size, 'data');\n const kd = DTYPES[dtype].wasm; // physical kernel token\n rt.call(`${op}_${kd}`, l.dataPtr, r.dataPtr, out, rt.len);\n if (out !== l.dataPtr && l.ownsData) rt.free(l.dataPtr);\n if (out !== r.dataPtr && r.ownsData) rt.free(r.dataPtr);\n\n let validity = combineValidity(rt, l.validity, r.validity);\n if (needZeroMask) validity = combineValidity(rt, validity, zeroMask);\n return colOf(dtype, out, validity, null, false);\n}\n\nfunction evalNeg(rt: Runtime, frame: FrameView, dtype: DType, operand: TExpr): ColVal {\n const v = evalNumericColumn(rt, frame, operand);\n const size = DTYPES[dtype].size;\n const out = v.ownsData ? v.dataPtr : rt.alloc(rt.len * size, 'data');\n rt.call(`neg_${dtype}`, v.dataPtr, out, rt.len);\n return colOf(dtype, out, v.validity, null, false);\n}\n\n// ── Comparisons ───────────────────────────────────────────────────────────────\n\nfunction evalCompare(\n rt: Runtime,\n frame: FrameView,\n t: Extract<TExpr, { kind: 'compare' }>,\n): Val {\n const d = t.operandDtype;\n const ls = isScalarOperand(t.left);\n const rs = isScalarOperand(t.right);\n\n // Both operands are scalars → constant predicate.\n if (ls && rs) {\n const a = evalScalarCell(rt, frame, t.left);\n const b = evalScalarCell(rt, frame, t.right);\n return broadcastPredicate(rt, applyCompareScalar(t.op, a, b));\n }\n\n if (d === 'bool') return evalBoolCompare(rt, frame, t, ls);\n if (d === 'utf8') return evalUtf8Compare(rt, frame, t, ls);\n\n // Numeric/temporal comparison → mask.\n // Physical kernel token: temporal types route to i32/i64 kernels (ADR-010).\n const kd = DTYPES[d].wasm;\n const maskPtr = rt.alloc(rt.validityBytes, 'mask');\n if (ls || rs) {\n const col = evalNumericColumn(rt, frame, ls ? t.right : t.left);\n const s = evalScalarCell(rt, frame, ls ? t.left : t.right);\n if (s === null) {\n freeValidity(rt, col.validity);\n rt.free(col.ownsData ? col.dataPtr : 0);\n const m = rt.view(maskPtr, rt.validityBytes, 'u8') as Uint8Array;\n m.fill(0);\n return { rep: 'mask', maskPtr, ownsMask: true, validity: allNull(rt) };\n }\n const op = ls ? MIRROR[t.op] : t.op; // mirror when the scalar is on the left\n if (kd === 'i64') {\n const sI64 = typeof s === 'bigint' ? s : BigInt(s as number);\n rt.callBigInt(`${op}_i64_scalar_mask`, col.dataPtr, sI64, maskPtr, rt.len);\n } else {\n rt.call(`${op}_${kd}_scalar_mask`, col.dataPtr, s as number, maskPtr, rt.len);\n }\n if (col.ownsData) rt.free(col.dataPtr);\n return { rep: 'mask', maskPtr, ownsMask: true, validity: col.validity };\n }\n const l = evalNumericColumn(rt, frame, t.left);\n const r = evalNumericColumn(rt, frame, t.right);\n rt.call(`${t.op}_${kd}_mask`, l.dataPtr, r.dataPtr, maskPtr, rt.len);\n if (l.ownsData) rt.free(l.dataPtr);\n if (r.ownsData) rt.free(r.dataPtr);\n return { rep: 'mask', maskPtr, ownsMask: true, validity: combineValidity(rt, l.validity, r.validity) };\n}\n\nfunction evalUtf8Compare(\n rt: Runtime,\n frame: FrameView,\n t: Extract<TExpr, { kind: 'compare' }>,\n scalarLeft: boolean,\n): MaskVal {\n const col = evalNumericColumn(rt, frame, scalarLeft ? t.right : t.left);\n const s = evalScalarCell(rt, frame, scalarLeft ? t.left : t.right);\n const maskPtr = rt.alloc(rt.validityBytes, 'mask');\n const m = rt.view(maskPtr, rt.validityBytes, 'u8') as Uint8Array;\n\n if (s === null) {\n m.fill(0);\n if (col.ownsData) rt.free(col.dataPtr);\n freeValidity(rt, col.validity);\n if (col.ownsDict) freeDict(frame, col.dict);\n return { rep: 'mask', maskPtr, ownsMask: true, validity: allNull(rt) };\n }\n const strings = col.dict ? decodeDictionary(frame.ctx, col.dict) : [];\n const slot = strings.indexOf(s as string);\n if (slot >= 0) {\n rt.call(`${t.op}_i32_scalar_mask`, col.dataPtr, slot, maskPtr, rt.len);\n } else {\n // literal absent from the dictionary: eq → all-false, ne → all-true.\n m.fill(t.op === 'ne' ? 0xff : 0x00);\n }\n if (col.ownsData) rt.free(col.dataPtr);\n if (col.ownsDict) freeDict(frame, col.dict);\n return { rep: 'mask', maskPtr, ownsMask: true, validity: col.validity };\n}\n\nfunction evalBoolCompare(\n rt: Runtime,\n frame: FrameView,\n t: Extract<TExpr, { kind: 'compare' }>,\n scalarLeft: boolean,\n): Val {\n const litVal = evalScalarCell(rt, frame, scalarLeft ? t.left : t.right) as boolean;\n const b = toBoolCol(rt, evalExpr(rt, frame, scalarLeft ? t.right : t.left));\n // eq(true)/ne(false) → identity; eq(false)/ne(true) → logical not.\n const invert = t.op === 'eq' ? litVal === false : litVal === true;\n return invert ? notBool(rt, b) : b;\n}\n\n// ── Boolean (Kleene) / not ────────────────────────────────────────────────────\n\nfunction evalKleene(\n rt: Runtime,\n frame: FrameView,\n op: 'and' | 'or',\n leftT: TExpr,\n rightT: TExpr,\n): BoolColVal {\n const a = toBoolCol(rt, evalExpr(rt, frame, leftT));\n const b = toBoolCol(rt, evalExpr(rt, frame, rightT));\n const kernel = op === 'and' ? 'and_kleene' : 'or_kleene';\n const out = a.ownsData ? a.dataPtr : b.ownsData ? b.dataPtr : rt.alloc(rt.len, 'data');\n const bothValid = a.validity.ptr === 0 && b.validity.ptr === 0;\n let validity: Validity;\n if (bothValid) {\n const scratch = rt.alloc(rt.validityBytes, 'scratch');\n rt.call(kernel, a.dataPtr, 0, b.dataPtr, 0, out, scratch, rt.len);\n rt.free(scratch);\n validity = ALL_VALID;\n } else {\n const outVp = rt.alloc(rt.validityBytes, 'validity');\n rt.call(kernel, a.dataPtr, a.validity.ptr, b.dataPtr, b.validity.ptr, out, outVp, rt.len);\n freeValidity(rt, a.validity);\n freeValidity(rt, b.validity);\n validity = { ptr: outVp, owns: true };\n }\n if (out !== a.dataPtr && a.ownsData) rt.free(a.dataPtr);\n if (out !== b.dataPtr && b.ownsData) rt.free(b.dataPtr);\n return { rep: 'boolcol', dataPtr: out, ownsData: true, validity };\n}\n\nfunction evalNot(rt: Runtime, frame: FrameView, operand: TExpr): BoolColVal {\n return notBool(rt, toBoolCol(rt, evalExpr(rt, frame, operand)));\n}\n\nfunction notBool(rt: Runtime, a: BoolColVal): BoolColVal {\n const out = a.ownsData ? a.dataPtr : rt.alloc(rt.len, 'data');\n let validity: Validity;\n if (a.validity.ptr === 0) {\n const scratch = rt.alloc(rt.validityBytes, 'scratch');\n rt.call('not_bool', a.dataPtr, 0, out, scratch, rt.len);\n rt.free(scratch);\n validity = ALL_VALID;\n } else {\n const outVp = rt.alloc(rt.validityBytes, 'validity');\n rt.call('not_bool', a.dataPtr, a.validity.ptr, out, outVp, rt.len);\n freeValidity(rt, a.validity);\n validity = { ptr: outVp, owns: true };\n }\n if (out !== a.dataPtr && a.ownsData) rt.free(a.dataPtr);\n return { rep: 'boolcol', dataPtr: out, ownsData: true, validity };\n}\n\n// ── isNull ────────────────────────────────────────────────────────────────────\n\nfunction evalIsNull(rt: Runtime, frame: FrameView, operand: TExpr): BoolColVal {\n const v = evalExpr(rt, frame, operand);\n const validity = valueValidity(v);\n const out = rt.alloc(rt.len, 'data');\n rt.call('is_null', validity.ptr, out, rt.len);\n freeVal(rt, frame, v); // is_null's result has no nulls; the operand is done.\n return { rep: 'boolcol', dataPtr: out, ownsData: true, validity: ALL_VALID };\n}\n\n// ── fillNull ──────────────────────────────────────────────────────────────────\n\nfunction evalFillNull(\n rt: Runtime,\n frame: FrameView,\n dtype: DType,\n operandT: TExpr,\n value: Cell,\n): Val {\n if (dtype === 'bool') return fillNullBool(rt, frame, operandT, value as boolean);\n if (dtype === 'utf8') return fillNullUtf8(rt, frame, operandT, value as string);\n const col = evalNumericColumn(rt, frame, operandT);\n if (col.validity.ptr === 0) return col; // no nulls → identity\n const size = DTYPES[dtype].size;\n const out = col.ownsData ? col.dataPtr : rt.alloc(rt.len * size, 'data');\n const kd = DTYPES[dtype].wasm; // physical kernel token for temporal routing\n if (kd === 'i64') {\n const bigVal = typeof value === 'bigint' ? value : BigInt(value as number);\n rt.callBigInt('fill_null_i64', col.dataPtr, col.validity.ptr, bigVal, out, rt.len);\n } else {\n rt.call(`fill_null_${kd}`, col.dataPtr, col.validity.ptr, value as number, out, rt.len);\n }\n freeValidity(rt, col.validity);\n return colOf(dtype, out, ALL_VALID, null, false);\n}\n\nfunction fillNullBool(\n rt: Runtime,\n frame: FrameView,\n operandT: TExpr,\n value: boolean,\n): BoolColVal {\n const b = toBoolCol(rt, evalExpr(rt, frame, operandT));\n if (b.validity.ptr === 0) return b;\n const out = b.ownsData ? b.dataPtr : rt.alloc(rt.len, 'data');\n const src = rt.view(b.dataPtr, rt.len, 'u8') as Uint8Array;\n const vp = rt.view(b.validity.ptr, rt.validityBytes, 'u8') as Uint8Array;\n const dst = rt.view(out, rt.len, 'u8') as Uint8Array;\n const fill = value ? 1 : 0;\n for (let i = 0; i < rt.len; i++) dst[i] = getBit(vp, i) ? src[i]! : fill;\n freeValidity(rt, b.validity);\n return { rep: 'boolcol', dataPtr: out, ownsData: true, validity: ALL_VALID };\n}\n\nfunction fillNullUtf8(\n rt: Runtime,\n frame: FrameView,\n operandT: TExpr,\n value: string,\n): ColVal {\n const col = evalNumericColumn(rt, frame, operandT);\n if (col.validity.ptr === 0) return col;\n const strings = col.dict ? decodeDictionary(frame.ctx, col.dict) : [];\n let slot = strings.indexOf(value);\n let dict = col.dict;\n let ownsDict = col.ownsDict;\n if (slot < 0) {\n slot = strings.length;\n dict = writeDictionary(frame.ctx, [...strings, value]);\n rt.track(dict.offsetsPtr, (dict.count + 1) * 4, 'dict');\n rt.track(dict.bytesPtr, Math.max(dict.bytesLen, 1), 'dict');\n if (col.ownsDict) freeDict(frame, col.dict);\n ownsDict = true;\n }\n const out = col.ownsData ? col.dataPtr : rt.alloc(rt.len * 4, 'data');\n const srcIdx = rt.view(col.dataPtr, rt.len, 'i32') as Int32Array;\n const vp = rt.view(col.validity.ptr, rt.validityBytes, 'u8') as Uint8Array;\n const dstIdx = rt.view(out, rt.len, 'i32') as Int32Array;\n for (let i = 0; i < rt.len; i++) dstIdx[i] = getBit(vp, i) ? srcIdx[i]! : slot;\n freeValidity(rt, col.validity);\n return colOf('utf8', out, ALL_VALID, dict, ownsDict);\n}\n\n// ── cast ──────────────────────────────────────────────────────────────────────\n\nfunction evalCast(\n rt: Runtime,\n frame: FrameView,\n from: DType,\n to: DType,\n operandT: TExpr,\n): Val {\n const v = evalExpr(rt, frame, operandT);\n if (from === to) return v; // identity elided (dtypes.md §2)\n\n const inData = v.rep === 'boolcol' ? v.dataPtr : (v as ColVal).dataPtr;\n const inOwns = v.rep === 'boolcol' ? v.ownsData : (v as ColVal).ownsData;\n const inValidity = valueValidity(v);\n\n // Reinterpret casts (date32↔i32, timestamp↔i64): no kernel, pure dtype relabel (dtypes.md §7.2).\n if ((from === 'date32' && to === 'i32') || (from === 'i32' && to === 'date32') ||\n (from === 'timestamp' && to === 'i64') || (from === 'i64' && to === 'timestamp')) {\n return { ...(v as ColVal), dtype: to };\n }\n\n // Scale cast: date32 → timestamp (×86_400_000 ms, dtypes.md §7.2).\n if (from === 'date32' && to === 'timestamp') {\n // 1. cast_i32_i64 (lossless widening from i32 to i64)\n const tmpPtr = rt.alloc(rt.len * 8, 'data');\n const scratch = rt.alloc(rt.validityBytes, 'scratch');\n rt.call('cast_i32_i64', inData, inValidity.ptr, tmpPtr, scratch, rt.len);\n rt.free(scratch);\n // 2. mul_i64_scalar(86_400_000) — in-place on tmpPtr\n rt.callBigInt('mul_i64_scalar', tmpPtr, MS_PER_DAY_N, tmpPtr, rt.len);\n if (inOwns) rt.free(inData);\n return colOf('timestamp', tmpPtr, inValidity, null, false);\n }\n\n // Floor-div cast: timestamp → date32 (JS-side BigInt floor-div, dtypes.md §7.2).\n if (from === 'timestamp' && to === 'date32') {\n const msView = rt.view(inData, rt.len, 'i64') as BigInt64Array;\n const outPtr = rt.alloc(rt.len * 4, 'data');\n const outView = rt.view(outPtr, rt.len, 'i32') as Int32Array;\n for (let i = 0; i < rt.len; i++) {\n const ms = msView[i]!;\n let d = ms / MS_PER_DAY_N;\n if (ms % MS_PER_DAY_N !== 0n && ms < 0n) d -= 1n;\n outView[i] = Number(d);\n }\n if (inOwns) rt.free(inData);\n return colOf('date32', outPtr, inValidity, null, false);\n }\n\n const outSize = DTYPES[to].size;\n const canReuse = inOwns && DTYPES[from].size === outSize;\n const out = canReuse ? inData : rt.alloc(rt.len * outSize, 'data');\n const lossy = LOSSY_CAST.has(`${from}_${to}`);\n\n let validity: Validity;\n if (lossy) {\n const outVp = rt.alloc(rt.validityBytes, 'validity');\n rt.call(`cast_${from}_${to}`, inData, inValidity.ptr, out, outVp, rt.len);\n freeValidity(rt, inValidity);\n validity = { ptr: outVp, owns: true };\n } else {\n // Lossless: output validity equals input validity; run the kernel with a scratch.\n const scratch = rt.alloc(rt.validityBytes, 'scratch');\n rt.call(`cast_${from}_${to}`, inData, inValidity.ptr, out, scratch, rt.len);\n rt.free(scratch);\n validity = inValidity;\n }\n if (out !== inData && inOwns) rt.free(inData);\n if (to === 'bool') return { rep: 'boolcol', dataPtr: out, ownsData: true, validity };\n return colOf(to, out, validity, null, false);\n}\n\n// ── dt accessors ─────────────────────────────────────────────────────────────\n\n/**\n * Evaluate a dt accessor node: extract a single calendar component from a\n * date32 or timestamp column.\n *\n * Implementation (ADR-010, ADR-012):\n * - date32: Int32Array view of days-since-epoch → civil.date32ToFields via extractComponents.\n * - timestamp (UTC): BigInt64Array view of epoch-ms → civil.timestampUtcToFields.\n * - timestamp (tz): same view, but routed through tz.getTzComponents per valid row.\n *\n * tz metadata is read from the source column when the operand is a direct\n * column reference (the common path: `col('ts').dt.year()`). Cast expressions\n * do not carry tz metadata.\n *\n * Result dtype is always i32 (dtypes.md §10).\n */\nfunction evalDt(rt: Runtime, frame: FrameView, c: DtComponent, t: TExpr): ColVal {\n const v = evalNumericColumn(rt, frame, t);\n const len = rt.len;\n\n // Resolve tz metadata: only available when the operand is a direct col ref.\n let tz: string | undefined;\n if (t.kind === 'col') {\n const srcCol = frame.getColumn(t.name);\n if (srcCol?.tz) tz = srcCol.tz;\n }\n\n // Get the validity bitmap (null = all-valid, matches extractComponents contract).\n let validityBitmap: Uint8Array | null = null;\n if (v.validity.ptr !== 0) {\n validityBitmap = rt.view(v.validity.ptr, rt.validityBytes, 'u8') as Uint8Array;\n }\n\n // View the source data as the appropriate typed array.\n let extractResult: { data: Int32Array };\n if (v.dtype === 'date32') {\n const dataView = rt.view(v.dataPtr, len, 'i32') as Int32Array;\n extractResult = extractComponents(dataView, validityBitmap, c);\n } else {\n // timestamp: BigInt64Array (wasm='i64', 8 bytes per element)\n const dataView = rt.view(v.dataPtr, len, 'i64') as BigInt64Array;\n extractResult = extractComponents(dataView, validityBitmap, c, tz);\n }\n\n // Allocate a new wasm i32 buffer and copy the JS-side result into it.\n const outPtr = rt.alloc(len * 4, 'data');\n const outView = rt.view(outPtr, len, 'i32') as Int32Array;\n outView.set(extractResult.data);\n\n // Free the source data buffer if we own it (validity is forwarded as-is).\n if (v.ownsData) rt.free(v.dataPtr);\n if (v.ownsDict && v.dict) freeDict(frame, v.dict);\n\n return colOf('i32', outPtr, v.validity, null, false);\n}\n\n// ── str.slice ─────────────────────────────────────────────────────────────────\n\n/**\n * Evaluate `str.slice(start, end?)` on a utf8 column (dtypes.md §13).\n *\n * Algorithm (O(unique) + O(rows)):\n * 1. Decode the source dictionary once (memoized — the TextDecoder boundary is crossed\n * at most once per unique string across all callers for this column's lifetime).\n * 2. Apply `String.prototype.slice(start, end)` to each unique value.\n * 3. Re-deduplicate the sliced values into a new result dictionary. For a typical\n * census workload, ~85K unique GEOIDs collapse to ~50 state codes after slice(0,11).\n * 4. Write a fresh wasm dictionary for those unique results.\n * 5. Remap each row's index through the slot→result-slot map (O(rows) Int32Array writes).\n * 6. Null rows: their index value is irrelevant; validity propagates unchanged.\n *\n * Never touches per-row string values — all string work is on dictionary slots.\n */\nfunction evalStrSlice(\n rt: Runtime,\n frame: FrameView,\n operandT: TExpr,\n start: number,\n end: number | undefined,\n): ColVal {\n const col = evalNumericColumn(rt, frame, operandT);\n const len = rt.len;\n\n // Decode the source dictionary strings (memoized per slot via decodeSlot).\n const srcStrings = col.dict ? decodeDictionary(frame.ctx, col.dict) : [];\n const srcCount = srcStrings.length;\n\n // --- Step 2+3: apply slice to each dict slot, re-dedup ---\n // slotRemap[k] = result-dict slot for source slot k\n const slotRemap = new Int32Array(srcCount);\n const resultUniques: string[] = [];\n const index = new Map<string, number>();\n\n for (let k = 0; k < srcCount; k++) {\n const sliced = end === undefined\n ? srcStrings[k]!.slice(start)\n : srcStrings[k]!.slice(start, end);\n let j = index.get(sliced);\n if (j === undefined) {\n j = resultUniques.length;\n resultUniques.push(sliced);\n index.set(sliced, j);\n }\n slotRemap[k] = j;\n }\n\n // --- Step 4: write the new dictionary into wasm memory ---\n // writeDictionary may grow memory (alloc inside), so do all allocs before taking views.\n const newDict = writeDictionary(frame.ctx, resultUniques);\n // Track for the runtime so rt.freeAll() can clean up on error paths.\n rt.track(newDict.offsetsPtr, (newDict.count + 1) * 4, 'dict');\n rt.track(newDict.bytesPtr, Math.max(newDict.bytesLen, 1), 'dict');\n\n // --- Step 5: remap indices ---\n // Allocate output buffer (may grow memory) BEFORE taking any views (ADR-001).\n const outPtr = col.ownsData ? col.dataPtr : rt.alloc(len * 4, 'data');\n // Take views only after all potential allocs.\n const srcIdx = rt.view(col.dataPtr, len, 'i32') as Int32Array;\n const dstIdx = rt.view(outPtr, len, 'i32') as Int32Array;\n\n // Null rows: their index value is not meaningful (validity=0), but we still write\n // a valid slot (0) so the buffer is fully initialised (dtypes.md §4.1).\n // When outPtr === col.dataPtr (in-place), srcIdx and dstIdx alias the same buffer;\n // reading srcIdx[i] before writing dstIdx[i] is safe (sequential, same index).\n for (let i = 0; i < len; i++) {\n dstIdx[i] = slotRemap[srcIdx[i]!]!;\n }\n\n if (outPtr !== col.dataPtr && col.ownsData) rt.free(col.dataPtr);\n if (col.ownsDict) freeDict(frame, col.dict);\n\n return colOf('utf8', outPtr, col.validity, newDict, true);\n}\n\n// ── Aggregations ──────────────────────────────────────────────────────────────\n\nfunction evalAgg(\n rt: Runtime,\n frame: FrameView,\n t: Extract<TExpr, { kind: 'agg' }>,\n): ScalarResult {\n const v = evalExpr(rt, frame, t.operand);\n const validity = valueValidity(v);\n const dataPtr = v.rep === 'mask' ? 0 : v.rep === 'boolcol' ? v.dataPtr : v.dataPtr;\n const dict = v.rep === 'column' ? v.dict : null;\n const opD = t.operandDtype;\n const storage: DType = opD === 'utf8' ? 'i32' : opD; // utf8 reduces over its i32 indices\n const len = rt.len;\n const nonNull = validity.ptr === 0 ? len : rt.call('count_null', validity.ptr, len);\n\n const value = computeAgg(rt, frame, t.op, opD, storage, dataPtr, validity.ptr, len, nonNull, dict);\n freeVal(rt, frame, v);\n return { value, dtype: t.dtype };\n}\n\nfunction computeAgg(\n rt: Runtime,\n frame: FrameView,\n op: AggOp,\n opD: DType,\n storage: DType,\n dataPtr: number,\n vp: number,\n len: number,\n nonNull: number,\n dict: Dictionary | null,\n): Cell {\n /**\n * Physical kernel token: temporal types route to i32/i64; utf8 routes to i32 (dict indices).\n * For non-utf8/non-temporal dtypes, pkd === opD (no change).\n */\n const pkd = opD === 'utf8' ? 'i32' : DTYPES[opD].wasm;\n const conv = (x: number): number => (storage === 'u32' ? x >>> 0 : x);\n switch (op) {\n case 'count':\n return nonNull;\n case 'nunique':\n return rt.call(`nunique_${pkd}_null`, dataPtr, vp, len);\n case 'sum':\n if (pkd === 'i64') return rt.callBigInt('sum_i64_null', dataPtr, vp, len);\n return rt.call(`sum_${opD}_null`, dataPtr, vp, len);\n case 'mean':\n return nonNull >= 1 ? rt.call(`mean_${opD}_null`, dataPtr, vp, len) : null;\n case 'std':\n return nonNull >= 2 ? rt.call(`std_${opD}_null`, dataPtr, vp, len) : null;\n case 'var':\n return nonNull >= 2 ? rt.call(`var_${opD}_null`, dataPtr, vp, len) : null;\n case 'min':\n case 'max':\n if (!nonNull) return null;\n if (pkd === 'i64') return rt.callBigInt(`${op}_i64_null`, dataPtr, vp, len);\n return conv(rt.call(`${op}_${pkd}_null`, dataPtr, vp, len));\n case 'first':\n case 'last': {\n const ovPtr = rt.alloc(4, 'scratch');\n (rt.view(ovPtr, 1, 'i32') as Int32Array)[0] = 0;\n let rawCell: number | bigint;\n if (pkd === 'i64') {\n rawCell = rt.callBigInt(`${op}_i64_null`, dataPtr, vp, len, ovPtr);\n } else {\n rawCell = rt.call(`${op}_${pkd}_null`, dataPtr, vp, len, ovPtr);\n }\n const ok = (rt.view(ovPtr, 1, 'i32') as Int32Array)[0] !== 0;\n rt.free(ovPtr);\n if (!ok) return null;\n if (pkd === 'i64') return rawCell; // bigint (i64 or timestamp)\n if (opD === 'utf8') return decodeSlot(frame.ctx, dict!, rawCell as number);\n return conv(rawCell as number);\n }\n }\n}\n\n// ── Representation coercions ──────────────────────────────────────────────────\n\nfunction toBoolCol(rt: Runtime, v: Val): BoolColVal {\n if (v.rep === 'boolcol') return v;\n if (v.rep === 'mask') {\n const out = rt.alloc(rt.len, 'data');\n rt.call('expand_mask_bool', v.maskPtr, out, rt.len);\n if (v.ownsMask) rt.free(v.maskPtr);\n return { rep: 'boolcol', dataPtr: out, ownsData: true, validity: v.validity };\n }\n throw new Error('internal: expected a boolean value');\n}\n\nfunction toMask(rt: Runtime, v: Val): MaskVal {\n if (v.rep === 'mask') return v;\n if (v.rep === 'boolcol') {\n const out = rt.alloc(rt.validityBytes, 'mask');\n const data = rt.view(v.dataPtr, rt.len, 'u8') as Uint8Array;\n const m = rt.view(out, rt.validityBytes, 'u8') as Uint8Array;\n m.fill(0);\n for (let i = 0; i < rt.len; i++) if (data[i]) setBit(m, i);\n if (v.ownsData) rt.free(v.dataPtr);\n return { rep: 'mask', maskPtr: out, ownsMask: true, validity: v.validity };\n }\n throw new Error('internal: expected a boolean value');\n}\n\nfunction valueValidity(v: Val): Validity {\n return v.validity;\n}\n\n/**\n * Kernel dtype token for filter/gather storage.\n * Temporal types map to their physical kernel token (DTYPES[].wasm).\n */\nfunction filterToken(dtype: DType): string {\n if (dtype === 'bool') return 'u8';\n if (dtype === 'utf8') return 'i32';\n return DTYPES[dtype].wasm; // temporals: date32→'i32', timestamp→'i64'\n}\n\n// ── Scalars ───────────────────────────────────────────────────────────────────\n\nfunction evalScalarCell(rt: Runtime, frame: FrameView, t: TExpr): Cell {\n if (t.kind === 'lit') {\n // A number literal adopted as i64 (from safe-int check) needs BigInt conversion.\n if (t.dtype === 'i64' && typeof t.value === 'number') return BigInt(t.value as number);\n return t.value;\n }\n if (t.kind === 'agg') return evalAgg(rt, frame, t).value;\n if (t.kind === 'cast') return castScalar(evalScalarCell(rt, frame, t.operand), t.from, t.dtype);\n throw new Error(`internal: ${t.kind} is not a scalar operand`);\n}\n\n// 2^63 = 9223372036854775808 (exact in float64, the first out-of-range value for i64)\nconst TWO_63 = 9223372036854775808;\n\n/** Apply a single-value cast (dtypes.md §2 + §8) for a scalar operand. */\nfunction castScalar(value: Cell, from: DType, to: DType): Cell {\n if (value === null) return null;\n if (from === to) return value;\n // i64 source → cast to float/int/bool\n if (from === 'i64') {\n const bv = value as bigint;\n if (to === 'f64') return Number(bv);\n if (to === 'f32') return Math.fround(Number(bv));\n if (to === 'i32') return Number(BigInt.asIntN(32, bv));\n if (to === 'u32') return Number(BigInt.asUintN(32, bv));\n if (to === 'bool') return bv !== 0n;\n return null; // unreachable for valid cast matrix paths\n }\n // float/int/bool source → i64\n if (to === 'i64') {\n if (typeof value === 'boolean') return value ? 1n : 0n;\n const n = value as number;\n if (!Number.isFinite(n)) return null; // NaN/±Infinity → null (lossy cast)\n const tr = Math.trunc(n);\n if (tr >= TWO_63 || tr < -TWO_63) return null; // out of i64 range → null\n return BigInt(tr);\n }\n // existing non-i64 casts\n if (to === 'bool') {\n if (typeof value === 'number' && Number.isNaN(value)) return null;\n return value !== 0 && value !== false;\n }\n const num = typeof value === 'boolean' ? (value ? 1 : 0) : (value as number);\n if (to === 'f64') return num;\n if (to === 'f32') return Math.fround(num);\n // integer targets: truncate toward zero, range-fail → null\n if (!Number.isFinite(num)) return null;\n const tr = Math.trunc(num);\n if (to === 'i32') return tr >= -2147483648 && tr <= 2147483647 ? tr : null;\n if (num < 0) return null; // u32: negative inputs → null (dtypes.md §2)\n return tr <= 4294967295 ? tr : null;\n}\n\nfunction applyCompareScalar(op: CompareOp, a: Cell, b: Cell): boolean | null {\n if (a === null || b === null) return null;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const aa = a as any, bb = b as any;\n switch (op) {\n case 'gt': return aa > bb;\n case 'ge': return aa >= bb;\n case 'lt': return aa < bb;\n case 'le': return aa <= bb;\n case 'eq': return aa === bb;\n case 'ne': return aa !== bb;\n }\n}\n\n// ── Broadcasting ──────────────────────────────────────────────────────────────\n\nfunction broadcastScalar(rt: Runtime, value: Cell, dtype: DType): ColVal | BoolColVal {\n if (dtype === 'utf8') {\n throw new ExprError('broadcasting a utf8 scalar to a column is not supported in P3.1.');\n }\n if (dtype === 'bool') {\n const out = rt.alloc(rt.len, 'data');\n const view = rt.view(out, rt.len, 'u8') as Uint8Array;\n view.fill(value === null ? 0 : value ? 1 : 0);\n return { rep: 'boolcol', dataPtr: out, ownsData: true, validity: value === null ? allNull(rt) : ALL_VALID };\n }\n const size = DTYPES[dtype].size;\n const out = rt.alloc(rt.len * size, 'data');\n // i64 and timestamp both use BigInt64Array (wasm='i64').\n if (dtype === 'i64' || dtype === 'timestamp') {\n const view = rt.view(out, rt.len, 'i64') as BigInt64Array;\n const bigVal = value === null ? 0n : typeof value === 'bigint' ? value : BigInt(value as number);\n for (let i = 0; i < rt.len; i++) view[i] = bigVal;\n return colOf(dtype, out, value === null ? allNull(rt) : ALL_VALID, null, false);\n }\n // date32 uses Int32Array (wasm='i32'): value is a number (day count).\n const view = rt.view(out, rt.len, DTYPES[dtype].view);\n const num = value === null ? 0 : (value as number);\n for (let i = 0; i < rt.len; i++) (view as unknown as { [i: number]: number })[i] = num;\n return colOf(dtype, out, value === null ? allNull(rt) : ALL_VALID, null, false);\n}\n\nfunction broadcastPredicate(rt: Runtime, v: boolean | null): MaskVal {\n const out = rt.alloc(rt.validityBytes, 'mask');\n const m = rt.view(out, rt.validityBytes, 'u8') as Uint8Array;\n m.fill(v === true ? 0xff : 0x00);\n return { rep: 'mask', maskPtr: out, ownsMask: true, validity: v === null ? allNull(rt) : ALL_VALID };\n}\n\n// ── Validity combinators ──────────────────────────────────────────────────────\n\nfunction combineValidity(rt: Runtime, a: Validity, b: Validity): Validity {\n if (a.ptr === 0 && b.ptr === 0) return ALL_VALID;\n if (b.ptr === 0) return a;\n if (a.ptr === 0) return b;\n const out = rt.alloc(rt.validityBytes, 'validity');\n rt.call('validity_and', a.ptr, b.ptr, out, rt.len);\n freeValidity(rt, a);\n freeValidity(rt, b);\n return { ptr: out, owns: true };\n}\n\nfunction allNull(rt: Runtime): Validity {\n const ptr = rt.alloc(rt.validityBytes, 'validity');\n (rt.view(ptr, rt.validityBytes, 'u8') as Uint8Array).fill(0);\n return { ptr, owns: true };\n}\n\nfunction fillZeros(rt: Runtime, ptr: number, bytes: number): void {\n (rt.view(ptr, bytes, 'u8') as Uint8Array).fill(0);\n}\n\n// ── Value construction / teardown ─────────────────────────────────────────────\n\nfunction colOf(\n dtype: DType,\n dataPtr: number,\n validity: Validity,\n dict: Dictionary | null,\n ownsDict: boolean,\n): ColVal {\n return { rep: 'column', dtype, dataPtr, ownsData: true, validity, dict, ownsDict };\n}\n\n/** Free every runtime-owned buffer a value holds (used when a value is discarded). */\nfunction freeVal(rt: Runtime, frame: FrameView, v: Val): void {\n if (v.rep === 'mask') {\n if (v.ownsMask) rt.free(v.maskPtr);\n freeValidity(rt, v.validity);\n return;\n }\n if (v.rep === 'boolcol') {\n if (v.ownsData) rt.free(v.dataPtr);\n freeValidity(rt, v.validity);\n return;\n }\n if (v.ownsData) rt.free(v.dataPtr);\n freeValidity(rt, v.validity);\n if (v.ownsDict) freeDict(frame, v.dict);\n}\n\nfunction freeDict(frame: FrameView, dict: Dictionary | null): void {\n if (!dict) return;\n frame.ctx.viewOf.forget({ ptr: dict.offsetsPtr, length: dict.count + 1, dtype: 'i32' });\n frame.ctx.viewOf.forget({ ptr: dict.bytesPtr, length: dict.bytesLen, dtype: 'u8' });\n frame.ctx.mod.free(dict.offsetsPtr);\n frame.ctx.mod.free(dict.bytesPtr);\n}\n\n// ── Result materialisation (full ownership transfer) ──────────────────────────\n\n/**\n * Turn a computed {@link Val} into a self-owning {@link Column}. Any buffer still\n * borrowed from a source column is copied so the returned column can be freed\n * independently (no aliasing with the frame's columns).\n */\nfunction finalizeColumn(rt: Runtime, v: Val): Column {\n if (v.rep === 'mask') return finalizeColumn(rt, toBoolCol(rt, v));\n\n const ctx = rt.ctx;\n const dtype: DType = v.rep === 'boolcol' ? 'bool' : v.dtype;\n const info = DTYPES[dtype];\n\n // Data buffer: transfer if owned, else copy into an independent buffer.\n let outData: number;\n if (v.ownsData) {\n outData = v.dataPtr;\n rt.transfer(v.dataPtr);\n } else {\n outData = ctx.mod.alloc(Math.max(rt.len * info.size, 1));\n copyBytes(rt, v.dataPtr, outData, rt.len * info.size);\n }\n\n // Validity: transfer if owned, else copy (already bit-0 aligned by materializeValidity).\n const validity = v.validity;\n let validityPtr = 0;\n if (validity.ptr !== 0) {\n if (validity.owns) {\n validityPtr = validity.ptr;\n rt.transfer(validity.ptr);\n } else {\n validityPtr = ctx.mod.alloc(Math.max(rt.validityBytes, 1));\n copyBytes(rt, validity.ptr, validityPtr, rt.validityBytes);\n }\n }\n\n // Dictionary (utf8): transfer tracked temp, else copy the source's slots verbatim.\n let dict: Dictionary | null = null;\n if (v.rep === 'column' && v.dict) {\n if (v.ownsDict) {\n dict = v.dict;\n rt.transfer(v.dict.offsetsPtr);\n rt.transfer(v.dict.bytesPtr);\n } else {\n dict = copyDictionary(ctx, v.dict);\n }\n }\n\n return { dtype, length: rt.len, dataPtr: outData, validityPtr, validityBitOffset: 0, dict, owned: true };\n}\n\nfunction copyBytes(rt: Runtime, src: number, dst: number, bytes: number): void {\n if (bytes <= 0) return;\n const s = rt.view(src, bytes, 'u8') as Uint8Array;\n const d = rt.view(dst, bytes, 'u8') as Uint8Array;\n d.set(s);\n}\n\n/** Copy a dictionary's buffers verbatim (slot order preserved → indices stay valid). */\nfunction copyDictionary(ctx: MemoryContext, dict: Dictionary): Dictionary {\n const offBytes = (dict.count + 1) * 4;\n const offsetsPtr = ctx.mod.alloc(Math.max(offBytes, 1));\n const bytesPtr = ctx.mod.alloc(Math.max(dict.bytesLen, 1));\n (ctx.viewOf({ ptr: offsetsPtr, length: dict.count + 1, dtype: 'i32' }) as Int32Array).set(\n ctx.viewOf({ ptr: dict.offsetsPtr, length: dict.count + 1, dtype: 'i32' }) as Int32Array,\n );\n if (dict.bytesLen > 0) {\n (ctx.viewOf({ ptr: bytesPtr, length: dict.bytesLen, dtype: 'u8' }) as Uint8Array).set(\n ctx.viewOf({ ptr: dict.bytesPtr, length: dict.bytesLen, dtype: 'u8' }) as Uint8Array,\n );\n }\n return { count: dict.count, offsetsPtr, bytesPtr, bytesLen: dict.bytesLen };\n}\n","/** Frame-layer errors (spec §4): unknown column suggests the nearest name (shared\n * Levenshtein), dtype mismatch names both dtypes + the op. FrameError extends Error. */\n\nimport type { DType } from '../memory/dtype.js';\nimport { nearest } from '../expr/index.js';\n\nexport class FrameError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'FrameError';\n }\n}\n\nexport function unknownColumn(name: string, known: readonly string[]): FrameError {\n const near = nearest(name, known);\n const suffix = near ? ` Did you mean '${near}'?` : '';\n const list = known.length ? ` Available columns: ${known.map((k) => `'${k}'`).join(', ')}.` : '';\n return new FrameError(`unknown column '${name}'.${suffix}${list}`);\n}\n\nexport function dtypeMismatch(op: string, left: DType, right: DType, hint?: string): FrameError {\n const tail = hint ? ` ${hint}` : '';\n return new FrameError(`dtype mismatch in '${op}': ${left} vs ${right}.${tail}`);\n}\n\nexport function unsupportedDtype(op: string, dtype: DType, hint?: string): FrameError {\n const tail = hint ? ` ${hint}` : '';\n return new FrameError(`operation '${op}' is not supported for dtype ${dtype}.${tail}`);\n}\n","/**\n * DataFrame runtime: the wasm instance (allocator + memory + full kernel surface)\n * bundled with its MemoryContext. Instantiates the binary directly (loadWasmModule only\n * exposes the memory core) so the frame layer can reach every Phase-2 kernel by ABI name.\n * `init()` installs a process-wide default so `DataFrame.fromColumns({...})` needs no plumbing.\n */\n\nimport { detectSimd, type LoadOptions } from '../memory/loader.js';\nimport { createMemoryContext, type MemoryContext } from '../memory/context.js';\nimport type { WasmMemoryModule } from '../memory/loader.js';\nimport type { KernelWasm } from '../expr/index.js';\nimport type { HashExports } from '../kernels/hash/index.js';\nimport { FrameError } from './errors.js';\n\nexport type FrameWasm = KernelWasm & HashExports;\n\nexport type RawKernelFn = (...args: number[]) => number;\n\nexport function rawKernel(wasm: FrameWasm, name: string): RawKernelFn {\n const fn = (wasm as unknown as Record<string, RawKernelFn | undefined>)[name];\n if (typeof fn !== 'function') throw new FrameError(`kernel export not found: ${name}`);\n return fn;\n}\n\nexport interface DfRuntime {\n\n readonly ctx: MemoryContext;\n\n readonly wasm: FrameWasm;\n}\n\nconst isNode =\n typeof process !== 'undefined' && process.versions != null && process.versions.node != null;\n\nasync function loadBytes(fileName: string, wasmDir: string | URL | undefined): Promise<BufferSource> {\n if (isNode) {\n const [{ readFile }, { fileURLToPath }] = await Promise.all([\n import('node:fs/promises'),\n import('node:url'),\n ]);\n let filePath: string;\n if (wasmDir === undefined) {\n filePath = fileURLToPath(new URL(fileName, import.meta.url));\n } else if (wasmDir instanceof URL) {\n filePath = fileURLToPath(new URL(fileName, wasmDir));\n } else if (wasmDir.startsWith('file:')) {\n filePath = fileURLToPath(new URL(fileName, wasmDir));\n } else {\n const { join } = await import('node:path');\n filePath = join(wasmDir, fileName);\n }\n return readFile(filePath);\n }\n const base = wasmDir ?? new URL('.', import.meta.url);\n const url = new URL(fileName, base);\n const resp = await fetch(url);\n if (!resp.ok) throw new FrameError(`failed to fetch wasm at ${url.toString()}: ${resp.status}`);\n return resp.arrayBuffer();\n}\n\nexport function runtimeFromExports(exports: WebAssembly.Exports, simd: boolean): DfRuntime {\n const wasm = exports as unknown as FrameWasm;\n const mod: WasmMemoryModule = {\n memory: wasm.memory,\n alloc: wasm.alloc,\n free: wasm.free,\n realloc: wasm.realloc,\n mem_generation: wasm.mem_generation,\n simd,\n };\n return { ctx: createMemoryContext(mod), wasm };\n}\n\nexport async function loadRuntime(opts: LoadOptions = {}): Promise<DfRuntime> {\n const simd = opts.simd ?? detectSimd();\n const bytes = await loadBytes(simd ? 'simd.wasm' : 'scalar.wasm', opts.wasmDir);\n const { instance } = await WebAssembly.instantiate(bytes, {});\n return runtimeFromExports(instance.exports, simd);\n}\n\nlet defaultRt: DfRuntime | null = null;\n\nexport async function init(opts?: LoadOptions): Promise<DfRuntime> {\n defaultRt = await loadRuntime(opts);\n return defaultRt;\n}\n\nexport function useRuntime(rt: DfRuntime): void {\n defaultRt = rt;\n}\n\nexport function defaultRuntime(): DfRuntime {\n if (defaultRt === null) {\n throw new FrameError(\n 'no DataFrame runtime is loaded — call `await init()` first (or pass a runtime).',\n );\n }\n return defaultRt;\n}\n","/**\n * Buffer ownership (spec §4 \"shared/COW internally\"). Ops return NEW frames that share\n * physical buffers wherever no data changes; sharing is made safe by reference-counting the\n * owning allocation ({@link OwnedColumn}). Each frame holds one ref; `dispose()` releases it,\n * and buffers are freed at zero refs — so slices outliving parents, or parents disposed before\n * a `select` child, are still correct. This is the v1 ownership story.\n */\n\nimport type { MemoryContext } from '../memory/context.js';\nimport { freeColumn, type Column } from '../memory/column.js';\n\nexport class OwnedColumn {\n\n readonly col: Column;\n private readonly ctx: MemoryContext;\n private refs: number;\n\n constructor(ctx: MemoryContext, col: Column) {\n this.ctx = ctx;\n this.col = col;\n this.refs = 1;\n }\n\n retain(): this {\n this.refs++;\n return this;\n }\n\n release(): void {\n if (this.refs <= 0) return;\n if (--this.refs === 0) freeColumn(this.ctx, this.col);\n }\n}\n","/** dtype inference for fromColumns/fromRecords: typed arrays map unambiguously; a plain\n * array uses its first non-null cell (number→f64, boolean→bool, string→utf8); empty→f64. */\n\nimport type { DType } from '../memory/dtype.js';\nimport type { ColumnInput } from '../memory/column.js';\n\nexport function inferDType(input: ColumnInput): DType {\n if (input instanceof BigInt64Array) return 'i64';\n if (input instanceof Float64Array) return 'f64';\n if (input instanceof Float32Array) return 'f32';\n if (input instanceof Int32Array) return 'i32';\n if (input instanceof Uint32Array) return 'u32';\n if (input instanceof Uint8Array) return 'bool';\n const arr = input as ArrayLike<unknown>;\n for (let i = 0; i < arr.length; i++) {\n const v = arr[i];\n if (v === null || v === undefined) continue;\n if (typeof v === 'bigint') return 'i64'; // bigint → i64 ONLY (never number)\n if (typeof v === 'number') return 'f64';\n if (typeof v === 'boolean') return 'bool';\n if (typeof v === 'string') return 'utf8';\n }\n return 'f64';\n}\n","/** Series — one named column, zero-copy over a frame's buffers (spec §4 `df.col('a')`).\n * Borrows (does not own) its parent's column; valid while that frame lives. Read-only. */\n\nimport type { MemoryContext } from '../memory/context.js';\nimport { DTYPES, type DType } from '../memory/dtype.js';\nimport { createColumn, columnToArray, type Cell, type Column } from '../memory/column.js';\nimport type { ColumnView } from '../memory/views.js';\nimport { extractComponents, type DtComponent } from '../temporal/vectorize.js';\nimport {\n writeDictionary,\n decodeDictionary,\n freeDictionary,\n} from '../memory/dictionary.js';\nimport { getBit, validityBytes } from '../memory/bitmap.js';\n\n/** dt accessor components allowed for date32 columns (dtypes.md §10). */\nconst DATE32_ALLOWED: ReadonlySet<DtComponent> = new Set<DtComponent>([\n 'year', 'month', 'day', 'weekday', 'dayOfYear', 'quarter',\n]);\n\n/**\n * Series.dt accessor proxy. Returned by `series.dt`; provides per-field\n * methods that return a new Series (dtype=i32) with the extracted values.\n *\n * Rules (dtypes.md §10, ADR-010, ADR-012):\n * - timestamp columns: all 9 fields are valid.\n * - date32 columns: year/month/day/weekday/dayOfYear/quarter are valid;\n * hour/minute/second/millisecond throw a TypeError naming the op.\n * - tz metadata on a timestamp column gives local-time components (ADR-010).\n */\nexport class SeriesDtProxy {\n constructor(private readonly series: Series) {}\n\n private extract(c: DtComponent): Series {\n const { dtype } = this.series;\n if (dtype === 'date32') {\n if (!DATE32_ALLOWED.has(c)) {\n throw new TypeError(\n `dt.${c} is not supported for date32 columns ` +\n `(time-of-day fields are always 0 for date32; ` +\n `use year/month/day/weekday/dayOfYear/quarter, or cast to timestamp first).`,\n );\n }\n } else if (dtype !== 'timestamp') {\n throw new TypeError(\n `dt accessor requires a date32 or timestamp column, got ${dtype}.`,\n );\n }\n\n const col = this.series.col;\n const ctx = this.series['ctx'];\n const len = col.length;\n const tz = (dtype === 'timestamp' && col.tz) ? col.tz : undefined;\n\n // Build validity bitmap for extractComponents (null = all-valid).\n // Series columns always have validityBitOffset === 0 (normalised at creation).\n let validityBitmap: Uint8Array | null = null;\n if (col.validityPtr !== 0) {\n const offset = col.validityBitOffset;\n const vbytes = Math.ceil((offset + len) / 8);\n const raw = ctx.viewOf({\n ptr: col.validityPtr,\n length: vbytes,\n dtype: 'u8',\n }) as Uint8Array;\n\n if (offset === 0) {\n // Fast path: share the view directly (extractComponents only reads it)\n validityBitmap = raw;\n } else {\n // Shift bits to a zero-aligned copy (rare — non-zero offset from slices).\n const shifted = new Uint8Array(Math.ceil(len / 8));\n for (let i = 0; i < len; i++) {\n const srcBit = offset + i;\n if ((raw[srcBit >> 3]! >> (srcBit & 7)) & 1) {\n shifted[i >> 3]! |= 1 << (i & 7);\n }\n }\n validityBitmap = shifted;\n }\n }\n\n // View source data and run extraction.\n let resultData: Int32Array;\n if (dtype === 'date32') {\n const view = ctx.viewOf({\n ptr: col.dataPtr,\n length: len,\n dtype: 'i32',\n }) as Int32Array;\n ({ data: resultData } = extractComponents(view, validityBitmap, c));\n } else {\n const view = ctx.viewOf({\n ptr: col.dataPtr,\n length: len,\n dtype: 'i64',\n }) as BigInt64Array;\n ({ data: resultData } = extractComponents(view, validityBitmap, c, tz));\n }\n\n // Build i32 output values array, propagating nulls from source validity.\n const outputValues: Array<number | null> = new Array(len);\n if (validityBitmap !== null) {\n for (let i = 0; i < len; i++) {\n const valid = ((validityBitmap[i >> 3] ?? 0) >> (i & 7)) & 1;\n outputValues[i] = valid ? (resultData[i] ?? 0) : null;\n }\n } else {\n for (let i = 0; i < len; i++) {\n outputValues[i] = resultData[i] ?? 0;\n }\n }\n\n const outCol = createColumn(ctx, 'i32', outputValues);\n return new Series(ctx, `${this.series.name}.dt.${c}`, outCol);\n }\n\n year(): Series { return this.extract('year'); }\n month(): Series { return this.extract('month'); }\n day(): Series { return this.extract('day'); }\n hour(): Series { return this.extract('hour'); }\n minute(): Series { return this.extract('minute'); }\n second(): Series { return this.extract('second'); }\n millisecond(): Series { return this.extract('millisecond'); }\n weekday(): Series { return this.extract('weekday'); }\n dayOfYear(): Series { return this.extract('dayOfYear'); }\n quarter(): Series { return this.extract('quarter'); }\n}\n\n/**\n * Series.str accessor proxy. Returned by `series.str`; provides string operations\n * over `utf8` columns (dtypes.md §13). Throws TypeError if the column is not utf8.\n */\nexport class SeriesStrProxy {\n constructor(private readonly series: Series) {}\n\n /**\n * Substring via `JS String.prototype.slice` semantics (dtypes.md §13).\n *\n * - Negative `start`/`end`: count from the end of the string.\n * - `end` omitted: slice to the end of the string.\n * - Out-of-range indices clamp (same as JS).\n * - Null rows propagate null; the op never inspects null-row string values.\n * - UTF-16 code-unit indexing.\n * **Surrogate-pair caveat:** a supplementary character occupies two code units;\n * `slice` may split a surrogate pair (well-defined in JS, unusual in UTF-8).\n *\n * Implementation: applied to dictionary values once (O(unique)), then indices\n * remapped (O(rows)) — no per-row string work.\n *\n * Returns a new `utf8` Series.\n */\n slice(start: number, end?: number): Series {\n const { dtype, col, name } = this.series;\n const ctx = this.series['ctx'];\n if (dtype !== 'utf8') {\n throw new TypeError(\n `str.slice requires a utf8 column, got ${dtype}.`,\n );\n }\n const len = col.length;\n\n // Decode source dictionary once (memoized per slot via decodeSlot).\n const srcStrings = col.dict ? decodeDictionary(ctx, col.dict) : [];\n const srcCount = srcStrings.length;\n\n // Apply slice to each unique value; re-dedup into result uniques.\n const slotRemap = new Int32Array(srcCount);\n const resultUniques: string[] = [];\n const index = new Map<string, number>();\n for (let k = 0; k < srcCount; k++) {\n const sliced = end === undefined\n ? srcStrings[k]!.slice(start)\n : srcStrings[k]!.slice(start, end);\n let j = index.get(sliced);\n if (j === undefined) {\n j = resultUniques.length;\n resultUniques.push(sliced);\n index.set(sliced, j);\n }\n slotRemap[k] = j;\n }\n\n // Build output as a plain Cell array: remap each non-null row, propagate nulls.\n // We use createColumn to encode the result dict (handles all wasm allocs cleanly).\n const srcIdx = ctx.viewOf({ ptr: col.dataPtr, length: len, dtype: 'i32' }) as Int32Array;\n const outValues: Array<string | null> = new Array(len);\n\n if (col.validityPtr === 0) {\n // All valid.\n for (let i = 0; i < len; i++) {\n outValues[i] = resultUniques[slotRemap[srcIdx[i]!]!]!;\n }\n } else {\n // Propagate nulls.\n const bitOff = col.validityBitOffset;\n const vbytes = validityBytes(bitOff + len);\n const vmap = ctx.viewOf({ ptr: col.validityPtr, length: vbytes, dtype: 'u8' }) as Uint8Array;\n for (let i = 0; i < len; i++) {\n if (getBit(vmap, bitOff + i)) {\n outValues[i] = resultUniques[slotRemap[srcIdx[i]!]!]!;\n } else {\n outValues[i] = null;\n }\n }\n }\n\n const outCol = createColumn(ctx, 'utf8', outValues);\n return new Series(ctx, `${name}.str.slice(${start}${end === undefined ? '' : `, ${end}`})`, outCol);\n }\n}\n\nexport class Series {\n\n readonly name: string;\n\n readonly dtype: DType;\n\n readonly length: number;\n\n private readonly ctx: MemoryContext;\n private readonly column: Column;\n\n constructor(ctx: MemoryContext, name: string, column: Column) {\n this.ctx = ctx;\n this.name = name;\n this.dtype = column.dtype;\n this.length = column.length;\n this.column = column;\n }\n\n get col(): Column {\n return this.column;\n }\n\n toArray(): Cell[] {\n return columnToArray(this.ctx, this.column);\n }\n\n get(i: number): Cell {\n if (i < 0 || i >= this.length) return null;\n return this.toArray()[i] ?? null;\n }\n\n values(): ColumnView {\n return this.ctx.viewOf({\n ptr: this.column.dataPtr,\n length: this.length,\n dtype: DTYPES[this.dtype].view,\n });\n }\n\n /**\n * dt accessor namespace for date32 / timestamp columns (dtypes.md §10, ADR-010, ADR-012).\n * Returns a {@link SeriesDtProxy} with accessor methods for each calendar field.\n * Throws TypeError for disallowed fields (e.g. hour on date32).\n */\n get dt(): SeriesDtProxy {\n if (this.dtype !== 'date32' && this.dtype !== 'timestamp') {\n throw new TypeError(\n `dt accessor requires a date32 or timestamp column, got ${this.dtype}.`,\n );\n }\n return new SeriesDtProxy(this);\n }\n\n /**\n * str accessor namespace for `utf8` columns (dtypes.md §13).\n * Returns a {@link SeriesStrProxy} with string methods.\n * Throws TypeError if the column is not `utf8`.\n */\n get str(): SeriesStrProxy {\n if (this.dtype !== 'utf8') {\n throw new TypeError(\n `str accessor requires a utf8 column, got ${this.dtype}.`,\n );\n }\n return new SeriesStrProxy(this);\n }\n\n [Symbol.iterator](): IterableIterator<Cell> {\n return this.toArray()[Symbol.iterator]();\n }\n\n toString(): string {\n return `Series '${this.name}' (${this.dtype}, ${this.length} rows)`;\n }\n}\n","/** Shared frame helpers: kernel dtype tokens, bit-0 validity realignment for sliced\n * columns (ABI §4.1 has no bit-offset param), and verbatim dictionary copying. */\n\nimport type { MemoryContext } from '../memory/context.js';\nimport { DTYPES, type DType } from '../memory/dtype.js';\nimport { validityBytes, getBit, setBit } from '../memory/bitmap.js';\nimport type { Column } from '../memory/column.js';\nimport type { Dictionary } from '../memory/dictionary.js';\n\n/**\n * Kernel dtype token for sort/gather/filter.\n * Temporal types route to their physical kernel token (ADR-010).\n */\nexport function storageToken(dtype: DType): string {\n if (dtype === 'bool') return 'u8';\n if (dtype === 'utf8') return 'i32';\n return DTYPES[dtype].wasm; // date32→'i32', timestamp→'i64', others → unchanged\n}\n\nexport interface AlignedValidity {\n\n readonly ptr: number;\n\n readonly owns: boolean;\n}\n\nexport function alignValidity(ctx: MemoryContext, col: Column): AlignedValidity {\n if (col.validityPtr === 0) return { ptr: 0, owns: false };\n const bitOff = col.validityBitOffset;\n if ((bitOff & 7) === 0) return { ptr: col.validityPtr + (bitOff >> 3), owns: false };\n const len = col.length;\n const bytes = validityBytes(len);\n const outPtr = ctx.mod.alloc(Math.max(bytes, 1));\n const src = ctx.viewOf({\n ptr: col.validityPtr,\n length: validityBytes(bitOff + len),\n dtype: 'u8',\n }) as Uint8Array;\n const dst = ctx.viewOf({ ptr: outPtr, length: bytes, dtype: 'u8' }) as Uint8Array;\n dst.fill(0);\n for (let i = 0; i < len; i++) if (getBit(src, bitOff + i)) setBit(dst, i);\n return { ptr: outPtr, owns: true };\n}\n\nexport function freeAligned(ctx: MemoryContext, v: AlignedValidity): void {\n if (v.owns && v.ptr !== 0) {\n ctx.viewOf.forget({ ptr: v.ptr, length: 1, dtype: 'u8' });\n ctx.mod.free(v.ptr);\n }\n}\n\nexport function copyDictionary(ctx: MemoryContext, dict: Dictionary): Dictionary {\n const offBytes = (dict.count + 1) * 4;\n const offsetsPtr = ctx.mod.alloc(Math.max(offBytes, 1));\n const bytesPtr = ctx.mod.alloc(Math.max(dict.bytesLen, 1));\n (ctx.viewOf({ ptr: offsetsPtr, length: dict.count + 1, dtype: 'i32' }) as Int32Array).set(\n ctx.viewOf({ ptr: dict.offsetsPtr, length: dict.count + 1, dtype: 'i32' }) as Int32Array,\n );\n if (dict.bytesLen > 0) {\n (ctx.viewOf({ ptr: bytesPtr, length: dict.bytesLen, dtype: 'u8' }) as Uint8Array).set(\n ctx.viewOf({ ptr: dict.bytesPtr, length: dict.bytesLen, dtype: 'u8' }) as Uint8Array,\n );\n }\n return { count: dict.count, offsetsPtr, bytesPtr, bytesLen: dict.bytesLen };\n}\n\nexport function dataBytes(dtype: DType, n: number): number {\n return Math.max(n * DTYPES[dtype].size, 1);\n}\n","/** Column gather (take-by-index) via `gather_dt` + `gather_validity` (ABI §9 C): builds a\n * fresh owned column whose row k is source row idx[k]. Used by sortValues and filterFn. */\n\nimport { validityBytes } from '../memory/bitmap.js';\nimport type { Column } from '../memory/column.js';\nimport type { DfRuntime } from './runtime.js';\nimport { rawKernel } from './runtime.js';\nimport {\n storageToken,\n alignValidity,\n freeAligned,\n copyDictionary,\n dataBytes,\n} from './util.js';\n\nexport function gatherColumn(\n rt: DfRuntime,\n col: Column,\n idxPtr: number,\n idxLen: number,\n): Column {\n const { ctx, wasm } = rt;\n const tok = storageToken(col.dtype);\n const outData = ctx.mod.alloc(dataBytes(col.dtype, idxLen));\n rawKernel(wasm, `gather_${tok}`)(col.dataPtr, idxPtr, idxLen, outData);\n\n let validityPtr = 0;\n if (col.validityPtr !== 0) {\n const src = alignValidity(ctx, col);\n const vbytes = validityBytes(idxLen);\n const outVp = ctx.mod.alloc(Math.max(vbytes, 1));\n (ctx.viewOf({ ptr: outVp, length: Math.max(vbytes, 1), dtype: 'u8' }) as Uint8Array).fill(0);\n rawKernel(wasm, 'gather_validity')(src.ptr, idxPtr, idxLen, outVp);\n freeAligned(ctx, src);\n validityPtr = outVp;\n }\n\n const dict = col.dict ? copyDictionary(ctx, col.dict) : null;\n return {\n dtype: col.dtype,\n length: idxLen,\n dataPtr: outData,\n validityPtr,\n validityBitOffset: 0,\n dict,\n owned: true,\n };\n}\n","/**\n * Sort permutation for sortValues (dtypes.md §4.6): the stable `argsort_dt` kernel, multi-key\n * threaded last-key-first (ABI §9 C); nulls sort last both directions. utf8 keys sort\n * lexicographically via a per-row string-rank buffer; bool widens to i32. The v1.2 scratch_ptr\n * amendment is handled by arity detection, so this works pre- and post-amendment.\n */\n\nimport type { Column } from '../memory/column.js';\nimport { DTYPES } from '../memory/dtype.js';\nimport { decodeDictionary } from '../memory/dictionary.js';\nimport type { DfRuntime, FrameWasm } from './runtime.js';\nimport { rawKernel } from './runtime.js';\nimport { alignValidity, freeAligned } from './util.js';\n\nexport interface Perm {\n readonly ptr: number;\n readonly len: number;\n}\n\nexport function sortPerm(rt: DfRuntime, keyCols: Column[], descending: boolean[]): Perm {\n const { ctx, wasm } = rt;\n const len = keyCols.length > 0 ? keyCols[0]!.length : 0;\n\n const permPtr = ctx.mod.alloc(Math.max(len * 4, 1));\n const perm = ctx.viewOf({ ptr: permPtr, length: len, dtype: 'i32' }) as Int32Array;\n for (let i = 0; i < len; i++) perm[i] = i;\n\n const needScratch = rawKernel(wasm, 'argsort_i32').length >= 6;\n const scratchPtr = needScratch ? ctx.mod.alloc(Math.max(len * 4, 1)) : 0;\n\n try {\n for (let k = keyCols.length - 1; k >= 0; k--) {\n applyKey(rt, keyCols[k]!, descending[k] === true, permPtr, len, scratchPtr, needScratch);\n }\n } finally {\n if (scratchPtr !== 0) {\n ctx.viewOf.forget({ ptr: scratchPtr, length: len, dtype: 'i32' });\n ctx.mod.free(scratchPtr);\n }\n }\n return { ptr: permPtr, len };\n}\n\nfunction callArgsort(\n wasm: FrameWasm,\n name: string,\n dataPtr: number,\n vp: number,\n permPtr: number,\n len: number,\n desc: number,\n scratchPtr: number,\n needScratch: boolean,\n): void {\n const fn = rawKernel(wasm, name);\n if (needScratch) fn(dataPtr, vp, permPtr, len, desc, scratchPtr);\n else fn(dataPtr, vp, permPtr, len, desc);\n}\n\nfunction applyKey(\n rt: DfRuntime,\n col: Column,\n descending: boolean,\n permPtr: number,\n len: number,\n scratchPtr: number,\n needScratch: boolean,\n): void {\n const { ctx, wasm } = rt;\n const desc = descending ? 1 : 0;\n const av = alignValidity(ctx, col);\n try {\n if (col.dtype === 'utf8') {\n const rankPtr = buildUtf8Rank(rt, col, len);\n try {\n callArgsort(wasm, 'argsort_i32', rankPtr, av.ptr, permPtr, len, desc, scratchPtr, needScratch);\n } finally {\n ctx.viewOf.forget({ ptr: rankPtr, length: len, dtype: 'i32' });\n ctx.mod.free(rankPtr);\n }\n } else if (col.dtype === 'bool') {\n const widePtr = widenBoolToI32(rt, col, len);\n try {\n callArgsort(wasm, 'argsort_i32', widePtr, av.ptr, permPtr, len, desc, scratchPtr, needScratch);\n } finally {\n ctx.viewOf.forget({ ptr: widePtr, length: len, dtype: 'i32' });\n ctx.mod.free(widePtr);\n }\n } else {\n // Temporal types route to their physical kernel token (ADR-010): date32→i32, timestamp→i64.\n const token = DTYPES[col.dtype].wasm;\n callArgsort(wasm, `argsort_${token}`, col.dataPtr, av.ptr, permPtr, len, desc, scratchPtr, needScratch);\n }\n } finally {\n freeAligned(ctx, av);\n }\n}\n\nfunction buildUtf8Rank(rt: DfRuntime, col: Column, len: number): number {\n const { ctx } = rt;\n const strings = col.dict ? decodeDictionary(ctx, col.dict) : [];\n const order = strings.map((_, i) => i).sort((x, y) => {\n const sx = strings[x]!;\n const sy = strings[y]!;\n return sx < sy ? -1 : sx > sy ? 1 : 0;\n });\n const rankOfSlot = new Int32Array(strings.length);\n for (let r = 0; r < order.length; r++) rankOfSlot[order[r]!] = r;\n\n const rankPtr = ctx.mod.alloc(Math.max(len * 4, 1));\n const idx = ctx.viewOf({ ptr: col.dataPtr, length: len, dtype: 'i32' }) as Int32Array;\n const out = ctx.viewOf({ ptr: rankPtr, length: len, dtype: 'i32' }) as Int32Array;\n for (let i = 0; i < len; i++) {\n const slot = idx[i]!;\n out[i] = slot >= 0 && slot < rankOfSlot.length ? rankOfSlot[slot]! : 0;\n }\n return rankPtr;\n}\n\nfunction widenBoolToI32(rt: DfRuntime, col: Column, len: number): number {\n const { ctx } = rt;\n const outPtr = ctx.mod.alloc(Math.max(len * 4, 1));\n const src = ctx.viewOf({ ptr: col.dataPtr, length: len, dtype: 'bool' }) as Uint8Array;\n const dst = ctx.viewOf({ ptr: outPtr, length: len, dtype: 'i32' }) as Int32Array;\n for (let i = 0; i < len; i++) dst[i] = src[i]!;\n return outPtr;\n}\n","/**\n * Row proxy for the lambda escape hatch (ADR-003): one reusable proxy object moved across\n * rows (no per-row allocation), reading live viewOf buffers with memoized utf8 decode. This\n * is the documented SLOW PATH — the expression API (filter/withColumn) is the fast path.\n */\n\nimport type { MemoryContext } from '../memory/context.js';\nimport { DTYPES } from '../memory/dtype.js';\nimport { getBit, validityBytes } from '../memory/bitmap.js';\nimport { decodeSlot } from '../memory/dictionary.js';\nimport type { Cell, Column } from '../memory/column.js';\n\nexport type Row = Record<string, Cell>;\n\nexport interface RowCursor {\n\n at(i: number): Row;\n}\n\nexport function makeRowCursor(\n ctx: MemoryContext,\n columns: ReadonlyArray<{ name: string; col: Column }>,\n): RowCursor {\n let cur = 0;\n const proxy: Row = {};\n\n for (const { name, col } of columns) {\n const len = col.length;\n const bitOff = col.validityBitOffset;\n const validity =\n col.validityPtr === 0\n ? null\n : (ctx.viewOf({\n ptr: col.validityPtr,\n length: validityBytes(bitOff + len),\n dtype: 'u8',\n }) as Uint8Array);\n\n if (col.dtype === 'utf8') {\n const idx = ctx.viewOf({ ptr: col.dataPtr, length: len, dtype: 'i32' }) as Int32Array;\n const dict = col.dict!;\n Object.defineProperty(proxy, name, {\n enumerable: true,\n get(): Cell {\n if (validity && !getBit(validity, bitOff + cur)) return null;\n return decodeSlot(ctx, dict, idx[cur]!);\n },\n });\n } else if (col.dtype === 'bool') {\n const data = ctx.viewOf({ ptr: col.dataPtr, length: len, dtype: 'bool' }) as Uint8Array;\n Object.defineProperty(proxy, name, {\n enumerable: true,\n get(): Cell {\n if (validity && !getBit(validity, bitOff + cur)) return null;\n return data[cur] !== 0;\n },\n });\n } else if (col.dtype === 'i64') {\n const data = ctx.viewOf({ ptr: col.dataPtr, length: len, dtype: 'i64' }) as BigInt64Array;\n Object.defineProperty(proxy, name, {\n enumerable: true,\n get(): Cell {\n if (validity && !getBit(validity, bitOff + cur)) return null;\n return data[cur]!; // bigint\n },\n });\n } else {\n const data = ctx.viewOf({ ptr: col.dataPtr, length: len, dtype: DTYPES[col.dtype].view });\n Object.defineProperty(proxy, name, {\n enumerable: true,\n get(): Cell {\n if (validity && !getBit(validity, bitOff + cur)) return null;\n return data[cur] as number;\n },\n });\n }\n }\n\n return {\n at(i: number): Row {\n cur = i;\n return proxy;\n },\n };\n}\n","/**\n * JS-side dispatch stubs for the hash kernel family (Phase 2, Agent D).\n *\n * Thin wrappers over the raw WASM exports that implement the two retry\n * protocols defined in wasm-abi.md §9 D (this is Phase 3's contract):\n *\n * 1. **HT-grow protocol** (`group_build`, `join_*`): if the kernel returns\n * `-1` (hash table full), double `htCap`, re-zero the table, and re-call.\n *\n * 2. **Out-grow protocol** (`join_*`): if the kernel returns `n > outCap`,\n * the caller should re-allocate `out_l_idx` and `out_r_idx` to `n` and\n * re-call. The JS stubs here implement that loop transparently.\n *\n * Both retry paths are tested in `tests/kernels/hash/` (including forced tiny\n * `htCap` / `outCap` variants).\n */\n\n// ---------------------------------------------------------------------------\n// WASM export interface (hash + memory allocator)\n// ---------------------------------------------------------------------------\n\n/**\n * The subset of WASM exports consumed by the hash family stubs.\n * The actual `WebAssembly.Instance.exports` object is cast to this at\n * load time; all hash_dt, group_build, and join exports live here.\n */\nexport interface HashExports {\n /** `alloc(size) -> ptr` — 16-byte aligned, 0 on OOM (ABI §3). */\n alloc(size: number): number;\n /** `free(ptr)` — free(0) is a no-op (ABI §3). */\n free(ptr: number): void;\n /** Single linear memory shared by all kernels (ABI §2). */\n readonly memory: WebAssembly.Memory;\n\n // ── hash_dt ──────────────────────────────────────────────────────────────\n /** `hash_i32(data, vp, out_hash, len) -> ()` */\n hash_i32(data: number, vp: number, outHash: number, len: number): void;\n /** `hash_u32(data, vp, out_hash, len) -> ()` */\n hash_u32(data: number, vp: number, outHash: number, len: number): void;\n /** `hash_f64(data, vp, out_hash, len) -> ()` */\n hash_f64(data: number, vp: number, outHash: number, len: number): void;\n /** `hash_f32(data, vp, out_hash, len) -> ()` */\n hash_f32(data: number, vp: number, outHash: number, len: number): void;\n /** `hash_i64(data, vp, out_hash, len) -> ()` — v2.3 i64 column hash. */\n hash_i64(data: number, vp: number, outHash: number, len: number): void;\n /**\n * `hash_utf8_dict(offsets_ptr, bytes_ptr, dict_count, out_hash_ptr) -> ()` — ABI §12.\n *\n * For each dictionary slot `k in 0..dict_count`, hashes the raw UTF-8 bytes\n * `bytes[offsets[k]..offsets[k+1])` into `out_hash[k]` (i64). No row validity\n * is involved; row nullness is handled separately by the join validity bitmaps.\n */\n hash_utf8_dict(offsetsPtr: number, bytesPtr: number, dictCount: number, outHashPtr: number): void;\n\n // ── hash_combine ─────────────────────────────────────────────────────────\n /** `hash_combine(acc_hash, add_hash, len) -> ()` — in-place multi-key mix. */\n hash_combine(accHash: number, addHash: number, len: number): void;\n\n // ── group_build ──────────────────────────────────────────────────────────\n /**\n * `group_build(hash_ptr, len, ht_ptr, ht_cap, out_group_ids) -> i32`\n *\n * Returns `group_count` (≥ 0) or `-1` if the HT is too small.\n */\n group_build(\n hashPtr: number,\n len: number,\n htPtr: number,\n htCap: number,\n outGroupIds: number,\n ): number;\n\n // ── join_hash_inner / join_hash_left ──────────────────────────────────────\n /**\n * `join_hash_inner / join_hash_left(...) -> i32`\n *\n * Returns total pair count, or `-1` if HT too small.\n */\n join_hash_inner(\n lhPtr: number,\n lVp: number,\n lLen: number,\n rhPtr: number,\n rVp: number,\n rLen: number,\n htPtr: number,\n htCap: number,\n outLIdx: number,\n outRIdx: number,\n outCap: number,\n ): number;\n join_hash_left(\n lhPtr: number,\n lVp: number,\n lLen: number,\n rhPtr: number,\n rVp: number,\n rLen: number,\n htPtr: number,\n htCap: number,\n outLIdx: number,\n outRIdx: number,\n outCap: number,\n ): number;\n}\n\n// ---------------------------------------------------------------------------\n// Internal helpers\n// ---------------------------------------------------------------------------\n\n/** Next power-of-two ≥ `n`. Returns 1 for n ≤ 1. */\nfunction nextPow2(n: number): number {\n if (n <= 1) return 1;\n let p = 1;\n while (p < n) p <<= 1;\n return p;\n}\n\n/** Minimum initial hash-table capacity (slots). */\nconst MIN_HT_CAP = 4;\n\n/** Bytes per hash-table slot (16; see hash.rs module docs). */\nconst SLOT_BYTES = 16;\n\n/**\n * Allocate `bytes` from the WASM heap and zero-initialise.\n * Throws if OOM (`alloc` returned 0).\n *\n * NOTE: alloc may grow `memory` (detaching old TypedArray views). Any\n * view that was built before this call is potentially stale. Always\n * re-read `ex.memory.buffer` after calling this function.\n */\nfunction allocZeroed(ex: HashExports, bytes: number): number {\n if (bytes === 0) {\n // alloc(0) returns a valid non-zero ptr per ABI §3, but no zeroing needed.\n return ex.alloc(0);\n }\n const ptr = ex.alloc(bytes);\n if (ptr === 0) throw new Error(`[hash stubs] OOM: alloc(${bytes}) returned 0`);\n new Uint8Array(ex.memory.buffer, ptr, bytes).fill(0);\n return ptr;\n}\n\n// ---------------------------------------------------------------------------\n// groupBuild — JS wrapper with HT-grow retry\n// ---------------------------------------------------------------------------\n\n/** Result of {@link groupBuild}. */\nexport interface GroupBuildResult {\n /** Number of distinct groups found. */\n groupCount: number;\n /** `i32[len]` group IDs in first-occurrence order (caller-allocated, caller-frees). */\n outGroupIds: number;\n}\n\n/**\n * Assign dense group IDs (first-occurrence order) to a pre-hashed column.\n *\n * Allocates and manages the hash-table internally; retries with doubled\n * capacity on `-1` (HT full). The `outGroupIds` buffer must be caller-\n * allocated (`i32[len]`) and is filled here; it is NOT freed — the caller\n * is responsible for freeing it.\n *\n * @param ex WASM exports (hash + allocator).\n * @param hashPtr Pointer to `i64[len]` pre-hashed keys.\n * @param len Number of rows.\n * @param outGroupIds Pointer to caller-allocated `i32[len]` output buffer.\n * @param htCapHint Optional initial HT capacity (default: `nextPow2(2*len)`).\n * @returns `groupCount` — number of distinct groups.\n */\nexport function groupBuild(\n ex: HashExports,\n hashPtr: number,\n len: number,\n outGroupIds: number,\n htCapHint?: number,\n): number {\n let htCap = Math.max(MIN_HT_CAP, htCapHint ?? nextPow2(2 * Math.max(len, 1)));\n let htPtr = 0;\n try {\n htPtr = allocZeroed(ex, htCap * SLOT_BYTES);\n for (;;) {\n const result = ex.group_build(hashPtr, len, htPtr, htCap, outGroupIds);\n if (result !== -1) {\n return result; // success: group_count\n }\n // HT full — double capacity and retry.\n ex.free(htPtr);\n htPtr = 0; // guard against double-free if allocZeroed throws\n htCap *= 2;\n htPtr = allocZeroed(ex, htCap * SLOT_BYTES);\n }\n } finally {\n if (htPtr !== 0) ex.free(htPtr);\n }\n}\n\n// ---------------------------------------------------------------------------\n// joinHashInner / joinHashLeft — JS wrappers with HT-grow + out-grow retry\n// ---------------------------------------------------------------------------\n\n/** Result of {@link joinHashInner} and {@link joinHashLeft}. */\nexport interface JoinResult {\n /** Number of output pairs. */\n count: number;\n /**\n * `i32[count]` left-row indices.\n * This is a copy of the WASM buffer — safe to hold after further WASM calls.\n */\n lIdx: Int32Array;\n /**\n * `i32[count]` right-row indices.\n * For `joinHashLeft`, unmatched/null-key rows have `rIdx[i] === -1`.\n */\n rIdx: Int32Array;\n}\n\n/**\n * Shared implementation for inner and left hash joins.\n *\n * Implements two retry loops:\n * 1. **HT-grow**: if kernel returns `-1`, double `htCap` and re-call.\n * 2. **Out-grow**: if kernel returns `n > outCap`, grow out arrays to `n`\n * and re-call (the kernel re-runs both build and probe; the HT must be\n * re-zeroed for the fresh build phase).\n *\n * @param joinFn Either `ex.join_hash_inner` or `ex.join_hash_left`, bound to `ex`.\n */\nfunction joinImpl(\n ex: HashExports,\n joinFn: (\n lhPtr: number,\n lVp: number,\n lLen: number,\n rhPtr: number,\n rVp: number,\n rLen: number,\n htPtr: number,\n htCap: number,\n outLIdx: number,\n outRIdx: number,\n outCap: number,\n ) => number,\n lhPtr: number,\n lVp: number,\n lLen: number,\n rhPtr: number,\n rVp: number,\n rLen: number,\n htCapHint?: number,\n): JoinResult {\n let htCap = Math.max(MIN_HT_CAP, htCapHint ?? nextPow2(2 * Math.max(rLen, 1)));\n // Initial output capacity: upper bound on pairs (every left × every right)\n let outCap = Math.max(1, lLen + rLen);\n\n let htPtr = 0;\n let outLPtr = 0;\n let outRPtr = 0;\n\n try {\n htPtr = allocZeroed(ex, htCap * SLOT_BYTES);\n outLPtr = ex.alloc(outCap * 4);\n if (outLPtr === 0) throw new Error('[hash stubs] OOM: out_l_idx alloc failed');\n outRPtr = ex.alloc(outCap * 4);\n if (outRPtr === 0) throw new Error('[hash stubs] OOM: out_r_idx alloc failed');\n\n for (;;) {\n const n = joinFn(\n lhPtr,\n lVp,\n lLen,\n rhPtr,\n rVp,\n rLen,\n htPtr,\n htCap,\n outLPtr,\n outRPtr,\n outCap,\n );\n\n if (n === -1) {\n // HT too small — double capacity, re-zero, re-call.\n ex.free(htPtr);\n htPtr = 0;\n htCap *= 2;\n htPtr = allocZeroed(ex, htCap * SLOT_BYTES);\n continue;\n }\n\n if (n > outCap) {\n // Output too small — grow and re-call (also re-zero HT for fresh build).\n ex.free(outLPtr);\n outLPtr = 0;\n ex.free(outRPtr);\n outRPtr = 0;\n outCap = n;\n outLPtr = ex.alloc(outCap * 4);\n if (outLPtr === 0) throw new Error('[hash stubs] OOM: out_l_idx resize failed');\n outRPtr = ex.alloc(outCap * 4);\n if (outRPtr === 0) throw new Error('[hash stubs] OOM: out_r_idx resize failed');\n\n // Re-zero the HT: the kernel re-runs build from scratch on re-call.\n ex.free(htPtr);\n htPtr = 0;\n htPtr = allocZeroed(ex, htCap * SLOT_BYTES);\n continue;\n }\n\n // Success — copy results before freeing the internal WASM buffers.\n const lIdx = new Int32Array(ex.memory.buffer, outLPtr, n).slice();\n const rIdx = new Int32Array(ex.memory.buffer, outRPtr, n).slice();\n return { count: n, lIdx, rIdx };\n }\n } finally {\n // Always release internal HT and output buffers.\n if (htPtr !== 0) ex.free(htPtr);\n if (outLPtr !== 0) ex.free(outLPtr);\n if (outRPtr !== 0) ex.free(outRPtr);\n }\n}\n\n/**\n * Inner equi-join (wasm-abi.md §9 D, `join_hash_inner`).\n *\n * Builds on the right side, probes left rows. Null-validity rows (via `l_vp`\n * / `r_vp`) never match. Returns pairs in probe (left-row) order; duplicate\n * right matches are in build (right-row) order.\n */\nexport function joinHashInner(\n ex: HashExports,\n lhPtr: number,\n lVp: number,\n lLen: number,\n rhPtr: number,\n rVp: number,\n rLen: number,\n htCapHint?: number,\n): JoinResult {\n return joinImpl(\n ex,\n (lhP, lV, lL, rhP, rV, rL, htP, htC, olP, orP, oC) =>\n ex.join_hash_inner(lhP, lV, lL, rhP, rV, rL, htP, htC, olP, orP, oC),\n lhPtr,\n lVp,\n lLen,\n rhPtr,\n rVp,\n rLen,\n htCapHint,\n );\n}\n\n/**\n * Left outer equi-join (wasm-abi.md §9 D, `join_hash_left`).\n *\n * Same as `joinHashInner` but unmatched left rows AND null-key left rows\n * produce `(l_idx, -1)` pairs. The frame layer maps `-1` right indices to\n * null-gather operations.\n */\nexport function joinHashLeft(\n ex: HashExports,\n lhPtr: number,\n lVp: number,\n lLen: number,\n rhPtr: number,\n rVp: number,\n rLen: number,\n htCapHint?: number,\n): JoinResult {\n return joinImpl(\n ex,\n (lhP, lV, lL, rhP, rV, rL, htP, htC, olP, orP, oC) =>\n ex.join_hash_left(lhP, lV, lL, rhP, rV, rL, htP, htC, olP, orP, oC),\n lhPtr,\n lVp,\n lLen,\n rhPtr,\n rVp,\n rLen,\n htCapHint,\n );\n}\n","/**\n * GroupBy + agg (spec §4; ADR-005 hash grouping). Group: hash key columns (`hash_dt` +\n * `hash_combine`) and assign first-occurrence ids via `group_build`; string keys hash their\n * dictionary indices (no unification needed within one frame); null keys form one group\n * (dtypes.md §4.5). Aggregate: each operand is materialised once over the frame then reduced\n * per group by one JS scatter pass (no per-group boundary chatter). skipna + result-dtype per §4.3.\n */\n\nimport { DTYPES, type DType } from '../memory/dtype.js';\nimport { validityBytes, getBit } from '../memory/bitmap.js';\nimport { decodeSlot, type Dictionary } from '../memory/dictionary.js';\nimport { createColumn, freeColumn, type Cell, type Column, type ColumnInput } from '../memory/column.js';\nimport { Expr, aggResult, compile, inferType, type AggOp, type FrameView } from '../expr/index.js';\nimport { groupBuild, type HashExports } from '../kernels/hash/index.js';\nimport type { DfRuntime } from './runtime.js';\nimport { rawKernel } from './runtime.js';\nimport { alignValidity, freeAligned } from './util.js';\nimport { FrameError, unknownColumn } from './errors.js';\nimport type { DataFrame } from './dataframe.js';\n\nexport type AggName = AggOp | 'size';\n\nexport type AggRequest = AggName | AggName[] | Expr;\n\nexport type AggSpec = Record<string, AggRequest>;\n\nexport interface NamedColumn {\n readonly name: string;\n readonly col: Column;\n}\n\nexport interface GroupBySource extends FrameView {\n readonly rt: DfRuntime;\n buildResult(named: NamedColumn[]): DataFrame;\n}\n\nconst AGG_NAMES = new Set<AggName>([\n 'sum', 'mean', 'min', 'max', 'count', 'size', 'nunique', 'std', 'var', 'first', 'last',\n]);\n\nexport class GroupBy {\n private readonly src: GroupBySource;\n private readonly keys: string[];\n\n constructor(src: GroupBySource, keys: string[]) {\n this.src = src;\n this.keys = keys;\n for (const k of keys) {\n if (src.dtypeOf(k) === undefined) throw unknownColumn(k, src.columnNames());\n }\n }\n\n agg(spec: AggSpec): DataFrame {\n const { rt } = this.src;\n const { ctx } = rt;\n const len = this.src.length;\n const keyCols = this.keys.map((k) => this.src.getColumn(k)!);\n\n const plan = this.buildPlan(spec);\n const groups = computeGroups(rt, keyCols);\n const owned: Column[] = [];\n try {\n const firstRow = groups.firstRow;\n const out: NamedColumn[] = [];\n\n for (let k = 0; k < this.keys.length; k++) {\n const col = gatherFirst(rt, keyCols[k]!, firstRow);\n owned.push(col);\n out.push({ name: this.keys[k]!, col });\n }\n\n const gids = ctx.viewOf({ ptr: groups.groupIdsPtr, length: len, dtype: 'i32' }) as Int32Array;\n for (const a of plan) {\n const col = scatterReduce(rt, a, gids, groups.groupCount, len);\n owned.push(col);\n out.push({ name: a.outName, col });\n }\n\n const result = this.src.buildResult(out);\n\n owned.length = 0;\n return result;\n } finally {\n for (const c of owned) freeColumn(ctx, c);\n for (const a of plan) if (a.ownsOperand && a.operand) freeColumn(ctx, a.operand);\n ctx.viewOf.forget({ ptr: groups.groupIdsPtr, length: len, dtype: 'i32' });\n ctx.mod.free(groups.groupIdsPtr);\n }\n }\n\n private buildPlan(spec: AggSpec): AggPlan[] {\n const plan: AggPlan[] = [];\n for (const [key, req] of Object.entries(spec)) {\n if (req instanceof Expr) {\n plan.push(this.exprPlan(key, req));\n } else if (Array.isArray(req)) {\n for (const op of req) plan.push(this.columnPlan(`${key}_${op}`, key, op));\n } else {\n plan.push(this.columnPlan(key, key, req));\n }\n }\n return plan;\n }\n\n private columnPlan(outName: string, colName: string, op: AggName): AggPlan {\n if (!AGG_NAMES.has(op)) throw new FrameError(`unknown aggregation '${op}' for '${colName}'.`);\n if (op === 'size') {\n return { outName, op, operand: null, operandDtype: 'i32', ownsOperand: false, resultDtype: 'i32' };\n }\n const col = this.src.getColumn(colName);\n if (!col) throw unknownColumn(colName, this.src.columnNames());\n const resultDtype = aggDtype(op, col.dtype);\n return { outName, op, operand: col, operandDtype: col.dtype, ownsOperand: false, resultDtype };\n }\n\n private exprPlan(outName: string, expr: Expr): AggPlan {\n const node = expr.node;\n if (node.kind !== 'agg') {\n throw new FrameError(\n `agg value for '${outName}' must be a top-level aggregation (e.g. col('a').sum()).`,\n );\n }\n const op = node.op;\n const operandDtype = inferType(node.operand, this.src);\n const resultDtype = aggResult(op, operandDtype);\n const res = compile(node.operand, this.src).execute();\n if (res.kind !== 'column' || !res.column) {\n throw new FrameError(`aggregation operand for '${outName}' did not produce a column.`);\n }\n return { outName, op, operand: res.column, operandDtype, ownsOperand: true, resultDtype };\n }\n}\n\nfunction aggDtype(op: AggName, d: DType): DType {\n return op === 'size' ? 'i32' : aggResult(op, d);\n}\n\ninterface AggPlan {\n readonly outName: string;\n readonly op: AggName;\n\n readonly operand: Column | null;\n readonly operandDtype: DType;\n readonly ownsOperand: boolean;\n readonly resultDtype: DType;\n}\n\ninterface Groups {\n readonly groupIdsPtr: number;\n readonly groupCount: number;\n readonly firstRow: Int32Array;\n}\n\nfunction computeGroups(rt: DfRuntime, keyCols: Column[]): Groups {\n const { ctx, wasm } = rt;\n const len = keyCols.length > 0 ? keyCols[0]!.length : 0;\n const hashPtr = ctx.mod.alloc(Math.max(len * 8, 1));\n try {\n for (let k = 0; k < keyCols.length; k++) {\n const col = keyCols[k]!;\n const key = hashInput(rt, col, len);\n const av = alignValidity(ctx, col);\n try {\n if (k === 0) {\n rawKernel(wasm, `hash_${key.tok}`)(key.ptr, av.ptr, hashPtr, len);\n } else {\n const tmp = ctx.mod.alloc(Math.max(len * 8, 1));\n try {\n rawKernel(wasm, `hash_${key.tok}`)(key.ptr, av.ptr, tmp, len);\n rawKernel(wasm, 'hash_combine')(hashPtr, tmp, len);\n } finally {\n ctx.viewOf.forget({ ptr: tmp, length: len, dtype: 'u8' });\n ctx.mod.free(tmp);\n }\n }\n } finally {\n freeAligned(ctx, av);\n key.free();\n }\n }\n\n const groupIdsPtr = ctx.mod.alloc(Math.max(len * 4, 1));\n const groupCount = groupBuild(wasm as unknown as HashExports, hashPtr, len, groupIdsPtr);\n\n const gids = ctx.viewOf({ ptr: groupIdsPtr, length: len, dtype: 'i32' }) as Int32Array;\n const firstRow = new Int32Array(groupCount);\n let seen = 0;\n for (let i = 0; i < len && seen < groupCount; i++) {\n if (gids[i] === seen) firstRow[seen++] = i;\n }\n return { groupIdsPtr, groupCount, firstRow };\n } finally {\n ctx.viewOf.forget({ ptr: hashPtr, length: len, dtype: 'u8' });\n ctx.mod.free(hashPtr);\n }\n}\n\nfunction hashInput(rt: DfRuntime, col: Column, len: number): { ptr: number; tok: string; free(): void } {\n const { ctx } = rt;\n if (col.dtype === 'utf8') return { ptr: col.dataPtr, tok: 'i32', free() {} };\n if (col.dtype === 'bool') {\n const ptr = ctx.mod.alloc(Math.max(len * 4, 1));\n const src = ctx.viewOf({ ptr: col.dataPtr, length: len, dtype: 'bool' }) as Uint8Array;\n const dst = ctx.viewOf({ ptr, length: len, dtype: 'i32' }) as Int32Array;\n for (let i = 0; i < len; i++) dst[i] = src[i]!;\n return {\n ptr,\n tok: 'i32',\n free() {\n ctx.viewOf.forget({ ptr, length: len, dtype: 'i32' });\n ctx.mod.free(ptr);\n },\n };\n }\n return { ptr: col.dataPtr, tok: DTYPES[col.dtype].wasm, free() {} };\n}\n\nfunction gatherFirst(rt: DfRuntime, col: Column, firstRow: Int32Array): Column {\n const { ctx } = rt;\n const n = firstRow.length;\n const validity =\n col.validityPtr === 0\n ? null\n : (ctx.viewOf({\n ptr: col.validityPtr,\n length: validityBytes(col.validityBitOffset + col.length),\n dtype: 'u8',\n }) as Uint8Array);\n const bitOff = col.validityBitOffset;\n\n if (col.dtype === 'utf8') {\n const idx = ctx.viewOf({ ptr: col.dataPtr, length: col.length, dtype: 'i32' }) as Int32Array;\n const dict = col.dict!;\n const out = new Array<string | null>(n);\n for (let g = 0; g < n; g++) {\n const r = firstRow[g]!;\n out[g] = validity && !getBit(validity, bitOff + r) ? null : decodeSlot(ctx, dict, idx[r]!);\n }\n return createColumn(ctx, 'utf8', out);\n }\n\n if (col.dtype === 'i64') {\n const data = ctx.viewOf({ ptr: col.dataPtr, length: col.length, dtype: 'i64' }) as BigInt64Array;\n const out = new Array<bigint | null>(n);\n for (let g = 0; g < n; g++) {\n const r = firstRow[g]!;\n out[g] = validity && !getBit(validity, bitOff + r) ? null : data[r]!;\n }\n return createColumn(ctx, 'i64', out as unknown as ColumnInput);\n }\n\n const isBool = col.dtype === 'bool';\n const data = ctx.viewOf({ ptr: col.dataPtr, length: col.length, dtype: DTYPES[col.dtype].view });\n const out = new Array<number | boolean | null>(n);\n for (let g = 0; g < n; g++) {\n const r = firstRow[g]!;\n if (validity && !getBit(validity, bitOff + r)) out[g] = null;\n else out[g] = isBool ? data[r] !== 0 : (data[r] as number);\n }\n return createColumn(ctx, col.dtype, out as unknown as ColumnInput);\n}\n\nfunction scatterReduce(\n rt: DfRuntime,\n plan: AggPlan,\n gids: Int32Array,\n groupCount: number,\n len: number,\n): Column {\n const { ctx } = rt;\n const { op } = plan;\n\n if (op === 'size') {\n const out = new Array<number>(groupCount).fill(0);\n for (let i = 0; i < len; i++) { const g = gids[i]!; out[g] = out[g]! + 1; }\n return createColumn(ctx, 'i32', out);\n }\n\n const col = plan.operand!;\n const validity =\n col.validityPtr === 0\n ? null\n : (ctx.viewOf({\n ptr: col.validityPtr,\n length: validityBytes(col.validityBitOffset + len),\n dtype: 'u8',\n }) as Uint8Array);\n const bitOff = col.validityBitOffset;\n const valid = (i: number): boolean => validity === null || getBit(validity, bitOff + i);\n\n if (op === 'count') {\n const out = new Array<number>(groupCount).fill(0);\n for (let i = 0; i < len; i++) if (valid(i)) { const g = gids[i]!; out[g] = out[g]! + 1; }\n return createColumn(ctx, 'i32', out);\n }\n\n if (op === 'first' || op === 'last') {\n return reduceFirstLast(rt, plan, gids, groupCount, len, valid);\n }\n if (op === 'nunique') {\n return reduceNunique(rt, plan, gids, groupCount, len, valid);\n }\n if (op === 'std' || op === 'var') {\n return reduceStdVar(rt, plan, gids, groupCount, len, valid);\n }\n\n // i64 operations require bigint arithmetic\n if (col.dtype === 'i64') {\n const data = ctx.viewOf({ ptr: col.dataPtr, length: len, dtype: 'i64' }) as BigInt64Array;\n if (op === 'sum') {\n const acc = new Array<bigint>(groupCount).fill(0n);\n for (let i = 0; i < len; i++) if (valid(i)) { const g = gids[i]!; acc[g] = acc[g]! + data[i]!; }\n return createColumn(ctx, 'i64', acc as unknown as ColumnInput);\n }\n if (op === 'mean') {\n const acc = new Float64Array(groupCount);\n const cnt = new Int32Array(groupCount);\n for (let i = 0; i < len; i++) {\n if (!valid(i)) continue;\n const g = gids[i]!;\n acc[g] = acc[g]! + Number(data[i]!);\n cnt[g] = cnt[g]! + 1;\n }\n const out = new Array<number | null>(groupCount);\n for (let g = 0; g < groupCount; g++) out[g] = cnt[g]! > 0 ? acc[g]! / cnt[g]! : null;\n return createColumn(ctx, 'f64', out as unknown as ColumnInput);\n }\n // min/max for i64\n const extI64 = new Array<bigint | null>(groupCount).fill(null);\n const isMin = op === 'min';\n for (let i = 0; i < len; i++) {\n if (!valid(i)) continue;\n const g = gids[i]!;\n const x = data[i]!;\n if (extI64[g] === null) extI64[g] = x;\n else extI64[g] = isMin ? (x < extI64[g]! ? x : extI64[g]!) : (x > extI64[g]! ? x : extI64[g]!);\n }\n return createColumn(ctx, 'i64', extI64 as unknown as ColumnInput);\n }\n\n const data = ctx.viewOf({ ptr: col.dataPtr, length: len, dtype: DTYPES[col.dtype].view }) as\n | Float64Array | Float32Array | Int32Array | Uint32Array;\n const out = new Array<number | null>(groupCount).fill(null);\n\n if (op === 'sum') {\n const acc = new Float64Array(groupCount);\n for (let i = 0; i < len; i++) if (valid(i)) { const g = gids[i]!; acc[g] = acc[g]! + data[i]!; }\n for (let g = 0; g < groupCount; g++) out[g] = acc[g]!;\n return createColumn(ctx, plan.resultDtype, out as unknown as ColumnInput);\n }\n if (op === 'mean') {\n const acc = new Float64Array(groupCount);\n const cnt = new Int32Array(groupCount);\n for (let i = 0; i < len; i++) {\n if (!valid(i)) continue;\n const g = gids[i]!;\n acc[g] = acc[g]! + data[i]!;\n cnt[g] = cnt[g]! + 1;\n }\n for (let g = 0; g < groupCount; g++) out[g] = cnt[g]! > 0 ? acc[g]! / cnt[g]! : null;\n return createColumn(ctx, 'f64', out as unknown as ColumnInput);\n }\n\n const cntNonNull = new Int32Array(groupCount);\n const cntFinite = new Int32Array(groupCount);\n const ext = new Float64Array(groupCount);\n const isMin = op === 'min';\n for (let i = 0; i < len; i++) {\n if (!valid(i)) continue;\n const g = gids[i]!;\n cntNonNull[g] = cntNonNull[g]! + 1;\n const x = data[i]!;\n if (Number.isNaN(x)) continue;\n if (cntFinite[g] === 0) ext[g] = x;\n else ext[g] = isMin ? Math.min(ext[g]!, x) : Math.max(ext[g]!, x);\n cntFinite[g] = cntFinite[g]! + 1;\n }\n for (let g = 0; g < groupCount; g++) {\n out[g] = cntNonNull[g] === 0 ? null : cntFinite[g] === 0 ? NaN : ext[g]!;\n }\n return createColumn(ctx, plan.resultDtype, out as unknown as ColumnInput);\n}\n\nfunction reduceStdVar(\n rt: DfRuntime,\n plan: AggPlan,\n gids: Int32Array,\n groupCount: number,\n len: number,\n valid: (i: number) => boolean,\n): Column {\n const { ctx } = rt;\n const col = plan.operand!;\n const isI64 = col.dtype === 'i64';\n const data = isI64\n ? ctx.viewOf({ ptr: col.dataPtr, length: len, dtype: 'i64' }) as BigInt64Array\n : ctx.viewOf({ ptr: col.dataPtr, length: len, dtype: DTYPES[col.dtype].view }) as\n Float64Array | Float32Array | Int32Array | Uint32Array;\n const sum = new Float64Array(groupCount);\n const cnt = new Int32Array(groupCount);\n for (let i = 0; i < len; i++) {\n if (!valid(i)) continue;\n const g = gids[i]!;\n sum[g] = sum[g]! + (isI64 ? Number((data as BigInt64Array)[i]!) : (data as Float64Array)[i]!);\n cnt[g] = cnt[g]! + 1;\n }\n const mean = new Float64Array(groupCount);\n for (let g = 0; g < groupCount; g++) mean[g] = cnt[g]! > 0 ? sum[g]! / cnt[g]! : 0;\n const sse = new Float64Array(groupCount);\n for (let i = 0; i < len; i++) {\n if (!valid(i)) continue;\n const g = gids[i]!;\n const x = isI64 ? Number((data as BigInt64Array)[i]!) : (data as Float64Array)[i]!;\n const d = x - mean[g]!;\n sse[g] = sse[g]! + d * d;\n }\n const out = new Array<number | null>(groupCount);\n const wantStd = plan.op === 'std';\n for (let g = 0; g < groupCount; g++) {\n if (cnt[g]! < 2) out[g] = null;\n else {\n const v = sse[g]! / (cnt[g]! - 1);\n out[g] = wantStd ? Math.sqrt(v) : v;\n }\n }\n return createColumn(ctx, 'f64', out as unknown as ColumnInput);\n}\n\nfunction reduceNunique(\n rt: DfRuntime,\n plan: AggPlan,\n gids: Int32Array,\n groupCount: number,\n len: number,\n valid: (i: number) => boolean,\n): Column {\n const { ctx } = rt;\n const col = plan.operand!;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const sets: Array<Set<any> | undefined> = new Array(groupCount);\n const data =\n col.dtype === 'utf8' || col.dtype === 'bool'\n ? (ctx.viewOf({ ptr: col.dataPtr, length: len, dtype: col.dtype === 'utf8' ? 'i32' : 'bool' }))\n : col.dtype === 'i64'\n ? (ctx.viewOf({ ptr: col.dataPtr, length: len, dtype: 'i64' }) as BigInt64Array)\n : (ctx.viewOf({ ptr: col.dataPtr, length: len, dtype: DTYPES[col.dtype].view }));\n for (let i = 0; i < len; i++) {\n if (!valid(i)) continue;\n const g = gids[i]!;\n (sets[g] ??= new Set()).add(data[i]!);\n }\n const out = new Array<number>(groupCount);\n for (let g = 0; g < groupCount; g++) out[g] = sets[g] ? sets[g]!.size : 0;\n return createColumn(ctx, 'i32', out);\n}\n\nfunction reduceFirstLast(\n rt: DfRuntime,\n plan: AggPlan,\n gids: Int32Array,\n groupCount: number,\n len: number,\n valid: (i: number) => boolean,\n): Column {\n const { ctx } = rt;\n const col = plan.operand!;\n const wantFirst = plan.op === 'first';\n const chosen = new Int32Array(groupCount).fill(-1);\n for (let i = 0; i < len; i++) {\n if (!valid(i)) continue;\n const g = gids[i]!;\n if (wantFirst) {\n if (chosen[g] === -1) chosen[g] = i;\n } else {\n chosen[g] = i;\n }\n }\n const out = new Array<Cell>(groupCount);\n if (col.dtype === 'utf8') {\n const idx = ctx.viewOf({ ptr: col.dataPtr, length: len, dtype: 'i32' }) as Int32Array;\n const dict = col.dict as Dictionary;\n for (let g = 0; g < groupCount; g++) {\n out[g] = chosen[g] === -1 ? null : decodeSlot(ctx, dict, idx[chosen[g]!]!);\n }\n return createColumn(ctx, 'utf8', out as unknown as ColumnInput);\n }\n if (col.dtype === 'i64') {\n const data = ctx.viewOf({ ptr: col.dataPtr, length: len, dtype: 'i64' }) as BigInt64Array;\n for (let g = 0; g < groupCount; g++) {\n const r = chosen[g]!;\n out[g] = r === -1 ? null : data[r]!;\n }\n return createColumn(ctx, 'i64', out as unknown as ColumnInput);\n }\n\n const isBool = col.dtype === 'bool';\n const data = ctx.viewOf({ ptr: col.dataPtr, length: len, dtype: DTYPES[col.dtype].view });\n for (let g = 0; g < groupCount; g++) {\n const r = chosen[g]!;\n out[g] = r === -1 ? null : isBool ? data[r] !== 0 : (data[r] as number);\n }\n return createColumn(ctx, col.dtype, out as unknown as ColumnInput);\n}\n","/**\n * Hash join (spec §4; ADR-005). Builds on the right, probes left, via `join_hash_inner`/\n * `join_hash_left` (ABI §9 D; left emits r_idx=-1 → nulls). utf8 keys use the\n * unification-free path (ABI §12): each side's dictionary bytes are hashed once via\n * `hash_utf8_dict`, then row hashes are gathered via `gather_i64`; no JS dict unification\n * is performed. bool widens to i32; a null in any key excludes the row. Output = all left\n * columns + right non-key columns (colliding right names suffixed _right). Output utf8 key\n * column reuses the left dictionary (ABI §12).\n */\n\nimport { DTYPES } from '../memory/dtype.js';\nimport { validityBytes, getBit, setBit } from '../memory/bitmap.js';\nimport { createColumn, columnToArray, freeColumn, type Cell, type Column, type ColumnInput } from '../memory/column.js';\nimport type { Dictionary } from '../memory/dictionary.js';\nimport { joinHashInner, joinHashLeft, type HashExports, type JoinResult } from '../kernels/hash/index.js';\nimport type { DfRuntime } from './runtime.js';\nimport { rawKernel } from './runtime.js';\nimport { FrameError, unknownColumn, dtypeMismatch } from './errors.js';\nimport type { GroupBySource, NamedColumn } from './groupby.js';\nimport type { DataFrame } from './dataframe.js';\n\nexport type JoinHow = 'inner' | 'left';\n\nexport interface JoinOptions {\n on: string | string[];\n how?: JoinHow;\n}\n\nexport type JoinSource = GroupBySource;\n\nexport function joinFrames(left: JoinSource, right: JoinSource, opts: JoinOptions): DataFrame {\n const how: JoinHow = opts.how ?? 'inner';\n const keys = Array.isArray(opts.on) ? opts.on : [opts.on];\n if (keys.length === 0) throw new FrameError('join requires at least one key in `on`.');\n\n const rt = left.rt;\n const { ctx } = rt;\n const lLen = left.length;\n const rLen = right.length;\n\n for (const k of keys) {\n const ld = left.dtypeOf(k);\n if (ld === undefined) throw unknownColumn(k, left.columnNames());\n const rd = right.dtypeOf(k);\n if (rd === undefined) throw unknownColumn(k, right.columnNames());\n if (ld !== rd) throw dtypeMismatch('join', ld, rd, `join key '${k}' must have one dtype.`);\n }\n\n const prepared = keys.map((k) => prepareKey(rt, left.getColumn(k)!, right.getColumn(k)!, lLen, rLen));\n\n try {\n const lHash = combinedHash(rt, prepared.map((p) => ({ ptr: p.leftPtr, tok: p.tok })), lLen);\n const rHash = combinedHash(rt, prepared.map((p) => ({ ptr: p.rightPtr, tok: p.tok })), rLen);\n const lvp = combinedValidity(rt, keys.map((k) => left.getColumn(k)!), lLen);\n const rvp = combinedValidity(rt, keys.map((k) => right.getColumn(k)!), rLen);\n\n let res: JoinResult;\n try {\n const ex = rt.wasm as unknown as HashExports;\n res = how === 'left'\n ? joinHashLeft(ex, lHash, lvp.ptr, lLen, rHash, rvp.ptr, rLen)\n : joinHashInner(ex, lHash, lvp.ptr, lLen, rHash, rvp.ptr, rLen);\n } finally {\n ctx.viewOf.forget({ ptr: lHash, length: lLen, dtype: 'u8' });\n ctx.mod.free(lHash);\n ctx.viewOf.forget({ ptr: rHash, length: rLen, dtype: 'u8' });\n ctx.mod.free(rHash);\n freePtr(rt, lvp.ptr, lvp.owns);\n freePtr(rt, rvp.ptr, rvp.owns);\n }\n\n return assembleOutput(left, right, keys, res, how);\n } finally {\n for (const p of prepared) p.free();\n }\n}\n\nfunction assembleOutput(\n left: JoinSource,\n right: JoinSource,\n keys: string[],\n res: JoinResult,\n how: JoinHow,\n): DataFrame {\n const rt = left.rt;\n const { ctx } = rt;\n const outLen = res.count;\n const keySet = new Set(keys);\n const leftNames = left.columnNames();\n const rightNames = right.columnNames().filter((n) => !keySet.has(n));\n const leftNameSet = new Set(leftNames);\n\n // Write index arrays to wasm once; reuse for all column gathers.\n // lIdx never contains -1 (every left row appears in both inner and left join).\n // rIdx may contain -1 (unmatched left rows in left join → null right columns).\n const lIdxPtr = idxToWasm(rt, res.lIdx, outLen);\n let rIdxSafePtr: number;\n let rNullMaskBytes: Uint8Array | null = null;\n if (how === 'left') {\n rNullMaskBytes = buildNullMask(res.rIdx, outLen);\n rIdxSafePtr = idxToWasmSafe(rt, res.rIdx, outLen); // -1 → 0\n } else {\n rIdxSafePtr = idxToWasm(rt, res.rIdx, outLen);\n }\n\n const owned: Column[] = [];\n try {\n const out: NamedColumn[] = [];\n for (const name of leftNames) {\n const col = gatherWasm(rt, left.getColumn(name)!, lIdxPtr, outLen, null);\n owned.push(col);\n out.push({ name, col });\n }\n for (const name of rightNames) {\n const col = gatherWasm(rt, right.getColumn(name)!, rIdxSafePtr, outLen, rNullMaskBytes);\n owned.push(col);\n const outName = leftNameSet.has(name) ? `${name}_right` : name;\n out.push({ name: outName, col });\n }\n const result = left.buildResult(out);\n owned.length = 0;\n return result;\n } finally {\n for (const c of owned) freeColumn(ctx, c);\n ctx.mod.free(lIdxPtr);\n ctx.mod.free(rIdxSafePtr);\n void how;\n }\n}\n\n// ---------------------------------------------------------------------------\n// Wasm-based gather helpers (fast path for assembleOutput)\n// ---------------------------------------------------------------------------\n\n/** Write a JS Int32Array to wasm. Caller frees the returned pointer. */\nfunction idxToWasm(rt: DfRuntime, idx: Int32Array, len: number): number {\n const ptr = rt.ctx.mod.alloc(Math.max(len * 4, 1));\n if (len > 0) new Int32Array(rt.wasm.memory.buffer, ptr, len).set(idx);\n return ptr;\n}\n\n/** Like idxToWasm but replaces -1 with 0 (safe sentinel for wasm gather kernels). */\nfunction idxToWasmSafe(rt: DfRuntime, idx: Int32Array, len: number): number {\n const ptr = rt.ctx.mod.alloc(Math.max(len * 4, 1));\n if (len > 0) {\n const view = new Int32Array(rt.wasm.memory.buffer, ptr, len);\n for (let k = 0; k < len; k++) view[k] = idx[k]! < 0 ? 0 : idx[k]!;\n }\n return ptr;\n}\n\n/**\n * Build an Arrow-LSB null-mask byte array (JS-side) from rIdx.\n * Bit k = 1 when rIdx[k] ≥ 0 (valid), 0 when rIdx[k] = -1 (null).\n * Returns null if there are no -1 values (all rows matched).\n */\nfunction buildNullMask(rIdx: Int32Array, outLen: number): Uint8Array | null {\n let hasNeg = false;\n for (let k = 0; k < outLen; k++) {\n if (rIdx[k]! < 0) { hasNeg = true; break; }\n }\n if (!hasNeg) return null;\n const vb = validityBytes(outLen);\n const mask = new Uint8Array(vb).fill(0xff);\n for (let k = 0; k < outLen; k++) {\n if (rIdx[k]! < 0) { const bi = k >> 3; mask[bi] = mask[bi]! & ~(1 << (k & 7)); }\n }\n if (outLen & 7) { mask[vb - 1] = mask[vb - 1]! & ((1 << (outLen & 7)) - 1); }\n return mask;\n}\n\n/** Create an owned root Column from raw wasm pointers (no data copy). */\nfunction makeRootCol(\n dtype: Column['dtype'],\n length: number,\n dataPtr: number,\n validityPtr: number,\n dict: Dictionary | null,\n): Column {\n return { dtype, length, dataPtr, validityPtr, validityBitOffset: 0, dict, owned: true };\n}\n\n/**\n * Byte-level dictionary clone: copies offsets + bytes buffers in wasm without\n * decoding any strings. Both allocs happen before any TypedArray views are taken\n * so memory growth cannot produce stale views.\n */\nfunction cloneDictBytes(rt: DfRuntime, dict: Dictionary): Dictionary {\n const { count, offsetsPtr, bytesPtr, bytesLen } = dict;\n const offsSize = (count + 1) * 4;\n const newOffsetsPtr = rt.ctx.mod.alloc(offsSize);\n const newBytesPtr = rt.ctx.mod.alloc(Math.max(bytesLen, 1));\n const buf = rt.wasm.memory.buffer; // post-growth buffer after both allocs\n new Uint8Array(buf, newOffsetsPtr, offsSize).set(new Uint8Array(buf, offsetsPtr, offsSize));\n if (bytesLen > 0) {\n new Uint8Array(buf, newBytesPtr, bytesLen).set(new Uint8Array(buf, bytesPtr, bytesLen));\n }\n return { count, offsetsPtr: newOffsetsPtr, bytesPtr: newBytesPtr, bytesLen };\n}\n\n/**\n * Build the output validity bitmap for a gathered column.\n *\n * Output row k is valid iff:\n * (a) nullMask is null OR bit k of nullMask is 1 (not a forced-null from -1 rIdx), AND\n * (b) source validity at col.validityPtr[idx[k]] is 1 (or col has no nulls).\n *\n * Returns 0 (all-valid sentinel) when no nulls need encoding.\n * Uses the `gather_validity` wasm kernel to propagate source nulls efficiently.\n */\nfunction buildGatherValidity(\n rt: DfRuntime,\n col: Column,\n idxPtr: number,\n outLen: number,\n nullMask: Uint8Array | null,\n): number {\n const srcHasNulls = col.validityPtr !== 0;\n const hasForcedNulls = nullMask !== null;\n if (!srcHasNulls && !hasForcedNulls) return 0;\n\n const vb = validityBytes(outLen);\n\n if (!hasForcedNulls) {\n // Only source nulls: delegate entirely to wasm.\n const vp = rt.ctx.mod.alloc(Math.max(vb, 1));\n rawKernel(rt.wasm, 'gather_validity')(col.validityPtr, idxPtr, outLen, vp);\n return vp;\n }\n\n // Has forced nulls: start from nullMask, AND in source validity if needed.\n const vp = rt.ctx.mod.alloc(Math.max(vb, 1));\n new Uint8Array(rt.wasm.memory.buffer, vp, vb).set(nullMask!);\n\n if (srcHasNulls) {\n const tmp = rt.ctx.mod.alloc(Math.max(vb, 1));\n try {\n rawKernel(rt.wasm, 'gather_validity')(col.validityPtr, idxPtr, outLen, tmp);\n // Re-read after tmp alloc (may have grown memory).\n const dst = new Uint8Array(rt.wasm.memory.buffer, vp, vb);\n const src = new Uint8Array(rt.wasm.memory.buffer, tmp, vb);\n for (let b = 0; b < vb; b++) dst[b] = dst[b]! & src[b]!;\n } finally {\n rt.ctx.mod.free(tmp);\n }\n }\n return vp;\n}\n\n// Actual gather kernel token: bool is stored as u8, so gather_u8 not gather_bool.\n// ponytail: only exception; all other wasm tokens map directly to DTYPES[d].wasm.\nconst GATHER_TOKEN: Partial<Record<string, string>> = { bool: 'u8' };\n\n/**\n * Fast wasm-based column gather for join output.\n *\n * Numeric/bool/i64/date32/timestamp: wasm `gather_*` kernel; no JS boxing.\n * utf8: wasm `gather_i32` for dict indices + byte-level dict clone; no string decode.\n *\n * @param idxPtr Wasm ptr to i32[outLen] source indices (no -1; caller sanitises).\n * @param nullMask Arrow-LSB forced-null bitmap for left-join right-side; null = no forced nulls.\n */\nfunction gatherWasm(rt: DfRuntime, col: Column, idxPtr: number, outLen: number, nullMask: Uint8Array | null): Column {\n const { ctx } = rt;\n\n if (col.dtype === 'utf8') {\n const outIdxPtr = ctx.mod.alloc(Math.max(outLen * 4, 1));\n if (outLen > 0) rawKernel(rt.wasm, 'gather_i32')(col.dataPtr, idxPtr, outLen, outIdxPtr);\n const dict = cloneDictBytes(rt, col.dict!);\n return makeRootCol('utf8', outLen, outIdxPtr, buildGatherValidity(rt, col, idxPtr, outLen, nullMask), dict);\n }\n\n const info = DTYPES[col.dtype];\n const tok = GATHER_TOKEN[info.wasm] ?? info.wasm;\n const outDataPtr = ctx.mod.alloc(Math.max(outLen * info.size, 1));\n if (outLen > 0) rawKernel(rt.wasm, `gather_${tok}`)(col.dataPtr, idxPtr, outLen, outDataPtr);\n return makeRootCol(col.dtype, outLen, outDataPtr, buildGatherValidity(rt, col, idxPtr, outLen, nullMask), null);\n}\n\n// Keep gatherJS as a fallback for any edge case or for testing.\nfunction gatherJS(rt: DfRuntime, col: Column, idx: Int32Array): Column {\n const { ctx } = rt;\n const all = columnToArray(ctx, col);\n const out = new Array<Cell>(idx.length);\n for (let k = 0; k < idx.length; k++) {\n const i = idx[k]!;\n out[k] = i < 0 ? null : all[i]!;\n }\n return createColumn(ctx, col.dtype, out as unknown as ColumnInput);\n}\nvoid gatherJS; // suppress unused warning — kept as reference/fallback\n\n/**\n * Sentinel token for pre-computed i64[len] row hashes (ABI §12 utf8 path).\n * Used in `combinedHash` to distinguish pre-hashed buffers from raw column data.\n */\nconst TOK_I64_DIRECT = 'i64_direct' as const;\n\ninterface PreparedKey {\n readonly leftPtr: number;\n readonly rightPtr: number;\n /** Dtype token for `hash_${tok}`, or `TOK_I64_DIRECT` for pre-hashed i64[len]. */\n readonly tok: string;\n free(): void;\n}\n\nfunction prepareKey(\n rt: DfRuntime,\n lCol: Column,\n rCol: Column,\n lLen: number,\n rLen: number,\n): PreparedKey {\n if (lCol.dtype === 'utf8') {\n // Unification-free utf8 path (ABI §12):\n // hash_utf8_dict(dict) → i64[dict_count] per side (raw UTF-8 byte hashing)\n // gather_i64(dictHashes, indices, len) → i64[len] per side (expand to row level)\n // Equal strings produce equal hashes regardless of their slot position in\n // each side's dictionary, so no cross-dictionary remapping is needed.\n const leftPtr = hashUtf8RowHashes(rt, lCol, lLen);\n const rightPtr = hashUtf8RowHashes(rt, rCol, rLen);\n return {\n leftPtr,\n rightPtr,\n tok: TOK_I64_DIRECT,\n free() {\n freePtr(rt, leftPtr, true);\n freePtr(rt, rightPtr, true);\n },\n };\n }\n if (lCol.dtype === 'bool') {\n const leftPtr = widenBool(rt, lCol, lLen);\n const rightPtr = widenBool(rt, rCol, rLen);\n return {\n leftPtr,\n rightPtr,\n tok: 'i32',\n free() {\n freePtr(rt, leftPtr, true);\n freePtr(rt, rightPtr, true);\n },\n };\n }\n return { leftPtr: lCol.dataPtr, rightPtr: rCol.dataPtr, tok: DTYPES[lCol.dtype].wasm, free() {} };\n}\n\n/**\n * Hash the UTF-8 bytes of a utf8 column's dictionary once, then gather per-row\n * hashes via `gather_i64`. Returns a caller-owned pointer to `i64[len]`.\n *\n * Steps (ABI §12):\n * 1. Alloc `i64[dictCount]`; call `hash_utf8_dict` to hash raw bytes per slot.\n * 2. Alloc `i64[len]`; call `gather_i64(dictHashes, col.dataPtr, len)` to expand.\n * 3. Free the temporary dict-hash buffer.\n * 4. Return the row-hash buffer (caller frees via `prepareKey.free()`).\n *\n * Null rows have their validity handled by the join kernel's `l_vp`/`r_vp` bitmaps;\n * their gathered hash value is immaterial.\n */\nfunction hashUtf8RowHashes(rt: DfRuntime, col: Column, len: number): number {\n const { ctx, wasm } = rt;\n const dict = col.dict!;\n const dictCount = dict.count;\n\n // Allocate i64[dictCount] for per-slot dict hashes.\n const dictHashPtr = ctx.mod.alloc(Math.max(dictCount * 8, 1));\n try {\n // hash_utf8_dict(offsets_ptr, bytes_ptr, dict_count, out_hash_ptr)\n rawKernel(wasm, 'hash_utf8_dict')(dict.offsetsPtr, dict.bytesPtr, dictCount, dictHashPtr);\n\n // Allocate i64[len] for per-row hashes.\n const rowHashPtr = ctx.mod.alloc(Math.max(len * 8, 1));\n if (dictCount === 0 || len === 0) {\n // Nothing to gather; zero-init is fine (null rows excluded by validity anyway).\n return rowHashPtr;\n }\n // gather_i64(data: i64[], idx: i32[], idx_len, out: i64[])\n // data = dict hashes, idx = column indices (i32[len]), out = row hashes\n rawKernel(wasm, 'gather_i64')(dictHashPtr, col.dataPtr, len, rowHashPtr);\n return rowHashPtr;\n } finally {\n // Free the temporary dict-hash scratch; no viewOf was taken on it.\n ctx.mod.free(dictHashPtr);\n }\n}\n\nfunction widenBool(rt: DfRuntime, col: Column, len: number): number {\n const { ctx } = rt;\n const outPtr = ctx.mod.alloc(Math.max(len * 4, 1));\n const src = ctx.viewOf({ ptr: col.dataPtr, length: len, dtype: 'bool' }) as Uint8Array;\n const dst = ctx.viewOf({ ptr: outPtr, length: len, dtype: 'i32' }) as Int32Array;\n for (let i = 0; i < len; i++) dst[i] = src[i]!;\n return outPtr;\n}\n\nfunction combinedHash(rt: DfRuntime, inputs: { ptr: number; tok: string }[], len: number): number {\n const { ctx, wasm } = rt;\n // Allocate the accumulator hash buffer i64[len]. This alloc may grow WASM memory;\n // all TypedArray views taken below use memory.buffer AFTER this call.\n const hashPtr = ctx.mod.alloc(Math.max(len * 8, 1));\n const byteLen = len * 8;\n\n for (let k = 0; k < inputs.length; k++) {\n const inp = inputs[k]!;\n if (inp.tok === TOK_I64_DIRECT) {\n // Pre-computed i64[len] row hashes (utf8 unification-free path, ABI §12).\n if (k === 0) {\n // Copy pre-computed hashes into the accumulator. Both pointers are valid in\n // the current memory.buffer (all allocs are done; kernels never grow memory).\n if (byteLen > 0) {\n const buf = wasm.memory.buffer;\n new Uint8Array(buf, hashPtr, byteLen).set(new Uint8Array(buf, inp.ptr, byteLen));\n }\n } else {\n // Multi-key: combine pre-computed hashes into the accumulator in-place.\n rawKernel(wasm, 'hash_combine')(hashPtr, inp.ptr, len);\n }\n } else if (k === 0) {\n rawKernel(wasm, `hash_${inp.tok}`)(inp.ptr, 0, hashPtr, len);\n } else {\n const tmp = ctx.mod.alloc(Math.max(len * 8, 1));\n try {\n rawKernel(wasm, `hash_${inp.tok}`)(inp.ptr, 0, tmp, len);\n rawKernel(wasm, 'hash_combine')(hashPtr, tmp, len);\n } finally {\n ctx.viewOf.forget({ ptr: tmp, length: len, dtype: 'u8' });\n ctx.mod.free(tmp);\n }\n }\n }\n return hashPtr;\n}\n\nfunction combinedValidity(rt: DfRuntime, cols: Column[], len: number): { ptr: number; owns: boolean } {\n const { ctx } = rt;\n const nullable = cols.filter((c) => c.validityPtr !== 0);\n if (nullable.length === 0) return { ptr: 0, owns: false };\n const vbytes = validityBytes(len);\n const outPtr = ctx.mod.alloc(Math.max(vbytes, 1));\n const dst = ctx.viewOf({ ptr: outPtr, length: Math.max(vbytes, 1), dtype: 'u8' }) as Uint8Array;\n dst.fill(0);\n const srcs = nullable.map((c) => ({\n view: ctx.viewOf({\n ptr: c.validityPtr,\n length: validityBytes(c.validityBitOffset + len),\n dtype: 'u8',\n }) as Uint8Array,\n bitOff: c.validityBitOffset,\n }));\n for (let i = 0; i < len; i++) {\n let ok = true;\n for (const s of srcs) {\n if (!getBit(s.view, s.bitOff + i)) { ok = false; break; }\n }\n if (ok) setBit(dst, i);\n }\n return { ptr: outPtr, owns: true };\n}\n\nfunction freePtr(rt: DfRuntime, ptr: number, owns: boolean): void {\n if (owns && ptr !== 0) {\n rt.ctx.viewOf.forget({ ptr, length: 1, dtype: 'u8' });\n rt.ctx.mod.free(ptr);\n }\n}\n","/** Aligned table pretty-printer (spec §4): name header, dtype sub-header, head/tail rows with\n * an `…` gap, and a [rows × cols] footer. Numeric right-aligned; nulls render as `null`. */\n\nimport type { Cell } from '../memory/column.js';\nimport type { DType } from '../memory/dtype.js';\n\nexport type Align = 'left' | 'right';\n\nexport const ELLIPSIS = '…';\n\nexport function formatCell(cell: Cell, dtype: DType): string {\n if (cell === null) return 'null';\n if (typeof cell === 'boolean') return cell ? 'true' : 'false';\n if (typeof cell === 'string') return cell.length > 24 ? `${cell.slice(0, 23)}${ELLIPSIS}` : cell;\n if (dtype === 'date32' && typeof cell === 'number') return new Date(cell * 86_400_000).toISOString().slice(0, 10);\n if (typeof cell === 'bigint') return dtype === 'timestamp' ? new Date(Number(cell)).toISOString() : String(cell); // no 'n' suffix per spec\n\n if (Number.isNaN(cell)) return 'NaN';\n if (cell === Infinity) return 'inf';\n if (cell === -Infinity) return '-inf';\n if (Number.isInteger(cell)) return String(cell);\n if (dtype === 'f32' || dtype === 'f64') {\n const p = (cell as number).toPrecision(6);\n return p.includes('.') && !p.includes('e') ? p.replace(/0+$/, '').replace(/\\.$/, '') : p;\n }\n return String(cell);\n}\n\n\nexport function alignFor(dtype: DType): Align {\n return dtype === 'utf8' || dtype === 'bool' ? 'left' : 'right';\n}\n\nfunction pad(s: string, width: number, align: Align): string {\n const gap = width - s.length;\n if (gap <= 0) return s;\n return align === 'right' ? ' '.repeat(gap) + s : s + ' '.repeat(gap);\n}\n\nexport function formatTable(\n names: readonly string[],\n dtypes: readonly string[],\n bodyRows: readonly string[][],\n aligns: readonly Align[],\n footer: string,\n): string {\n const cols = names.length;\n const widths = new Array<number>(cols);\n for (let c = 0; c < cols; c++) {\n let w = Math.max(names[c]!.length, dtypes[c]!.length);\n for (const row of bodyRows) w = Math.max(w, row[c]!.length);\n widths[c] = w;\n }\n\n const line = (cells: readonly string[]): string =>\n cells.map((s, c) => pad(s, widths[c]!, aligns[c]!)).join(' ');\n\n const sep = widths.map((w) => '─'.repeat(w)).join(' ');\n const out: string[] = [];\n out.push(line(names));\n out.push(line(dtypes));\n out.push(sep);\n for (const row of bodyRows) out.push(line(row));\n if (footer) out.push(footer);\n return out.join('\\n');\n}\n","/**\n * DataFrame — the public columnar frame (spec §4). Every op returns a NEW frame; buffers are\n * shared zero-copy where no data changes (select/drop/untouched withColumn, head/tail/slice)\n * and reference-counted ({@link OwnedColumn}) so `dispose()` is order-independent. Expression\n * ops (filter/withColumn) run the P3.1 compiler (fast path); filterFn/mapFn are the ADR-003\n * slow path. Use `scope(fn)` to dispose a batch of intermediates.\n */\n\nimport type { LoadOptions } from '../memory/loader.js';\nimport type { MemoryContext } from '../memory/context.js';\nimport { type DType } from '../memory/dtype.js';\nimport {\n createColumn,\n columnToArray,\n sliceColumn,\n type Cell,\n type Column,\n type ColumnInput,\n} from '../memory/column.js';\nimport {\n Expr,\n compile,\n compileFilter,\n type FrameView,\n type KernelWasm,\n} from '../expr/index.js';\nimport { defaultRuntime, type DfRuntime } from './runtime.js';\nimport { OwnedColumn } from './owned.js';\nimport { inferDType } from './infer.js';\nimport { Series } from './series.js';\nimport { gatherColumn } from './gather.js';\nimport { sortPerm } from './sort.js';\nimport { makeRowCursor, type Row } from './rowproxy.js';\nimport { GroupBy, type GroupBySource, type NamedColumn } from './groupby.js';\nimport { joinFrames, type JoinOptions } from './join.js';\nimport { FrameError, unknownColumn } from './errors.js';\nimport { formatCell, formatTable, alignFor, ELLIPSIS, type Align } from './printer.js';\n\ninterface Entry {\n readonly name: string;\n readonly col: Column;\n readonly owner: OwnedColumn;\n}\n\nexport interface FrameOptions {\n\n readonly dtypes?: Readonly<Record<string, DType>>;\n\n readonly runtime?: DfRuntime;\n\n /**\n * IANA timezone strings for `timestamp` columns (ADR-010 §10 tz metadata).\n * Keys are column names; values are IANA tz strings (e.g. `\"America/New_York\"`).\n * Applied only to columns whose dtype is `'timestamp'`; ignored for other dtypes.\n * Used by Arrow/CSV IO layers to propagate tz metadata from the source format.\n */\n readonly tzs?: Readonly<Record<string, string>>;\n}\n\nexport interface SortOptions {\n\n readonly descending?: boolean | readonly boolean[];\n}\n\nexport interface WithColumnOptions {\n\n readonly dtype?: DType;\n}\n\nconst NUMERIC = new Set<DType>(['f64', 'f32', 'i32', 'u32', 'i64']);\n\nexport class DataFrame implements FrameView, GroupBySource {\n\n readonly length: number;\n private readonly _rt: DfRuntime;\n private readonly entries: Entry[];\n private readonly byName: Map<string, Entry>;\n private disposed = false;\n\n private constructor(rt: DfRuntime, entries: Entry[], length: number) {\n this._rt = rt;\n this.entries = entries;\n this.length = length;\n this.byName = new Map(entries.map((e) => [e.name, e]));\n }\n\n get ctx(): MemoryContext {\n return this._rt.ctx;\n }\n get wasm(): KernelWasm {\n return this._rt.wasm;\n }\n get rt(): DfRuntime {\n return this._rt;\n }\n getColumn(name: string): Column | undefined {\n return this.byName.get(name)?.col;\n }\n dtypeOf(name: string): DType | undefined {\n return this.byName.get(name)?.col.dtype;\n }\n columnNames(): readonly string[] {\n return this.entries.map((e) => e.name);\n }\n\n buildResult(named: NamedColumn[]): DataFrame {\n const length = named.length > 0 ? named[0]!.col.length : this.length;\n return DataFrame.fromRoots(this._rt, named, length);\n }\n\n static fromColumns(cols: Readonly<Record<string, ColumnInput>>, opts: FrameOptions = {}): DataFrame {\n const rt = opts.runtime ?? defaultRuntime();\n const named: NamedColumn[] = [];\n let length = -1;\n for (const [name, input] of Object.entries(cols)) {\n const dtype = opts.dtypes?.[name] ?? inferDType(input);\n const tz = dtype === 'timestamp' ? opts.tzs?.[name] : undefined;\n const col = createColumn(rt.ctx, dtype, input, tz);\n if (length === -1) length = col.length;\n else if (col.length !== length) {\n throw new FrameError(`column '${name}' has length ${col.length}, expected ${length}.`);\n }\n named.push({ name, col });\n }\n return DataFrame.fromRoots(rt, named, length === -1 ? 0 : length);\n }\n\n static fromRecords(\n records: ReadonlyArray<Readonly<Record<string, Cell>>>,\n opts: FrameOptions = {},\n ): DataFrame {\n const rt = opts.runtime ?? defaultRuntime();\n const names: string[] = [];\n const seen = new Set<string>();\n for (const rec of records) {\n for (const k of Object.keys(rec)) {\n if (!seen.has(k)) {\n seen.add(k);\n names.push(k);\n }\n }\n }\n const cols: Record<string, ColumnInput> = {};\n for (const name of names) {\n const values = new Array<Cell>(records.length);\n for (let i = 0; i < records.length; i++) {\n const v = records[i]![name];\n values[i] = v === undefined ? null : v;\n }\n cols[name] = values as ColumnInput;\n }\n return DataFrame.fromColumns(cols, opts);\n }\n\n private static fromRoots(rt: DfRuntime, named: NamedColumn[], length: number): DataFrame {\n const entries = named.map((n) => ({\n name: n.name,\n col: n.col,\n owner: new OwnedColumn(rt.ctx, n.col),\n }));\n return new DataFrame(rt, entries, length);\n }\n\n /**\n * @internal Adopt pre-built wasm Column objects directly into a DataFrame,\n * bypassing the JS-array round-trip of {@link fromColumns}. Used by\n * `fromArrow` for zero-copy column adoption (CP.1 ingest fast path).\n *\n * Every column in `named` must have `owned === true` and correct wasm pointers;\n * ownership transfers to the returned DataFrame (and its OwnedColumn wrappers).\n */\n static _adoptColumns(\n rt: DfRuntime,\n named: ReadonlyArray<{ name: string; col: Column }>,\n length: number,\n ): DataFrame {\n return DataFrame.fromRoots(rt, named as NamedColumn[], length);\n }\n\n get shape(): readonly [number, number] {\n return [this.length, this.entries.length];\n }\n\n get columns(): readonly string[] {\n return this.columnNames();\n }\n\n get dtypes(): Readonly<Record<string, DType>> {\n const out: Record<string, DType> = {};\n for (const e of this.entries) out[e.name] = e.col.dtype;\n return out;\n }\n\n col(name: string): Series {\n const e = this.entryOf(name);\n return new Series(this._rt.ctx, name, e.col);\n }\n\n select(names: readonly string[]): DataFrame {\n return new DataFrame(this._rt, this.shareEntries(names), this.length);\n }\n\n drop(names: readonly string[]): DataFrame {\n const dropSet = new Set(names);\n for (const n of names) if (!this.byName.has(n)) throw unknownColumn(n, this.columnNames());\n const keep = this.entries.filter((e) => !dropSet.has(e.name)).map((e) => e.name);\n return new DataFrame(this._rt, this.shareEntries(keep), this.length);\n }\n\n withColumn(name: string, value: Expr | ColumnInput, opts: WithColumnOptions = {}): DataFrame {\n const col = this.materializeColumn(value, opts);\n const owner = new OwnedColumn(this._rt.ctx, col);\n const replacement: Entry = { name, col, owner };\n\n const next: Entry[] = [];\n let replaced = false;\n for (const e of this.entries) {\n if (e.name === name) {\n next.push(replacement);\n replaced = true;\n } else {\n next.push(this.retainEntry(e));\n }\n }\n if (!replaced) next.push(replacement);\n return new DataFrame(this._rt, next, this.length);\n }\n\n assign(name: string, value: Expr | ColumnInput, opts?: WithColumnOptions): DataFrame {\n return this.withColumn(name, value, opts);\n }\n\n filter(predicate: Expr): DataFrame {\n const sel = compileFilter(predicate, this).execute();\n try {\n const named: NamedColumn[] = this.entries.map((e) => ({\n name: e.name,\n col: sel.compact(e.col),\n }));\n return DataFrame.fromRoots(this._rt, named, sel.count);\n } finally {\n sel.free();\n }\n }\n\n filterFn(fn: (row: Row) => boolean): DataFrame {\n const cursor = makeRowCursor(this._rt.ctx, this.entries);\n const kept: number[] = [];\n for (let i = 0; i < this.length; i++) if (fn(cursor.at(i))) kept.push(i);\n return this.gatherRows(kept);\n }\n\n mapFn<T>(fn: (row: Row) => T): T[] {\n const cursor = makeRowCursor(this._rt.ctx, this.entries);\n const out = new Array<T>(this.length);\n for (let i = 0; i < this.length; i++) out[i] = fn(cursor.at(i));\n return out;\n }\n\n sortValues(by: string | readonly string[], opts: SortOptions = {}): DataFrame {\n const keys = typeof by === 'string' ? [by] : [...by];\n if (keys.length === 0) throw new FrameError('sortValues requires at least one key.');\n const keyCols = keys.map((k) => this.entryOf(k).col);\n const desc = Array.isArray(opts.descending)\n ? keys.map((_, i) => (opts.descending as readonly boolean[])[i] === true)\n : keys.map(() => opts.descending === true);\n\n const perm = sortPerm(this._rt, keyCols, desc);\n try {\n const named: NamedColumn[] = this.entries.map((e) => ({\n name: e.name,\n col: gatherColumn(this._rt, e.col, perm.ptr, perm.len),\n }));\n return DataFrame.fromRoots(this._rt, named, perm.len);\n } finally {\n this._rt.ctx.viewOf.forget({ ptr: perm.ptr, length: perm.len, dtype: 'i32' });\n this._rt.ctx.mod.free(perm.ptr);\n }\n }\n\n groupby(keys: string | readonly string[]): GroupBy {\n const list = typeof keys === 'string' ? [keys] : [...keys];\n if (list.length === 0) throw new FrameError('groupby requires at least one key.');\n return new GroupBy(this, list);\n }\n\n join(other: DataFrame, opts: JoinOptions): DataFrame {\n return joinFrames(this, other, opts);\n }\n\n head(n = 5): DataFrame {\n return this.sliceRange(0, n);\n }\n\n tail(n = 5): DataFrame {\n return this.sliceRange(Math.max(0, this.length - n), this.length);\n }\n\n slice(start: number, end: number = this.length): DataFrame {\n return this.sliceRange(start, end);\n }\n\n private sliceRange(start: number, end: number): DataFrame {\n const s = Math.max(0, Math.min(start, this.length));\n const e = Math.max(s, Math.min(end, this.length));\n const entries = this.entries.map((entry) => ({\n name: entry.name,\n col: sliceColumn(entry.col, s, e),\n owner: entry.owner.retain(),\n }));\n return new DataFrame(this._rt, entries, e - s);\n }\n\n toColumns(): Record<string, Cell[]> {\n const out: Record<string, Cell[]> = {};\n for (const e of this.entries) out[e.name] = columnToArray(this._rt.ctx, e.col);\n return out;\n }\n\n toRecords(): Array<Record<string, Cell>> {\n const cols = this.toColumns();\n const names = this.columnNames();\n const rows = new Array<Record<string, Cell>>(this.length);\n for (let i = 0; i < this.length; i++) {\n const rec: Record<string, Cell> = {};\n for (const name of names) rec[name] = cols[name]![i]!;\n rows[i] = rec;\n }\n return rows;\n }\n\n describe(): DataFrame {\n const stats = ['count', 'mean', 'std', 'min', '25%', '50%', '75%', 'max'];\n const numeric = this.entries.filter((e) => NUMERIC.has(e.col.dtype));\n const cols: Record<string, ColumnInput> = { statistic: stats };\n const dtypes: Record<string, DType> = { statistic: 'utf8' };\n for (const e of numeric) {\n cols[e.name] = describeColumn(columnToArray(this._rt.ctx, e.col));\n dtypes[e.name] = 'f64';\n }\n return DataFrame.fromColumns(cols, { runtime: this._rt, dtypes });\n }\n\n dispose(): void {\n if (this.disposed) return;\n this.disposed = true;\n for (const e of this.entries) e.owner.release();\n }\n\n toString(): string {\n return this.render();\n }\n\n [Symbol.for('nodejs.util.inspect.custom')](): string {\n return this.render();\n }\n\n private entryOf(name: string): Entry {\n const e = this.byName.get(name);\n if (!e) throw unknownColumn(name, this.columnNames());\n return e;\n }\n\n private retainEntry(e: Entry): Entry {\n e.owner.retain();\n return { name: e.name, col: e.col, owner: e.owner };\n }\n\n private shareEntries(names: readonly string[]): Entry[] {\n return names.map((name) => this.retainEntry(this.entryOf(name)));\n }\n\n private materializeColumn(value: Expr | ColumnInput, opts: WithColumnOptions): Column {\n if (value instanceof Expr) {\n const res = compile(value, this).execute();\n if (res.kind === 'column' && res.column) return res.column;\n const s = res.scalar!;\n const filled = new Array<Cell>(this.length).fill(s.value);\n return createColumn(this._rt.ctx, s.dtype, filled as ColumnInput);\n }\n const dtype = opts.dtype ?? inferDType(value);\n if (value.length !== this.length) {\n throw new FrameError(\n `withColumn value has length ${value.length}, expected ${this.length}.`,\n );\n }\n return createColumn(this._rt.ctx, dtype, value);\n }\n\n private gatherRows(indices: number[]): DataFrame {\n const { ctx } = this._rt;\n const n = indices.length;\n const idxPtr = ctx.mod.alloc(Math.max(n * 4, 1));\n try {\n const view = ctx.viewOf({ ptr: idxPtr, length: n, dtype: 'i32' }) as Int32Array;\n for (let k = 0; k < n; k++) view[k] = indices[k]!;\n const named: NamedColumn[] = this.entries.map((e) => ({\n name: e.name,\n col: gatherColumn(this._rt, e.col, idxPtr, n),\n }));\n return DataFrame.fromRoots(this._rt, named, n);\n } finally {\n ctx.viewOf.forget({ ptr: idxPtr, length: n, dtype: 'i32' });\n ctx.mod.free(idxPtr);\n }\n }\n\n private render(): string {\n const names = this.columnNames();\n if (names.length === 0) return `Empty DataFrame [${this.length} rows × 0 columns]`;\n const dtypes = this.entries.map((e) => e.col.dtype);\n const aligns: Align[] = dtypes.map(alignFor);\n\n const HEAD = 5;\n const TAIL = 5;\n const bodyRows: string[][] = [];\n const truncated = this.length > HEAD + TAIL;\n const emit = (start: number, end: number): void => {\n const slices = this.entries.map((e) =>\n columnToArray(this._rt.ctx, sliceColumn(e.col, start, end)),\n );\n for (let r = 0; r < end - start; r++) {\n bodyRows.push(slices.map((cells, c) => formatCell(cells[r]!, dtypes[c]!)));\n }\n };\n if (truncated) {\n emit(0, HEAD);\n bodyRows.push(names.map(() => ELLIPSIS));\n emit(this.length - TAIL, this.length);\n } else {\n emit(0, this.length);\n }\n\n const footer = `[${this.length} rows × ${names.length} columns]`;\n return formatTable(names, dtypes, bodyRows, aligns, footer);\n }\n}\n\nexport function scope<T>(fn: (track: <F extends DataFrame>(df: F) => F) => T): T {\n const frames: DataFrame[] = [];\n const track = <F extends DataFrame>(df: F): F => {\n frames.push(df);\n return df;\n };\n try {\n return fn(track);\n } finally {\n for (const df of frames) df.dispose();\n }\n}\n\nfunction describeColumn(cells: Cell[]): (number | null)[] {\n const finite: number[] = [];\n for (const v of cells) {\n if (v === null) continue;\n // i64 columns: convert bigint to number (may lose precision for |x| > 2^53)\n const n = typeof v === 'bigint' ? Number(v) : (v as number);\n if (Number.isFinite(n)) finite.push(n);\n }\n const count = finite.length;\n if (count === 0) return [0, null, null, null, null, null, null, null];\n const sorted = finite.slice().sort((a, b) => a - b);\n const sum = finite.reduce((s, x) => s + x, 0);\n const mean = sum / count;\n const std =\n count >= 2\n ? Math.sqrt(finite.reduce((s, x) => s + (x - mean) * (x - mean), 0) / (count - 1))\n : null;\n const q = (p: number): number => {\n if (sorted.length === 1) return sorted[0]!;\n const idx = p * (sorted.length - 1);\n const lo = Math.floor(idx);\n const hi = Math.ceil(idx);\n const frac = idx - lo;\n return sorted[lo]! + (sorted[hi]! - sorted[lo]!) * frac;\n };\n return [count, mean, std, sorted[0]!, q(0.25), q(0.5), q(0.75), sorted[sorted.length - 1]!];\n}\n","/**\n * RFC-4180 CSV parser with typed column inference.\n *\n * Key features:\n * - Quoted fields, escaped quotes (\"\"), embedded newlines and delimiters.\n * - CRLF and bare LF line endings; lone CR treated as data.\n * - Streaming-friendly internal design: `ChunkParser` is a stateful, chunk-fed\n * parser (feed(s)/finish()). `fromCSV` drives it synchronously over the full text.\n * ReadableStream adapter is a v2 nice-to-have (see ponytail note below).\n *\n * Type inference ladder (applied column-by-column over a sample of up to\n * `INFER_ROWS` rows after null-value stripping):\n *\n * 1. i32 — integer in [-(2^31), 2^31-1], no decimal point, no exponent.\n * 2. i64 — integer text exceeding Number.MAX_SAFE_INTEGER (|x| > 2^53-1, per ADR-009).\n * Promotes when any non-null cell is a valid strict-integer string whose\n * absolute value is above 9_007_199_254_740_991 (2^53−1) but within i64 range.\n * Once promoted, the column stays i64 even if later cells are in safe range.\n * Cells whose BigInt value overflows i64 → utf8 fallback.\n * 3. f64 — any string parseable by `Number()` that is finite (or ±Infinity),\n * i.e. `!isNaN(n)` after trimming.\n * 4. bool — case-insensitive \"true\" / \"false\".\n * 5. utf8 — fallback.\n *\n * Explicit dtype overrides (`dtypes` option):\n * - `'i64'` — parse via BigInt(text); throws on non-integer strings.\n * - `'date32'` — parse via strict 'yyyy-MM-dd'; throws on invalid format.\n * - `'timestamp'` — parse via strict ISO-8601 with 'Z' or explicit UTC offset;\n * throws on ambiguous local-time strings (no silent tz guessing).\n *\n * Null values: the `nullValues` option (default `['', 'null', 'NA']`) is\n * checked BEFORE inference. A null-value cell becomes `null` in any dtype column.\n *\n * v2 nice-to-have (not shipped): ReadableStream adapter wrapping ChunkParser.\n * // ponytail: fromCSVStream(stream, opts) → v2 when ReadableStream usage is confirmed\n */\n\nimport { DataFrame, type FrameOptions } from '../frame/dataframe.js';\nimport type { DType } from '../memory/dtype.js';\nimport type { Cell } from '../memory/column.js';\nimport type { DfRuntime } from '../frame/runtime.js';\nimport { civilToDays } from '../temporal/civil.js';\n\n// ---------------------------------------------------------------------------\n// Options\n// ---------------------------------------------------------------------------\n\nexport interface FromCsvOptions {\n /** Column delimiter (default: ','). */\n readonly delimiter?: string;\n /** If true (default), treat first row as column headers. */\n readonly header?: boolean;\n /**\n * Override column names (used when header=false, or to rename columns).\n * When header=true, these override the parsed header names.\n */\n readonly columns?: readonly string[];\n /** Force specific dtypes (column name → dtype). Skips inference for those columns. */\n readonly dtypes?: Readonly<Record<string, DType>>;\n /**\n * Values treated as null (case-sensitive). Default: `['', 'null', 'NA']`.\n * An empty string means the empty field is null (the default for CSV).\n */\n readonly nullValues?: readonly string[];\n /** Skip this many rows from the top (before header if present). */\n readonly skipRows?: number;\n /** Maximum number of data rows to read (not counting header or skipped rows). */\n readonly maxRows?: number;\n /** Runtime to use. If omitted, uses the default runtime. */\n readonly runtime?: DfRuntime;\n}\n\nconst DEFAULT_NULL_VALUES = ['', 'null', 'NA'];\nconst INFER_ROWS = 100; // sample size for type inference\n\n// ---------------------------------------------------------------------------\n// RFC-4180 chunk-fed parser\n// ---------------------------------------------------------------------------\n\n/**\n * Stateful RFC-4180 CSV parser.\n * Feed text chunks with `feed(s)` and call `finish()` to flush the last row.\n * Each completed row is passed to the `onRow` callback.\n *\n * Design: simple state machine over a single `remaining` string. Performance is\n * not critical here (CSV ingestion is I/O-bound); correctness is.\n */\nexport class ChunkParser {\n private buf = ''; // unparsed bytes from previous chunk(s)\n private row: string[] = [];\n private field = '';\n private inQuote = false;\n private readonly delim: string;\n private readonly onRow: (row: string[]) => void;\n\n constructor(delimiter: string, onRow: (row: string[]) => void) {\n this.delim = delimiter;\n this.onRow = onRow;\n }\n\n feed(chunk: string): void {\n this.buf += chunk;\n this.parse(false);\n }\n\n finish(): void {\n this.parse(true);\n }\n\n private parse(eof: boolean): void {\n const d = this.delim;\n let i = 0;\n const s = this.buf;\n const len = s.length;\n\n while (i < len) {\n const ch = s[i]!;\n\n if (this.inQuote) {\n if (ch === '\"') {\n // Peek next character\n if (i + 1 < len) {\n if (s[i + 1] === '\"') {\n // Escaped quote — append one quote and advance past both\n this.field += '\"';\n i += 2;\n } else {\n // End of quoted field\n this.inQuote = false;\n i++;\n }\n } else if (eof) {\n // End of input while in quote — close it (malformed but tolerate)\n this.inQuote = false;\n i++;\n } else {\n // Need more data to decide if this is \"\" or end-of-quote\n break;\n }\n } else {\n this.field += ch;\n i++;\n }\n } else {\n if (ch === '\"') {\n this.inQuote = true;\n i++;\n } else if (s.startsWith(d, i)) {\n // Field separator\n this.row.push(this.field);\n this.field = '';\n i += d.length;\n } else if (ch === '\\r') {\n if (i + 1 < len) {\n if (s[i + 1] === '\\n') {\n // CRLF\n this.emitRow();\n i += 2;\n } else {\n // Lone CR — treat as data (not a standard line ending)\n this.field += ch;\n i++;\n }\n } else if (eof) {\n // Lone CR at end of input\n this.emitRow();\n i++;\n } else {\n // Can't decide — need more data\n break;\n }\n } else if (ch === '\\n') {\n this.emitRow();\n i++;\n } else {\n this.field += ch;\n i++;\n }\n }\n }\n\n this.buf = s.slice(i); // Keep unparsed remainder for next chunk\n\n if (eof && (this.row.length > 0 || this.field.length > 0)) {\n if (this.inQuote) {\n throw new Error(\n `CSV parse error: unterminated quoted field starting near \"${this.field.slice(0, 40)}\"`,\n );\n }\n this.emitRow();\n }\n }\n\n private emitRow(): void {\n this.row.push(this.field);\n this.field = '';\n this.onRow(this.row);\n this.row = [];\n }\n}\n\n// ---------------------------------------------------------------------------\n// Type inference\n// ---------------------------------------------------------------------------\n\nconst I32_MIN = -(2 ** 31);\nconst I32_MAX = 2 ** 31 - 1;\n\n// i64 inference constants (ADR-009 CSV promotion rule).\nconst I64_MAX_N = 9_223_372_036_854_775_807n;\nconst I64_MIN_N = -9_223_372_036_854_775_808n;\nconst SAFE_MAX_N = 9_007_199_254_740_991n; // Number.MAX_SAFE_INTEGER as BigInt (2^53-1)\n\n/**\n * True if `s` is a strict-integer string (no decimal/exponent, no leading zeros\n * except '0' itself, optional leading minus). Used by both i32 and i64 checkers.\n */\nfunction isStrictInt(s: string): boolean {\n if (s.length === 0) return false;\n let i = 0;\n if (s[0] === '-') i = 1;\n if (i === s.length) return false; // bare '-'\n if (s.length - i > 1 && s[i] === '0') return false; // leading zeros\n for (; i < s.length; i++) {\n const c = s.charCodeAt(i);\n if (c < 48 || c > 57) return false;\n }\n return true;\n}\n\nfunction isI32(s: string): boolean {\n if (!isStrictInt(s)) return false;\n const n = Number(s);\n return n >= I32_MIN && n <= I32_MAX && Number.isInteger(n);\n}\n\n/**\n * True if `s` is a strict-integer string whose absolute value exceeds\n * Number.MAX_SAFE_INTEGER (2^53-1) but fits within i64 range.\n * These values MUST be represented as BigInt — they cannot be safely stored as JS numbers.\n * Encountering such a value in the sample triggers i64 column promotion (ADR-009).\n */\nfunction isI64Overflow(s: string): boolean {\n if (!isStrictInt(s)) return false;\n try {\n const v = BigInt(s);\n const abs = v < 0n ? -v : v;\n return abs > SAFE_MAX_N && v >= I64_MIN_N && v <= I64_MAX_N;\n } catch {\n return false;\n }\n}\n\n/** True if `s` is a valid i64 decimal integer string (any value in i64 range). */\nfunction isAnyI64(s: string): boolean {\n if (!isStrictInt(s)) return false;\n try {\n const v = BigInt(s);\n return v >= I64_MIN_N && v <= I64_MAX_N;\n } catch {\n return false;\n }\n}\n\nfunction isF64(s: string): boolean {\n if (s.length === 0) return false;\n // Whitespace-only strings coerce to 0 via Number(), but they are not numeric\n // values — they should fall through to utf8 inference.\n if (s.trim().length === 0) return false;\n const n = Number(s);\n return !isNaN(n);\n}\n\nfunction isBool(s: string): boolean {\n const l = s.toLowerCase();\n return l === 'true' || l === 'false';\n}\n\ntype InferState = 'i32' | 'i64' | 'f64' | 'bool' | 'utf8';\n\n/**\n * Promote the inference state given a new non-null cell value.\n *\n * Inference ladder (ADR-009 v2 extension):\n * i32 → i64 when a strict-integer string exceeds Number.MAX_SAFE_INTEGER\n * i32 → f64 when a float-parseable string is seen\n * i64 → f64 when a float (non-integer) string is seen while in i64 state\n * * → bool when only \"true\"/\"false\" strings appear\n * * → utf8 fallback\n */\nfunction promote(state: InferState, cell: string): InferState {\n if (state === 'utf8') return 'utf8';\n if (state === 'i32') {\n if (isI32(cell)) return 'i32';\n if (isI64Overflow(cell)) return 'i64'; // big integer promotes to i64 (ADR-009)\n if (isF64(cell)) return 'f64';\n if (isBool(cell)) return 'bool';\n return 'utf8';\n }\n if (state === 'i64') {\n // In i64 state: accept any valid i64 integer (small or large).\n if (isAnyI64(cell)) return 'i64';\n // A non-integer float demotes to f64 (precision may be lost for large i64 values).\n if (isF64(cell)) return 'f64';\n if (isBool(cell)) return 'bool';\n return 'utf8';\n }\n if (state === 'f64') {\n if (isF64(cell)) return 'f64';\n if (isBool(cell)) return 'bool';\n return 'utf8';\n }\n // state === 'bool'\n if (isBool(cell)) return 'bool';\n if (isI32(cell)) return 'utf8'; // can't demote bool→i32 (ambiguous)\n return 'utf8';\n}\n\nfunction inferDtypeFromSample(sample: string[], nullSet: Set<string>): DType {\n let state: InferState = 'i32';\n let seenNonNull = false;\n for (const cell of sample) {\n if (nullSet.has(cell)) continue;\n seenNonNull = true;\n state = promote(state, cell);\n if (state === 'utf8') return 'utf8'; // can't get worse\n }\n if (!seenNonNull) return 'utf8'; // all-null column → utf8 (safe default)\n return state as DType;\n}\n\n// ---------------------------------------------------------------------------\n// Explicit dtype parse helpers (ADR-009/010: i64, date32, timestamp)\n// ---------------------------------------------------------------------------\n\n/**\n * Parse a cell as i64 by converting the decimal string to BigInt (ADR-009).\n * Throws a descriptive error on non-integer strings (e.g. \"3.14\", \"hello\").\n */\nfunction parseCellI64(cell: string): bigint {\n try {\n return BigInt(cell);\n } catch {\n throw new Error(\n `CSV parse error: cannot parse '${cell}' as i64 — expected an integer decimal string.`,\n );\n }\n}\n\n// Strict 'yyyy-MM-dd' regex (4+ digit year, two-digit month/day). No time, no tz.\nconst DATE32_RE = /^(-?\\d{4,})-(\\d{2})-(\\d{2})$/;\n\n/**\n * Parse a cell as date32 (days since 1970-01-01 UTC) from strict 'yyyy-MM-dd' format (ADR-010).\n * Reuses `civilToDays` from src/temporal/civil.ts for the calendar math.\n * Throws a descriptive error for invalid format or out-of-range month/day values.\n */\nfunction parseCellDate32(cell: string): number {\n const m = DATE32_RE.exec(cell);\n if (!m) {\n throw new Error(\n `CSV parse error: cannot parse '${cell}' as date32 — expected strict 'yyyy-MM-dd' format.`,\n );\n }\n const y = Number(m[1]);\n const mo = Number(m[2]);\n const d = Number(m[3]);\n if (mo < 1 || mo > 12 || d < 1 || d > 31) {\n throw new Error(\n `CSV parse error: invalid date components in '${cell}' (month=${mo}, day=${d}).`,\n );\n }\n return civilToDays(y, mo, d);\n}\n\n// Strict ISO-8601 timestamp requires explicit 'Z' or UTC offset (±HH:MM or ±HHMM).\n// Bare 'yyyy-MM-ddTHH:MM:SS' without tz is ambiguous local-time and is rejected.\nconst HAS_TZ_RE = /Z$|[+-]\\d{2}:?\\d{2}$/;\n\n/**\n * Parse a cell as a timestamp (epoch milliseconds, BigInt) from strict ISO-8601 format (ADR-010).\n * Requires an explicit 'Z' or UTC offset (e.g. '+05:30', '-0700'). Rejects ambiguous\n * local-time strings (no 'Z'/offset) with a helpful error — no silent tz guessing.\n */\nfunction parseCellTimestamp(cell: string): bigint {\n if (!HAS_TZ_RE.test(cell)) {\n throw new Error(\n `CSV parse error: timestamp '${cell}' has no timezone (Z or UTC offset required). ` +\n `Ambiguous local-time strings are rejected to avoid silent tz guessing — ` +\n `use '${cell}Z' for UTC or append an explicit offset like '+00:00'.`,\n );\n }\n const ms = Date.parse(cell);\n if (isNaN(ms)) {\n throw new Error(\n `CSV parse error: cannot parse '${cell}' as ISO-8601 timestamp.`,\n );\n }\n return BigInt(ms);\n}\n\nfunction parseCell(cell: string, dtype: DType, nullSet: Set<string>): Cell {\n if (nullSet.has(cell)) return null;\n switch (dtype) {\n case 'i64':\n return parseCellI64(cell);\n case 'date32':\n return parseCellDate32(cell);\n case 'timestamp':\n return parseCellTimestamp(cell);\n case 'i32':\n case 'u32':\n case 'f64':\n case 'f32':\n return Number(cell);\n case 'bool':\n return cell.toLowerCase() === 'true';\n case 'utf8':\n return cell;\n default:\n return cell;\n }\n}\n\n// ---------------------------------------------------------------------------\n// fromCSV()\n// ---------------------------------------------------------------------------\n\n/**\n * Parse a CSV string into a DataFrame.\n *\n * @param text - Full CSV text (a chunk-fed path for streaming is internal).\n * @param opts - Parsing and inference options.\n *\n * @throws If there are ragged rows (inconsistent column count) or unterminated quotes.\n */\nexport function fromCSV(text: string, opts: FromCsvOptions = {}): DataFrame {\n const delimiter = opts.delimiter ?? ',';\n const hasHeader = opts.header !== false;\n const skipRows = opts.skipRows ?? 0;\n const maxRows = opts.maxRows ?? Infinity;\n const nullSet = new Set<string>(opts.nullValues ?? DEFAULT_NULL_VALUES);\n const forceDtype = opts.dtypes ?? {};\n\n // Collect raw rows\n const rawRows: string[][] = [];\n const parser = new ChunkParser(delimiter, (row) => rawRows.push(row));\n parser.feed(text);\n parser.finish();\n\n const rtOpts = (rt: DfRuntime | undefined): FrameOptions => rt ? { runtime: rt } : {};\n\n if (rawRows.length === 0) {\n // Empty file — return empty DataFrame\n return DataFrame.fromColumns({}, rtOpts(opts.runtime));\n }\n\n // Apply skipRows\n const startIdx = skipRows;\n if (startIdx >= rawRows.length) {\n return DataFrame.fromColumns({}, rtOpts(opts.runtime));\n }\n\n // Extract header\n let colNames: string[];\n let dataStart: number;\n\n if (hasHeader) {\n colNames = rawRows[startIdx]!;\n dataStart = startIdx + 1;\n } else {\n const firstData = rawRows[startIdx]!;\n colNames = firstData.map((_, i) => opts.columns?.[i] ?? `column_${i}`);\n dataStart = startIdx;\n }\n\n // Override names from opts.columns\n if (opts.columns) {\n for (let i = 0; i < opts.columns.length; i++) {\n colNames[i] = opts.columns[i]!;\n }\n }\n\n const numCols = colNames.length;\n\n // Collect data rows (up to maxRows), validate width\n const dataRows = rawRows.slice(dataStart, dataStart + (isFinite(maxRows) ? maxRows : rawRows.length));\n\n for (let r = 0; r < dataRows.length; r++) {\n if (dataRows[r]!.length !== numCols) {\n throw new Error(\n `CSV parse error: row ${dataStart + r + 1} has ${dataRows[r]!.length} fields, ` +\n `expected ${numCols} (columns: ${colNames.join(', ')})`,\n );\n }\n }\n\n if (dataRows.length === 0) {\n const emptyCols: Record<string, Cell[]> = {};\n const emptyDtypes: Record<string, DType> = {};\n for (const name of colNames) {\n emptyCols[name] = [];\n emptyDtypes[name] = forceDtype[name] ?? 'utf8';\n }\n const emptyOpts: FrameOptions = { ...rtOpts(opts.runtime), dtypes: emptyDtypes };\n return DataFrame.fromColumns(emptyCols as Record<string, import('../memory/column.js').ColumnInput>, emptyOpts);\n }\n\n // Infer dtypes using first INFER_ROWS rows\n const sample = dataRows.slice(0, INFER_ROWS);\n const dtypes: Record<string, DType> = {};\n for (let c = 0; c < numCols; c++) {\n const name = colNames[c]!;\n if (forceDtype[name]) {\n dtypes[name] = forceDtype[name];\n } else {\n const colSample = sample.map((row) => row[c]!);\n dtypes[name] = inferDtypeFromSample(colSample, nullSet);\n }\n }\n\n // Parse all cells\n const colData: Record<string, Cell[]> = {};\n for (const name of colNames) colData[name] = new Array(dataRows.length);\n\n for (let r = 0; r < dataRows.length; r++) {\n const row = dataRows[r]!;\n for (let c = 0; c < numCols; c++) {\n const name = colNames[c]!;\n colData[name]![r] = parseCell(row[c]!, dtypes[name]!, nullSet);\n }\n }\n\n const finalOpts: FrameOptions = { ...rtOpts(opts.runtime), dtypes };\n return DataFrame.fromColumns(colData as Record<string, import('../memory/column.js').ColumnInput>, finalOpts);\n}\n","/**\n * JSON I/O thin wrappers.\n *\n * The spec (§4 + §7) asks for fromJSON/toJSON — but DataFrame.fromRecords and\n * df.toRecords() already ARE the JSON path:\n *\n * df.toRecords() → Array<Record<string, Cell>> — serialize with JSON.stringify\n * DataFrame.fromRecords() → DataFrame — parse with JSON.parse first\n *\n * This module exports `fromJSON` and `toJSON` as thin wrappers so callers have a\n * discoverable one-liner, but the parallel implementation is intentionally avoided:\n * these delegates call through to the existing frame-layer implementation (no duplicate\n * column-building code). They add value only in ergonomics, not behavior.\n *\n * fromRecords / toRecords remain the canonical JSON path per the spec.\n */\n\nimport { DataFrame, type FrameOptions } from '../frame/dataframe.js';\nimport type { Cell } from '../memory/column.js';\n\n/**\n * Parse a JSON array-of-records string into a DataFrame.\n * Equivalent to `DataFrame.fromRecords(JSON.parse(json), opts)`.\n *\n * @param json - A JSON string encoding an array of plain objects.\n * @param opts - Forwarded to DataFrame.fromRecords.\n * @throws SyntaxError if `json` is not valid JSON.\n * @throws TypeError if the parsed value is not an array.\n */\nexport function fromJSON(json: string, opts: FrameOptions = {}): DataFrame {\n const records = JSON.parse(json) as unknown;\n if (!Array.isArray(records)) {\n throw new TypeError(\n `fromJSON: expected a JSON array of records, got ${typeof records}`,\n );\n }\n return DataFrame.fromRecords(records as ReadonlyArray<Readonly<Record<string, Cell>>>, opts);\n}\n\n/**\n * Serialize a DataFrame to a compact JSON string (array of record objects).\n * Equivalent to `JSON.stringify(df.toRecords())`.\n *\n * @param df - The DataFrame to serialize.\n * @returns A JSON string. Null cells serialize as JSON `null`.\n */\nexport function toJSON(df: DataFrame): string {\n return JSON.stringify(df.toRecords());\n}\n","/**\n * Minimal FlatBuffers encoder + decoder for Arrow IPC messages.\n *\n * ## FlatBuffers binary layout (little-endian throughout)\n *\n * The builder works RIGHT-TO-LEFT: data is prepended by decrementing `head`.\n * \"posFromEnd\" = `space.length - head` (bytes built so far from the right end).\n * In the FINAL buffer `space.slice(head)`:\n * - Earlier writes → higher posFromStart (further RIGHT) = larger index\n * - Later writes → lower posFromStart (further LEFT) = smaller index\n *\n * Since children are built FIRST (higher posFromStart = further right), and\n * parents LATER (lower posFromStart = further left), forward references from\n * parent fields to child objects are POSITIVE relative offsets.\n *\n * ### Relative forward offsets\n *\n * A 4-byte slot in a parent table/vector containing a relative offset to a\n * child satisfies:\n *\n * relOff = posFromEnd(slot) - posFromEnd(child) (always positive)\n *\n * which the reader converts back via:\n *\n * posFromStart(child) = posFromStart(slot) + relOff\n *\n * ### vtable layout\n *\n * [u16 vtable_size][u16 object_size][u16 field_0_offset][u16 field_1_offset]…\n *\n * `field_N_offset` is the byte distance from the TABLE OBJECT START to field N.\n * The table object itself starts with a 4-byte int32 \"soffset\":\n *\n * soffset = posFromEnd(vtable_start) - posFromEnd(table_start)\n * = posFromStart(table_start) - posFromStart(vtable_start) (positive)\n *\n * The reader finds the vtable as: `vtable_pos = table_pos - soffset`.\n *\n * ### Root object\n *\n * `finish(rootOff)` writes a u32 at position 0 of the final buffer:\n * root_u32 = posFromStart(root_table) = finalBufLen - rootOff\n * where `rootOff` = posFromEnd of the root table at the time `endTable()` returned.\n * The reader uses this u32 directly as an absolute position.\n */\n\n// ---------------------------------------------------------------------------\n// FBBuilder\n// ---------------------------------------------------------------------------\n\nexport class FBBuilder {\n private space: Uint8Array;\n private dv: DataView;\n private head: number;\n\n // Current table state: accumulated field positions (posFromEnd)\n private vtableFields = new Map<number, number>();\n private objectStart = 0;\n\n constructor(initialSize = 512) {\n this.space = new Uint8Array(initialSize);\n this.dv = new DataView(this.space.buffer);\n this.head = initialSize;\n }\n\n /** Bytes written so far (= posFromEnd of the current write head). */\n private offset(): number {\n return this.space.length - this.head;\n }\n\n /** Grow the buffer, preserving existing content at the right end. */\n private grow(neededExtra: number): void {\n const newLen = Math.max(this.space.length * 2, this.space.length + neededExtra);\n const newSpace = new Uint8Array(newLen);\n const dataLen = this.space.length - this.head;\n newSpace.set(this.space.subarray(this.head), newLen - dataLen);\n this.head = newLen - dataLen;\n this.space = newSpace;\n this.dv = new DataView(newSpace.buffer);\n }\n\n /**\n * Ensure `size`-byte alignment + `additionalBytes` available space.\n * Prepends zero-padding as needed.\n */\n private prep(size: number, additionalBytes: number): void {\n const alignSize = ((~(this.offset() + additionalBytes)) + 1) & (size - 1);\n if (this.head < size + alignSize + additionalBytes) {\n this.grow(size + alignSize + additionalBytes);\n }\n for (let i = 0; i < alignSize; i++) this.space[--this.head] = 0;\n }\n\n // -------------------------------------------------------------------------\n // Primitive write methods (each decrements `head`)\n // -------------------------------------------------------------------------\n\n writeU8(v: number): void {\n this.prep(1, 0);\n this.space[--this.head] = v & 0xff;\n }\n\n writeU16(v: number): void {\n this.prep(2, 0);\n this.head -= 2;\n this.dv.setUint16(this.head, v, true);\n }\n\n writeI32(v: number): void {\n this.prep(4, 0);\n this.head -= 4;\n this.dv.setInt32(this.head, v, true);\n }\n\n writeU32(v: number): void {\n this.prep(4, 0);\n this.head -= 4;\n this.dv.setUint32(this.head, v, true);\n }\n\n /** Write int64 as two LE int32s (lo at lower address, hi at higher). */\n writeI64(lo: number, hi = 0): void {\n this.prep(8, 0);\n this.head -= 8;\n this.dv.setInt32(this.head, lo, true);\n this.dv.setInt32(this.head + 4, hi, true);\n }\n\n // -------------------------------------------------------------------------\n // Compound builders (return posFromEnd of the created structure)\n // -------------------------------------------------------------------------\n\n /** FlatBuffers string: u32 length + utf-8 bytes + null terminator. */\n createString(s: string): number {\n const enc = new TextEncoder().encode(s);\n this.prep(4, enc.length + 1);\n this.space[--this.head] = 0; // null terminator\n for (let i = enc.length - 1; i >= 0; i--) this.space[--this.head] = enc[i]!;\n this.writeU32(enc.length);\n return this.offset();\n }\n\n /** FlatBuffers byte vector: u32 length + raw bytes. */\n createByteVector(data: Uint8Array): number {\n this.prep(4, data.length);\n for (let i = data.length - 1; i >= 0; i--) this.space[--this.head] = data[i]!;\n this.writeU32(data.length);\n return this.offset();\n }\n\n /**\n * FlatBuffers offset vector (vector of table/string references).\n * `offsets` are posFromEnd values returned by earlier create calls.\n */\n createOffsetVector(offsets: number[]): number {\n this.prep(4, offsets.length * 4);\n for (let i = offsets.length - 1; i >= 0; i--) {\n // Compute relative forward offset AFTER the upcoming head decrement:\n // posFromEnd(slot) = this.offset() + 4 (after decrement by 4)\n const relOff = this.offset() + 4 - offsets[i]!;\n this.head -= 4;\n this.dv.setUint32(this.head, relOff, true);\n }\n this.writeU32(offsets.length);\n return this.offset();\n }\n\n /**\n * FlatBuffers inline-struct vector (structs have no vtable; data is raw bytes).\n * `data` = serialised structs concatenated, `count` = element count.\n * Written into an 8-byte aligned region (Arrow structs need 8-byte alignment\n * for the embedded int64 fields).\n */\n createStructVector(data: Uint8Array, count: number): number {\n this.prep(8, data.length);\n for (let i = data.length - 1; i >= 0; i--) this.space[--this.head] = data[i]!;\n this.writeU32(count);\n return this.offset();\n }\n\n // -------------------------------------------------------------------------\n // Table builder\n // -------------------------------------------------------------------------\n\n /** Begin a new table. Call `addField*` then `endTable()`. */\n startTable(): void {\n this.vtableFields = new Map();\n this.objectStart = this.offset();\n }\n\n // Scalar field helpers — each skips writing if the value equals its default\n // (FlatBuffers omits default-valued fields to save space).\n\n addFieldBool(idx: number, value: boolean, def = false): void {\n if (value === def) return;\n this.writeU8(value ? 1 : 0);\n this.vtableFields.set(idx, this.offset());\n }\n\n addFieldI8(idx: number, value: number, def = 0): void {\n if (value === def) return;\n this.writeU8(value & 0xff);\n this.vtableFields.set(idx, this.offset());\n }\n\n addFieldI16(idx: number, value: number, def = 0): void {\n if (value === def) return;\n this.writeU16(value);\n this.vtableFields.set(idx, this.offset());\n }\n\n addFieldI32(idx: number, value: number, def = 0): void {\n if (value === def) return;\n this.writeI32(value);\n this.vtableFields.set(idx, this.offset());\n }\n\n addFieldI64(idx: number, lo: number, hi = 0): void {\n if (lo === 0 && hi === 0) return;\n this.writeI64(lo, hi);\n this.vtableFields.set(idx, this.offset());\n }\n\n /**\n * Add an offset field (reference to a child table, vector, or string).\n * `childOff` = posFromEnd returned by a prior create/endTable call.\n *\n * After `head -= 4`, `this.offset()` = posFromEnd(slot).\n * relOff = posFromEnd(slot) - posFromEnd(child) — always positive.\n */\n addFieldOffset(idx: number, childOff: number): void {\n this.prep(4, 0);\n this.head -= 4;\n const relOff = this.offset() - childOff; // posFromEnd(slot) - posFromEnd(child)\n this.dv.setUint32(this.head, relOff, true);\n this.vtableFields.set(idx, this.offset());\n }\n\n /**\n * Finalize a table. Returns posFromEnd of the table (for use as a child\n * reference in a parent table or offset vector).\n */\n endTable(): number {\n if (this.vtableFields.size === 0) {\n // Empty table: just the soffset and a minimal vtable\n }\n const numFields = this.vtableFields.size === 0\n ? 0\n : Math.max(...this.vtableFields.keys()) + 1;\n\n // objectSize = (bytes for soffset) + (bytes for inline fields)\n // = tableOff - objectStart (computed below after writing soffset)\n\n // 1. Write the soffset slot (4 bytes); will be patched to the vtable later\n this.writeI32(0); // placeholder\n const tableOff = this.offset(); // posFromEnd of table start (= soffset field)\n\n // objectSize = tableOff - objectStart (fields + soffset)\n const objectSize = tableOff - this.objectStart;\n\n // 2. Build vtable: vtableSize + objectSize + field offsets\n // Written right-to-left: field[N-1] first, field[0] last, then sizes.\n const vtableSize = 4 + numFields * 2; // u16 sizes (2 each) + N field offsets\n\n for (let i = numFields - 1; i >= 0; i--) {\n const fieldPosFromEnd = this.vtableFields.get(i);\n // Field offset within object = how many bytes from the table start to the field\n // = posFromEnd(table) - posFromEnd(field) (positive; field was written earlier)\n const fieldOff = fieldPosFromEnd !== undefined ? tableOff - fieldPosFromEnd : 0;\n this.writeU16(fieldOff);\n }\n this.writeU16(objectSize);\n this.writeU16(vtableSize);\n\n const vtableOff = this.offset(); // posFromEnd of vtable start\n\n // 3. Patch the soffset:\n // soffset = posFromStart(table) - posFromStart(vtable)\n // = (finalBufLen - tableOff) - (finalBufLen - vtableOff)\n // = vtableOff - tableOff (positive; vtable is to the LEFT)\n const soffset = vtableOff - tableOff;\n // table soffset is at space index: space.length - tableOff\n this.dv.setInt32(this.space.length - tableOff, soffset, true);\n\n return tableOff;\n }\n\n /**\n * Write the final root offset and return the completed FlatBuffers buffer.\n *\n * FlatBuffers root at position 0 = absolute posFromStart of the root table.\n * After prepending 4 bytes (head decremented by 4):\n * finalBufLen = this.offset()\n * posFromStart(root) = finalBufLen - rootOff\n */\n finish(rootOff: number): Uint8Array {\n this.prep(4, 0);\n this.head -= 4;\n // this.offset() is now the final buffer length\n this.dv.setUint32(this.head, this.offset() - rootOff, true);\n return this.space.slice(this.head);\n }\n}\n\n// ---------------------------------------------------------------------------\n// FBTable — reader for a FlatBuffers table\n// ---------------------------------------------------------------------------\n\n/**\n * Read a FlatBuffers table from a DataView at absolute position `pos`.\n *\n * Field access:\n * fieldPos(idx) → absolute position of field data (0 if absent / default)\n *\n * The vtable is located via the soffset at `pos`:\n * vtable_pos = pos - soffset\n * Field values are at `pos + vtable_field_offset`.\n *\n * For offset fields (tables, strings, vectors): the 4 bytes at the field\n * position hold a relative FORWARD offset; the target is at `field_pos + relOff`.\n */\nexport class FBTable {\n constructor(\n private readonly dv: DataView,\n /** Absolute byte position of this table's soffset in `dv`. */\n readonly pos: number,\n ) {}\n\n /** Absolute position of field `idx` in this table, or 0 if absent. */\n fieldPos(idx: number): number {\n const { dv, pos } = this;\n const soffset = dv.getInt32(pos, true);\n const vtPos = pos - soffset;\n const vtSize = dv.getUint16(vtPos, true);\n const vtFieldOff = 4 + idx * 2;\n if (vtFieldOff >= vtSize) return 0;\n const fieldRelOff = dv.getUint16(vtPos + vtFieldOff, true);\n return fieldRelOff === 0 ? 0 : pos + fieldRelOff;\n }\n\n getInt8 (idx: number, def = 0): number { const p = this.fieldPos(idx); return p ? this.dv.getInt8(p) : def; }\n getUint8(idx: number, def = 0): number { const p = this.fieldPos(idx); return p ? this.dv.getUint8(p) : def; }\n getInt16(idx: number, def = 0): number { const p = this.fieldPos(idx); return p ? this.dv.getInt16(p, true) : def; }\n getInt32(idx: number, def = 0): number { const p = this.fieldPos(idx); return p ? this.dv.getInt32(p, true) : def; }\n getBool (idx: number, def = false): boolean { const p = this.fieldPos(idx); return p ? this.dv.getUint8(p) !== 0 : def; }\n\n /** Read int64 as [lo32, hi32]. */\n getInt64(idx: number): [number, number] {\n const p = this.fieldPos(idx);\n if (p === 0) return [0, 0];\n return [this.dv.getInt32(p, true), this.dv.getInt32(p + 4, true)];\n }\n\n /** Read int64 as a JS number (safe for values < 2^53). */\n getInt64Num(idx: number): number {\n const [lo, hi] = this.getInt64(idx);\n return hi * 0x100000000 + (lo >>> 0);\n }\n\n /** Follow an offset field → absolute position of the target. */\n private follow(p: number): number {\n return p + this.dv.getUint32(p, true);\n }\n\n getString(idx: number): string | null {\n const p = this.fieldPos(idx);\n if (p === 0) return null;\n const strPos = this.follow(p);\n const len = this.dv.getUint32(strPos, true);\n return new TextDecoder().decode(new Uint8Array(this.dv.buffer, this.dv.byteOffset + strPos + 4, len));\n }\n\n getTable(idx: number): FBTable | null {\n const p = this.fieldPos(idx);\n if (p === 0) return null;\n return new FBTable(this.dv, this.follow(p));\n }\n\n vectorLen(idx: number): number {\n const p = this.fieldPos(idx);\n if (p === 0) return 0;\n return this.dv.getUint32(this.follow(p), true);\n }\n\n /** Get the nested table at index `i` in an offset-vector field. */\n vectorTable(idx: number, i: number): FBTable {\n const p = this.fieldPos(idx);\n const vecPos = this.follow(p);\n const elemPos = vecPos + 4 + i * 4;\n return new FBTable(this.dv, elemPos + this.dv.getUint32(elemPos, true));\n }\n\n /**\n * Absolute position of the i-th struct element in an inline-struct vector.\n * (Structs are laid out inline — no relative offsets, just raw bytes.)\n */\n structVectorElemPos(idx: number, i: number, elemSize: number): number {\n const p = this.fieldPos(idx);\n if (p === 0) return 0;\n const vecPos = this.follow(p);\n return vecPos + 4 + i * elemSize;\n }\n\n /** Read int32 at an absolute position (for struct fields). */\n i32at(absPos: number): number {\n return this.dv.getInt32(absPos, true);\n }\n\n /** Read int64 as JS number at an absolute position. */\n i64at(absPos: number): number {\n const lo = this.dv.getInt32(absPos, true);\n const hi = this.dv.getInt32(absPos + 4, true);\n return hi * 0x100000000 + (lo >>> 0);\n }\n}\n\n/** Read the root FlatBuffers table from a buffer. */\nexport function fbRoot(buf: Uint8Array): FBTable {\n const dv = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n // Position 0 holds the absolute position of the root table\n const rootPos = dv.getUint32(0, true);\n return new FBTable(dv, rootPos);\n}\n","/**\n * Arrow IPC stream encode/decode for databonk DataFrames (ADR-002, ADR-009, ADR-010).\n *\n * Our layout is Arrow-compatible by design:\n * - Numeric columns: contiguous TypedArray → Arrow primitive buffer (zero-transform).\n * - Validity bitmaps: LSB-first, 1=valid — already Arrow format (zero-transform).\n * - utf8 columns: i32 indices + (i32 offsets + u8 bytes) dict → Arrow Dict<Int32, Utf8>.\n * - bool: u8[n] per-element → bit-pack to Arrow's 1-bit-per-element format (one transform).\n * - i64 → Arrow Int(64, signed); date32 → Arrow Date(DAY); timestamp → Arrow Timestamp(MILLI, tz?).\n *\n * IPC stream per message: [int32 -1] [int32 meta_size] [meta bytes, pad→8B] [body bytes, pad→8B]\n * EOS: [int32 -1] [int32 0]\n *\n * FlatBuffers field-index constants — sourced from the Arrow FlatBuffers IDL:\n * Message: version(0), header_type(1), header(2), bodyLength(3)\n * Schema: endianness(0), fields(1)\n * Field: name(0), nullable(1), type_type(2), type(3), dictionary(4), children(5)\n * RecordBatch: length(0), nodes(1), buffers(2)\n * DictionaryBatch: id(0), data(1), isDelta(2)\n * DictionaryEncoding: id(0), indexType(1), isOrdered(2)\n * Int: bitWidth(0), isSigned(1)\n * FloatingPoint: precision(0)\n * Date: unit(0) — DateUnit: DAY=0, MILLISECOND=1 (FlatBuffers default=1)\n * Timestamp: unit(0) — TimeUnit: SECOND=0, MILLISECOND=1, MICROSECOND=2, NANOSECOND=3;\n * timezone(1) — optional IANA tz string\n *\n * MessageHeader union tags: Schema=1, DictionaryBatch=2, RecordBatch=3\n * Type union tags: Int=2, FloatingPoint=3, Utf8=5, Bool=6, Date=8, Timestamp=10, LargeUtf8=20\n * MetadataVersion V5=4\n * FloatingPoint.Precision: HALF=0, SINGLE=1, DOUBLE=2\n */\n\nimport type { MemoryContext } from '../memory/context.js';\nimport { DTYPES, type DType } from '../memory/dtype.js';\nimport { validityBytes, getBit, setBit } from '../memory/bitmap.js';\nimport { columnToArray, createColumn, type Column, type ColumnInput } from '../memory/column.js';\nimport { writeDictionary, writeDictionaryFromRawBytes } from '../memory/dictionary.js';\nimport { DataFrame, type FrameOptions } from '../frame/dataframe.js';\nimport type { DfRuntime } from '../frame/runtime.js';\nimport { FBBuilder, FBTable, fbRoot } from './fb.js';\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\nconst META_V5 = 4; // MetadataVersion.V5\nconst MH_SCHEMA = 1;\nconst MH_DICT = 2;\nconst MH_RECORD = 3;\nconst TYPE_INT = 2;\nconst TYPE_FLOAT = 3;\nconst TYPE_UTF8 = 5;\nconst TYPE_BOOL = 6;\nconst TYPE_DATE = 8; // Arrow Date type (Date32/Date64)\nconst TYPE_TIMESTAMP = 10; // Arrow Timestamp type\nconst TYPE_LARGE_UTF8 = 20;\nconst PREC_SINGLE = 1;\nconst PREC_DOUBLE = 2;\nconst STRUCT16 = 16; // FieldNode / Buffer are each 16 bytes\n\n// DateUnit (Arrow FlatBuffers IDL): DAY=0, MILLISECOND=1; FlatBuffers default = MILLISECOND (1).\nconst DATE_UNIT_DAY = 0;\nconst DATE_UNIT_MILLI_DEFAULT = 1; // FlatBuffers default for Date.unit — needed to force-write DAY=0\n\n// TimeUnit (Arrow FlatBuffers IDL): SECOND=0(default), MILLISECOND=1, MICROSECOND=2, NANOSECOND=3.\nconst TIME_UNIT_SECOND = 0; // FlatBuffers default for Timestamp.unit\nconst TIME_UNIT_MILLI = 1;\nconst TIME_UNIT_MICRO = 2;\nconst TIME_UNIT_NANO = 3;\n\n// Saturation bounds for SECOND→MILLI rescaling (saturation-to-null on overflow, ADR-010).\n// INT64_MAX = 9_223_372_036_854_775_807n; INT64_MAX / 1000n = 9_223_372_036_854_775n (truncate).\n// INT64_MIN = -9_223_372_036_854_775_808n; INT64_MIN / 1000n = -9_223_372_036_854_775n (truncate toward 0).\nconst SEC_MS_MAX = 9_223_372_036_854_775n; // max safe seconds before ×1000 overflows i64\nconst SEC_MS_MIN = -9_223_372_036_854_775n; // min safe seconds before ×1000 underflows i64\n\n// ---------------------------------------------------------------------------\n// Encode helpers\n// ---------------------------------------------------------------------------\n\nconst pad8 = (n: number): number => (n + 7) & ~7;\n\n/** Repack bool column's u8[n] to Arrow bit-packed (same LSB-first as validity). */\nfunction packBools(src: Uint8Array, len: number): Uint8Array {\n const out = new Uint8Array(Math.ceil(len / 8));\n for (let i = 0; i < len; i++) if ((src[i] ?? 0) !== 0) out[i >> 3]! |= 1 << (i & 7);\n return out;\n}\n\n/** Expand Arrow bit-packed bools to our u8[n] storage. */\nfunction unpackBools(src: Uint8Array, len: number): Uint8Array {\n const out = new Uint8Array(len);\n for (let i = 0; i < len; i++) out[i] = (src[i >> 3]! >> (i & 7)) & 1;\n return out;\n}\n\n/**\n * Copy the validity bitmap for a column into a fresh Uint8Array starting at bit 0.\n * Handles sliced columns (validityBitOffset > 0). Returns null if all-valid.\n */\nfunction extractValidity(ctx: MemoryContext, col: Column): Uint8Array | null {\n if (col.validityPtr === 0) return null;\n const totalBits = col.validityBitOffset + col.length;\n const raw = ctx.viewOf({ ptr: col.validityPtr, length: validityBytes(totalBits), dtype: 'u8' }) as Uint8Array;\n if (col.validityBitOffset === 0) return raw.slice(0, validityBytes(col.length));\n const out = new Uint8Array(validityBytes(col.length));\n for (let i = 0; i < col.length; i++) if (getBit(raw, col.validityBitOffset + i)) setBit(out, i);\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// FlatBuffers builders for Arrow messages\n// ---------------------------------------------------------------------------\n\nfunction emptyTable(fb: FBBuilder): number {\n fb.startTable(); return fb.endTable();\n}\n\nfunction buildInt(fb: FBBuilder, bits: number, signed: boolean): number {\n fb.startTable();\n fb.addFieldI32(0, bits, 0);\n fb.addFieldBool(1, signed, false);\n return fb.endTable();\n}\n\nfunction buildFloat(fb: FBBuilder, prec: number): number {\n fb.startTable();\n fb.addFieldI16(0, prec, 0);\n return fb.endTable();\n}\n\nfunction buildDictEncoding(fb: FBBuilder, id: number): number {\n const intT = buildInt(fb, 32, true);\n fb.startTable();\n fb.addFieldI64(0, id);\n fb.addFieldOffset(1, intT);\n return fb.endTable();\n}\n\n/** Build Arrow Date32(DAY) FlatBuffers type table. */\nfunction buildDate(fb: FBBuilder): number {\n // Date.unit: FlatBuffers default = MILLISECOND (1). We want DAY (0), so we must write it.\n fb.startTable();\n fb.addFieldI16(0, DATE_UNIT_DAY, DATE_UNIT_MILLI_DEFAULT);\n return fb.endTable();\n}\n\n/** Build Arrow Timestamp(MILLISECOND, tz?) FlatBuffers type table. */\nfunction buildTimestamp(fb: FBBuilder, tz?: string): number {\n // Timestamp.unit: FlatBuffers default = SECOND (0). We write MILLISECOND (1).\n // timezone (field 1): optional IANA string; omitted if tz is absent.\n const tzOff = tz ? fb.createString(tz) : null;\n fb.startTable();\n fb.addFieldI16(0, TIME_UNIT_MILLI, TIME_UNIT_SECOND);\n if (tzOff !== null) fb.addFieldOffset(1, tzOff);\n return fb.endTable();\n}\n\nfunction buildField(\n fb: FBBuilder,\n name: string,\n dtype: DType,\n dictId: number | null,\n colTz?: string,\n): number {\n const nameOff = fb.createString(name);\n let typeTag: number, typeT: number;\n let dictOff: number | null = null;\n\n switch (dtype) {\n case 'f64': typeTag = TYPE_FLOAT; typeT = buildFloat(fb, PREC_DOUBLE); break;\n case 'f32': typeTag = TYPE_FLOAT; typeT = buildFloat(fb, PREC_SINGLE); break;\n case 'i32': typeTag = TYPE_INT; typeT = buildInt(fb, 32, true); break;\n case 'u32': typeTag = TYPE_INT; typeT = buildInt(fb, 32, false); break;\n case 'i64': typeTag = TYPE_INT; typeT = buildInt(fb, 64, true); break; // ADR-009\n case 'bool': typeTag = TYPE_BOOL; typeT = emptyTable(fb); break;\n case 'utf8':\n typeTag = TYPE_UTF8; typeT = emptyTable(fb);\n if (dictId !== null) dictOff = buildDictEncoding(fb, dictId);\n break;\n case 'date32':\n typeTag = TYPE_DATE; typeT = buildDate(fb); break; // ADR-010: Date32(DAY)\n case 'timestamp':\n typeTag = TYPE_TIMESTAMP; typeT = buildTimestamp(fb, colTz); break; // ADR-010: Timestamp(MILLI, tz?)\n default:\n throw new Error(`Arrow toArrow: unsupported dtype '${String(dtype)}'`);\n }\n\n const childrenOff = fb.createOffsetVector([]); // no children for our dtypes\n\n fb.startTable();\n fb.addFieldOffset(0, nameOff);\n fb.addFieldBool(1, true, false); // nullable = true\n fb.addFieldI8(2, typeTag); // type_type\n fb.addFieldOffset(3, typeT); // type\n if (dictOff !== null) fb.addFieldOffset(4, dictOff);\n fb.addFieldOffset(5, childrenOff);\n return fb.endTable();\n}\n\n/**\n * Build the FlatBuffers bytes for a Schema Message (bodyLength=0).\n * `tzs` carries the optional IANA timezone string per column (for timestamp columns).\n */\nfunction buildSchemaMeta(\n names: string[],\n dtypes: DType[],\n dictIds: (number | null)[],\n tzs: (string | undefined)[],\n): Uint8Array {\n const fb = new FBBuilder(1024);\n const fieldOffs = names.map((n, i) => buildField(fb, n, dtypes[i]!, dictIds[i]!, tzs[i]));\n const fieldsVec = fb.createOffsetVector(fieldOffs);\n fb.startTable();\n fb.addFieldI16(0, 0); // endianness = Little\n fb.addFieldOffset(1, fieldsVec);\n const schemaOff = fb.endTable();\n\n fb.startTable();\n fb.addFieldI16(0, META_V5);\n fb.addFieldI8(1, MH_SCHEMA);\n fb.addFieldOffset(2, schemaOff);\n // bodyLength=0: omitted (default)\n const msgOff = fb.endTable();\n return fb.finish(msgOff);\n}\n\ninterface BodyPlan {\n nodes: Array<{ length: number; nullCount: number }>;\n buffers: Array<{ offset: number; length: number }>;\n body: Uint8Array;\n}\n\n/** Build FlatBuffers bytes for a RecordBatch Message. */\nfunction buildRBMeta(plan: BodyPlan): Uint8Array {\n return buildBatchMeta(plan, MH_RECORD, -1);\n}\n\n/** Build FlatBuffers bytes for a DictionaryBatch Message. */\nfunction buildDictMeta(plan: BodyPlan, id: number): Uint8Array {\n return buildBatchMeta(plan, MH_DICT, id);\n}\n\nfunction buildBatchMeta(plan: BodyPlan, headerType: number, dictId: number): Uint8Array {\n const fb = new FBBuilder(512);\n\n // FieldNode structs (16 bytes each): i64 length + i64 null_count\n const nodeData = new Uint8Array(plan.nodes.length * STRUCT16);\n const ndv = new DataView(nodeData.buffer);\n for (let i = 0; i < plan.nodes.length; i++) {\n ndv.setInt32(i * 16 + 0, plan.nodes[i]!.length, true); // length (lo)\n ndv.setInt32(i * 16 + 8, plan.nodes[i]!.nullCount, true); // null_count (lo)\n }\n const nodesVec = fb.createStructVector(nodeData, plan.nodes.length);\n\n // Buffer structs (16 bytes each): i64 offset + i64 length\n const bufData = new Uint8Array(plan.buffers.length * STRUCT16);\n const bdv = new DataView(bufData.buffer);\n for (let i = 0; i < plan.buffers.length; i++) {\n bdv.setInt32(i * 16 + 0, plan.buffers[i]!.offset, true);\n bdv.setInt32(i * 16 + 8, plan.buffers[i]!.length, true);\n }\n const bufsVec = fb.createStructVector(bufData, plan.buffers.length);\n\n const rowLen = plan.nodes.length > 0 ? plan.nodes[0]!.length : 0;\n fb.startTable();\n fb.addFieldI64(0, rowLen);\n fb.addFieldOffset(1, nodesVec);\n fb.addFieldOffset(2, bufsVec);\n const rbOff = fb.endTable();\n\n let innerOff = rbOff;\n if (headerType === MH_DICT) {\n fb.startTable();\n fb.addFieldI64(0, dictId);\n fb.addFieldOffset(1, rbOff);\n // isDelta = false (default, omit)\n innerOff = fb.endTable();\n }\n\n fb.startTable();\n fb.addFieldI16(0, META_V5);\n fb.addFieldI8(1, headerType);\n fb.addFieldOffset(2, innerOff);\n fb.addFieldI64(3, plan.body.byteLength);\n const msgOff = fb.endTable();\n return fb.finish(msgOff);\n}\n\n// ---------------------------------------------------------------------------\n// Body assembly\n// ---------------------------------------------------------------------------\n\ninterface BodyBuilder {\n parts: Uint8Array[];\n size: number;\n}\n\nfunction pushBuffer(bb: BodyBuilder, data: Uint8Array | null): { offset: number; length: number } {\n if (!data || data.byteLength === 0) return { offset: 0, length: 0 };\n const offset = bb.size;\n bb.parts.push(data);\n const padded = pad8(data.byteLength);\n if (padded > data.byteLength) bb.parts.push(new Uint8Array(padded - data.byteLength));\n bb.size += padded;\n return { offset, length: data.byteLength };\n}\n\nfunction buildBody(parts: Uint8Array[]): Uint8Array {\n const tot = parts.reduce((s, p) => s + p.byteLength, 0);\n const out = new Uint8Array(tot);\n let off = 0;\n for (const p of parts) { out.set(p, off); off += p.byteLength; }\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// IPC stream writer\n// ---------------------------------------------------------------------------\n\nfunction ipcMessage(meta: Uint8Array, body: Uint8Array): Uint8Array {\n // Arrow IPC stream format (post-v0.15 / non-legacy):\n // [int32 -1] [int32 padded_meta_size] [meta bytes padded to 8B] [body bytes]\n //\n // The size field contains the PADDED metadata length (including trailing zero\n // bytes up to 8-byte alignment). This is what apache-arrow writes and expects:\n // prefixSize = 8 (4-byte continuation + 4-byte size field)\n // alignedSize = (rawLen + prefixSize + 7) & ~7\n // written size = alignedSize - prefixSize = rawLen + padding\n //\n // Writing the unpadded rawLen was our prior bug: apache-arrow read rawLen bytes\n // of meta (stopping before the padding zeros), left the stream misaligned, and\n // then read the next message's continuation marker from the padding bytes instead\n // of from the actual next message.\n const rawLen = meta.byteLength;\n const padded = pad8(rawLen); // padded metadata size (what goes in the size field)\n const total = 4 + 4 + padded + body.byteLength;\n const out = new Uint8Array(total);\n const dv = new DataView(out.buffer);\n dv.setInt32(0, -1, true); // continuation marker (0xFFFFFFFF)\n dv.setInt32(4, padded, true); // PADDED metadata size (apache-arrow convention)\n out.set(meta, 8); // metadata bytes (trailing zero padding is already 0)\n out.set(body, 8 + padded); // body follows padded metadata\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// toArrow() — public API\n// ---------------------------------------------------------------------------\n\n/**\n * Encode a DataFrame to an Arrow IPC stream (Uint8Array).\n *\n * Stream: Schema message → DictionaryBatch per utf8 column → RecordBatch → EOS.\n * Dictionary-encoded columns use Arrow Dict<Int32, Utf8>; our offsets/bytes\n * buffers pass through directly (ADR-002 \"nearly free\").\n * Bool columns are repacked from u8 to bit-packed (the ONE real transform).\n */\nexport function toArrow(df: DataFrame): Uint8Array {\n const ctx = df.ctx;\n const names = df.columns as string[];\n const n = df.length;\n const dtypes = names.map((nm) => df.dtypeOf(nm)!);\n const cols = names.map((nm) => df.getColumn(nm)!);\n\n // Assign ascending dict IDs to utf8 columns\n const dictIds: (number | null)[] = dtypes.map(() => null);\n let nextDictId = 0;\n for (let i = 0; i < dtypes.length; i++) {\n if (dtypes[i] === 'utf8') dictIds[i] = nextDictId++;\n }\n\n // Collect tz metadata for timestamp columns (ADR-010: tz = display metadata only).\n const tzs: (string | undefined)[] = cols.map((col) =>\n col.dtype === 'timestamp' ? col.tz : undefined,\n );\n\n const messages: Uint8Array[] = [];\n\n // 1. Schema\n messages.push(ipcMessage(buildSchemaMeta(names, dtypes, dictIds, tzs), new Uint8Array(0)));\n\n // 2. DictionaryBatch per utf8 column\n for (let i = 0; i < cols.length; i++) {\n if (dtypes[i] !== 'utf8') continue;\n const col = cols[i]!;\n const dict = col.dict!;\n const count = dict.count;\n const id = dictIds[i]!;\n\n const offsetsSrc = ctx.viewOf({ ptr: dict.offsetsPtr, length: count + 1, dtype: 'i32' }) as Int32Array;\n const bytesSrc = dict.bytesLen > 0\n ? (ctx.viewOf({ ptr: dict.bytesPtr, length: dict.bytesLen, dtype: 'u8' }) as Uint8Array)\n : new Uint8Array(0);\n\n const bb: BodyBuilder = { parts: [], size: 0 };\n const vBuf = pushBuffer(bb, null); // no nulls in dict\n const oBuf = pushBuffer(bb, new Uint8Array(offsetsSrc.buffer, offsetsSrc.byteOffset, offsetsSrc.byteLength).slice());\n const dBuf = pushBuffer(bb, bytesSrc.slice());\n const body = buildBody(bb.parts);\n\n const plan: BodyPlan = {\n nodes: [{ length: count, nullCount: 0 }],\n buffers: [vBuf, oBuf, dBuf],\n body,\n };\n messages.push(ipcMessage(buildDictMeta(plan, id), body));\n }\n\n // 3. RecordBatch\n const rb: BodyBuilder = { parts: [], size: 0 };\n const rbNodes: BodyPlan['nodes'] = [];\n const rbBufs: BodyPlan['buffers'] = [];\n\n for (let i = 0; i < cols.length; i++) {\n const col = cols[i]!;\n const dtype = dtypes[i]!;\n\n // Count nulls\n let nullCount = 0;\n if (col.validityPtr !== 0) {\n const totalBits = col.validityBitOffset + n;\n const vraw = ctx.viewOf({ ptr: col.validityPtr, length: validityBytes(totalBits), dtype: 'u8' }) as Uint8Array;\n for (let k = 0; k < n; k++) if (!getBit(vraw, col.validityBitOffset + k)) nullCount++;\n }\n rbNodes.push({ length: n, nullCount });\n rbBufs.push(pushBuffer(rb, extractValidity(ctx, col)));\n\n if (dtype === 'utf8') {\n // Indices buffer (i32[n])\n const idx = ctx.viewOf({ ptr: col.dataPtr, length: n, dtype: 'i32' }) as Int32Array;\n rbBufs.push(pushBuffer(rb, new Uint8Array(idx.buffer, idx.byteOffset, idx.byteLength).slice()));\n } else if (dtype === 'bool') {\n const boolV = ctx.viewOf({ ptr: col.dataPtr, length: n, dtype: 'bool' }) as Uint8Array;\n rbBufs.push(pushBuffer(rb, packBools(boolV, n)));\n } else {\n const info = DTYPES[dtype];\n const v = ctx.viewOf({ ptr: col.dataPtr, length: n, dtype: info.view });\n rbBufs.push(pushBuffer(rb, new Uint8Array(v.buffer, v.byteOffset, n * info.size).slice()));\n }\n }\n\n const rbBody = buildBody(rb.parts);\n const rbPlan: BodyPlan = { nodes: rbNodes, buffers: rbBufs, body: rbBody };\n messages.push(ipcMessage(buildRBMeta(rbPlan), rbBody));\n\n // 4. EOS\n const eos = new Uint8Array(8);\n new DataView(eos.buffer).setInt32(0, -1, true);\n messages.push(eos);\n\n // Concat all\n const total = messages.reduce((s, m) => s + m.byteLength, 0);\n const out = new Uint8Array(total);\n let off = 0;\n for (const m of messages) { out.set(m, off); off += m.byteLength; }\n return out;\n}\n\n// ---------------------------------------------------------------------------\n// fromArrow() — IPC reader\n// ---------------------------------------------------------------------------\n\nclass IpcReader {\n private pos = 0;\n private dv: DataView;\n\n constructor(private buf: Uint8Array) {\n this.dv = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);\n }\n\n /** null = EOS */\n next(): { meta: Uint8Array; body: Uint8Array } | null {\n if (this.pos + 8 > this.buf.byteLength) return null;\n const cont = this.dv.getUint32(this.pos, true);\n if (cont !== 0xffff_ffff) throw new Error(`Arrow: expected continuation (0xFFFFFFFF) at offset ${this.pos}`);\n const metaSize = this.dv.getInt32(this.pos + 4, true);\n this.pos += 8;\n if (metaSize === 0) return null; // EOS\n\n // metaSize is the PADDED metadata length (apache-arrow convention: size field includes\n // trailing zero padding to 8-byte alignment). We read exactly metaSize bytes and\n // advance by pad8(metaSize) which is a no-op since metaSize is already aligned.\n const meta = this.buf.slice(this.pos, this.pos + metaSize);\n this.pos += pad8(metaSize); // advance past (already-padded) metadata\n\n const root = fbRoot(meta);\n const bodyLen = root.getInt64Num(3);\n // bodyLength in metadata is already a multiple of 8 (Arrow spec);\n // pad8(bodyLen) is a no-op for compliant streams but is defensive.\n const body = bodyLen > 0 ? this.buf.slice(this.pos, this.pos + bodyLen) : new Uint8Array(0);\n this.pos += pad8(bodyLen);\n return { meta, body };\n }\n}\n\ninterface ArrowField {\n name: string;\n dtype: DType;\n dictId: number | null; // null if not dict-encoded\n /** For non-dict Utf8: true if the body has [validity, offsets, bytes] (3 buffers). */\n plainUtf8: boolean;\n /** IANA tz string for Arrow Timestamp columns; undefined for all other types. */\n tz?: string;\n /**\n * Arrow TimeUnit for Timestamp columns: SECOND=0, MILLISECOND=1, MICROSECOND=2, NANOSECOND=3.\n * Undefined for non-timestamp columns. Used by fromArrow to rescale to ms when needed.\n */\n arrowUnit?: number;\n}\n\nfunction parseSchema(meta: Uint8Array): ArrowField[] {\n const msg = fbRoot(meta);\n if (msg.getUint8(1, 0) !== MH_SCHEMA) throw new Error('Arrow: first message is not Schema');\n const schema = msg.getTable(2);\n if (!schema) throw new Error('Arrow: missing schema table');\n\n const n = schema.vectorLen(1);\n const fields: ArrowField[] = [];\n for (let i = 0; i < n; i++) {\n const f = schema.vectorTable(1, i);\n const name = f.getString(0) ?? `f${i}`;\n const typeTag = f.getUint8(2, 0);\n const typeT = f.getTable(3);\n const dictEnc = f.getTable(4);\n const dictId = dictEnc ? dictEnc.getInt64Num(0) : null;\n\n let dtype: DType;\n let plainUtf8 = false;\n let tz: string | undefined;\n let arrowUnit: number | undefined;\n\n switch (typeTag) {\n case TYPE_INT: {\n const bits = typeT?.getInt32(0, 32) ?? 32;\n const signed = typeT?.getBool(1, false) ?? false;\n if (bits === 64) {\n if (!signed) throw new Error(\n `Arrow fromArrow: unsupported Arrow type UInt64. ` +\n `databonk supports Int64(signed) as 'i64'.`,\n );\n dtype = 'i64'; // ADR-009: Arrow Int64(signed) → databonk i64\n } else {\n dtype = (bits <= 32 && !signed) ? 'u32' : 'i32';\n }\n break;\n }\n case TYPE_FLOAT: {\n const prec = typeT?.getInt16(0, 0) ?? 0;\n dtype = prec === PREC_DOUBLE ? 'f64' : 'f32';\n break;\n }\n case TYPE_BOOL: dtype = 'bool'; break;\n case TYPE_UTF8:\n case TYPE_LARGE_UTF8:\n dtype = 'utf8';\n plainUtf8 = dictId === null;\n break;\n case TYPE_DATE: {\n // Date.unit FlatBuffers default = MILLISECOND (1). We only support Date32 = DAY (0).\n const unit = typeT?.getInt16(0, DATE_UNIT_MILLI_DEFAULT) ?? DATE_UNIT_MILLI_DEFAULT;\n if (unit !== DATE_UNIT_DAY) throw new Error(\n `Arrow fromArrow: unsupported Date unit ${unit} (only Date32(DAY)=0 is supported).`,\n );\n dtype = 'date32'; // ADR-010: Arrow Date(DAY) → databonk date32\n break;\n }\n case TYPE_TIMESTAMP: {\n // Timestamp.unit FlatBuffers default = SECOND (0). timezone (field 1) is optional.\n const unit = typeT?.getInt16(0, TIME_UNIT_SECOND) ?? TIME_UNIT_SECOND;\n const tzStr = typeT?.getString(1) ?? undefined;\n dtype = 'timestamp'; // ADR-010: Arrow Timestamp(unit, tz?) → databonk timestamp\n arrowUnit = unit;\n tz = tzStr;\n break;\n }\n default:\n throw new Error(\n `Arrow fromArrow: unsupported Arrow type tag ${typeTag}. ` +\n `Supported: Int32, Int64, UInt32, Float32, Float64, Bool, Utf8/Dict<Int32,Utf8>, ` +\n `Date32(DAY), Timestamp(any unit, optional tz).`,\n );\n }\n fields.push({\n name,\n dtype,\n dictId,\n plainUtf8,\n ...(tz !== undefined ? { tz } : {}),\n ...(arrowUnit !== undefined ? { arrowUnit } : {}),\n });\n }\n return fields;\n}\n\n// ---------------------------------------------------------------------------\n// Byte-hash dedup for plain UTF-8 ingest (ABI §12, CP.1 fast path)\n// ---------------------------------------------------------------------------\n\n/**\n * FNV-1a 32-bit hash over `bytes[start..end)`.\n * Empty range → fixed non-zero value (0x811c9dc5, the FNV offset basis).\n */\nfunction fnv1aBytes(bytes: Uint8Array, start: number, end: number): number {\n let h = 0x811c9dc5 >>> 0;\n for (let i = start; i < end; i++) {\n h ^= bytes[i]!;\n h = Math.imul(h, 0x01000193) >>> 0;\n }\n return h;\n}\n\n/**\n * True if `a[as..ae)` and `b[bs..be)` are identical byte sequences\n * (caller already checked length equality).\n */\nfunction bytesRangeEqual(\n a: Uint8Array, as_: number, ae: number,\n b: Uint8Array, bs: number,\n): boolean {\n const len = ae - as_;\n for (let i = 0; i < len; i++) {\n if (a[as_ + i] !== b[bs + i]) return false;\n }\n return true;\n}\n\n/**\n * Dedup result: unique byte ranges in first-seen order + per-row index array.\n * `dictOffsets` and `dictBytes` are in Arrow/databonk dictionary layout\n * (offsets[k]..offsets[k+1] = byte range of slot k in bytes).\n */\ninterface ByteDedupResult {\n dictOffsets: Int32Array;\n dictBytes: Uint8Array;\n dictCount: number;\n indices: Int32Array;\n}\n\n/** Next power of two ≥ n (n must be > 0). */\nfunction nextPow2(n: number): number {\n let p = 1;\n while (p < n) p <<= 1;\n return p;\n}\n\n/**\n * Deduplicate a plain-UTF-8 Arrow column on raw bytes — no TextDecoder or\n * TextEncoder. Hash each row's byte range with FNV-1a; use a flat open-\n * addressing hash table (Int32Array) for O(1) amortised lookup — much faster\n * than a JS `Map` for large numeric keys.\n *\n * For the all-unique case (e.g. 85K unique GEOIDs): the hot path never\n * enters a collision branch; the compaction step is skipped entirely and the\n * Arrow offsets/bytes are returned as-is (no second copy).\n *\n * O(n × avgLen + uniqueCount × avgLen): one byte pass for hashing + one for\n * compaction (skipped for all-unique).\n */\nfunction buildDictFromPlainUtf8(\n rawBytes: Uint8Array,\n offsets: Int32Array,\n rowLen: number,\n): ByteDedupResult {\n const indices = new Int32Array(rowLen);\n\n if (rowLen === 0) {\n return {\n dictOffsets: new Int32Array([0]),\n dictBytes: new Uint8Array(0),\n dictCount: 0,\n indices,\n };\n }\n\n // Flat open-addressing hash table: ht[slot] = dict-slot-index, or -1 (empty).\n // Sized to 2× rowLen so load factor ≤ 0.5 keeps expected probes near 1.\n const htCap = nextPow2(rowLen * 2);\n const htMask = htCap - 1;\n const ht = new Int32Array(htCap).fill(-1); // -1 = empty\n // hash values stored alongside ht to avoid re-hashing on collision probe\n const htHash = new Uint32Array(htCap);\n\n // Arrays tracking unique string byte ranges in rawBytes (first-seen order).\n // For n unique strings these stay as compact Int32Arrays — no boxing.\n let dictCount = 0;\n // Use Float64Array as a growable buffer for (start, end) pairs to avoid\n // boxing overhead of a plain number[]. We resize by doubling.\n let slotCap = Math.min(rowLen, 256);\n let slotS = new Float64Array(slotCap); // slot k start in rawBytes\n let slotE = new Float64Array(slotCap); // slot k end in rawBytes\n\n for (let k = 0; k < rowLen; k++) {\n const s = offsets[k]!;\n const e = offsets[k + 1]!;\n const h = fnv1aBytes(rawBytes, s, e);\n const len = e - s;\n\n // Open-address probe: find either a match or an empty slot.\n let slot = (h >>> 0) & htMask;\n let found = -1;\n for (;;) {\n const di = ht[slot]!;\n if (di < 0) break; // empty — this string is new\n if (htHash[slot] === (h >>> 0)) {\n // Same hash: byte-compare to confirm (collision guard)\n const ds = slotS[di]!;\n const de = slotE[di]!;\n if (de - ds === len && bytesRangeEqual(rawBytes, s, e, rawBytes, ds)) {\n found = di;\n break;\n }\n }\n slot = (slot + 1) & htMask; // linear probe\n }\n\n if (found >= 0) {\n indices[k] = found;\n } else {\n // New unique string: record it and insert into the hash table.\n const idx = dictCount++;\n if (idx >= slotCap) {\n slotCap <<= 1;\n const ns = new Float64Array(slotCap); ns.set(slotS); slotS = ns;\n const ne = new Float64Array(slotCap); ne.set(slotE); slotE = ne;\n }\n slotS[idx] = s;\n slotE[idx] = e;\n ht[slot] = idx;\n htHash[slot] = h >>> 0;\n indices[k] = idx;\n }\n }\n\n // All-unique fast path: the Arrow bytes and offsets ARE the dictionary verbatim\n // (first-seen order = row order when every row is unique). Skip the compaction\n // copy: return aliases instead. writeDictionaryFromRawBytes copies them to wasm.\n if (dictCount === rowLen) {\n return { dictOffsets: offsets, dictBytes: rawBytes, dictCount, indices };\n }\n\n // General path: build compact dictOffsets + dictBytes from the unique ranges.\n const dictOffsets = new Int32Array(dictCount + 1);\n let acc = 0;\n for (let k = 0; k < dictCount; k++) {\n dictOffsets[k] = acc;\n acc += slotE[k]! - slotS[k]!;\n }\n dictOffsets[dictCount] = acc;\n\n const dictBytes = new Uint8Array(acc);\n let pos = 0;\n for (let k = 0; k < dictCount; k++) {\n const ss = slotS[k]!;\n const ee = slotE[k]!;\n dictBytes.set(rawBytes.subarray(ss, ee), pos);\n pos += ee - ss;\n }\n\n return { dictOffsets, dictBytes, dictCount, indices };\n}\n\n// ---------------------------------------------------------------------------\n\ninterface DictEntry { offsets: Int32Array; bytes: Uint8Array; count: number }\n\nfunction parseDictBatch(meta: Uint8Array, body: Uint8Array): { id: number; entry: DictEntry } {\n const msg = fbRoot(meta);\n const db = msg.getTable(2);\n if (!db) throw new Error('Arrow: DictionaryBatch missing');\n const id = db.getInt64Num(0);\n const rb = db.getTable(1);\n if (!rb) throw new Error('Arrow: DictionaryBatch missing inner RecordBatch');\n\n const dictLen = rb.getInt64Num(0);\n\n // Buffer 0: validity (ignored, dict entries never null)\n // Buffer 1: offsets i32[dictLen+1]\n // Buffer 2: bytes u8[bytesLen]\n const getBufOff = (bi: number): number => rb.i32at(rb.structVectorElemPos(2, bi, STRUCT16));\n const getBufLen = (bi: number): number => rb.i32at(rb.structVectorElemPos(2, bi, STRUCT16) + 8);\n\n const nBufs = rb.vectorLen(2);\n if (nBufs < 2) throw new Error('Arrow: DictionaryBatch RecordBatch needs ≥2 buffers');\n\n const oOff = getBufOff(1); const oLen = getBufLen(1);\n const bOff = nBufs >= 3 ? getBufOff(2) : 0;\n const bLen = nBufs >= 3 ? getBufLen(2) : 0;\n\n const offsets = new Int32Array(body.buffer, body.byteOffset + oOff, dictLen + 1).slice();\n const bytes = bLen > 0 ? body.slice(bOff, bOff + bLen) : new Uint8Array(0);\n\n return { id, entry: { offsets, bytes, count: dictLen } };\n}\n\nfunction readBody(body: Uint8Array, off: number, len: number): Uint8Array {\n return len > 0 ? body.slice(off, off + len) : new Uint8Array(0);\n}\n\n/**\n * Parse a RecordBatch message and produce raw Column objects owned by wasm memory.\n *\n * CP.1 fast paths (ABI §12):\n * - utf8 dict-encoded: `writeDictionaryFromRawBytes` — no TextDecoder/TextEncoder.\n * - utf8 plain: `buildDictFromPlainUtf8` (byte-hash dedup) + `writeDictionaryFromRawBytes`.\n * - numeric/bool: unchanged — single alloc + TypedArray.set bulk-copy.\n *\n * Returns `{ columns, length }`. Caller must free columns that are not adopted\n * by a DataFrame.\n */\nfunction parseRecordBatch(\n meta: Uint8Array,\n body: Uint8Array,\n fields: ArrowField[],\n dicts: Map<number, DictEntry>,\n ctx: MemoryContext,\n): { columns: Column[]; length: number } {\n const msg = fbRoot(meta);\n if (msg.getUint8(1, 0) !== MH_RECORD) throw new Error('Arrow: expected RecordBatch');\n const rb = msg.getTable(2);\n if (!rb) throw new Error('Arrow: missing RecordBatch table');\n\n const rowLen = rb.getInt64Num(0);\n const nNodes = rb.vectorLen(1);\n if (nNodes !== fields.length) {\n throw new Error(`Arrow: field count mismatch (schema=${fields.length}, batch=${nNodes})`);\n }\n\n const getBufOff = (bi: number): number => rb.i32at(rb.structVectorElemPos(2, bi, STRUCT16));\n const getBufLen = (bi: number): number => rb.i32at(rb.structVectorElemPos(2, bi, STRUCT16) + 8);\n\n const columns: Column[] = [];\n let bi = 0;\n\n for (let fi = 0; fi < fields.length; fi++) {\n const { dtype, dictId } = fields[fi]!;\n\n // Validity buffer (bi)\n const vOff = getBufOff(bi); const vLen = getBufLen(bi); bi++;\n const hasValidity = vLen > 0;\n\n if (dtype === 'utf8') {\n if (dictId !== null) {\n // ── Dict-encoded fast path (ABI §12): bulk-copy bytes + offsets, no decode/encode ──\n const iOff = getBufOff(bi); bi++;\n const entry = dicts.get(dictId);\n if (!entry) throw new Error(`Arrow: missing dictionary id=${dictId}`);\n\n const dict = writeDictionaryFromRawBytes(ctx, entry.bytes, entry.offsets, entry.count);\n\n const dataPtr = ctx.mod.alloc(Math.max(rowLen * 4, 1));\n const idxView = ctx.viewOf({ ptr: dataPtr, length: rowLen, dtype: 'i32' }) as Int32Array;\n idxView.set(new Int32Array(body.buffer, body.byteOffset + iOff, rowLen));\n\n let validityPtr = 0;\n if (hasValidity) {\n validityPtr = ctx.mod.alloc(validityBytes(rowLen));\n // vLen from IPC metadata may be padded to 8 bytes (apache-arrow convention);\n // copy only the actual bytes needed for the bitmap (validityBytes(rowLen)).\n (ctx.viewOf({ ptr: validityPtr, length: validityBytes(rowLen), dtype: 'u8' }) as Uint8Array)\n .set(body.subarray(vOff, vOff + validityBytes(rowLen)));\n }\n columns.push({ dtype: 'utf8', length: rowLen, dataPtr, validityPtr, validityBitOffset: 0, dict, owned: true });\n\n } else {\n // ── Plain UTF-8 fast path (ABI §12): byte-hash dedup, no TextDecoder/TextEncoder ──\n const oOff2 = getBufOff(bi); bi++;\n const dOff2 = getBufOff(bi); const dLen2 = getBufLen(bi); bi++;\n\n const arrowOffsets = new Int32Array(body.buffer, body.byteOffset + oOff2, rowLen + 1);\n const arrowBytes = body.subarray(dOff2, dOff2 + dLen2);\n\n // Dedup on raw bytes: O(n×avgLen), no JS string allocation in the hot loop.\n const { dictOffsets, dictBytes, dictCount, indices } =\n buildDictFromPlainUtf8(arrowBytes, arrowOffsets, rowLen);\n\n // Bulk-copy the compact dict into wasm (no TextEncoder).\n const dict = writeDictionaryFromRawBytes(ctx, dictBytes, dictOffsets, dictCount);\n\n const dataPtr = ctx.mod.alloc(Math.max(rowLen * 4, 1));\n (ctx.viewOf({ ptr: dataPtr, length: rowLen, dtype: 'i32' }) as Int32Array).set(indices);\n\n let validityPtr = 0;\n if (hasValidity) {\n validityPtr = ctx.mod.alloc(validityBytes(rowLen));\n // vLen may be padded; copy only actual bitmap bytes.\n (ctx.viewOf({ ptr: validityPtr, length: validityBytes(rowLen), dtype: 'u8' }) as Uint8Array)\n .set(body.subarray(vOff, vOff + validityBytes(rowLen)));\n }\n columns.push({ dtype: 'utf8', length: rowLen, dataPtr, validityPtr, validityBitOffset: 0, dict, owned: true });\n }\n\n } else if (dtype === 'bool') {\n const datOff = getBufOff(bi); const datLen = getBufLen(bi); bi++;\n const packed = body.subarray(datOff, datOff + datLen);\n const u8data = unpackBools(packed, rowLen);\n\n const dataPtr = ctx.mod.alloc(Math.max(rowLen, 1));\n (ctx.viewOf({ ptr: dataPtr, length: rowLen, dtype: 'bool' }) as Uint8Array).set(u8data);\n\n let validityPtr = 0;\n if (hasValidity) {\n validityPtr = ctx.mod.alloc(validityBytes(rowLen));\n // vLen may be padded to 8 bytes (apache-arrow convention); copy only actual bits.\n (ctx.viewOf({ ptr: validityPtr, length: validityBytes(rowLen), dtype: 'u8' }) as Uint8Array)\n .set(body.subarray(vOff, vOff + validityBytes(rowLen)));\n }\n columns.push({ dtype: 'bool', length: rowLen, dataPtr, validityPtr, validityBitOffset: 0, dict: null, owned: true });\n\n } else {\n // ── Numeric fast path: single alloc + TypedArray.set bulk-copy ──\n const info = DTYPES[dtype];\n const datOff = getBufOff(bi); bi++;\n const dataPtr = ctx.mod.alloc(Math.max(rowLen * info.size, 1));\n const view = ctx.viewOf({ ptr: dataPtr, length: rowLen, dtype: info.view });\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const srcTyped = new (info.ctor as any)(body.buffer as ArrayBuffer, body.byteOffset + datOff, rowLen);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (view as any).set(srcTyped);\n\n let validityPtr = 0;\n if (hasValidity) {\n validityPtr = ctx.mod.alloc(validityBytes(rowLen));\n // vLen may be padded to 8 bytes (apache-arrow convention); copy only actual bits.\n (ctx.viewOf({ ptr: validityPtr, length: validityBytes(rowLen), dtype: 'u8' }) as Uint8Array)\n .set(body.subarray(vOff, vOff + validityBytes(rowLen)));\n }\n columns.push({ dtype, length: rowLen, dataPtr, validityPtr, validityBitOffset: 0, dict: null, owned: true });\n }\n }\n return { columns, length: rowLen };\n}\n\n/**\n * Rescale Arrow Timestamp column values to milliseconds.\n *\n * Arrow Timestamp can carry any TimeUnit. databonk stores timestamps as ms (ADR-010).\n * - SECOND → ms: ×1000 with saturation-to-null on i64 overflow (documented).\n * Safe range: |seconds| ≤ 9_223_372_036_854_775 (≈ ±292 million years). Out-of-range\n * values (which would overflow i64 when multiplied by 1000) become null.\n * - MICROSECOND → ms: ÷1000 (integer truncation; sub-ms precision silently dropped).\n * - NANOSECOND → ms: ÷1_000_000 (integer truncation; sub-ms precision silently dropped).\n * - MILLISECOND: no-op (values already in ms).\n */\nfunction rescaleTimestampToMs(vals: (bigint | null)[], unit: number): (bigint | null)[] {\n if (unit === TIME_UNIT_MILLI) return vals;\n return vals.map((v) => {\n if (v === null) return null;\n switch (unit) {\n case TIME_UNIT_SECOND:\n // Saturation-to-null: if v is outside safe range, ×1000 would overflow i64.\n if (v > SEC_MS_MAX || v < SEC_MS_MIN) return null;\n return v * 1000n;\n case TIME_UNIT_MICRO:\n return v / 1000n; // truncate sub-ms\n case TIME_UNIT_NANO:\n return v / 1_000_000n; // truncate sub-ms\n default:\n return null; // unknown unit → null\n }\n });\n}\n\n/**\n * Decode an Arrow IPC stream buffer into a DataFrame.\n *\n * Supported Arrow types: Int32, Int64, UInt32, Float32, Float64, Bool,\n * Dict<Int32, Utf8> (written by our toArrow), plain Utf8 (builds a dict internally),\n * Date32(DAY) (→ date32), Timestamp(any unit, optional tz) (→ timestamp, rescaled to ms).\n * Any other type throws a clear error naming the type tag.\n */\nexport function fromArrow(buf: Uint8Array, rt: DfRuntime): DataFrame {\n const reader = new IpcReader(buf);\n\n // Schema\n const schemaMsg = reader.next();\n if (!schemaMsg) throw new Error('Arrow fromArrow: empty or truncated buffer');\n const fields = parseSchema(schemaMsg.meta);\n\n // Collect DictionaryBatches, stop at RecordBatch\n const dicts = new Map<number, DictEntry>();\n let rbMsg: { meta: Uint8Array; body: Uint8Array } | null = null;\n\n for (;;) {\n const msg = reader.next();\n if (!msg) break;\n const root = fbRoot(msg.meta);\n const hType = root.getUint8(1, 0);\n if (hType === MH_DICT) {\n const { id, entry } = parseDictBatch(msg.meta, msg.body);\n dicts.set(id, entry);\n } else if (hType === MH_RECORD) {\n rbMsg = msg;\n break;\n }\n // Skip unknown message types\n }\n\n if (!rbMsg) throw new Error('Arrow fromArrow: no RecordBatch found in stream');\n\n const { columns: rawCols, length: rowLen } =\n parseRecordBatch(rbMsg.meta, rbMsg.body, fields, dicts, rt.ctx);\n\n // CP.1 fast path: adopt pre-built wasm columns directly — no JS-array round-trip.\n //\n // The general contract: `parseRecordBatch` produced owned wasm columns with\n // correct dtype/dataPtr/validityPtr/dict. We hand them straight to\n // `DataFrame._adoptColumns`. The only exception is a non-MILLISECOND Arrow\n // Timestamp, which must be rescaled via a JS round-trip (rare edge case).\n const named: Array<{ name: string; col: Column }> = [];\n\n for (let i = 0; i < fields.length; i++) {\n const { name, dtype, tz, arrowUnit } = fields[i]!;\n let col = rawCols[i]!;\n\n if (dtype === 'timestamp' && arrowUnit !== undefined && arrowUnit !== TIME_UNIT_MILLI) {\n // Rare: rescale non-ms Arrow Timestamp to ms via a JS round-trip (ADR-010).\n const jsVals = columnToArray(rt.ctx, col) as (bigint | null)[];\n const rescaled = rescaleTimestampToMs(jsVals, arrowUnit);\n freeColumn(rt.ctx, col);\n col = createColumn(rt.ctx, 'timestamp', rescaled as ColumnInput, tz);\n } else if (dtype === 'timestamp' && tz !== undefined) {\n // Attach tz metadata (display/accessor only, ADR-010) without touching wasm.\n col = { ...col, tz };\n }\n\n named.push({ name, col });\n }\n\n return DataFrame._adoptColumns(rt, named, rowLen);\n}\n\n// ---------------------------------------------------------------------------\n// Free a raw (owned) column that won't be adopted by a DataFrame\n// ---------------------------------------------------------------------------\n\nimport { freeColumn } from '../memory/column.js';\n// freeDictionary is re-exported from memory/index but not needed directly here —\n// freeColumn already calls freeDictionary for utf8 columns.\n\n","/**\n * dataframe — columnar WASM dataframe library\n */\n\n// Phase 1 — memory core: wasm loader, arena allocator, viewOf() layer.\nexport * from './memory/index.js';\n\n// Phase 3 — expression AST + compiler (P3.1).\nexport * from './expr/index.js';\n\n// Phase 3 — DataFrame / Series / GroupBy / join API (P3.2).\nexport * from './frame/index.js';\n\n// Phase 5 — opt-in parallel mode (ADR-006) lives in the \"databonk/workers\" subpath\n// export (separate bundle entry) to keep the main entry inside the §1 size budget.\n// Type-only re-exports are free:\nexport type { ThreadsConfig, ThreadsHandle } from './workers/index.js';\n\n// Phase 6 — I/O: CSV reader, JSON wrappers, Arrow IPC (P6.E).\nexport * from './io/index.js';\n\nexport const VERSION = '0.2.0';\n\n/** Returns a greeting string. Placeholder retained for the scaffold smoke test. */\nexport function hello(name = 'world'): string {\n return `Hello, ${name}! dataframe v${VERSION}`;\n}\n"]}
|