databonk 0.0.3 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +511 -111
- package/dist/dataframe-BggBYXYm.d.cts +886 -0
- package/dist/dataframe-BggBYXYm.d.ts +886 -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 +366 -23
- package/dist/index.js +5 -6734
- 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 +95 -60
- package/dist/core/column.d.ts +0 -55
- package/dist/core/column.d.ts.map +0 -1
- package/dist/core/dataframe.d.ts +0 -148
- package/dist/core/dataframe.d.ts.map +0 -1
- package/dist/core/index-cache.d.ts +0 -44
- package/dist/core/index-cache.d.ts.map +0 -1
- package/dist/core/index-manager.d.ts +0 -97
- package/dist/core/index-manager.d.ts.map +0 -1
- package/dist/core/index.d.ts +0 -75
- package/dist/core/index.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.esm.js +0 -6716
- package/dist/index.esm.js.map +0 -1
- package/dist/io/csv.d.ts +0 -23
- package/dist/io/csv.d.ts.map +0 -1
- package/dist/operations/aggregation.d.ts +0 -23
- package/dist/operations/aggregation.d.ts.map +0 -1
- package/dist/operations/derive.d.ts +0 -38
- package/dist/operations/derive.d.ts.map +0 -1
- package/dist/operations/groupby.d.ts +0 -36
- package/dist/operations/groupby.d.ts.map +0 -1
- package/dist/operations/join.d.ts +0 -58
- package/dist/operations/join.d.ts.map +0 -1
- package/dist/operations/reshape.d.ts +0 -17
- package/dist/operations/reshape.d.ts.map +0 -1
- package/dist/utils/aggregation-engine.d.ts +0 -84
- package/dist/utils/aggregation-engine.d.ts.map +0 -1
- package/dist/utils/bitset.d.ts +0 -30
- package/dist/utils/bitset.d.ts.map +0 -1
- package/dist/utils/hash.d.ts +0 -79
- package/dist/utils/hash.d.ts.map +0 -1
- package/dist/utils/performance.d.ts +0 -44
- package/dist/utils/performance.d.ts.map +0 -1
- package/dist/utils/types.d.ts +0 -7
- package/dist/utils/types.d.ts.map +0 -1
- package/dist/validation/schema.d.ts +0 -73
- package/dist/validation/schema.d.ts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../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/parquet/index.ts"],"names":["DTYPES","validityBytes","len","getBit","bitmap","i","setBit","byte","textEncoder","textDecoder","decodeCaches","cacheFor","dict","entry","writeDictionary","ctx","uniques","count","encoded","s","bytesLen","e","offsetsPtr","bytesPtr","offsets","bytes","acc","k","decodeSlot","slot","hit","start","end","decodeDictionary","out","unifyDictionaries","dictA","dictB","a","b","merged","index","intern","j","remapA","remapB","freeDictionary","isNullish","v","root","dtype","length","dataPtr","validityPtr","tz","createColumn","values","createStringColumn","createBoolColumn","createI64Column","createTemporalColumn","createNumericColumn","numericFastPath","info","nulls","view","vbits","ts","sz","vdt","p","dP","vP","vb","idxData","nullMask","columnToArray","col","validityBitOffset","validity","idx","data","isBool","sliceColumn","n","size","freeColumn","toExpr","x","Expr","lit","_Expr","node","other","arith","compare","value","to","agg","DtProxy","render","operand","dt","op","left","right","component","ARITH_SYM","renderScalar","ExprError","message","dtypeMismatch","hint","tail","unsupportedDtype","unsupportedCast","from","unknownColumn","name","known","near","nearest","suffix","list","badLiteral","best","bestD","d","levenshtein","threshold","m","prev","curr","ai","cost","NUMERIC","INTEGER","FLOAT","TEMPORAL","isNumeric","intInRange","adoptableNumLit","litTExpr","widen","resolve","expr","schema","resolveNode","inferType","resolveArith","resolveNeg","resolveCompare","resolveBool","resolveNot","resolveFillNull","resolveCast","resolveAgg","resolveDt","leftE","rightE","ln","rn","ld","rd","opDtype","litVal","typed","colTarget","arithLitVsTyped","typedT","litT","L","R","arithCommon","temporalArithResult","operandE","t","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","base","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","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","opD","storage","nonNull","computeAgg","pkd","conv","ovPtr","rawCell","ok","castScalar","TWO_63","bv","tr","num","aa","bb","copyBytes","offBytes","FrameError","rawKernel","defaultRuntime","OwnedColumn","inferDType","input","arr","DATE32_ALLOWED","SeriesDtProxy","series","offset","raw","shifted","srcBit","resultData","outputValues","valid","outCol","Series","column","storageToken","alignValidity","bitOff","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","ex","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","g","reduceFirstLast","reduceNunique","reduceStdVar","cnt","extI64","isMin","cntNonNull","cntFinite","ext","isI64","sum","mean","sse","wantStd","sets","wantFirst","chosen","joinFrames","opts","how","prepared","prepareKey","lHash","combinedHash","rHash","lvp","combinedValidity","rvp","freePtr","assembleOutput","keySet","leftNames","rightNames","leftNameSet","gatherJS","all","lCol","rCol","unified","leftPtr","remapIndices","rightPtr","widenBool","remap","inputs","inp","cols","nullable","srcs","owns","formatCell","cell","alignFor","pad","width","align","gap","formatTable","names","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","finite","sorted","std","q","lo","hi","frac","SUPPORTED_CODECS","RAW_PARSERS","us","ns","makeAsyncBuffer","ab","mapSchemaElement","el","tzByCol","type","lt","ct","numChildren","rep","ltType","isSigned","unit","mergeChunks","total","off","readParquet","asyncBuf","metadata","parquetMetadataAsync","rg","cc","codec","kvMeta","TZ_PREFIX","colInfos","parquetSchema","chunksByName","parquetRead","chunk","namedCols","seedDf","df","buildColWrite","tzKey","writeParquet","compression","columnData","kvMetadata","writeOpts","resultAb","parquetWriteBuffer"],"mappings":"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","file":"parquet.js","sourcesContent":["/**\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 * 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/** 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/** 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 /** 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// ── 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 }\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\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 }\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// ── 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 }\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// ── 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';\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\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 [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_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 are dictionary-unified\n * (JS unifyDictionaries) so equal strings across frames share a merged index; bool widens to\n * i32; a null in any key excludes the row. Output = all left columns + right non-key columns\n * (colliding right names suffixed _right).\n */\n\nimport { DTYPES } from '../memory/dtype.js';\nimport { validityBytes, getBit, setBit } from '../memory/bitmap.js';\nimport { unifyDictionaries } from '../memory/dictionary.js';\nimport { createColumn, columnToArray, freeColumn, type Cell, type Column, type ColumnInput } from '../memory/column.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 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 const owned: Column[] = [];\n try {\n const out: NamedColumn[] = [];\n for (const name of leftNames) {\n const col = gatherJS(rt, left.getColumn(name)!, res.lIdx);\n owned.push(col);\n out.push({ name, col });\n }\n for (const name of rightNames) {\n const col = gatherJS(rt, right.getColumn(name)!, res.rIdx);\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 void how;\n }\n}\n\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}\n\ninterface PreparedKey {\n readonly leftPtr: number;\n readonly rightPtr: number;\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 const { ctx } = rt;\n if (lCol.dtype === 'utf8') {\n const unified = unifyDictionaries(ctx, lCol.dict!, rCol.dict!);\n const leftPtr = remapIndices(rt, lCol, unified.remapA, lLen);\n const rightPtr = remapIndices(rt, rCol, unified.remapB, 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 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\nfunction remapIndices(rt: DfRuntime, col: Column, remap: Int32Array, len: number): number {\n const { ctx } = rt;\n const outPtr = 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: outPtr, length: len, dtype: 'i32' }) as Int32Array;\n for (let i = 0; i < len; i++) {\n const s = idx[i]!;\n out[i] = s >= 0 && s < remap.length ? remap[s]! : 0;\n }\n return outPtr;\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 const hashPtr = ctx.mod.alloc(Math.max(len * 8, 1));\n for (let k = 0; k < inputs.length; k++) {\n const inp = inputs[k]!;\n 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 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 * databonk/parquet — Parquet I/O subpath export (ADR-011).\n *\n * Exported API:\n * readParquet(bytes, rt) → Promise<DataFrame> (async; hyparquet reader)\n * writeParquet(df, opts?) → Uint8Array (sync; hyparquet-writer)\n *\n * Supported profile (ADR-011 §supported-profile):\n * dtypes: f64 f32 i32 u32 i64 bool utf8 date32 timestamp (+ nulls everywhere)\n * compression: snappy and uncompressed\n * utf8: dictionary-encoded when beneficial\n * timestamp: INT64 + TIMESTAMP(MILLIS, isAdjustedToUTC); tz round-trips in\n * file key_value_metadata as \"databonk:tz:<colname>\"\n *\n * Anything outside the profile raises a clear \"unsupported\" Error naming the feature —\n * never a silent wrong result (ADR-011 §Consequences).\n *\n * Dependencies (runtime):\n * hyparquet — reader (native Snappy decompressor included)\n * hyparquet-writer — writer (native Snappy included, default UNCOMPRESSED)\n * Neither dependency leaks into the main \".\" entry — this subpath is the firewall.\n */\n\n// ---------------------------------------------------------------------------\n// Imports — hyparquet (reader) + hyparquet-writer (writer)\n// The 'node' sub-export of hyparquet is used for Node compatibility; the\n// default export works in both Node and browser contexts via the exports map.\n// ---------------------------------------------------------------------------\n// Use sub-path exports so TypeScript NodeNext resolves the \"types\" field via\n// the \"./src/*.js\" entry in each package's exports map — the root \".\" entry uses\n// a \"browser\"/\"default\" split that tsc doesn't match when building DTS.\n// NOTE: internal 'src/index.js' subpath instead of the public 'hyparquet' entry —\n// the root entry's browser/default exports split defeats NodeNext DTS resolution\n// (see bead dataframe-dh9.7). hyparquet is EXACT-pinned in package.json for this\n// reason; when bumping the pin, retry the public specifier first.\nimport { parquetMetadataAsync, parquetRead, parquetSchema } from 'hyparquet/src/index.js';\nimport { parquetWriteBuffer } from 'hyparquet-writer/src/index.js';\n\n// Internal databonk imports (NOT re-exported — parquet subpath does not widen\n// the main-entry surface).\nimport { DataFrame } from '../frame/dataframe.js';\nimport type { DfRuntime } from '../frame/runtime.js';\nimport type { NamedColumn } from '../frame/groupby.js';\nimport type { DType } from '../memory/dtype.js';\nimport { createColumn, columnToArray, type ColumnInput } from '../memory/column.js';\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\n/** Write options for {@link writeParquet}. */\nexport interface ParquetWriteOptions {\n /**\n * Compression codec. Only `'snappy'` and `'uncompressed'` are supported\n * (ADR-011). Defaults to `'uncompressed'`.\n */\n readonly compression?: 'snappy' | 'uncompressed';\n}\n\n// ---------------------------------------------------------------------------\n// Internal helpers\n// ---------------------------------------------------------------------------\n\n/** Supported compression codecs (Parquet names). */\nconst SUPPORTED_CODECS = new Set<string | undefined>(['UNCOMPRESSED', 'SNAPPY', undefined]);\n\n/**\n * Custom hyparquet parsers that keep temporal values as raw primitives rather\n * than converting them to `Date` objects. This lets us store them in wasm\n * memory as i64/i32 without a double conversion.\n */\nconst RAW_PARSERS = {\n timestampFromMilliseconds: (ms: bigint) => ms,\n timestampFromMicroseconds: (us: bigint) => us / 1000n,\n timestampFromNanoseconds: (ns: bigint) => ns / 1_000_000n,\n dateFromDays: (d: number) => d,\n stringFromBytes: (b: Uint8Array | null) =>\n b != null ? new TextDecoder().decode(b) : null,\n jsonFromBytes: (b: Uint8Array | null) =>\n b != null ? JSON.parse(new TextDecoder().decode(b)) : null,\n bsonFromBytes: (b: Uint8Array | null) => b,\n geometryFromBytes: (b: Uint8Array | null) => b,\n geographyFromBytes: (b: Uint8Array | null) => b,\n uuidFromBytes: (b: Uint8Array | null) => b,\n} as Record<string, (v: unknown) => unknown>;\n\n/** Wrap a Uint8Array / ArrayBuffer in the hyparquet AsyncBuffer shape. */\nfunction makeAsyncBuffer(\n input: Uint8Array | ArrayBuffer,\n): { byteLength: number; slice(s: number, e: number): Promise<ArrayBuffer> } {\n const ab: ArrayBuffer =\n input instanceof ArrayBuffer\n ? input\n : // Extract exactly the bytes of this typed-array view (handles byteOffset).\n // Cast needed: TypedArray.buffer is ArrayBuffer|SharedArrayBuffer per TS,\n // but slice() always returns a plain ArrayBuffer.\n (input.buffer as ArrayBuffer).slice(input.byteOffset, input.byteOffset + input.byteLength);\n return {\n byteLength: ab.byteLength,\n slice: (s: number, e: number) => Promise.resolve((ab as ArrayBuffer).slice(s, e)),\n };\n}\n\n// ---------------------------------------------------------------------------\n// Schema inspection helpers (for readParquet)\n// ---------------------------------------------------------------------------\n\ninterface ColInfo {\n name: string;\n dtype: DType;\n tz?: string; // for timestamp columns only\n}\n\n/**\n * Map one Parquet SchemaElement (a direct child of the root, i.e. a column)\n * to a databonk ColInfo. Throws a descriptive \"unsupported\" error for anything\n * outside the ADR-011 profile.\n */\nfunction mapSchemaElement(\n el: Record<string, unknown>,\n tzByCol: Map<string, string>,\n): ColInfo {\n const name = el['name'] as string;\n const type = el['type'] as string | undefined;\n const lt = el['logical_type'] as Record<string, unknown> | undefined;\n const ct = el['converted_type'] as string | undefined;\n const numChildren = el['num_children'] as number | undefined;\n const rep = el['repetition_type'] as string | undefined;\n\n // ── Nested / repeated structures ────────────────────────────────────────\n if (numChildren != null && numChildren > 0) {\n const ltType = lt?.['type'] as string | undefined;\n if (ltType === 'LIST')\n throw new Error(\n `unsupported Parquet feature: LIST column '${name}' — nested/repeated types are not supported by databonk/parquet (ADR-011)`,\n );\n if (ltType === 'MAP')\n throw new Error(\n `unsupported Parquet feature: MAP column '${name}' — nested types are not supported (ADR-011)`,\n );\n throw new Error(\n `unsupported Parquet feature: nested/group column '${name}' — databonk/parquet only supports flat columns (ADR-011)`,\n );\n }\n if (rep === 'REPEATED')\n throw new Error(\n `unsupported Parquet feature: REPEATED field '${name}' — only OPTIONAL/REQUIRED are supported (ADR-011)`,\n );\n\n // ── Per-physical-type mapping ────────────────────────────────────────────\n switch (type) {\n case 'DOUBLE':\n return { name, dtype: 'f64' };\n\n case 'FLOAT':\n return { name, dtype: 'f32' };\n\n case 'BOOLEAN':\n return { name, dtype: 'bool' };\n\n case 'INT32': {\n const ltType = lt?.['type'] as string | undefined;\n if (ltType === 'DATE' || ct === 'DATE')\n return { name, dtype: 'date32' };\n if (ltType === 'DECIMAL' || ct === 'DECIMAL')\n throw new Error(\n `unsupported Parquet feature: DECIMAL column '${name}' (ADR-011 — only the databonk numeric dtypes are supported)`,\n );\n // INTEGER logical type: check signedness\n if (ltType === 'INTEGER') {\n const isSigned = lt?.['isSigned'] as boolean | undefined;\n return { name, dtype: isSigned === false ? 'u32' : 'i32' };\n }\n // Converted-type unsigned aliases\n if (ct === 'UINT_32') return { name, dtype: 'u32' };\n // Default INT32 = signed i32\n return { name, dtype: 'i32' };\n }\n\n case 'INT64': {\n const ltType = lt?.['type'] as string | undefined;\n if (ltType === 'DECIMAL' || ct === 'DECIMAL')\n throw new Error(\n `unsupported Parquet feature: DECIMAL column '${name}' (ADR-011)`,\n );\n if (ltType === 'TIMESTAMP' || ct === 'TIMESTAMP_MILLIS') {\n const unit = lt?.['unit'] as string | undefined;\n if (unit != null && unit !== 'MILLIS')\n throw new Error(\n `unsupported Parquet feature: TIMESTAMP with unit '${unit}' in column '${name}' — only MILLIS is supported (ADR-011)`,\n );\n if (ct === 'TIMESTAMP_MICROS')\n throw new Error(\n `unsupported Parquet feature: TIMESTAMP_MICROS column '${name}' — only MILLIS is supported (ADR-011)`,\n );\n const tz = tzByCol.get(name);\n // exactOptionalPropertyTypes: only include tz key when it has a value.\n return tz !== undefined ? { name, dtype: 'timestamp', tz } : { name, dtype: 'timestamp' };\n }\n return { name, dtype: 'i64' };\n }\n\n case 'INT96':\n throw new Error(\n `unsupported Parquet feature: INT96 timestamp column '${name}' — only TIMESTAMP(INT64, MILLIS) is supported (ADR-011)`,\n );\n\n case 'FIXED_LEN_BYTE_ARRAY':\n throw new Error(\n `unsupported Parquet feature: FIXED_LEN_BYTE_ARRAY column '${name}' (ADR-011)`,\n );\n\n case 'BYTE_ARRAY': {\n const ltType = lt?.['type'] as string | undefined;\n if (ltType === 'STRING' || ct === 'UTF8')\n return { name, dtype: 'utf8' };\n // Decimal over byte array\n if (ltType === 'DECIMAL' || ct === 'DECIMAL')\n throw new Error(\n `unsupported Parquet feature: DECIMAL column '${name}' (ADR-011)`,\n );\n throw new Error(\n `unsupported Parquet feature: BYTE_ARRAY column '${name}' without STRING/UTF8 annotation is not supported (ADR-011)`,\n );\n }\n\n default:\n throw new Error(\n `unsupported Parquet feature: unknown physical type '${String(type ?? 'GROUP')}' in column '${name}' (ADR-011)`,\n );\n }\n}\n\n// ---------------------------------------------------------------------------\n// Chunk accumulation for multi-row-group files\n// ---------------------------------------------------------------------------\n\ntype DecodedChunk = unknown[] | ArrayBufferView;\n\n/**\n * Merge column chunks from multiple row groups into a single typed or JS array\n * suitable for `createColumn`. Single-chunk files (the common case) return\n * the chunk directly to preserve TypedArray fast paths.\n */\nfunction mergeChunks(parts: DecodedChunk[]): ColumnInput {\n if (parts.length === 0) return [] as unknown as ColumnInput;\n if (parts.length === 1) return parts[0] as unknown as ColumnInput;\n\n // Multiple row groups: flatten to a JS array (createColumn slow path is fine here).\n const total = parts.reduce((s, p) => s + (p as ArrayLike<unknown>).length, 0);\n const out = new Array<unknown>(total);\n let off = 0;\n for (const p of parts) {\n const len = (p as ArrayLike<unknown>).length;\n for (let i = 0; i < len; i++) out[off++] = (p as ArrayLike<unknown>)[i];\n }\n return out as unknown as ColumnInput;\n}\n\n// ---------------------------------------------------------------------------\n// readParquet\n// ---------------------------------------------------------------------------\n\n/**\n * Read a Parquet file into a databonk {@link DataFrame}.\n *\n * @param bytes - The raw Parquet file bytes.\n * @param rt - The databonk runtime (from `init()` / `defaultRuntime()`).\n *\n * @throws {Error} if the file uses any out-of-profile feature (ADR-011):\n * compression other than SNAPPY/UNCOMPRESSED, nested/repeated columns,\n * INT96 timestamps, DECIMAL, FIXED_LEN_BYTE_ARRAY, etc.\n */\nexport async function readParquet(\n bytes: Uint8Array | ArrayBuffer,\n rt: DfRuntime,\n): Promise<DataFrame> {\n const asyncBuf = makeAsyncBuffer(bytes);\n\n // 1. Parse metadata — includes schema and row-group codec info.\n const metadata = await parquetMetadataAsync(asyncBuf);\n\n // 2. Verify compression codecs across all row groups (fail fast before reading).\n for (const rg of (metadata as unknown as { row_groups?: unknown[] }).row_groups ?? []) {\n for (const cc of (rg as { columns?: unknown[] }).columns ?? []) {\n const codec = (cc as { meta_data?: { codec?: string } }).meta_data?.codec;\n if (!SUPPORTED_CODECS.has(codec)) {\n throw new Error(\n `unsupported Parquet compression codec: '${codec}'. ` +\n `databonk/parquet supports only SNAPPY and UNCOMPRESSED (ADR-011). ` +\n `For GZIP/ZSTD/BROTLI/LZ4, re-compress the file first.`,\n );\n }\n }\n }\n\n // 3. Extract per-column tz from file key_value_metadata (ADR-011 round-trip).\n const tzByCol = new Map<string, string>();\n const kvMeta = (metadata as unknown as { key_value_metadata?: Array<{ key: string; value: string }> }).key_value_metadata ?? [];\n const TZ_PREFIX = 'databonk:tz:';\n for (const { key, value } of kvMeta) {\n if (key.startsWith(TZ_PREFIX) && value) {\n tzByCol.set(key.slice(TZ_PREFIX.length), value);\n }\n }\n\n // 4. Parse the schema — map each column to a databonk dtype (throws on unsupported).\n const schemaTree = parquetSchema(metadata);\n // Use 'unknown' cast to avoid SchemaTree structural typing issues with exactOptionalPropertyTypes.\n const colInfos: ColInfo[] = (schemaTree.children as unknown as Array<{ element: Record<string, unknown> }>).map(\n (c) => mapSchemaElement(c.element, tzByCol),\n );\n\n // 5. Read column chunks via onChunk (column-native; avoids row materialization).\n const chunksByName = new Map<string, DecodedChunk[]>();\n for (const { name } of colInfos) chunksByName.set(name, []);\n\n await parquetRead({\n file: asyncBuf,\n metadata,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n parsers: RAW_PARSERS as any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n onChunk(chunk: any) {\n const arr = chunksByName.get(chunk.columnName);\n if (arr) arr.push(chunk.columnData as DecodedChunk);\n },\n } as Parameters<typeof parquetRead>[0]);\n\n // 6. Build databonk columns from the accumulated chunks.\n const namedCols: NamedColumn[] = [];\n for (const { name, dtype, tz } of colInfos) {\n const parts = chunksByName.get(name) ?? [];\n const data = mergeChunks(parts);\n const col = createColumn(rt.ctx, dtype, data, tz);\n namedCols.push({ name, col });\n }\n\n // 7. Build the DataFrame via buildResult (public API on a seed frame).\n // The seed frame carries the runtime; buildResult adopts the named columns.\n const seedDf = DataFrame.fromColumns({}, { runtime: rt });\n const df = seedDf.buildResult(namedCols);\n seedDf.dispose();\n return df;\n}\n\n// ---------------------------------------------------------------------------\n// writeParquet helpers\n// ---------------------------------------------------------------------------\n\n/** Parquet SchemaElement shape accepted by hyparquet-writer. */\ninterface SchemaEl {\n name: string;\n num_children?: number;\n type?: string;\n repetition_type?: string;\n logical_type?: Record<string, unknown>;\n converted_type?: string;\n}\n\n/** ColumnSource shape accepted by hyparquet-writer. */\ninterface ColSrc {\n name: string;\n data: unknown[];\n}\n\n/**\n * Build the Parquet schema element and JS data array for one databonk column.\n * Returns `{ el, data, tzKey }` where `tzKey` is set for timestamp-with-tz columns\n * so the caller can add it to `kvMetadata`.\n */\nfunction buildColWrite(\n ctx: { ctx: import('../memory/context.js').MemoryContext }['ctx'],\n colName: string,\n col: import('../memory/column.js').Column,\n n: number,\n): { el: SchemaEl; data: unknown[]; tzKey?: { key: string; value: string } } {\n // Extract JS values (with nulls where the validity bit = 0).\n // columnToArray handles all dtypes including utf8 dictionary decode, bigint i64/ts, etc.\n const values = columnToArray(ctx, col) as unknown[];\n\n let el: SchemaEl;\n let tzKey: { key: string; value: string } | undefined;\n\n switch (col.dtype) {\n case 'f64':\n el = { name: colName, type: 'DOUBLE', repetition_type: 'OPTIONAL' };\n break;\n case 'f32':\n el = { name: colName, type: 'FLOAT', repetition_type: 'OPTIONAL' };\n break;\n case 'i32':\n el = { name: colName, type: 'INT32', repetition_type: 'OPTIONAL' };\n break;\n case 'u32':\n // Use converted_type UINT_32 (Parquet 1.0 annotation) rather than the newer\n // INTEGER logical type: hyparquet-writer zigzag-encodes the bitWidth i8 as i32\n // which makes parquet-wasm read bitWidth=64 instead of 32 and reject the file.\n // UINT_32 is universally supported and hyparquet reads it via `ct === 'UINT_32'`.\n el = {\n name: colName,\n type: 'INT32',\n repetition_type: 'OPTIONAL',\n converted_type: 'UINT_32',\n };\n break;\n case 'i64':\n el = { name: colName, type: 'INT64', repetition_type: 'OPTIONAL' };\n break;\n case 'bool':\n el = { name: colName, type: 'BOOLEAN', repetition_type: 'OPTIONAL' };\n break;\n case 'utf8':\n el = {\n name: colName,\n type: 'BYTE_ARRAY',\n repetition_type: 'OPTIONAL',\n logical_type: { type: 'STRING' },\n converted_type: 'UTF8',\n };\n break;\n case 'date32':\n el = {\n name: colName,\n type: 'INT32',\n repetition_type: 'OPTIONAL',\n logical_type: { type: 'DATE' },\n };\n break;\n case 'timestamp': {\n el = {\n name: colName,\n type: 'INT64',\n repetition_type: 'OPTIONAL',\n logical_type: {\n type: 'TIMESTAMP',\n isAdjustedToUTC: true,\n // hyparquet-writer expects the Thrift union shape { MILLIS: {} }\n unit: { MILLIS: {} },\n },\n };\n if (col.tz) {\n tzKey = { key: `databonk:tz:${colName}`, value: col.tz };\n }\n break;\n }\n default: {\n // Should not happen for supported dtypes, but be explicit.\n const d: never = col.dtype;\n throw new Error(`unsupported databonk dtype for Parquet write: '${String(d)}'`);\n }\n }\n\n // exactOptionalPropertyTypes: include tzKey only when it has a value.\n return tzKey !== undefined ? { el, data: values, tzKey } : { el, data: values };\n}\n\n// ---------------------------------------------------------------------------\n// writeParquet\n// ---------------------------------------------------------------------------\n\n/**\n * Encode a databonk {@link DataFrame} as a Parquet file (Uint8Array).\n *\n * All databonk dtypes are supported (ADR-011 §supported-profile).\n * Only `'snappy'` and `'uncompressed'` are valid `compression` values —\n * any other string throws a clear \"unsupported\" error.\n *\n * @param df - The DataFrame to encode.\n * @param opts - Optional write options (compression, default `'uncompressed'`).\n */\nexport function writeParquet(\n df: DataFrame,\n opts: ParquetWriteOptions = {},\n): Uint8Array {\n const { compression = 'uncompressed' } = opts;\n\n if (compression !== 'snappy' && compression !== 'uncompressed') {\n throw new Error(\n `unsupported Parquet compression codec: '${compression}'. ` +\n `databonk/parquet writeParquet only accepts 'snappy' or 'uncompressed' (ADR-011).`,\n );\n }\n\n const codec = compression === 'snappy' ? 'SNAPPY' : 'UNCOMPRESSED';\n const names = df.columns as string[];\n const n = df.length;\n const ctx = df.ctx;\n\n // Build schema (hyparquet-writer expects root element first, then children).\n const schema: SchemaEl[] = [{ name: 'root', num_children: names.length }];\n const columnData: ColSrc[] = [];\n const kvMetadata: Array<{ key: string; value: string }> = [];\n\n for (const name of names) {\n const col = df.getColumn(name)!;\n const { el, data, tzKey } = buildColWrite(ctx, name, col, n);\n schema.push(el);\n columnData.push({ name, data });\n if (tzKey) kvMetadata.push(tzKey);\n }\n\n // Cast to any to avoid exactOptionalPropertyTypes conflicts with hyparquet-writer's\n // untyped JS options object.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const writeOpts: any = { schema, columnData, codec };\n if (kvMetadata.length > 0) writeOpts.kvMetadata = kvMetadata;\n const resultAb = parquetWriteBuffer(writeOpts);\n\n // hyparquet-writer returns an ArrayBuffer; wrap in Uint8Array.\n return new Uint8Array(resultAb as unknown as ArrayBuffer);\n}\n"]}
|