typegpu 0.5.6 → 0.5.7
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/LICENSE.md +11 -12
- package/README.md +13 -5
- package/chunk-5RYM4COI.js +4 -0
- package/chunk-5RYM4COI.js.map +1 -0
- package/chunk-FHOQ6WZE.cjs +2 -0
- package/chunk-FHOQ6WZE.cjs.map +1 -0
- package/chunk-ODKBWWHU.cjs +4 -0
- package/chunk-ODKBWWHU.cjs.map +1 -0
- package/chunk-SMTSXYNG.js +2 -0
- package/chunk-SMTSXYNG.js.map +1 -0
- package/data/index.cjs +1 -1
- package/data/index.cjs.map +1 -1
- package/data/index.d.cts +5 -23
- package/data/index.d.ts +5 -23
- package/data/index.js +1 -1
- package/index.cjs +23 -19
- package/index.cjs.map +1 -1
- package/index.d.cts +4 -1045
- package/index.d.ts +4 -1045
- package/index.js +23 -19
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/std/index.cjs +1 -1
- package/std/index.cjs.map +1 -1
- package/std/index.d.cts +53 -4
- package/std/index.d.ts +53 -4
- package/std/index.js +1 -1
- package/std/index.js.map +1 -1
- package/tgpuComputeFn-DH8_PcIR.d.cts +3042 -0
- package/tgpuComputeFn-DH8_PcIR.d.ts +3042 -0
- package/attributes-B90UjSYb.d.ts +0 -159
- package/attributes-zljQ-iA7.d.cts +0 -159
- package/chunk-KJHEEZQT.js +0 -4
- package/chunk-KJHEEZQT.js.map +0 -1
- package/chunk-LB4TSIPN.cjs +0 -2
- package/chunk-LB4TSIPN.cjs.map +0 -1
- package/chunk-VTUUXD6H.cjs +0 -4
- package/chunk-VTUUXD6H.cjs.map +0 -1
- package/chunk-YVK55BVR.js +0 -2
- package/chunk-YVK55BVR.js.map +0 -1
- package/dataTypes-6k4EJeol.d.cts +0 -1405
- package/dataTypes-6k4EJeol.d.ts +0 -1405
- package/sampler-ByLNpSxj.d.ts +0 -369
- package/sampler-NRTAYTIW.d.cts +0 -369
package/std/index.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../../src/std/discard.ts","../../src/data/vectorOps.ts","../../src/std/numeric.ts","../../src/std/boolean.ts","../../src/std/atomic.ts","../../src/std/array.ts","../../src/std/packing.ts","../../src/std/texture.ts"],"sourcesContent":["import { Void } from '../data/wgslTypes.ts';\nimport { createDualImpl } from '../shared/generators.ts';\n\nexport const discard = createDualImpl(\n // CPU\n (): never => {\n throw new Error('discard() can only be used on the GPU.');\n },\n // GPU\n () => ({\n value: 'discard;',\n dataType: Void,\n }),\n);\n","import { mat2x2f, mat3x3f, mat4x4f } from './matrix.ts';\nimport {\n vec2b,\n vec2f,\n vec2h,\n vec2i,\n vec2u,\n vec3b,\n vec3f,\n vec3h,\n vec3i,\n vec3u,\n vec4b,\n vec4f,\n vec4h,\n vec4i,\n vec4u,\n} from './vector.ts';\nimport type * as wgsl from './wgslTypes.ts';\nimport type { VecKind } from './wgslTypes.ts';\n\ntype vBase = { kind: VecKind };\ntype v2 = wgsl.v2f | wgsl.v2h | wgsl.v2i | wgsl.v2u;\ntype v3 = wgsl.v3f | wgsl.v3h | wgsl.v3i | wgsl.v3u;\ntype v4 = wgsl.v4f | wgsl.v4h | wgsl.v4i | wgsl.v4u;\n\ntype MatKind = 'mat2x2f' | 'mat3x3f' | 'mat4x4f';\n\nconst lengthVec2 = (v: v2) => Math.sqrt(v.x ** 2 + v.y ** 2);\nconst lengthVec3 = (v: v3) => Math.sqrt(v.x ** 2 + v.y ** 2 + v.z ** 2);\nconst lengthVec4 = (v: v4) =>\n Math.sqrt(v.x ** 2 + v.y ** 2 + v.z ** 2 + v.w ** 2);\n\nconst dotVec2 = (lhs: v2, rhs: v2) => lhs.x * rhs.x + lhs.y * rhs.y;\nconst dotVec3 = (lhs: v3, rhs: v3) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z;\nconst dotVec4 = (lhs: v4, rhs: v4) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z + lhs.w * rhs.w;\n\nconst clamp = (value: number, low: number, high: number) =>\n Math.min(Math.max(low, value), high);\n\ntype UnaryOp = (a: number) => number;\ntype BinaryOp = (a: number, b: number) => number;\n\nconst unary2f = (op: UnaryOp) => (a: wgsl.v2f) => vec2f(op(a.x), op(a.y));\nconst unary2h = (op: UnaryOp) => (a: wgsl.v2h) => vec2h(op(a.x), op(a.y));\nconst unary2i = (op: UnaryOp) => (a: wgsl.v2i) => vec2i(op(a.x), op(a.y));\nconst unary2u = (op: UnaryOp) => (a: wgsl.v2u) => vec2u(op(a.x), op(a.y));\n\nconst unary3f = (op: UnaryOp) => (a: wgsl.v3f) =>\n vec3f(op(a.x), op(a.y), op(a.z));\n\nconst unary3h = (op: UnaryOp) => (a: wgsl.v3h) =>\n vec3h(op(a.x), op(a.y), op(a.z));\n\nconst unary3i = (op: UnaryOp) => (a: wgsl.v3i) =>\n vec3i(op(a.x), op(a.y), op(a.z));\n\nconst unary3u = (op: UnaryOp) => (a: wgsl.v3u) =>\n vec3u(op(a.x), op(a.y), op(a.z));\n\nconst unary4f = (op: UnaryOp) => (a: wgsl.v4f) =>\n vec4f(op(a.x), op(a.y), op(a.z), op(a.w));\n\nconst unary4h = (op: UnaryOp) => (a: wgsl.v4h) =>\n vec4h(op(a.x), op(a.y), op(a.z), op(a.w));\n\nconst unary4i = (op: UnaryOp) => (a: wgsl.v4i) =>\n vec4i(op(a.x), op(a.y), op(a.z), op(a.w));\n\nconst unary4u = (op: UnaryOp) => (a: wgsl.v4u) =>\n vec4u(op(a.x), op(a.y), op(a.z), op(a.w));\n\nconst binaryComponentWise2f = (op: BinaryOp) => (a: wgsl.v2f, b: wgsl.v2f) =>\n vec2f(op(a.x, b.x), op(a.y, b.y));\n\nconst binaryComponentWise2h = (op: BinaryOp) => (a: wgsl.v2h, b: wgsl.v2h) =>\n vec2h(op(a.x, b.x), op(a.y, b.y));\n\nconst binaryComponentWise2i = (op: BinaryOp) => (a: wgsl.v2i, b: wgsl.v2i) =>\n vec2i(op(a.x, b.x), op(a.y, b.y));\n\nconst binaryComponentWise2u = (op: BinaryOp) => (a: wgsl.v2u, b: wgsl.v2u) =>\n vec2u(op(a.x, b.x), op(a.y, b.y));\n\nconst binaryComponentWise3f = (op: BinaryOp) => (a: wgsl.v3f, b: wgsl.v3f) =>\n vec3f(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z));\n\nconst binaryComponentWise3h = (op: BinaryOp) => (a: wgsl.v3h, b: wgsl.v3h) =>\n vec3h(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z));\n\nconst binaryComponentWise3i = (op: BinaryOp) => (a: wgsl.v3i, b: wgsl.v3i) =>\n vec3i(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z));\n\nconst binaryComponentWise3u = (op: BinaryOp) => (a: wgsl.v3u, b: wgsl.v3u) =>\n vec3u(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z));\n\nconst binaryComponentWise4f = (op: BinaryOp) => (a: wgsl.v4f, b: wgsl.v4f) =>\n vec4f(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z), op(a.w, b.w));\n\nconst binaryComponentWise4h = (op: BinaryOp) => (a: wgsl.v4h, b: wgsl.v4h) =>\n vec4h(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z), op(a.w, b.w));\n\nconst binaryComponentWise4i = (op: BinaryOp) => (a: wgsl.v4i, b: wgsl.v4i) =>\n vec4i(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z), op(a.w, b.w));\n\nconst binaryComponentWise4u = (op: BinaryOp) => (a: wgsl.v4u, b: wgsl.v4u) =>\n vec4u(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z), op(a.w, b.w));\n\nexport const VectorOps = {\n eq: {\n vec2f: (e1: wgsl.v2f, e2: wgsl.v2f) => vec2b(e1.x === e2.x, e1.y === e2.y),\n vec2h: (e1: wgsl.v2h, e2: wgsl.v2h) => vec2b(e1.x === e2.x, e1.y === e2.y),\n vec2i: (e1: wgsl.v2i, e2: wgsl.v2i) => vec2b(e1.x === e2.x, e1.y === e2.y),\n vec2u: (e1: wgsl.v2u, e2: wgsl.v2u) => vec2b(e1.x === e2.x, e1.y === e2.y),\n 'vec2<bool>': (e1: wgsl.v2b, e2: wgsl.v2b) =>\n vec2b(e1.x === e2.x, e1.y === e2.y),\n\n vec3f: (e1: wgsl.v3f, e2: wgsl.v3f) =>\n vec3b(e1.x === e2.x, e1.y === e2.y, e1.z === e2.z),\n vec3h: (e1: wgsl.v3h, e2: wgsl.v3h) =>\n vec3b(e1.x === e2.x, e1.y === e2.y, e1.z === e2.z),\n vec3i: (e1: wgsl.v3i, e2: wgsl.v3i) =>\n vec3b(e1.x === e2.x, e1.y === e2.y, e1.z === e2.z),\n vec3u: (e1: wgsl.v3u, e2: wgsl.v3u) =>\n vec3b(e1.x === e2.x, e1.y === e2.y, e1.z === e2.z),\n 'vec3<bool>': (e1: wgsl.v3b, e2: wgsl.v3b) =>\n vec3b(e1.x === e2.x, e1.y === e2.y, e1.z === e2.z),\n\n vec4f: (e1: wgsl.v4f, e2: wgsl.v4f) =>\n vec4b(e1.x === e2.x, e1.y === e2.y, e1.z === e2.z, e1.w === e2.w),\n vec4h: (e1: wgsl.v4h, e2: wgsl.v4h) =>\n vec4b(e1.x === e2.x, e1.y === e2.y, e1.z === e2.z, e1.w === e2.w),\n vec4i: (e1: wgsl.v4i, e2: wgsl.v4i) =>\n vec4b(e1.x === e2.x, e1.y === e2.y, e1.z === e2.z, e1.w === e2.w),\n vec4u: (e1: wgsl.v4u, e2: wgsl.v4u) =>\n vec4b(e1.x === e2.x, e1.y === e2.y, e1.z === e2.z, e1.w === e2.w),\n 'vec4<bool>': (e1: wgsl.v4b, e2: wgsl.v4b) =>\n vec4b(e1.x === e2.x, e1.y === e2.y, e1.z === e2.z, e1.w === e2.w),\n } as Record<\n VecKind,\n <T extends wgsl.AnyVecInstance>(\n e1: T,\n e2: T,\n ) => T extends wgsl.AnyVec2Instance\n ? wgsl.v2b\n : T extends wgsl.AnyVec3Instance\n ? wgsl.v3b\n : wgsl.v4b\n >,\n\n lt: {\n vec2f: (e1: wgsl.v2f, e2: wgsl.v2f) => vec2b(e1.x < e2.x, e1.y < e2.y),\n vec2h: (e1: wgsl.v2h, e2: wgsl.v2h) => vec2b(e1.x < e2.x, e1.y < e2.y),\n vec2i: (e1: wgsl.v2i, e2: wgsl.v2i) => vec2b(e1.x < e2.x, e1.y < e2.y),\n vec2u: (e1: wgsl.v2u, e2: wgsl.v2u) => vec2b(e1.x < e2.x, e1.y < e2.y),\n\n vec3f: (e1: wgsl.v3f, e2: wgsl.v3f) =>\n vec3b(e1.x < e2.x, e1.y < e2.y, e1.z < e2.z),\n vec3h: (e1: wgsl.v3h, e2: wgsl.v3h) =>\n vec3b(e1.x < e2.x, e1.y < e2.y, e1.z < e2.z),\n vec3i: (e1: wgsl.v3i, e2: wgsl.v3i) =>\n vec3b(e1.x < e2.x, e1.y < e2.y, e1.z < e2.z),\n vec3u: (e1: wgsl.v3u, e2: wgsl.v3u) =>\n vec3b(e1.x < e2.x, e1.y < e2.y, e1.z < e2.z),\n\n vec4f: (e1: wgsl.v4f, e2: wgsl.v4f) =>\n vec4b(e1.x < e2.x, e1.y < e2.y, e1.z < e2.z, e1.w < e2.w),\n vec4h: (e1: wgsl.v4h, e2: wgsl.v4h) =>\n vec4b(e1.x < e2.x, e1.y < e2.y, e1.z < e2.z, e1.w < e2.w),\n vec4i: (e1: wgsl.v4i, e2: wgsl.v4i) =>\n vec4b(e1.x < e2.x, e1.y < e2.y, e1.z < e2.z, e1.w < e2.w),\n vec4u: (e1: wgsl.v4u, e2: wgsl.v4u) =>\n vec4b(e1.x < e2.x, e1.y < e2.y, e1.z < e2.z, e1.w < e2.w),\n } as Record<\n VecKind,\n <T extends wgsl.AnyNumericVecInstance>(\n e1: T,\n e2: T,\n ) => T extends wgsl.AnyVec2Instance\n ? wgsl.v2b\n : T extends wgsl.AnyVec3Instance\n ? wgsl.v3b\n : wgsl.v4b\n >,\n\n or: {\n 'vec2<bool>': (e1: wgsl.v2b, e2: wgsl.v2b) =>\n vec2b(e1.x || e2.x, e1.y || e2.y),\n 'vec3<bool>': (e1: wgsl.v3b, e2: wgsl.v3b) =>\n vec3b(e1.x || e2.x, e1.y || e2.y, e1.z || e2.z),\n 'vec4<bool>': (e1: wgsl.v4b, e2: wgsl.v4b) =>\n vec4b(e1.x || e2.x, e1.y || e2.y, e1.z || e2.z, e1.w || e2.w),\n } as Record<\n VecKind,\n <T extends wgsl.AnyBooleanVecInstance>(e1: T, e2: T) => T\n >,\n\n all: {\n 'vec2<bool>': (e: wgsl.v2b) => e.x && e.y,\n 'vec3<bool>': (e: wgsl.v3b) => e.x && e.y && e.z,\n 'vec4<bool>': (e: wgsl.v4b) => e.x && e.y && e.z && e.w,\n } as Record<VecKind, (v: wgsl.AnyBooleanVecInstance) => boolean>,\n\n abs: {\n vec2f: unary2f(Math.abs),\n vec2h: unary2h(Math.abs),\n vec2i: unary2i(Math.abs),\n vec2u: unary2u(Math.abs),\n\n vec3f: unary3f(Math.abs),\n vec3h: unary3h(Math.abs),\n vec3i: unary3i(Math.abs),\n vec3u: unary3u(Math.abs),\n\n vec4f: unary4f(Math.abs),\n vec4h: unary4h(Math.abs),\n vec4i: unary4i(Math.abs),\n vec4u: unary4u(Math.abs),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n atan2: {\n vec2f: binaryComponentWise2f(Math.atan2),\n vec2h: binaryComponentWise2h(Math.atan2),\n\n vec3f: binaryComponentWise3f(Math.atan2),\n vec3h: binaryComponentWise3h(Math.atan2),\n\n vec4f: binaryComponentWise4f(Math.atan2),\n vec4h: binaryComponentWise4h(Math.atan2),\n } as Record<VecKind, <T extends vBase>(a: T, b: T) => T>,\n\n acos: {\n vec2f: unary2f(Math.acos),\n vec2h: unary2h(Math.acos),\n vec2i: unary2i(Math.acos),\n vec2u: unary2u(Math.acos),\n\n vec3f: unary3f(Math.acos),\n vec3h: unary3h(Math.acos),\n vec3i: unary3i(Math.acos),\n vec3u: unary3u(Math.acos),\n\n vec4f: unary4f(Math.acos),\n vec4h: unary4h(Math.acos),\n vec4i: unary4i(Math.acos),\n vec4u: unary4u(Math.acos),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n asin: {\n vec2f: unary2f(Math.asin),\n vec2h: unary2h(Math.asin),\n vec2i: unary2i(Math.asin),\n vec2u: unary2u(Math.asin),\n\n vec3f: unary3f(Math.asin),\n vec3h: unary3h(Math.asin),\n vec3i: unary3i(Math.asin),\n vec3u: unary3u(Math.asin),\n\n vec4f: unary4f(Math.asin),\n vec4h: unary4h(Math.asin),\n vec4i: unary4i(Math.asin),\n vec4u: unary4u(Math.asin),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n ceil: {\n vec2f: unary2f(Math.ceil),\n vec2h: unary2h(Math.ceil),\n\n vec3f: unary3f(Math.ceil),\n vec3h: unary3h(Math.ceil),\n\n vec4f: unary4f(Math.ceil),\n vec4h: unary4h(Math.ceil),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n clamp: {\n vec2f: (v: wgsl.v2f, low: wgsl.v2f, high: wgsl.v2f) =>\n vec2f(clamp(v.x, low.x, high.x), clamp(v.y, low.y, high.y)),\n vec2h: (v: wgsl.v2h, low: wgsl.v2h, high: wgsl.v2h) =>\n vec2h(clamp(v.x, low.x, high.x), clamp(v.y, low.y, high.y)),\n vec2i: (v: wgsl.v2i, low: wgsl.v2i, high: wgsl.v2i) =>\n vec2i(clamp(v.x, low.x, high.x), clamp(v.y, low.y, high.y)),\n vec2u: (v: wgsl.v2u, low: wgsl.v2u, high: wgsl.v2u) =>\n vec2u(clamp(v.x, low.x, high.x), clamp(v.y, low.y, high.y)),\n\n vec3f: (v: wgsl.v3f, low: wgsl.v3f, high: wgsl.v3f) =>\n vec3f(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n ),\n vec3h: (v: wgsl.v3h, low: wgsl.v3h, high: wgsl.v3h) =>\n vec3h(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n ),\n vec3i: (v: wgsl.v3i, low: wgsl.v3i, high: wgsl.v3f) =>\n vec3i(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n ),\n vec3u: (v: wgsl.v3u, low: wgsl.v3u, high: wgsl.v3f) =>\n vec3u(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n ),\n\n vec4f: (v: wgsl.v4f, low: wgsl.v4f, high: wgsl.v4f) =>\n vec4f(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n clamp(v.w, low.w, high.w),\n ),\n vec4h: (v: wgsl.v4h, low: wgsl.v4h, high: wgsl.v4h) =>\n vec4h(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n clamp(v.w, low.w, high.w),\n ),\n vec4i: (v: wgsl.v4i, low: wgsl.v4i, high: wgsl.v4i) =>\n vec4i(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n clamp(v.w, low.w, high.w),\n ),\n vec4u: (v: wgsl.v4u, low: wgsl.v4u, high: wgsl.v4u) =>\n vec4u(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n clamp(v.w, low.w, high.w),\n ),\n } as Record<VecKind, <T extends vBase>(v: T, low: T, high: T) => T>,\n\n length: {\n vec2f: lengthVec2,\n vec2h: lengthVec2,\n\n vec3f: lengthVec3,\n vec3h: lengthVec3,\n\n vec4f: lengthVec4,\n vec4h: lengthVec4,\n } as Record<VecKind, (v: vBase) => number>,\n\n add: {\n vec2f: (a: wgsl.v2f, b: wgsl.v2f) => vec2f(a.x + b.x, a.y + b.y),\n vec2h: (a: wgsl.v2h, b: wgsl.v2h) => vec2h(a.x + b.x, a.y + b.y),\n vec2i: (a: wgsl.v2i, b: wgsl.v2i) => vec2i(a.x + b.x, a.y + b.y),\n vec2u: (a: wgsl.v2u, b: wgsl.v2u) => vec2u(a.x + b.x, a.y + b.y),\n\n vec3f: (a: wgsl.v3f, b: wgsl.v3f) => vec3f(a.x + b.x, a.y + b.y, a.z + b.z),\n vec3h: (a: wgsl.v3h, b: wgsl.v3h) => vec3h(a.x + b.x, a.y + b.y, a.z + b.z),\n vec3i: (a: wgsl.v3i, b: wgsl.v3i) => vec3i(a.x + b.x, a.y + b.y, a.z + b.z),\n vec3u: (a: wgsl.v3u, b: wgsl.v3u) => vec3u(a.x + b.x, a.y + b.y, a.z + b.z),\n\n vec4f: (a: wgsl.v4f, b: wgsl.v4f) =>\n vec4f(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w),\n vec4h: (a: wgsl.v4h, b: wgsl.v4h) =>\n vec4h(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w),\n vec4i: (a: wgsl.v4i, b: wgsl.v4i) =>\n vec4i(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w),\n vec4u: (a: wgsl.v4u, b: wgsl.v4u) =>\n vec4u(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w),\n } as Record<VecKind, <T extends vBase>(lhs: T, rhs: T) => T>,\n\n sub: {\n vec2f: (a: wgsl.v2f, b: wgsl.v2f) => vec2f(a.x - b.x, a.y - b.y),\n vec2h: (a: wgsl.v2h, b: wgsl.v2h) => vec2h(a.x - b.x, a.y - b.y),\n vec2i: (a: wgsl.v2i, b: wgsl.v2i) => vec2i(a.x - b.x, a.y - b.y),\n vec2u: (a: wgsl.v2u, b: wgsl.v2u) => vec2u(a.x - b.x, a.y - b.y),\n\n vec3f: (a: wgsl.v3f, b: wgsl.v3f) => vec3f(a.x - b.x, a.y - b.y, a.z - b.z),\n vec3h: (a: wgsl.v3h, b: wgsl.v3h) => vec3h(a.x - b.x, a.y - b.y, a.z - b.z),\n vec3i: (a: wgsl.v3i, b: wgsl.v3i) => vec3i(a.x - b.x, a.y - b.y, a.z - b.z),\n vec3u: (a: wgsl.v3u, b: wgsl.v3u) => vec3u(a.x - b.x, a.y - b.y, a.z - b.z),\n\n vec4f: (a: wgsl.v4f, b: wgsl.v4f) =>\n vec4f(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w),\n vec4h: (a: wgsl.v4h, b: wgsl.v4h) =>\n vec4h(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w),\n vec4i: (a: wgsl.v4i, b: wgsl.v4i) =>\n vec4i(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w),\n vec4u: (a: wgsl.v4u, b: wgsl.v4u) =>\n vec4u(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w),\n } as Record<VecKind, <T extends vBase>(lhs: T, rhs: T) => T>,\n\n mulSxV: {\n vec2f: (s: number, v: wgsl.v2f) => vec2f(s * v.x, s * v.y),\n vec2h: (s: number, v: wgsl.v2h) => vec2h(s * v.x, s * v.y),\n vec2i: (s: number, v: wgsl.v2i) => vec2i(s * v.x, s * v.y),\n vec2u: (s: number, v: wgsl.v2u) => vec2u(s * v.x, s * v.y),\n\n vec3f: (s: number, v: wgsl.v3f) => vec3f(s * v.x, s * v.y, s * v.z),\n vec3h: (s: number, v: wgsl.v3h) => vec3h(s * v.x, s * v.y, s * v.z),\n vec3i: (s: number, v: wgsl.v3i) => vec3i(s * v.x, s * v.y, s * v.z),\n vec3u: (s: number, v: wgsl.v3u) => vec3u(s * v.x, s * v.y, s * v.z),\n\n vec4f: (s: number, v: wgsl.v4f) =>\n vec4f(s * v.x, s * v.y, s * v.z, s * v.w),\n vec4h: (s: number, v: wgsl.v4h) =>\n vec4h(s * v.x, s * v.y, s * v.z, s * v.w),\n vec4i: (s: number, v: wgsl.v4i) =>\n vec4i(s * v.x, s * v.y, s * v.z, s * v.w),\n vec4u: (s: number, v: wgsl.v4u) =>\n vec4u(s * v.x, s * v.y, s * v.z, s * v.w),\n\n mat2x2f: (s: number, m: wgsl.m2x2f) => {\n const m_ = m.columns as [wgsl.v2f, wgsl.v2f];\n return mat2x2f(s * m_[0].x, s * m_[0].y, s * m_[1].x, s * m_[1].y);\n },\n\n mat3x3f: (s: number, m: wgsl.m3x3f) => {\n const m_ = m.columns as [wgsl.v3f, wgsl.v3f, wgsl.v3f];\n return mat3x3f(\n s * m_[0].x,\n s * m_[0].y,\n s * m_[0].z,\n\n s * m_[1].x,\n s * m_[1].y,\n s * m_[1].z,\n\n s * m_[2].x,\n s * m_[2].y,\n s * m_[2].z,\n );\n },\n\n mat4x4f: (s: number, m: wgsl.m4x4f) => {\n const m_ = m.columns as [wgsl.v4f, wgsl.v4f, wgsl.v4f, wgsl.v4f];\n return mat4x4f(\n s * m_[0].x,\n s * m_[0].y,\n s * m_[0].z,\n s * m_[0].w,\n\n s * m_[1].x,\n s * m_[1].y,\n s * m_[1].z,\n s * m_[1].w,\n\n s * m_[2].x,\n s * m_[2].y,\n s * m_[2].z,\n s * m_[2].w,\n\n s * m_[3].x,\n s * m_[3].y,\n s * m_[3].z,\n s * m_[3].w,\n );\n },\n } as Record<\n VecKind | MatKind,\n <T extends vBase | wgsl.AnyMatInstance>(s: number, v: T) => T\n >,\n\n mulVxV: {\n vec2f: (a: wgsl.v2f, b: wgsl.v2f) => vec2f(a.x * b.x, a.y * b.y),\n vec2h: (a: wgsl.v2h, b: wgsl.v2h) => vec2h(a.x * b.x, a.y * b.y),\n vec2i: (a: wgsl.v2i, b: wgsl.v2i) => vec2i(a.x * b.x, a.y * b.y),\n vec2u: (a: wgsl.v2u, b: wgsl.v2u) => vec2u(a.x * b.x, a.y * b.y),\n\n vec3f: (a: wgsl.v3f, b: wgsl.v3f) => vec3f(a.x * b.x, a.y * b.y, a.z * b.z),\n vec3h: (a: wgsl.v3h, b: wgsl.v3h) => vec3h(a.x * b.x, a.y * b.y, a.z * b.z),\n vec3i: (a: wgsl.v3i, b: wgsl.v3i) => vec3i(a.x * b.x, a.y * b.y, a.z * b.z),\n vec3u: (a: wgsl.v3u, b: wgsl.v3u) => vec3u(a.x * b.x, a.y * b.y, a.z * b.z),\n\n vec4f: (a: wgsl.v4f, b: wgsl.v4f) =>\n vec4f(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w),\n vec4h: (a: wgsl.v4h, b: wgsl.v4h) =>\n vec4h(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w),\n vec4i: (a: wgsl.v4i, b: wgsl.v4i) =>\n vec4i(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w),\n vec4u: (a: wgsl.v4u, b: wgsl.v4u) =>\n vec4u(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w),\n\n mat2x2f: (a: wgsl.m2x2f, b: wgsl.m2x2f) => {\n const a_ = a.columns as [wgsl.v2f, wgsl.v2f];\n const b_ = b.columns as [wgsl.v2f, wgsl.v2f];\n\n return mat2x2f(\n a_[0].x * b_[0].x + a_[1].x * b_[0].y,\n a_[0].y * b_[0].x + a_[1].y * b_[0].y,\n\n a_[0].x * b_[1].x + a_[1].x * b_[1].y,\n a_[0].y * b_[1].x + a_[1].y * b_[1].y,\n );\n },\n\n mat3x3f: (a: wgsl.m3x3f, b: wgsl.m3x3f) => {\n const a_ = a.columns as [wgsl.v3f, wgsl.v3f, wgsl.v3f];\n const b_ = b.columns as [wgsl.v3f, wgsl.v3f, wgsl.v3f];\n\n return mat3x3f(\n a_[0].x * b_[0].x + a_[1].x * b_[0].y + a_[2].x * b_[0].z,\n a_[0].y * b_[0].x + a_[1].y * b_[0].y + a_[2].y * b_[0].z,\n a_[0].z * b_[0].x + a_[1].z * b_[0].y + a_[2].z * b_[0].z,\n\n a_[0].x * b_[1].x + a_[1].x * b_[1].y + a_[2].x * b_[1].z,\n a_[0].y * b_[1].x + a_[1].y * b_[1].y + a_[2].y * b_[1].z,\n a_[0].z * b_[1].x + a_[1].z * b_[1].y + a_[2].z * b_[1].z,\n\n a_[0].x * b_[2].x + a_[1].x * b_[2].y + a_[2].x * b_[2].z,\n a_[0].y * b_[2].x + a_[1].y * b_[2].y + a_[2].y * b_[2].z,\n a_[0].z * b_[2].x + a_[1].z * b_[2].y + a_[2].z * b_[2].z,\n );\n },\n\n mat4x4f: (a: wgsl.m4x4f, b: wgsl.m4x4f) => {\n const a_ = a.columns as [wgsl.v4f, wgsl.v4f, wgsl.v4f, wgsl.v4f];\n const b_ = b.columns as [wgsl.v4f, wgsl.v4f, wgsl.v4f, wgsl.v4f];\n\n return mat4x4f(\n a_[0].x * b_[0].x +\n a_[1].x * b_[0].y +\n a_[2].x * b_[0].z +\n a_[3].x * b_[0].w,\n a_[0].y * b_[0].x +\n a_[1].y * b_[0].y +\n a_[2].y * b_[0].z +\n a_[3].y * b_[0].w,\n a_[0].z * b_[0].x +\n a_[1].z * b_[0].y +\n a_[2].z * b_[0].z +\n a_[3].z * b_[0].w,\n a_[0].w * b_[0].x +\n a_[1].w * b_[0].y +\n a_[2].w * b_[0].z +\n a_[3].w * b_[0].w,\n\n a_[0].x * b_[1].x +\n a_[1].x * b_[1].y +\n a_[2].x * b_[1].z +\n a_[3].x * b_[1].w,\n a_[0].y * b_[1].x +\n a_[1].y * b_[1].y +\n a_[2].y * b_[1].z +\n a_[3].y * b_[1].w,\n a_[0].z * b_[1].x +\n a_[1].z * b_[1].y +\n a_[2].z * b_[1].z +\n a_[3].z * b_[1].w,\n a_[0].w * b_[1].x +\n a_[1].w * b_[1].y +\n a_[2].w * b_[1].z +\n a_[3].w * b_[1].w,\n\n a_[0].x * b_[2].x +\n a_[1].x * b_[2].y +\n a_[2].x * b_[2].z +\n a_[3].x * b_[2].w,\n a_[0].y * b_[2].x +\n a_[1].y * b_[2].y +\n a_[2].y * b_[2].z +\n a_[3].y * b_[2].w,\n a_[0].z * b_[2].x +\n a_[1].z * b_[2].y +\n a_[2].z * b_[2].z +\n a_[3].z * b_[2].w,\n a_[0].w * b_[2].x +\n a_[1].w * b_[2].y +\n a_[2].w * b_[2].z +\n a_[3].w * b_[2].w,\n\n a_[0].x * b_[3].x +\n a_[1].x * b_[3].y +\n a_[2].x * b_[3].z +\n a_[3].x * b_[3].w,\n a_[0].y * b_[3].x +\n a_[1].y * b_[3].y +\n a_[2].y * b_[3].z +\n a_[3].y * b_[3].w,\n a_[0].z * b_[3].x +\n a_[1].z * b_[3].y +\n a_[2].z * b_[3].z +\n a_[3].z * b_[3].w,\n a_[0].w * b_[3].x +\n a_[1].w * b_[3].y +\n a_[2].w * b_[3].z +\n a_[3].w * b_[3].w,\n );\n },\n } as Record<\n VecKind | MatKind,\n <T extends vBase | wgsl.AnyMatInstance>(lhs: T, rhs: T) => T\n >,\n\n mulMxV: {\n mat2x2f: (m: wgsl.m2x2f, v: wgsl.v2f) => {\n const m_ = m.columns as [wgsl.v2f, wgsl.v2f];\n return vec2f(\n m_[0].x * v.x + m_[1].x * v.y,\n m_[0].y * v.x + m_[1].y * v.y,\n );\n },\n\n mat3x3f: (m: wgsl.m3x3f, v: wgsl.v3f) => {\n const m_ = m.columns as [wgsl.v3f, wgsl.v3f, wgsl.v3f];\n return vec3f(\n m_[0].x * v.x + m_[1].x * v.y + m_[2].x * v.z,\n m_[0].y * v.x + m_[1].y * v.y + m_[2].y * v.z,\n m_[0].z * v.x + m_[1].z * v.y + m_[2].z * v.z,\n );\n },\n\n mat4x4f: (m: wgsl.m4x4f, v: wgsl.v4f) => {\n const m_ = m.columns as [wgsl.v4f, wgsl.v4f, wgsl.v4f, wgsl.v4f];\n return vec4f(\n m_[0].x * v.x + m_[1].x * v.y + m_[2].x * v.z + m_[3].x * v.w,\n m_[0].y * v.x + m_[1].y * v.y + m_[2].y * v.z + m_[3].y * v.w,\n m_[0].z * v.x + m_[1].z * v.y + m_[2].z * v.z + m_[3].z * v.w,\n m_[0].w * v.x + m_[1].w * v.y + m_[2].w * v.z + m_[3].w * v.w,\n );\n },\n } as Record<\n MatKind,\n <T extends wgsl.AnyMatInstance>(\n m: T,\n v: wgsl.vBaseForMat<T>,\n ) => wgsl.vBaseForMat<T>\n >,\n\n mulVxM: {\n mat2x2f: (v: wgsl.v2f, m: wgsl.m2x2f) => {\n const m_ = m.columns as [wgsl.v2f, wgsl.v2f];\n return vec2f(\n v.x * m_[0].x + v.y * m_[0].y,\n v.x * m_[1].x + v.y * m_[1].y,\n );\n },\n\n mat3x3f: (v: wgsl.v3f, m: wgsl.m3x3f) => {\n const m_ = m.columns as [wgsl.v3f, wgsl.v3f, wgsl.v3f];\n return vec3f(\n v.x * m_[0].x + v.y * m_[0].y + v.z * m_[0].z,\n v.x * m_[1].x + v.y * m_[1].y + v.z * m_[1].z,\n v.x * m_[2].x + v.y * m_[2].y + v.z * m_[2].z,\n );\n },\n\n mat4x4f: (v: wgsl.v4f, m: wgsl.m4x4f) => {\n const m_ = m.columns as [wgsl.v4f, wgsl.v4f, wgsl.v4f, wgsl.v4f];\n return vec4f(\n v.x * m_[0].x + v.y * m_[0].y + v.z * m_[0].z + v.w * m_[0].w,\n v.x * m_[1].x + v.y * m_[1].y + v.z * m_[1].z + v.w * m_[1].w,\n v.x * m_[2].x + v.y * m_[2].y + v.z * m_[2].z + v.w * m_[2].w,\n v.x * m_[3].x + v.y * m_[3].y + v.z * m_[3].z + v.w * m_[3].w,\n );\n },\n } as Record<\n MatKind,\n <T extends wgsl.AnyMatInstance>(\n v: wgsl.vBaseForMat<T>,\n m: T,\n ) => wgsl.vBaseForMat<T>\n >,\n\n dot: {\n vec2f: dotVec2,\n vec2h: dotVec2,\n vec2i: dotVec2,\n vec2u: dotVec2,\n vec3f: dotVec3,\n vec3h: dotVec3,\n vec3i: dotVec3,\n vec3u: dotVec3,\n vec4f: dotVec4,\n vec4h: dotVec4,\n vec4i: dotVec4,\n vec4u: dotVec4,\n } as Record<VecKind, <T extends vBase>(lhs: T, rhs: T) => number>,\n\n normalize: {\n vec2f: (v: wgsl.v2f) => {\n const len = lengthVec2(v);\n return vec2f(v.x / len, v.y / len);\n },\n vec2h: (v: wgsl.v2h) => {\n const len = lengthVec2(v);\n return vec2h(v.x / len, v.y / len);\n },\n vec2i: (v: wgsl.v2i) => {\n const len = lengthVec2(v);\n return vec2i(v.x / len, v.y / len);\n },\n vec2u: (v: wgsl.v2u) => {\n const len = lengthVec2(v);\n return vec2u(v.x / len, v.y / len);\n },\n\n vec3f: (v: wgsl.v3f) => {\n const len = lengthVec3(v);\n return vec3f(v.x / len, v.y / len, v.z / len);\n },\n vec3h: (v: wgsl.v3h) => {\n const len = lengthVec3(v);\n return vec3h(v.x / len, v.y / len, v.z / len);\n },\n vec3i: (v: wgsl.v3i) => {\n const len = lengthVec3(v);\n return vec3i(v.x / len, v.y / len, v.z / len);\n },\n vec3u: (v: wgsl.v3u) => {\n const len = lengthVec3(v);\n return vec3u(v.x / len, v.y / len, v.z / len);\n },\n\n vec4f: (v: wgsl.v4f) => {\n const len = lengthVec4(v);\n return vec4f(v.x / len, v.y / len, v.z / len, v.w / len);\n },\n vec4h: (v: wgsl.v4h) => {\n const len = lengthVec4(v);\n return vec4h(v.x / len, v.y / len, v.z / len, v.w / len);\n },\n vec4i: (v: wgsl.v4i) => {\n const len = lengthVec4(v);\n return vec4i(v.x / len, v.y / len, v.z / len, v.w / len);\n },\n vec4u: (v: wgsl.v4u) => {\n const len = lengthVec4(v);\n return vec4u(v.x / len, v.y / len, v.z / len, v.w / len);\n },\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n cross: {\n vec3f: (a: wgsl.v3f, b: wgsl.v3f) => {\n return vec3f(\n a.y * b.z - a.z * b.y,\n a.z * b.x - a.x * b.z,\n a.x * b.y - a.y * b.x,\n );\n },\n vec3h: (a: wgsl.v3h, b: wgsl.v3h) => {\n return vec3h(\n a.y * b.z - a.z * b.y,\n a.z * b.x - a.x * b.z,\n a.x * b.y - a.y * b.x,\n );\n },\n } as Record<\n 'vec3f' | 'vec3h',\n <T extends wgsl.v3f | wgsl.v3h>(a: T, b: T) => T\n >,\n\n floor: {\n vec2f: unary2f(Math.floor),\n vec2h: unary2h(Math.floor),\n\n vec3f: unary3f(Math.floor),\n vec3h: unary3h(Math.floor),\n\n vec4f: unary4f(Math.floor),\n vec4h: unary4h(Math.floor),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n max: {\n vec2f: binaryComponentWise2f(Math.max),\n vec2h: binaryComponentWise2h(Math.max),\n vec2i: binaryComponentWise2i(Math.max),\n vec2u: binaryComponentWise2u(Math.max),\n\n vec3f: binaryComponentWise3f(Math.max),\n vec3h: binaryComponentWise3h(Math.max),\n vec3i: binaryComponentWise3i(Math.max),\n vec3u: binaryComponentWise3u(Math.max),\n\n vec4f: binaryComponentWise4f(Math.max),\n vec4h: binaryComponentWise4h(Math.max),\n vec4i: binaryComponentWise4i(Math.max),\n vec4u: binaryComponentWise4u(Math.max),\n } as Record<VecKind, <T extends vBase>(a: T, b: T) => T>,\n\n min: {\n vec2f: binaryComponentWise2f(Math.min),\n vec2h: binaryComponentWise2h(Math.min),\n vec2i: binaryComponentWise2i(Math.min),\n vec2u: binaryComponentWise2u(Math.min),\n\n vec3f: binaryComponentWise3f(Math.min),\n vec3h: binaryComponentWise3h(Math.min),\n vec3i: binaryComponentWise3i(Math.min),\n vec3u: binaryComponentWise3u(Math.min),\n\n vec4f: binaryComponentWise4f(Math.min),\n vec4h: binaryComponentWise4h(Math.min),\n vec4i: binaryComponentWise4i(Math.min),\n vec4u: binaryComponentWise4u(Math.min),\n } as Record<VecKind, <T extends vBase>(a: T, b: T) => T>,\n\n pow: {\n vec2f: (base: wgsl.v2f, exponent: wgsl.v2f) =>\n vec2f(base.x ** exponent.x, base.y ** exponent.y),\n vec2h: (base: wgsl.v2h, exponent: wgsl.v2h) =>\n vec2h(base.x ** exponent.x, base.y ** exponent.y),\n\n vec3f: (base: wgsl.v3f, exponent: wgsl.v3f) =>\n vec3f(base.x ** exponent.x, base.y ** exponent.y, base.z ** exponent.z),\n vec3h: (base: wgsl.v3h, exponent: wgsl.v3h) =>\n vec3h(base.x ** exponent.x, base.y ** exponent.y, base.z ** exponent.z),\n\n vec4f: (base: wgsl.v4f, exponent: wgsl.v4f) =>\n vec4f(\n base.x ** exponent.x,\n base.y ** exponent.y,\n base.z ** exponent.z,\n base.w ** exponent.w,\n ),\n vec4h: (base: wgsl.v4h, exponent: wgsl.v4h) =>\n vec4h(\n base.x ** exponent.x,\n base.y ** exponent.y,\n base.z ** exponent.z,\n base.w ** exponent.w,\n ),\n } as Record<\n 'vec2f' | 'vec3f' | 'vec4f' | 'vec2h' | 'vec3h' | 'vec4h' | 'number',\n <T extends wgsl.AnyFloatVecInstance | number>(a: T, b: T) => T\n >,\n\n mix: {\n vec2f: (e1: wgsl.v2f, e2: wgsl.v2f, e3: wgsl.v2f | number) => {\n if (typeof e3 === 'number') {\n return vec2f(e1.x * (1 - e3) + e2.x * e3, e1.y * (1 - e3) + e2.y * e3);\n }\n return vec2f(\n e1.x * (1 - e3.x) + e2.x * e3.x,\n e1.y * (1 - e3.y) + e2.y * e3.y,\n );\n },\n vec2h: (e1: wgsl.v2h, e2: wgsl.v2h, e3: wgsl.v2h | number) => {\n if (typeof e3 === 'number') {\n return vec2h(e1.x * (1 - e3) + e2.x * e3, e1.y * (1 - e3) + e2.y * e3);\n }\n return vec2h(\n e1.x * (1 - e3.x) + e2.x * e3.x,\n e1.y * (1 - e3.y) + e2.y * e3.y,\n );\n },\n\n vec3f: (e1: wgsl.v3f, e2: wgsl.v3f, e3: wgsl.v3f | number) => {\n if (typeof e3 === 'number') {\n return vec3f(\n e1.x * (1 - e3) + e2.x * e3,\n e1.y * (1 - e3) + e2.y * e3,\n e1.z * (1 - e3) + e2.z * e3,\n );\n }\n return vec3f(\n e1.x * (1 - e3.x) + e2.x * e3.x,\n e1.y * (1 - e3.y) + e2.y * e3.y,\n e1.z * (1 - e3.z) + e2.z * e3.z,\n );\n },\n vec3h: (e1: wgsl.v3h, e2: wgsl.v3h, e3: wgsl.v3h | number) => {\n if (typeof e3 === 'number') {\n return vec3h(\n e1.x * (1 - e3) + e2.x * e3,\n e1.y * (1 - e3) + e2.y * e3,\n e1.z * (1 - e3) + e2.z * e3,\n );\n }\n return vec3h(\n e1.x * (1 - e3.x) + e2.x * e3.x,\n e1.y * (1 - e3.y) + e2.y * e3.y,\n e1.z * (1 - e3.z) + e2.z * e3.z,\n );\n },\n\n vec4f: (e1: wgsl.v4f, e2: wgsl.v4f, e3: wgsl.v4f | number) => {\n if (typeof e3 === 'number') {\n return vec4f(\n e1.x * (1 - e3) + e2.x * e3,\n e1.y * (1 - e3) + e2.y * e3,\n e1.z * (1 - e3) + e2.z * e3,\n e1.w * (1 - e3) + e2.w * e3,\n );\n }\n return vec4f(\n e1.x * (1 - e3.x) + e2.x * e3.x,\n e1.y * (1 - e3.y) + e2.y * e3.y,\n e1.z * (1 - e3.z) + e2.z * e3.z,\n e1.w * (1 - e3.w) + e2.w * e3.w,\n );\n },\n vec4h: (e1: wgsl.v4h, e2: wgsl.v4h, e3: wgsl.v4h | number) => {\n if (typeof e3 === 'number') {\n return vec4h(\n e1.x * (1 - e3) + e2.x * e3,\n e1.y * (1 - e3) + e2.y * e3,\n e1.z * (1 - e3) + e2.z * e3,\n e1.w * (1 - e3) + e2.w * e3,\n );\n }\n return vec4h(\n e1.x * (1 - e3.x) + e2.x * e3.x,\n e1.y * (1 - e3.y) + e2.y * e3.y,\n e1.z * (1 - e3.z) + e2.z * e3.z,\n e1.w * (1 - e3.w) + e2.w * e3.w,\n );\n },\n } as Record<\n 'vec2f' | 'vec3f' | 'vec4f' | 'vec2h' | 'vec3h' | 'vec4h',\n <T extends wgsl.v2f | wgsl.v3f | wgsl.v4f | wgsl.v2h | wgsl.v3h | wgsl.v4h>(\n a: T,\n b: T,\n c: T | number,\n ) => T\n >,\n\n sin: {\n vec2f: unary2f(Math.sin),\n vec2h: unary2h(Math.sin),\n\n vec3f: unary3f(Math.sin),\n vec3h: unary3h(Math.sin),\n\n vec4f: unary4f(Math.sin),\n vec4h: unary4h(Math.sin),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n cos: {\n vec2f: unary2f(Math.cos),\n vec2h: unary2h(Math.cos),\n\n vec3f: unary3f(Math.cos),\n vec3h: unary3h(Math.cos),\n\n vec4f: unary4f(Math.cos),\n vec4h: unary4h(Math.cos),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n exp: {\n vec2f: unary2f(Math.exp),\n vec2h: unary2h(Math.exp),\n\n vec3f: unary3f(Math.exp),\n vec3h: unary3h(Math.exp),\n\n vec4f: unary4f(Math.exp),\n vec4h: unary4h(Math.exp),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n fract: {\n vec2f: unary2f((value) => value - Math.floor(value)),\n vec2h: unary2h((value) => value - Math.floor(value)),\n\n vec3f: unary3f((value) => value - Math.floor(value)),\n vec3h: unary3h((value) => value - Math.floor(value)),\n\n vec4f: unary4f((value) => value - Math.floor(value)),\n vec4h: unary4h((value) => value - Math.floor(value)),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n isCloseToZero: {\n vec2f: (v: wgsl.v2f, n: number) => Math.abs(v.x) <= n && Math.abs(v.y) <= n,\n vec2h: (v: wgsl.v2h, n: number) => Math.abs(v.x) <= n && Math.abs(v.y) <= n,\n\n vec3f: (v: wgsl.v3f, n: number) =>\n Math.abs(v.x) <= n && Math.abs(v.y) <= n && Math.abs(v.z) <= n,\n vec3h: (v: wgsl.v3h, n: number) =>\n Math.abs(v.x) <= n && Math.abs(v.y) <= n && Math.abs(v.z) <= n,\n\n vec4f: (v: wgsl.v4f, n: number) =>\n Math.abs(v.x) <= n &&\n Math.abs(v.y) <= n &&\n Math.abs(v.z) <= n &&\n Math.abs(v.w) <= n,\n vec4h: (v: wgsl.v4h, n: number) =>\n Math.abs(v.x) <= n &&\n Math.abs(v.y) <= n &&\n Math.abs(v.z) <= n &&\n Math.abs(v.w) <= n,\n } as Record<VecKind, <T extends vBase>(v: T, n: number) => boolean>,\n\n neg: {\n vec2f: unary2f((value) => -value),\n vec2h: unary2h((value) => -value),\n vec2i: unary2i((value) => -value),\n vec2u: unary2u((value) => -value),\n 'vec2<bool>': (e: wgsl.v2b) => vec2b(!e.x, !e.y),\n\n vec3f: unary3f((value) => -value),\n vec3h: unary3h((value) => -value),\n vec3i: unary3i((value) => -value),\n vec3u: unary3u((value) => -value),\n 'vec3<bool>': (e: wgsl.v3b) => vec3b(!e.x, !e.y, !e.z),\n\n vec4f: unary4f((value) => -value),\n vec4h: unary4h((value) => -value),\n vec4i: unary4i((value) => -value),\n vec4u: unary4u((value) => -value),\n 'vec4<bool>': (e: wgsl.v4b) => vec4b(!e.x, !e.y, !e.z, !e.w),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n select: {\n vec2f: (f: wgsl.v2f, t: wgsl.v2f, c: wgsl.v2b) =>\n vec2f(c.x ? t.x : f.x, c.y ? t.y : f.y),\n vec2h: (f: wgsl.v2h, t: wgsl.v2h, c: wgsl.v2b) =>\n vec2h(c.x ? t.x : f.x, c.y ? t.y : f.y),\n vec2i: (f: wgsl.v2i, t: wgsl.v2i, c: wgsl.v2b) =>\n vec2i(c.x ? t.x : f.x, c.y ? t.y : f.y),\n vec2u: (f: wgsl.v2u, t: wgsl.v2u, c: wgsl.v2b) =>\n vec2u(c.x ? t.x : f.x, c.y ? t.y : f.y),\n 'vec2<bool>': (f: wgsl.v2b, t: wgsl.v2b, c: wgsl.v2b) =>\n vec2b(c.x ? t.x : f.x, c.y ? t.y : f.y),\n\n vec3f: (f: wgsl.v3f, t: wgsl.v3f, c: wgsl.v3b) =>\n vec3f(c.x ? t.x : f.x, c.y ? t.y : f.y, c.z ? t.z : f.z),\n vec3h: (f: wgsl.v3h, t: wgsl.v3h, c: wgsl.v3b) =>\n vec3h(c.x ? t.x : f.x, c.y ? t.y : f.y, c.z ? t.z : f.z),\n vec3i: (f: wgsl.v3i, t: wgsl.v3i, c: wgsl.v3b) =>\n vec3i(c.x ? t.x : f.x, c.y ? t.y : f.y, c.z ? t.z : f.z),\n vec3u: (f: wgsl.v3u, t: wgsl.v3u, c: wgsl.v3b) =>\n vec3u(c.x ? t.x : f.x, c.y ? t.y : f.y, c.z ? t.z : f.z),\n 'vec3<bool>': (f: wgsl.v3b, t: wgsl.v3b, c: wgsl.v3b) =>\n vec3b(c.x ? t.x : f.x, c.y ? t.y : f.y, c.z ? t.z : f.z),\n\n vec4f: (f: wgsl.v4f, t: wgsl.v4f, c: wgsl.v4b) =>\n vec4f(c.x ? t.x : f.x, c.y ? t.y : f.y, c.z ? t.z : f.z, c.w ? t.w : f.w),\n vec4h: (f: wgsl.v4h, t: wgsl.v4h, c: wgsl.v4b) =>\n vec4h(c.x ? t.x : f.x, c.y ? t.y : f.y, c.z ? t.z : f.z, c.w ? t.w : f.w),\n vec4i: (f: wgsl.v4i, t: wgsl.v4i, c: wgsl.v4b) =>\n vec4i(c.x ? t.x : f.x, c.y ? t.y : f.y, c.z ? t.z : f.z, c.w ? t.w : f.w),\n vec4u: (f: wgsl.v4u, t: wgsl.v4u, c: wgsl.v4b) =>\n vec4u(c.x ? t.x : f.x, c.y ? t.y : f.y, c.z ? t.z : f.z, c.w ? t.w : f.w),\n 'vec4<bool>': (f: wgsl.v4b, t: wgsl.v4b, c: wgsl.v4b) =>\n vec4b(c.x ? t.x : f.x, c.y ? t.y : f.y, c.z ? t.z : f.z, c.w ? t.w : f.w),\n } as Record<\n VecKind,\n <T extends wgsl.AnyVecInstance>(\n f: T,\n t: T,\n c: T extends wgsl.AnyVec2Instance\n ? wgsl.v2b\n : T extends wgsl.AnyVec3Instance\n ? wgsl.v3b\n : wgsl.v4b,\n ) => T\n >,\n};\n","import { f32 } from '../data/numeric.ts';\nimport { VectorOps } from '../data/vectorOps.ts';\nimport type {\n AnyFloatVecInstance,\n AnyMatInstance,\n AnyNumericVecInstance,\n AnyWgslData,\n v3f,\n v3h,\n vBaseForMat,\n} from '../data/wgslTypes.ts';\nimport { createDualImpl } from '../shared/generators.ts';\nimport type { Snippet } from '../types.ts';\n\nexport function isNumeric(element: Snippet) {\n const type = element.dataType.type;\n return (\n type === 'abstractInt' ||\n type === 'abstractFloat' ||\n type === 'f32' ||\n type === 'f16' ||\n type === 'i32' ||\n type === 'u32'\n );\n}\n\nexport const add = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance>(lhs: T, rhs: T): T =>\n VectorOps.add[lhs.kind](lhs, rhs),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} + ${rhs.value})`,\n dataType: lhs.dataType,\n }),\n);\n\nexport const sub = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance>(lhs: T, rhs: T): T =>\n VectorOps.sub[lhs.kind](lhs, rhs),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} - ${rhs.value})`,\n dataType: lhs.dataType,\n }),\n);\n\ntype MulOverload = {\n <T extends AnyMatInstance, TVec extends vBaseForMat<T>>(s: T, v: TVec): TVec;\n <T extends AnyMatInstance, TVec extends vBaseForMat<T>>(s: TVec, v: T): TVec;\n <T extends AnyNumericVecInstance | AnyMatInstance>(s: number | T, v: T): T;\n};\n\nexport const mul: MulOverload = createDualImpl(\n // CPU implementation\n (\n s: number | AnyNumericVecInstance | AnyMatInstance,\n v: AnyNumericVecInstance | AnyMatInstance,\n ): AnyNumericVecInstance | AnyMatInstance => {\n if (typeof s === 'number') {\n // Scalar * Vector/Matrix case\n return VectorOps.mulSxV[v.kind](s, v);\n }\n if (\n typeof s === 'object' &&\n typeof v === 'object' &&\n 'kind' in s &&\n 'kind' in v\n ) {\n const sIsVector = !s.kind.startsWith('mat');\n const vIsVector = !v.kind.startsWith('mat');\n if (!sIsVector && vIsVector) {\n // Matrix * Vector case\n return VectorOps.mulMxV[(s as AnyMatInstance).kind](\n s as AnyMatInstance,\n v as vBaseForMat<AnyMatInstance>,\n );\n }\n if (sIsVector && !vIsVector) {\n // Vector * Matrix case\n return VectorOps.mulVxM[(v as AnyMatInstance).kind](\n s as vBaseForMat<AnyMatInstance>,\n v as AnyMatInstance,\n );\n }\n }\n // Vector * Vector or Matrix * Matrix case\n return VectorOps.mulVxV[v.kind](s, v);\n },\n // GPU implementation\n (s, v) => {\n const returnType = isNumeric(s)\n ? // Scalar * Vector/Matrix\n (v.dataType as AnyWgslData)\n : !s.dataType.type.startsWith('mat')\n ? // Vector * Matrix\n (s.dataType as AnyWgslData)\n : !v.dataType.type.startsWith('mat')\n ? // Matrix * Vector\n (v.dataType as AnyWgslData)\n : // Vector * Vector or Matrix * Matrix\n (s.dataType as AnyWgslData);\n return { value: `(${s.value} * ${v.value})`, dataType: returnType };\n },\n);\n\nexport const abs = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.abs(value) as T;\n }\n return VectorOps.abs[value.kind](value) as T;\n },\n // GPU implementation\n (value) => ({ value: `abs(${value.value})`, dataType: value.dataType }),\n);\n\nexport const atan2 = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(y: T, x: T): T => {\n if (typeof y === 'number' && typeof x === 'number') {\n return Math.atan2(y, x) as T;\n }\n return VectorOps.atan2[(y as AnyFloatVecInstance).kind](\n y as never,\n x as never,\n ) as T;\n },\n // GPU implementation\n (y, x) => ({ value: `atan2(${y.value}, ${x.value})`, dataType: y.dataType }),\n);\n\nexport const acos = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.acos(value) as T;\n }\n return VectorOps.acos[(value as AnyFloatVecInstance).kind](\n value as never,\n ) as T;\n },\n // GPU implementation\n (value) => ({ value: `acos(${value.value})`, dataType: value.dataType }),\n);\n\nexport const asin = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.asin(value) as T;\n }\n return VectorOps.asin[(value as AnyFloatVecInstance).kind](\n value as never,\n ) as T;\n },\n // GPU implementation\n (value) => ({ value: `asin(${value.value})`, dataType: value.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#ceil-builtin\n */\nexport const ceil = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.ceil(value) as T;\n }\n return VectorOps.ceil[value.kind](value) as T;\n },\n // GPU implementation\n (value) => ({ value: `ceil(${value.value})`, dataType: value.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#clamp\n */\nexport const clamp = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance | number>(value: T, low: T, high: T): T => {\n if (typeof value === 'number') {\n return Math.min(Math.max(low as number, value), high as number) as T;\n }\n return VectorOps.clamp[value.kind](\n value,\n low as AnyNumericVecInstance,\n high as AnyNumericVecInstance,\n ) as T;\n },\n // GPU implementation\n (value, low, high) => {\n return {\n value: `clamp(${value.value}, ${low.value}, ${high.value})`,\n dataType: value.dataType,\n };\n },\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#cos-builtin\n */\nexport const cos = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.cos(value) as T;\n }\n return VectorOps.cos[value.kind](value) as T;\n },\n // GPU implementation\n (value) => ({ value: `cos(${value.value})`, dataType: value.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#cross-builtin\n */\nexport const cross = createDualImpl(\n // CPU implementation\n <T extends v3f | v3h>(a: T, b: T): T => VectorOps.cross[a.kind](a, b),\n // GPU implementation\n (a, b) => ({ value: `cross(${a.value}, ${b.value})`, dataType: a.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#dot-builtin\n */\nexport const dot = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance>(lhs: T, rhs: T): number =>\n VectorOps.dot[lhs.kind](lhs, rhs),\n // GPU implementation\n (lhs, rhs) => ({ value: `dot(${lhs.value}, ${rhs.value})`, dataType: f32 }),\n);\n\nexport const normalize = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance>(v: T): T => VectorOps.normalize[v.kind](v),\n // GPU implementation\n (v) => ({ value: `normalize(${v.value})`, dataType: v.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#floor-builtin\n */\nexport const floor = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.floor(value) as T;\n }\n return VectorOps.floor[value.kind](value) as T;\n },\n // GPU implementation\n (value) => ({ value: `floor(${value.value})`, dataType: value.dataType }),\n);\n\nexport const fract = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(a: T): T => {\n if (typeof a === 'number') {\n return (a - Math.floor(a)) as T;\n }\n return VectorOps.fract[a.kind](a) as T;\n },\n // GPU implementation\n (a) => ({ value: `fract(${a.value})`, dataType: a.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#length-builtin\n */\nexport const length = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(value: T): number => {\n if (typeof value === 'number') {\n return Math.abs(value);\n }\n return VectorOps.length[value.kind](value);\n },\n // GPU implementation\n (value) => ({ value: `length(${value.value})`, dataType: f32 }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#max-float-builtin\n */\nexport const max = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance | number>(a: T, b: T): T => {\n if (typeof a === 'number') {\n return Math.max(a, b as number) as T;\n }\n return VectorOps.max[a.kind](a, b as AnyNumericVecInstance) as T;\n },\n // GPU implementation\n (a, b) => ({ value: `max(${a.value}, ${b.value})`, dataType: a.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#min-float-builtin\n */\nexport const min = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance | number>(a: T, b: T): T => {\n if (typeof a === 'number') {\n return Math.min(a, b as number) as T;\n }\n return VectorOps.min[a.kind](a, b as AnyNumericVecInstance) as T;\n },\n // GPU implementation\n (a, b) => ({ value: `min(${a.value}, ${b.value})`, dataType: a.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#sin-builtin\n */\nexport const sin = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.sin(value) as T;\n }\n return VectorOps.sin[value.kind](value) as T;\n },\n // GPU implementation\n (value) => ({ value: `sin(${value.value})`, dataType: value.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#exp-builtin\n */\nexport const exp = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.exp(value) as T;\n }\n return VectorOps.exp[value.kind](value) as T;\n },\n // GPU implementation\n (value) => ({ value: `exp(${value.value})`, dataType: value.dataType }),\n);\n\ntype PowOverload = {\n (base: number, exponent: number): number;\n <T extends AnyFloatVecInstance>(base: T, exponent: T): T;\n};\n\nexport const pow: PowOverload = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(base: T, exponent: T): T => {\n if (typeof base === 'number' && typeof exponent === 'number') {\n return (base ** exponent) as T;\n }\n if (\n typeof base === 'object' &&\n typeof exponent === 'object' &&\n 'kind' in base &&\n 'kind' in exponent\n ) {\n return VectorOps.pow[base.kind](base, exponent) as T;\n }\n throw new Error('Invalid arguments to pow()');\n },\n // GPU implementation\n (base, exponent) => {\n return {\n value: `pow(${base.value}, ${exponent.value})`,\n dataType: base.dataType,\n };\n },\n);\n\ntype MixOverload = {\n (e1: number, e2: number, e3: number): number;\n <T extends AnyFloatVecInstance>(e1: T, e2: T, e3: number): T;\n <T extends AnyFloatVecInstance>(e1: T, e2: T, e3: T): T;\n};\n\nexport const mix: MixOverload = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(e1: T, e2: T, e3: T | number): T => {\n if (typeof e1 === 'number') {\n if (typeof e3 !== 'number' || typeof e2 !== 'number') {\n throw new Error(\n 'When e1 and e2 are numbers, the blend factor must be a number.',\n );\n }\n return (e1 * (1 - e3) + e2 * e3) as T;\n }\n\n if (typeof e1 === 'number' || typeof e2 === 'number') {\n throw new Error('e1 and e2 need to both be vectors of the same kind.');\n }\n\n return VectorOps.mix[e1.kind](e1, e2, e3) as T;\n },\n // GPU implementation\n (e1, e2, e3) => {\n return {\n value: `mix(${e1.value}, ${e2.value}, ${e3.value})`,\n dataType: e1.dataType,\n };\n },\n);\n\nexport const reflect = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance>(e1: T, e2: T): T =>\n sub(e1, mul(2 * dot(e2, e1), e2)),\n // GPU implementation\n (e1, e2) => {\n return {\n value: `reflect(${e1.value}, ${e2.value})`,\n dataType: e1.dataType,\n };\n },\n);\n\nexport const distance = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(a: T, b: T): number => {\n if (typeof a === 'number' && typeof b === 'number') {\n return Math.abs(a - b);\n }\n return length(\n sub(a as AnyFloatVecInstance, b as AnyFloatVecInstance),\n ) as number;\n },\n // GPU implementation\n (a, b) => ({ value: `distance(${a.value}, ${b.value})`, dataType: f32 }),\n);\n\nexport const neg = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance | number>(value: T): T => {\n if (typeof value === 'number') {\n return -value as T;\n }\n return VectorOps.neg[value.kind](value) as T;\n },\n // GPU implementation\n (value) => ({ value: `-(${value.value})`, dataType: value.dataType }),\n);\n","import { bool, f32 } from '../data/numeric.ts';\nimport { vec2b, vec3b, vec4b } from '../data/vector.ts';\nimport { VectorOps } from '../data/vectorOps.ts';\nimport type {\n AnyBooleanVecInstance,\n AnyFloatVecInstance,\n AnyNumericVecInstance,\n AnyVec2Instance,\n AnyVec3Instance,\n AnyVecInstance,\n ScalarData,\n v2b,\n v3b,\n v4b,\n} from '../data/wgslTypes.ts';\nimport { createDualImpl } from '../shared/generators.ts';\nimport type { Snippet } from '../types.ts';\nimport { isNumeric, sub } from './numeric.ts';\n\nfunction correspondingBooleanVectorSchema(value: Snippet) {\n if (value.dataType.type.includes('2')) {\n return vec2b;\n }\n if (value.dataType.type.includes('3')) {\n return vec3b;\n }\n return vec4b;\n}\n\n// comparison\n\n/**\n * Checks whether `lhs == rhs` on all components.\n * Equivalent to `all(eq(lhs, rhs))`.\n * @example\n * allEq(vec2f(0.0, 1.0), vec2f(0.0, 2.0)) // returns false\n * allEq(vec3u(0, 1, 2), vec3u(0, 1, 2)) // returns true\n */\nexport const allEq = createDualImpl(\n // CPU implementation\n <T extends AnyVecInstance>(lhs: T, rhs: T) => all(eq(lhs, rhs)),\n // GPU implementation\n (lhs, rhs) => ({\n value: `all(${lhs.value} == ${rhs.value})`,\n dataType: bool,\n }),\n);\n\n/**\n * Checks **component-wise** whether `lhs == rhs`.\n * This function does **not** return `bool`, for that use-case, wrap the result in `all`, or use `allEq`.\n * @example\n * eq(vec2f(0.0, 1.0), vec2f(0.0, 2.0)) // returns vec2b(true, false)\n * eq(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(false, true, false)\n * all(eq(vec4i(4, 3, 2, 1), vec4i(4, 3, 2, 1))) // returns true\n * allEq(vec4i(4, 3, 2, 1), vec4i(4, 3, 2, 1)) // returns true\n */\nexport const eq = createDualImpl(\n // CPU implementation\n <T extends AnyVecInstance>(lhs: T, rhs: T) =>\n VectorOps.eq[lhs.kind](lhs, rhs),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} == ${rhs.value})`,\n dataType: correspondingBooleanVectorSchema(lhs),\n }),\n);\n\n/**\n * Checks **component-wise** whether `lhs != rhs`.\n * This function does **not** return `bool`, for that use-case, wrap the result in `any`.\n * @example\n * ne(vec2f(0.0, 1.0), vec2f(0.0, 2.0)) // returns vec2b(false, true)\n * ne(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(true, false, true)\n * any(ne(vec4i(4, 3, 2, 1), vec4i(4, 2, 2, 1))) // returns true\n */\nexport const ne = createDualImpl(\n // CPU implementation\n <T extends AnyVecInstance>(lhs: T, rhs: T) => not(eq(lhs, rhs)),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} != ${rhs.value})`,\n dataType: correspondingBooleanVectorSchema(lhs),\n }),\n);\n\n/**\n * Checks **component-wise** whether `lhs < rhs`.\n * This function does **not** return `bool`, for that use-case, wrap the result in `all`.\n * @example\n * lt(vec2f(0.0, 0.0), vec2f(0.0, 1.0)) // returns vec2b(false, true)\n * lt(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(true, false, false)\n * all(lt(vec4i(1, 2, 3, 4), vec4i(2, 3, 4, 5))) // returns true\n */\nexport const lt = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance>(lhs: T, rhs: T) =>\n VectorOps.lt[lhs.kind](lhs, rhs),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} < ${rhs.value})`,\n dataType: correspondingBooleanVectorSchema(lhs),\n }),\n);\n\n/**\n * Checks **component-wise** whether `lhs <= rhs`.\n * This function does **not** return `bool`, for that use-case, wrap the result in `all`.\n * @example\n * le(vec2f(0.0, 0.0), vec2f(0.0, 1.0)) // returns vec2b(true, true)\n * le(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(true, true, false)\n * all(le(vec4i(1, 2, 3, 4), vec4i(2, 3, 3, 5))) // returns true\n */\nexport const le = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance>(lhs: T, rhs: T) =>\n or(lt(lhs, rhs), eq(lhs, rhs)),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} <= ${rhs.value})`,\n dataType: correspondingBooleanVectorSchema(lhs),\n }),\n);\n\n/**\n * Checks **component-wise** whether `lhs > rhs`.\n * This function does **not** return `bool`, for that use-case, wrap the result in `all`.\n * @example\n * gt(vec2f(0.0, 0.0), vec2f(0.0, 1.0)) // returns vec2b(false, false)\n * gt(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(false, false, true)\n * all(gt(vec4i(2, 3, 4, 5), vec4i(1, 2, 3, 4))) // returns true\n */\nexport const gt = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance>(lhs: T, rhs: T) =>\n and(not(lt(lhs, rhs)), not(eq(lhs, rhs))),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} > ${rhs.value})`,\n dataType: correspondingBooleanVectorSchema(lhs),\n }),\n);\n\n/**\n * Checks **component-wise** whether `lhs >= rhs`.\n * This function does **not** return `bool`, for that use-case, wrap the result in `all`.\n * @example\n * ge(vec2f(0.0, 0.0), vec2f(0.0, 1.0)) // returns vec2b(true, false)\n * ge(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(false, true, true)\n * all(ge(vec4i(2, 2, 4, 5), vec4i(1, 2, 3, 4))) // returns true\n */\nexport const ge = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance>(lhs: T, rhs: T) => not(lt(lhs, rhs)),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} >= ${rhs.value})`,\n dataType: correspondingBooleanVectorSchema(lhs),\n }),\n);\n\n// logical ops\n\n/**\n * Returns **component-wise** `!value`.\n * @example\n * not(vec2b(false, true)) // returns vec2b(true, false)\n * not(vec3b(true, true, false)) // returns vec3b(false, false, true)\n */\nexport const not = createDualImpl(\n // CPU implementation\n <T extends AnyBooleanVecInstance>(value: T): T =>\n VectorOps.neg[value.kind](value),\n // GPU implementation\n (value) => ({\n value: `!(${value.value})`,\n dataType: value.dataType,\n }),\n);\n\n/**\n * Returns **component-wise** logical `or` result.\n * @example\n * or(vec2b(false, true), vec2b(false, false)) // returns vec2b(false, true)\n * or(vec3b(true, true, false), vec3b(false, true, false)) // returns vec3b(true, true, false)\n */\nexport const or = createDualImpl(\n // CPU implementation\n <T extends AnyBooleanVecInstance>(lhs: T, rhs: T) =>\n VectorOps.or[lhs.kind](lhs, rhs),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} | ${rhs.value})`,\n dataType: lhs.dataType,\n }),\n);\n\n/**\n * Returns **component-wise** logical `and` result.\n * @example\n * and(vec2b(false, true), vec2b(true, true)) // returns vec2b(false, true)\n * and(vec3b(true, true, false), vec3b(false, true, false)) // returns vec3b(false, true, false)\n */\nexport const and = createDualImpl(\n // CPU implementation\n <T extends AnyBooleanVecInstance>(lhs: T, rhs: T) =>\n not(or(not(lhs), not(rhs))),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} & ${rhs.value})`,\n dataType: lhs.dataType,\n }),\n);\n\n// logical aggregation\n\n/**\n * Returns `true` if each component of `value` is true.\n * @example\n * all(vec2b(false, true)) // returns false\n * all(vec3b(true, true, true)) // returns true\n */\nexport const all = createDualImpl(\n // CPU implementation\n (value: AnyBooleanVecInstance) => VectorOps.all[value.kind](value),\n // GPU implementation\n (value) => ({\n value: `all(${value.value})`,\n dataType: bool,\n }),\n);\n\n/**\n * Returns `true` if any component of `value` is true.\n * @example\n * any(vec2b(false, true)) // returns true\n * any(vec3b(false, false, false)) // returns false\n */\nexport const any = createDualImpl(\n // CPU implementation\n (value: AnyBooleanVecInstance) => !all(not(value)),\n // GPU implementation\n (value) => ({\n value: `any(${value.value})`,\n dataType: bool,\n }),\n);\n\n// other\n\n/**\n * Checks whether the given elements differ by at most the `precision` value.\n * Checks all elements of `lhs` and `rhs` if arguments are vectors.\n * @example\n * isCloseTo(0, 0.1) // returns false\n * isCloseTo(vec3f(0, 0, 0), vec3f(0.002, -0.009, 0)) // returns true\n *\n * @param {number} precision argument that specifies the maximum allowed difference, 0.01 by default.\n */\nexport const isCloseTo = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(\n lhs: T,\n rhs: T,\n precision = 0.01,\n ) => {\n if (typeof lhs === 'number' && typeof rhs === 'number') {\n return Math.abs(lhs - rhs) < precision;\n }\n if (typeof lhs !== 'number' && typeof rhs !== 'number') {\n return VectorOps.isCloseToZero[lhs.kind](sub(lhs, rhs), precision);\n }\n return false;\n },\n // GPU implementation\n (lhs, rhs, precision = { value: 0.01, dataType: f32 }) => {\n if (isNumeric(lhs) && isNumeric(rhs)) {\n return {\n value: `(abs(f32(${lhs.value}) - f32(${rhs.value})) <= ${precision.value})`,\n dataType: bool,\n };\n }\n if (!isNumeric(lhs) && !isNumeric(rhs)) {\n return {\n // https://www.w3.org/TR/WGSL/#vector-multi-component:~:text=Binary%20arithmetic%20expressions%20with%20mixed%20scalar%20and%20vector%20operands\n // (a-a)+prec creates a vector of a.length elements, all equal to prec\n value: `all(abs(${lhs.value} - ${rhs.value}) <= (${lhs.value} - ${lhs.value}) + ${precision.value})`,\n dataType: bool,\n };\n }\n return {\n value: 'false',\n dataType: bool,\n };\n },\n);\n\nexport type SelectOverload = {\n <T extends ScalarData | AnyVecInstance>(f: T, t: T, cond: boolean): T;\n <T extends AnyVecInstance>(\n f: T,\n t: T,\n cond: T extends AnyVec2Instance\n ? v2b\n : T extends AnyVec3Instance\n ? v3b\n : v4b,\n ): T;\n};\n\n/**\n * Returns `t` if `cond` is `true`, and `f` otherwise.\n * Component-wise if `cond` is a vector.\n * @example\n * select(vec2i(1, 2), vec2i(3, 4), true) // returns vec2i(3, 4)\n * select(vec2i(1, 2), vec2i(3, 4), vec2b(false, true)) // returns vec2i(1, 4)\n */\nexport const select: SelectOverload = createDualImpl(\n // CPU implementation\n <T extends AnyVecInstance | ScalarData>(\n f: T,\n t: T,\n cond: AnyBooleanVecInstance | boolean,\n ) => {\n if (typeof cond === 'boolean') {\n return cond ? t : f;\n }\n return VectorOps.select[(f as AnyVecInstance).kind](\n f as AnyVecInstance,\n t as AnyVecInstance,\n cond,\n );\n },\n // GPU implementation\n (f, t, cond) => ({\n value: `select(${f.value}, ${t.value}, ${cond.value})`,\n dataType: f.dataType,\n }),\n);\n","import {\n Void,\n type atomicI32,\n type atomicU32,\n isWgslData,\n} from '../data/wgslTypes.ts';\nimport { createDualImpl } from '../shared/generators.ts';\n\ntype AnyAtomic = atomicI32 | atomicU32;\n\nexport const workgroupBarrier = createDualImpl(\n // CPU implementation\n () => console.warn('workgroupBarrier is a no-op outside of GPU mode.'),\n // GPU implementation\n () => ({ value: 'workgroupBarrier()', dataType: Void }),\n);\n\nexport const storageBarrier = createDualImpl(\n // CPU implementation\n () => console.warn('storageBarrier is a no-op outside of GPU mode.'),\n // GPU implementation\n () => ({ value: 'storageBarrier()', dataType: Void }),\n);\n\nexport const textureBarrier = createDualImpl(\n // CPU implementation\n () => console.warn('textureBarrier is a no-op outside of GPU mode.'),\n // GPU implementation\n () => ({ value: 'textureBarrier()', dataType: Void }),\n);\n\nexport const atomicLoad = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return { value: `atomicLoad(&${a.value})`, dataType: a.dataType.inner };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n);\n\nexport const atomicStore = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): void => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (!isWgslData(a.dataType) || a.dataType.type !== 'atomic') {\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n }\n return {\n value: `atomicStore(&${a.value}, ${value.value})`,\n dataType: Void,\n };\n },\n);\n\nexport const atomicAdd = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return {\n value: `atomicAdd(&${a.value}, ${value.value})`,\n dataType: a.dataType.inner,\n };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n);\n\nexport const atomicSub = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return {\n value: `atomicSub(&${a.value}, ${value.value})`,\n dataType: a.dataType.inner,\n };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n);\n\nexport const atomicMax = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return {\n value: `atomicMax(&${a.value}, ${value.value})`,\n dataType: a.dataType.inner,\n };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n);\n\nexport const atomicMin = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return {\n value: `atomicMin(&${a.value}, ${value.value})`,\n dataType: a.dataType.inner,\n };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n);\n\nexport const atomicAnd = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return {\n value: `atomicAnd(&${a.value}, ${value.value})`,\n dataType: a.dataType.inner,\n };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n);\n\nexport const atomicOr = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return {\n value: `atomicOr(&${a.value}, ${value.value})`,\n dataType: a.dataType.inner,\n };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n);\n\nexport const atomicXor = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return {\n value: `atomicXor(&${a.value}, ${value.value})`,\n dataType: a.dataType.inner,\n };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n);\n","import { u32 } from '../data/numeric.ts';\nimport { createDualImpl } from '../shared/generators.ts';\n\nexport const arrayLength = createDualImpl(\n // CPU implementation\n (a: unknown[]) => a.length,\n // GPU implementation\n (a) => ({ value: `arrayLength(&${a.value})`, dataType: u32 }),\n);\n","import * as TB from 'typed-binary';\nimport { u32 } from '../data/numeric.ts';\nimport { vec2f, vec4f } from '../data/vector.ts';\nimport type { v2f, v4f } from '../data/wgslTypes.ts';\nimport { createDualImpl } from '../shared/generators.ts';\n\n/**\n * @privateRemarks\n * https://gpuweb.github.io/gpuweb/wgsl/#unpack2x16float-builtin\n */\nexport const unpack2x16float = createDualImpl(\n // CPU implementation\n (e: number): v2f => {\n const buffer = new ArrayBuffer(4);\n const writer = new TB.BufferWriter(buffer);\n writer.writeUint32(e);\n const reader = new TB.BufferReader(buffer);\n return vec2f(reader.readFloat16(), reader.readFloat16());\n },\n // GPU implementation\n (e) => {\n return {\n value: `unpack2x16float(${e.value})`,\n dataType: vec2f,\n };\n },\n);\n\n/**\n * @privateRemarks\n * https://gpuweb.github.io/gpuweb/wgsl/#pack2x16float-builtin\n */\nexport const pack2x16float = createDualImpl(\n // CPU implementation\n (e: v2f): number => {\n const buffer = new ArrayBuffer(4);\n const writer = new TB.BufferWriter(buffer);\n writer.writeFloat16(e.x);\n writer.writeFloat16(e.y);\n const reader = new TB.BufferReader(buffer);\n return u32(reader.readUint32());\n },\n // GPU implementation\n (e) => {\n return {\n value: `pack2x16float(${e.value})`,\n dataType: u32,\n };\n },\n);\n\n/**\n * @privateRemarks\n * https://gpuweb.github.io/gpuweb/wgsl/#unpack4x8unorm-builtin\n */\nexport const unpack4x8unorm = createDualImpl(\n // CPU implementation\n (e: number): v4f => {\n const buffer = new ArrayBuffer(4);\n const writer = new TB.BufferWriter(buffer);\n writer.writeUint32(e);\n const reader = new TB.BufferReader(buffer);\n return vec4f(\n reader.readUint8() / 255,\n reader.readUint8() / 255,\n reader.readUint8() / 255,\n reader.readUint8() / 255,\n );\n },\n // GPU implementation\n (e) => {\n return {\n value: `unpack4x8unorm(${e.value})`,\n dataType: vec4f,\n };\n },\n);\n\n/**\n * @privateRemarks\n * https://gpuweb.github.io/gpuweb/wgsl/#pack4x8unorm-builtin\n */\nexport const pack4x8unorm = createDualImpl(\n // CPU implementation\n (e: v4f): number => {\n const buffer = new ArrayBuffer(4);\n const writer = new TB.BufferWriter(buffer);\n writer.writeUint8(e.x * 255);\n writer.writeUint8(e.y * 255);\n writer.writeUint8(e.z * 255);\n writer.writeUint8(e.w * 255);\n const reader = new TB.BufferReader(buffer);\n return u32(reader.readUint32());\n },\n // GPU implementation\n (e) => {\n return {\n value: `pack4x8unorm(${e.value})`,\n dataType: u32,\n };\n },\n);\n","import type { TgpuSampler } from '../core/sampler/sampler.ts';\nimport type { TgpuSampledTexture } from '../core/texture/texture.ts';\nimport { vec4f } from '../data/vector.ts';\nimport type { v2f, v2i, v3f, v3i, v4f } from '../data/wgslTypes.ts';\nimport { createDualImpl } from '../shared/generators.ts';\n\ntype TextureSampleOverload = {\n <T extends TgpuSampledTexture<'1d'>>(\n texture: T,\n sampler: TgpuSampler,\n coords: number,\n ): v4f;\n <T extends TgpuSampledTexture<'2d'>>(\n texture: T,\n sampler: TgpuSampler,\n coords: v2f,\n ): v4f;\n <T extends TgpuSampledTexture<'2d'>>(\n texture: T,\n sampler: TgpuSampler,\n coords: v2f,\n offset: v2i,\n ): v4f;\n <T extends TgpuSampledTexture<'2d-array'>>(\n texture: T,\n sampler: TgpuSampler,\n coords: v2f,\n arrayIndex: number,\n ): v4f;\n <T extends TgpuSampledTexture<'2d-array'>>(\n texture: T,\n sampler: TgpuSampler,\n coords: v2f,\n arrayIndex: number,\n offset: v2i,\n ): v4f;\n <T extends TgpuSampledTexture<'3d' | 'cube'>>(\n texture: T,\n sampler: TgpuSampler,\n coords: v3f,\n ): v4f;\n <T extends TgpuSampledTexture<'3d'>>(\n texture: T,\n sampler: TgpuSampler,\n coords: v3f,\n offset: v3i,\n ): v4f;\n <T extends TgpuSampledTexture<'cube-array'>>(\n texture: T,\n sampler: TgpuSampler,\n coords: v3f,\n arrayIndex: number,\n ): v4f;\n // TODO: Support this\n // <T extends TgpuSampledTexture<'depth-2d'>>(\n // texture: T,\n // sampler: TgpuSampler,\n // coords: v2f,\n // ): number;\n // <T extends TgpuSampledTexture<'depth-2d'>>(\n // texture: T,\n // sampler: TgpuSampler,\n // coords: v2f,\n // offset: v2i,\n // ): number;\n // <T extends TgpuSampledTexture<'depth-2d-array'>>(\n // texture: T,\n // sampler: TgpuSampler,\n // coords: v2f,\n // arrayIndex: number,\n // ): number;\n // <T extends TgpuSampledTexture<'depth-2d-array'>>(\n // texture: T,\n // sampler: TgpuSampler,\n // coords: v2f,\n // arrayIndex: number,\n // offset: v2i,\n // ): number;\n // <T extends TgpuSampledTexture<'depth-cube'>>(\n // texture: T,\n // sampler: TgpuSampler,\n // coords: v3i,\n // ): number;\n // <T extends TgpuSampledTexture<'depth-cube-array'>>(\n // texture: T,\n // sampler: TgpuSampler,\n // coords: v3i,\n // arrayIndex: number,\n // ): number;\n};\n\nexport const textureSample: TextureSampleOverload = createDualImpl(\n // CPU implementation\n (\n _texture: TgpuSampledTexture,\n _sampler: TgpuSampler,\n _coords: number | v2f | v3f,\n _offsetOrArrayIndex?: v2i | v3i | number,\n _maybeOffset?: v2i | v3i,\n ) => {\n throw new Error('Texture sampling is not supported outside of GPU mode.');\n },\n // GPU implementation\n (texture, sampler, coords, offsetOrArrayIndex, maybeOffset) => {\n const args = [texture, sampler, coords];\n\n if (offsetOrArrayIndex !== undefined) {\n args.push(offsetOrArrayIndex);\n }\n\n if (maybeOffset !== undefined) {\n args.push(maybeOffset);\n }\n\n return {\n value: `textureSample(${args.map((v) => v.value).join(', ')})`,\n dataType: vec4f,\n };\n },\n);\n"],"mappings":"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CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAElBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAElBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,CACpB,CACF,CACF,EAKA,OAAQ,CACN,QAAS,CAACN,EAAe1D,IAAgB,CACvC,IAAM2D,EAAKD,EAAE,QACb,OAAO3C,EACL4C,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAC5B2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,CAC9B,CACF,EAEA,QAAS,CAAC0D,EAAe1D,IAAgB,CACvC,IAAM2D,EAAKD,EAAE,QACb,OAAOnC,EACLoC,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAC5C2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAC5C2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,CAC9C,CACF,EAEA,QAAS,CAAC0D,EAAe1D,IAAgB,CACvC,IAAM2D,EAAKD,EAAE,QACb,OAAO3B,EACL4B,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAC5D2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAC5D2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAC5D2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,CAC9D,CACF,CACF,EAQA,OAAQ,CACN,QAAS,CAACA,EAAa0D,IAAkB,CACvC,IAAMC,EAAKD,EAAE,QACb,OAAO3C,EACLf,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAC5B3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,CAC9B,CACF,EAEA,QAAS,CAAC3D,EAAa0D,IAAkB,CACvC,IAAMC,EAAKD,EAAE,QACb,OAAOnC,EACLvB,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAC5C3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAC5C3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,CAC9C,CACF,EAEA,QAAS,CAAC3D,EAAa0D,IAAkB,CACvC,IAAMC,EAAKD,EAAE,QACb,OAAO3B,EACL/B,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAC5D3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAC5D3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAC5D3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,EAAI3D,EAAE,EAAI2D,EAAG,CAAC,EAAE,CAC9D,CACF,CACF,EAQA,IAAK,CACH,MAAOxD,EACP,MAAOA,EACP,MAAOA,EACP,MAAOA,EACP,MAAOG,EACP,MAAOA,EACP,MAAOA,EACP,MAAOA,EACP,MAAOC,EACP,MAAOA,EACP,MAAOA,EACP,MAAOA,CACT,EAEA,UAAW,CACT,MAAQP,GAAgB,CACtB,IAAMiE,EAAMlE,EAAWC,CAAC,EACxB,OAAOe,EAAMf,EAAE,EAAIiE,EAAKjE,EAAE,EAAIiE,CAAG,CACnC,EACA,MAAQjE,GAAgB,CACtB,IAAMiE,EAAMlE,EAAWC,CAAC,EACxB,OAAOiB,EAAMjB,EAAE,EAAIiE,EAAKjE,EAAE,EAAIiE,CAAG,CACnC,EACA,MAAQjE,GAAgB,CACtB,IAAMiE,EAAMlE,EAAWC,CAAC,EACxB,OAAOmB,EAAMnB,EAAE,EAAIiE,EAAKjE,EAAE,EAAIiE,CAAG,CACnC,EACA,MAAQjE,GAAgB,CACtB,IAAMiE,EAAMlE,EAAWC,CAAC,EACxB,OAAOqB,EAAMrB,EAAE,EAAIiE,EAAKjE,EAAE,EAAIiE,CAAG,CACnC,EAEA,MAAQjE,GAAgB,CACtB,IAAMiE,EAAMhE,EAAWD,CAAC,EACxB,OAAOuB,EAAMvB,EAAE,EAAIiE,EAAKjE,EAAE,EAAIiE,EAAKjE,EAAE,EAAIiE,CAAG,CAC9C,EACA,MAAQjE,GAAgB,CACtB,IAAMiE,EAAMhE,EAAWD,CAAC,EACxB,OAAOyB,EAAMzB,EAAE,EAAIiE,EAAKjE,EAAE,EAAIiE,EAAKjE,EAAE,EAAIiE,CAAG,CAC9C,EACA,MAAQjE,GAAgB,CACtB,IAAMiE,EAAMhE,EAAWD,CAAC,EACxB,OAAO2B,EAAM3B,EAAE,EAAIiE,EAAKjE,EAAE,EAAIiE,EAAKjE,EAAE,EAAIiE,CAAG,CAC9C,EACA,MAAQjE,GAAgB,CACtB,IAAMiE,EAAMhE,EAAWD,CAAC,EACxB,OAAO6B,EAAM7B,EAAE,EAAIiE,EAAKjE,EAAE,EAAIiE,EAAKjE,EAAE,EAAIiE,CAAG,CAC9C,EAEA,MAAQjE,GAAgB,CACtB,IAAMiE,EAAM/D,EAAWF,CAAC,EACxB,OAAO+B,EAAM/B,EAAE,EAAIiE,EAAKjE,EAAE,EAAIiE,EAAKjE,EAAE,EAAIiE,EAAKjE,EAAE,EAAIiE,CAAG,CACzD,EACA,MAAQjE,GAAgB,CACtB,IAAMiE,EAAM/D,EAAWF,CAAC,EACxB,OAAOiC,EAAMjC,EAAE,EAAIiE,EAAKjE,EAAE,EAAIiE,EAAKjE,EAAE,EAAIiE,EAAKjE,EAAE,EAAIiE,CAAG,CACzD,EACA,MAAQjE,GAAgB,CACtB,IAAMiE,EAAM/D,EAAWF,CAAC,EACxB,OAAOmC,EAAMnC,EAAE,EAAIiE,EAAKjE,EAAE,EAAIiE,EAAKjE,EAAE,EAAIiE,EAAKjE,EAAE,EAAIiE,CAAG,CACzD,EACA,MAAQjE,GAAgB,CACtB,IAAMiE,EAAM/D,EAAWF,CAAC,EACxB,OAAOqC,EAAMrC,EAAE,EAAIiE,EAAKjE,EAAE,EAAIiE,EAAKjE,EAAE,EAAIiE,EAAKjE,EAAE,EAAIiE,CAAG,CACzD,CACF,EAEA,MAAO,CACL,MAAO,CAACnD,EAAayB,IACZhB,EACLT,EAAE,EAAIyB,EAAE,EAAIzB,EAAE,EAAIyB,EAAE,EACpBzB,EAAE,EAAIyB,EAAE,EAAIzB,EAAE,EAAIyB,EAAE,EACpBzB,EAAE,EAAIyB,EAAE,EAAIzB,EAAE,EAAIyB,EAAE,CACtB,EAEF,MAAO,CAACzB,EAAayB,IACZd,EACLX,EAAE,EAAIyB,EAAE,EAAIzB,EAAE,EAAIyB,EAAE,EACpBzB,EAAE,EAAIyB,EAAE,EAAIzB,EAAE,EAAIyB,EAAE,EACpBzB,EAAE,EAAIyB,EAAE,EAAIzB,EAAE,EAAIyB,EAAE,CACtB,CAEJ,EAKA,MAAO,CACL,MAAO3B,EAAQ,KAAK,KAAK,EACzB,MAAOI,EAAQ,KAAK,KAAK,EAEzB,MAAOM,EAAQ,KAAK,KAAK,EACzB,MAAOE,EAAQ,KAAK,KAAK,EAEzB,MAAOM,EAAQ,KAAK,KAAK,EACzB,MAAOE,EAAQ,KAAK,KAAK,CAC3B,EAEA,IAAK,CACH,MAAOM,GAAsB,KAAK,GAAG,EACrC,MAAOE,GAAsB,KAAK,GAAG,EACrC,MAAOC,GAAsB,KAAK,GAAG,EACrC,MAAOC,GAAsB,KAAK,GAAG,EAErC,MAAOC,GAAsB,KAAK,GAAG,EACrC,MAAOC,GAAsB,KAAK,GAAG,EACrC,MAAOC,GAAsB,KAAK,GAAG,EACrC,MAAOC,GAAsB,KAAK,GAAG,EAErC,MAAOC,GAAsB,KAAK,GAAG,EACrC,MAAOC,GAAsB,KAAK,GAAG,EACrC,MAAOC,GAAsB,KAAK,GAAG,EACrC,MAAOC,GAAsB,KAAK,GAAG,CACvC,EAEA,IAAK,CACH,MAAOZ,GAAsB,KAAK,GAAG,EACrC,MAAOE,GAAsB,KAAK,GAAG,EACrC,MAAOC,GAAsB,KAAK,GAAG,EACrC,MAAOC,GAAsB,KAAK,GAAG,EAErC,MAAOC,GAAsB,KAAK,GAAG,EACrC,MAAOC,GAAsB,KAAK,GAAG,EACrC,MAAOC,GAAsB,KAAK,GAAG,EACrC,MAAOC,GAAsB,KAAK,GAAG,EAErC,MAAOC,GAAsB,KAAK,GAAG,EACrC,MAAOC,GAAsB,KAAK,GAAG,EACrC,MAAOC,GAAsB,KAAK,GAAG,EACrC,MAAOC,GAAsB,KAAK,GAAG,CACvC,EAEA,IAAK,CACH,MAAO,CAACgB,EAAgBC,IACtBpD,EAAMmD,EAAK,GAAKC,EAAS,EAAGD,EAAK,GAAKC,EAAS,CAAC,EAClD,MAAO,CAACD,EAAgBC,IACtBlD,EAAMiD,EAAK,GAAKC,EAAS,EAAGD,EAAK,GAAKC,EAAS,CAAC,EAElD,MAAO,CAACD,EAAgBC,IACtB5C,EAAM2C,EAAK,GAAKC,EAAS,EAAGD,EAAK,GAAKC,EAAS,EAAGD,EAAK,GAAKC,EAAS,CAAC,EACxE,MAAO,CAACD,EAAgBC,IACtB1C,EAAMyC,EAAK,GAAKC,EAAS,EAAGD,EAAK,GAAKC,EAAS,EAAGD,EAAK,GAAKC,EAAS,CAAC,EAExE,MAAO,CAACD,EAAgBC,IACtBpC,EACEmC,EAAK,GAAKC,EAAS,EACnBD,EAAK,GAAKC,EAAS,EACnBD,EAAK,GAAKC,EAAS,EACnBD,EAAK,GAAKC,EAAS,CACrB,EACF,MAAO,CAACD,EAAgBC,IACtBlC,EACEiC,EAAK,GAAKC,EAAS,EACnBD,EAAK,GAAKC,EAAS,EACnBD,EAAK,GAAKC,EAAS,EACnBD,EAAK,GAAKC,EAAS,CACrB,CACJ,EAKA,IAAK,CACH,MAAO,CAACf,EAAcC,EAAce,IAC9B,OAAOA,GAAO,SACTrD,EAAMqC,EAAG,GAAK,EAAIgB,GAAMf,EAAG,EAAIe,EAAIhB,EAAG,GAAK,EAAIgB,GAAMf,EAAG,EAAIe,CAAE,EAEhErD,EACLqC,EAAG,GAAK,EAAIgB,EAAG,GAAKf,EAAG,EAAIe,EAAG,EAC9BhB,EAAG,GAAK,EAAIgB,EAAG,GAAKf,EAAG,EAAIe,EAAG,CAChC,EAEF,MAAO,CAAChB,EAAcC,EAAce,IAC9B,OAAOA,GAAO,SACTnD,EAAMmC,EAAG,GAAK,EAAIgB,GAAMf,EAAG,EAAIe,EAAIhB,EAAG,GAAK,EAAIgB,GAAMf,EAAG,EAAIe,CAAE,EAEhEnD,EACLmC,EAAG,GAAK,EAAIgB,EAAG,GAAKf,EAAG,EAAIe,EAAG,EAC9BhB,EAAG,GAAK,EAAIgB,EAAG,GAAKf,EAAG,EAAIe,EAAG,CAChC,EAGF,MAAO,CAAChB,EAAcC,EAAce,IAC9B,OAAOA,GAAO,SACT7C,EACL6B,EAAG,GAAK,EAAIgB,GAAMf,EAAG,EAAIe,EACzBhB,EAAG,GAAK,EAAIgB,GAAMf,EAAG,EAAIe,EACzBhB,EAAG,GAAK,EAAIgB,GAAMf,EAAG,EAAIe,CAC3B,EAEK7C,EACL6B,EAAG,GAAK,EAAIgB,EAAG,GAAKf,EAAG,EAAIe,EAAG,EAC9BhB,EAAG,GAAK,EAAIgB,EAAG,GAAKf,EAAG,EAAIe,EAAG,EAC9BhB,EAAG,GAAK,EAAIgB,EAAG,GAAKf,EAAG,EAAIe,EAAG,CAChC,EAEF,MAAO,CAAChB,EAAcC,EAAce,IAC9B,OAAOA,GAAO,SACT3C,EACL2B,EAAG,GAAK,EAAIgB,GAAMf,EAAG,EAAIe,EACzBhB,EAAG,GAAK,EAAIgB,GAAMf,EAAG,EAAIe,EACzBhB,EAAG,GAAK,EAAIgB,GAAMf,EAAG,EAAIe,CAC3B,EAEK3C,EACL2B,EAAG,GAAK,EAAIgB,EAAG,GAAKf,EAAG,EAAIe,EAAG,EAC9BhB,EAAG,GAAK,EAAIgB,EAAG,GAAKf,EAAG,EAAIe,EAAG,EAC9BhB,EAAG,GAAK,EAAIgB,EAAG,GAAKf,EAAG,EAAIe,EAAG,CAChC,EAGF,MAAO,CAAChB,EAAcC,EAAce,IAC9B,OAAOA,GAAO,SACTrC,EACLqB,EAAG,GAAK,EAAIgB,GAAMf,EAAG,EAAIe,EACzBhB,EAAG,GAAK,EAAIgB,GAAMf,EAAG,EAAIe,EACzBhB,EAAG,GAAK,EAAIgB,GAAMf,EAAG,EAAIe,EACzBhB,EAAG,GAAK,EAAIgB,GAAMf,EAAG,EAAIe,CAC3B,EAEKrC,EACLqB,EAAG,GAAK,EAAIgB,EAAG,GAAKf,EAAG,EAAIe,EAAG,EAC9BhB,EAAG,GAAK,EAAIgB,EAAG,GAAKf,EAAG,EAAIe,EAAG,EAC9BhB,EAAG,GAAK,EAAIgB,EAAG,GAAKf,EAAG,EAAIe,EAAG,EAC9BhB,EAAG,GAAK,EAAIgB,EAAG,GAAKf,EAAG,EAAIe,EAAG,CAChC,EAEF,MAAO,CAAChB,EAAcC,EAAce,IAC9B,OAAOA,GAAO,SACTnC,EACLmB,EAAG,GAAK,EAAIgB,GAAMf,EAAG,EAAIe,EACzBhB,EAAG,GAAK,EAAIgB,GAAMf,EAAG,EAAIe,EACzBhB,EAAG,GAAK,EAAIgB,GAAMf,EAAG,EAAIe,EACzBhB,EAAG,GAAK,EAAIgB,GAAMf,EAAG,EAAIe,CAC3B,EAEKnC,EACLmB,EAAG,GAAK,EAAIgB,EAAG,GAAKf,EAAG,EAAIe,EAAG,EAC9BhB,EAAG,GAAK,EAAIgB,EAAG,GAAKf,EAAG,EAAIe,EAAG,EAC9BhB,EAAG,GAAK,EAAIgB,EAAG,GAAKf,EAAG,EAAIe,EAAG,EAC9BhB,EAAG,GAAK,EAAIgB,EAAG,GAAKf,EAAG,EAAIe,EAAG,CAChC,CAEJ,EASA,IAAK,CACH,MAAOxD,EAAQ,KAAK,GAAG,EACvB,MAAOI,EAAQ,KAAK,GAAG,EAEvB,MAAOM,EAAQ,KAAK,GAAG,EACvB,MAAOE,EAAQ,KAAK,GAAG,EAEvB,MAAOM,EAAQ,KAAK,GAAG,EACvB,MAAOE,EAAQ,KAAK,GAAG,CACzB,EAEA,IAAK,CACH,MAAOpB,EAAQ,KAAK,GAAG,EACvB,MAAOI,EAAQ,KAAK,GAAG,EAEvB,MAAOM,EAAQ,KAAK,GAAG,EACvB,MAAOE,EAAQ,KAAK,GAAG,EAEvB,MAAOM,EAAQ,KAAK,GAAG,EACvB,MAAOE,EAAQ,KAAK,GAAG,CACzB,EAEA,IAAK,CACH,MAAOpB,EAAQ,KAAK,GAAG,EACvB,MAAOI,EAAQ,KAAK,GAAG,EAEvB,MAAOM,EAAQ,KAAK,GAAG,EACvB,MAAOE,EAAQ,KAAK,GAAG,EAEvB,MAAOM,EAAQ,KAAK,GAAG,EACvB,MAAOE,EAAQ,KAAK,GAAG,CACzB,EAEA,MAAO,CACL,MAAOpB,EAASH,GAAUA,EAAQ,KAAK,MAAMA,CAAK,CAAC,EACnD,MAAOO,EAASP,GAAUA,EAAQ,KAAK,MAAMA,CAAK,CAAC,EAEnD,MAAOa,EAASb,GAAUA,EAAQ,KAAK,MAAMA,CAAK,CAAC,EACnD,MAAOe,EAASf,GAAUA,EAAQ,KAAK,MAAMA,CAAK,CAAC,EAEnD,MAAOqB,EAASrB,GAAUA,EAAQ,KAAK,MAAMA,CAAK,CAAC,EACnD,MAAOuB,EAASvB,GAAUA,EAAQ,KAAK,MAAMA,CAAK,CAAC,CACrD,EAEA,cAAe,CACb,MAAO,CAACT,EAAaqE,IAAc,KAAK,IAAIrE,EAAE,CAAC,GAAKqE,GAAK,KAAK,IAAIrE,EAAE,CAAC,GAAKqE,EAC1E,MAAO,CAACrE,EAAaqE,IAAc,KAAK,IAAIrE,EAAE,CAAC,GAAKqE,GAAK,KAAK,IAAIrE,EAAE,CAAC,GAAKqE,EAE1E,MAAO,CAACrE,EAAaqE,IACnB,KAAK,IAAIrE,EAAE,CAAC,GAAKqE,GAAK,KAAK,IAAIrE,EAAE,CAAC,GAAKqE,GAAK,KAAK,IAAIrE,EAAE,CAAC,GAAKqE,EAC/D,MAAO,CAACrE,EAAaqE,IACnB,KAAK,IAAIrE,EAAE,CAAC,GAAKqE,GAAK,KAAK,IAAIrE,EAAE,CAAC,GAAKqE,GAAK,KAAK,IAAIrE,EAAE,CAAC,GAAKqE,EAE/D,MAAO,CAACrE,EAAaqE,IACnB,KAAK,IAAIrE,EAAE,CAAC,GAAKqE,GACjB,KAAK,IAAIrE,EAAE,CAAC,GAAKqE,GACjB,KAAK,IAAIrE,EAAE,CAAC,GAAKqE,GACjB,KAAK,IAAIrE,EAAE,CAAC,GAAKqE,EACnB,MAAO,CAACrE,EAAaqE,IACnB,KAAK,IAAIrE,EAAE,CAAC,GAAKqE,GACjB,KAAK,IAAIrE,EAAE,CAAC,GAAKqE,GACjB,KAAK,IAAIrE,EAAE,CAAC,GAAKqE,GACjB,KAAK,IAAIrE,EAAE,CAAC,GAAKqE,CACrB,EAEA,IAAK,CACH,MAAOzD,EAASH,GAAU,CAACA,CAAK,EAChC,MAAOO,EAASP,GAAU,CAACA,CAAK,EAChC,MAAOS,EAAST,GAAU,CAACA,CAAK,EAChC,MAAOW,EAASX,GAAU,CAACA,CAAK,EAChC,aAAe,GAAgB6C,EAAM,CAAC,EAAE,EAAG,CAAC,EAAE,CAAC,EAE/C,MAAOhC,EAASb,GAAU,CAACA,CAAK,EAChC,MAAOe,EAASf,GAAU,CAACA,CAAK,EAChC,MAAOiB,EAASjB,GAAU,CAACA,CAAK,EAChC,MAAOmB,EAASnB,GAAU,CAACA,CAAK,EAChC,aAAe,GAAgB8C,EAAM,CAAC,EAAE,EAAG,CAAC,EAAE,EAAG,CAAC,EAAE,CAAC,EAErD,MAAOzB,EAASrB,GAAU,CAACA,CAAK,EAChC,MAAOuB,EAASvB,GAAU,CAACA,CAAK,EAChC,MAAOyB,EAASzB,GAAU,CAACA,CAAK,EAChC,MAAO2B,EAAS3B,GAAU,CAACA,CAAK,EAChC,aAAe,GAAgB+C,EAAM,CAAC,EAAE,EAAG,CAAC,EAAE,EAAG,CAAC,EAAE,EAAG,CAAC,EAAE,CAAC,CAC7D,EAEA,OAAQ,CACN,MAAO,CAACc,EAAa,EAAaC,IAChCxD,EAAMwD,EAAE,EAAI,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAI,EAAE,EAAID,EAAE,CAAC,EACxC,MAAO,CAACA,EAAa,EAAaC,IAChCtD,EAAMsD,EAAE,EAAI,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAI,EAAE,EAAID,EAAE,CAAC,EACxC,MAAO,CAACA,EAAa,EAAaC,IAChCpD,EAAMoD,EAAE,EAAI,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAI,EAAE,EAAID,EAAE,CAAC,EACxC,MAAO,CAACA,EAAa,EAAaC,IAChClD,EAAMkD,EAAE,EAAI,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAI,EAAE,EAAID,EAAE,CAAC,EACxC,aAAc,CAACA,EAAa,EAAaC,IACvCjB,EAAMiB,EAAE,EAAI,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAI,EAAE,EAAID,EAAE,CAAC,EAExC,MAAO,CAACA,EAAa,EAAaC,IAChChD,EAAMgD,EAAE,EAAI,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAI,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAI,EAAE,EAAID,EAAE,CAAC,EACzD,MAAO,CAACA,EAAa,EAAaC,IAChC9C,EAAM8C,EAAE,EAAI,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAI,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAI,EAAE,EAAID,EAAE,CAAC,EACzD,MAAO,CAACA,EAAa,EAAaC,IAChC5C,EAAM4C,EAAE,EAAI,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAI,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAI,EAAE,EAAID,EAAE,CAAC,EACzD,MAAO,CAACA,EAAa,EAAaC,IAChC1C,EAAM0C,EAAE,EAAI,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAI,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAI,EAAE,EAAID,EAAE,CAAC,EACzD,aAAc,CAACA,EAAa,EAAaC,IACvChB,EAAMgB,EAAE,EAAI,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAI,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAI,EAAE,EAAID,EAAE,CAAC,EAEzD,MAAO,CAACA,EAAa,EAAaC,IAChCxC,EAAMwC,EAAE,EAAI,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAI,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAI,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAI,EAAE,EAAID,EAAE,CAAC,EAC1E,MAAO,CAACA,EAAa,EAAaC,IAChCtC,EAAMsC,EAAE,EAAI,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAI,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAI,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAI,EAAE,EAAID,EAAE,CAAC,EAC1E,MAAO,CAACA,EAAa,EAAaC,IAChCpC,EAAMoC,EAAE,EAAI,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAI,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAI,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAI,EAAE,EAAID,EAAE,CAAC,EAC1E,MAAO,CAACA,EAAa,EAAaC,IAChClC,EAAMkC,EAAE,EAAI,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAI,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAI,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAI,EAAE,EAAID,EAAE,CAAC,EAC1E,aAAc,CAACA,EAAa,EAAaC,IACvCf,EAAMe,EAAE,EAAI,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAI,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAI,EAAE,EAAID,EAAE,EAAGC,EAAE,EAAI,EAAE,EAAID,EAAE,CAAC,CAC5E,CAYF,EC7gCO,SAASE,EAAUC,EAAkB,CAC1C,IAAMC,EAAOD,EAAQ,SAAS,KAC9B,OACEC,IAAS,eACTA,IAAS,iBACTA,IAAS,OACTA,IAAS,OACTA,IAAS,OACTA,IAAS,KAEb,CAEO,IAAMC,GAAMC,EAEjB,CAAkCC,EAAQC,IACxCC,EAAU,IAAIF,EAAI,IAAI,EAAEA,EAAKC,CAAG,EAElC,CAACD,EAAKC,KAAS,CACb,MAAO,IAAID,EAAI,KAAK,MAAMC,EAAI,KAAK,IACnC,SAAUD,EAAI,QAChB,EACF,EAEaG,EAAMJ,EAEjB,CAAkCC,EAAQC,IACxCC,EAAU,IAAIF,EAAI,IAAI,EAAEA,EAAKC,CAAG,EAElC,CAACD,EAAKC,KAAS,CACb,MAAO,IAAID,EAAI,KAAK,MAAMC,EAAI,KAAK,IACnC,SAAUD,EAAI,QAChB,EACF,EAQaI,GAAmBL,EAE9B,CACEM,EACAC,IAC2C,CAC3C,GAAI,OAAOD,GAAM,SAEf,OAAOH,EAAU,OAAOI,EAAE,IAAI,EAAED,EAAGC,CAAC,EAEtC,GACE,OAAOD,GAAM,UACb,OAAOC,GAAM,UACb,SAAUD,GACV,SAAUC,EACV,CACA,IAAMC,EAAY,CAACF,EAAE,KAAK,WAAW,KAAK,EACpCG,EAAY,CAACF,EAAE,KAAK,WAAW,KAAK,EAC1C,GAAI,CAACC,GAAaC,EAEhB,OAAON,EAAU,OAAQG,EAAqB,IAAI,EAChDA,EACAC,CACF,EAEF,GAAIC,GAAa,CAACC,EAEhB,OAAON,EAAU,OAAQI,EAAqB,IAAI,EAChDD,EACAC,CACF,CAEJ,CAEA,OAAOJ,EAAU,OAAOI,EAAE,IAAI,EAAED,EAAGC,CAAC,CACtC,EAEA,CAACD,EAAGC,IAAM,CACR,IAAMG,EAAad,EAAUU,CAAC,EAEzBC,EAAE,SACFD,EAAE,SAAS,KAAK,WAAW,KAAK,EAG9BC,EAAE,SAAS,KAAK,WAAW,KAAK,EAI9BD,EAAE,SAFFC,EAAE,SAHJD,EAAE,SAMT,MAAO,CAAE,MAAO,IAAIA,EAAE,KAAK,MAAMC,EAAE,KAAK,IAAK,SAAUG,CAAW,CACpE,CACF,EAEaC,GAAMX,EAE0BY,GACrC,OAAOA,GAAU,SACZ,KAAK,IAAIA,CAAK,EAEhBT,EAAU,IAAIS,EAAM,IAAI,EAAEA,CAAK,EAGvCA,IAAW,CAAE,MAAO,OAAOA,EAAM,KAAK,IAAK,SAAUA,EAAM,QAAS,EACvE,EAEaC,GAAQb,EAEnB,CAAyCc,EAAMC,IACzC,OAAOD,GAAM,UAAY,OAAOC,GAAM,SACjC,KAAK,MAAMD,EAAGC,CAAC,EAEjBZ,EAAU,MAAOW,EAA0B,IAAI,EACpDA,EACAC,CACF,EAGF,CAACD,EAAGC,KAAO,CAAE,MAAO,SAASD,EAAE,KAAK,KAAKC,EAAE,KAAK,IAAK,SAAUD,EAAE,QAAS,EAC5E,EAEaE,GAAOhB,EAEuBY,GACnC,OAAOA,GAAU,SACZ,KAAK,KAAKA,CAAK,EAEjBT,EAAU,KAAMS,EAA8B,IAAI,EACvDA,CACF,EAGDA,IAAW,CAAE,MAAO,QAAQA,EAAM,KAAK,IAAK,SAAUA,EAAM,QAAS,EACxE,EAEaK,GAAOjB,EAEuBY,GACnC,OAAOA,GAAU,SACZ,KAAK,KAAKA,CAAK,EAEjBT,EAAU,KAAMS,EAA8B,IAAI,EACvDA,CACF,EAGDA,IAAW,CAAE,MAAO,QAAQA,EAAM,KAAK,IAAK,SAAUA,EAAM,QAAS,EACxE,EAMaM,GAAOlB,EAEuBY,GACnC,OAAOA,GAAU,SACZ,KAAK,KAAKA,CAAK,EAEjBT,EAAU,KAAKS,EAAM,IAAI,EAAEA,CAAK,EAGxCA,IAAW,CAAE,MAAO,QAAQA,EAAM,KAAK,IAAK,SAAUA,EAAM,QAAS,EACxE,EAMaO,GAAQnB,EAEnB,CAA2CY,EAAUQ,EAAQC,IACvD,OAAOT,GAAU,SACZ,KAAK,IAAI,KAAK,IAAIQ,EAAeR,CAAK,EAAGS,CAAc,EAEzDlB,EAAU,MAAMS,EAAM,IAAI,EAC/BA,EACAQ,EACAC,CACF,EAGF,CAACT,EAAOQ,EAAKC,KACJ,CACL,MAAO,SAAST,EAAM,KAAK,KAAKQ,EAAI,KAAK,KAAKC,EAAK,KAAK,IACxD,SAAUT,EAAM,QAClB,EAEJ,EAMaU,GAAMtB,EAEwBY,GACnC,OAAOA,GAAU,SACZ,KAAK,IAAIA,CAAK,EAEhBT,EAAU,IAAIS,EAAM,IAAI,EAAEA,CAAK,EAGvCA,IAAW,CAAE,MAAO,OAAOA,EAAM,KAAK,IAAK,SAAUA,EAAM,QAAS,EACvE,EAMaW,GAAQvB,EAEnB,CAAsBwB,EAAMC,IAAYtB,EAAU,MAAMqB,EAAE,IAAI,EAAEA,EAAGC,CAAC,EAEpE,CAACD,EAAGC,KAAO,CAAE,MAAO,SAASD,EAAE,KAAK,KAAKC,EAAE,KAAK,IAAK,SAAUD,EAAE,QAAS,EAC5E,EAMaE,GAAM1B,EAEjB,CAAkCC,EAAQC,IACxCC,EAAU,IAAIF,EAAI,IAAI,EAAEA,EAAKC,CAAG,EAElC,CAACD,EAAKC,KAAS,CAAE,MAAO,OAAOD,EAAI,KAAK,KAAKC,EAAI,KAAK,IAAK,SAAUyB,CAAI,EAC3E,EAEaC,GAAY5B,EAESO,GAAYJ,EAAU,UAAUI,EAAE,IAAI,EAAEA,CAAC,EAExEA,IAAO,CAAE,MAAO,aAAaA,EAAE,KAAK,IAAK,SAAUA,EAAE,QAAS,EACjE,EAMasB,GAAQ7B,EAEsBY,GACnC,OAAOA,GAAU,SACZ,KAAK,MAAMA,CAAK,EAElBT,EAAU,MAAMS,EAAM,IAAI,EAAEA,CAAK,EAGzCA,IAAW,CAAE,MAAO,SAASA,EAAM,KAAK,IAAK,SAAUA,EAAM,QAAS,EACzE,EAEakB,GAAQ9B,EAEsBwB,GACnC,OAAOA,GAAM,SACPA,EAAI,KAAK,MAAMA,CAAC,EAEnBrB,EAAU,MAAMqB,EAAE,IAAI,EAAEA,CAAC,EAGjCA,IAAO,CAAE,MAAO,SAASA,EAAE,KAAK,IAAK,SAAUA,EAAE,QAAS,EAC7D,EAMaO,GAAS/B,EAEqBY,GACnC,OAAOA,GAAU,SACZ,KAAK,IAAIA,CAAK,EAEhBT,EAAU,OAAOS,EAAM,IAAI,EAAEA,CAAK,EAG1CA,IAAW,CAAE,MAAO,UAAUA,EAAM,KAAK,IAAK,SAAUe,CAAI,EAC/D,EAMaK,GAAMhC,EAEjB,CAA2CwB,EAAMC,IAC3C,OAAOD,GAAM,SACR,KAAK,IAAIA,EAAGC,CAAW,EAEzBtB,EAAU,IAAIqB,EAAE,IAAI,EAAEA,EAAGC,CAA0B,EAG5D,CAACD,EAAGC,KAAO,CAAE,MAAO,OAAOD,EAAE,KAAK,KAAKC,EAAE,KAAK,IAAK,SAAUD,EAAE,QAAS,EAC1E,EAMaS,GAAMjC,EAEjB,CAA2CwB,EAAMC,IAC3C,OAAOD,GAAM,SACR,KAAK,IAAIA,EAAGC,CAAW,EAEzBtB,EAAU,IAAIqB,EAAE,IAAI,EAAEA,EAAGC,CAA0B,EAG5D,CAACD,EAAGC,KAAO,CAAE,MAAO,OAAOD,EAAE,KAAK,KAAKC,EAAE,KAAK,IAAK,SAAUD,EAAE,QAAS,EAC1E,EAMaU,GAAMlC,EAEwBY,GACnC,OAAOA,GAAU,SACZ,KAAK,IAAIA,CAAK,EAEhBT,EAAU,IAAIS,EAAM,IAAI,EAAEA,CAAK,EAGvCA,IAAW,CAAE,MAAO,OAAOA,EAAM,KAAK,IAAK,SAAUA,EAAM,QAAS,EACvE,EAMauB,GAAMnC,EAEwBY,GACnC,OAAOA,GAAU,SACZ,KAAK,IAAIA,CAAK,EAEhBT,EAAU,IAAIS,EAAM,IAAI,EAAEA,CAAK,EAGvCA,IAAW,CAAE,MAAO,OAAOA,EAAM,KAAK,IAAK,SAAUA,EAAM,QAAS,EACvE,EAOawB,GAAmBpC,EAE9B,CAAyCqC,EAASC,IAAmB,CACnE,GAAI,OAAOD,GAAS,UAAY,OAAOC,GAAa,SAClD,OAAQD,GAAQC,EAElB,GACE,OAAOD,GAAS,UAChB,OAAOC,GAAa,UACpB,SAAUD,GACV,SAAUC,EAEV,OAAOnC,EAAU,IAAIkC,EAAK,IAAI,EAAEA,EAAMC,CAAQ,EAEhD,MAAM,IAAI,MAAM,4BAA4B,CAC9C,EAEA,CAACD,EAAMC,KACE,CACL,MAAO,OAAOD,EAAK,KAAK,KAAKC,EAAS,KAAK,IAC3C,SAAUD,EAAK,QACjB,EAEJ,EAQaE,GAAmBvC,EAE9B,CAAyCwC,EAAOC,EAAOC,IAAsB,CAC3E,GAAI,OAAOF,GAAO,SAAU,CAC1B,GAAI,OAAOE,GAAO,UAAY,OAAOD,GAAO,SAC1C,MAAM,IAAI,MACR,gEACF,EAEF,OAAQD,GAAM,EAAIE,GAAMD,EAAKC,CAC/B,CAEA,GAAI,OAAOF,GAAO,UAAY,OAAOC,GAAO,SAC1C,MAAM,IAAI,MAAM,qDAAqD,EAGvE,OAAOtC,EAAU,IAAIqC,EAAG,IAAI,EAAEA,EAAIC,EAAIC,CAAE,CAC1C,EAEA,CAACF,EAAIC,EAAIC,KACA,CACL,MAAO,OAAOF,EAAG,KAAK,KAAKC,EAAG,KAAK,KAAKC,EAAG,KAAK,IAChD,SAAUF,EAAG,QACf,EAEJ,EAEaG,GAAU3C,EAErB,CAAgCwC,EAAOC,IACrCrC,EAAIoC,EAAInC,GAAI,EAAIqB,GAAIe,EAAID,CAAE,EAAGC,CAAE,CAAC,EAElC,CAACD,EAAIC,KACI,CACL,MAAO,WAAWD,EAAG,KAAK,KAAKC,EAAG,KAAK,IACvC,SAAUD,EAAG,QACf,EAEJ,EAEaI,GAAW5C,EAEtB,CAAyCwB,EAAMC,IACzC,OAAOD,GAAM,UAAY,OAAOC,GAAM,SACjC,KAAK,IAAID,EAAIC,CAAC,EAEhBM,GACL3B,EAAIoB,EAA0BC,CAAwB,CACxD,EAGF,CAACD,EAAGC,KAAO,CAAE,MAAO,YAAYD,EAAE,KAAK,KAAKC,EAAE,KAAK,IAAK,SAAUE,CAAI,EACxE,EAEakB,GAAM7C,EAE0BY,GACrC,OAAOA,GAAU,SACZ,CAACA,EAEHT,EAAU,IAAIS,EAAM,IAAI,EAAEA,CAAK,EAGvCA,IAAW,CAAE,MAAO,KAAKA,EAAM,KAAK,IAAK,SAAUA,EAAM,QAAS,EACrE,ECtbA,SAASkC,EAAiCC,EAAgB,CACxD,OAAIA,EAAM,SAAS,KAAK,SAAS,GAAG,EAC3BC,EAELD,EAAM,SAAS,KAAK,SAAS,GAAG,EAC3BE,EAEFC,CACT,CAWO,IAAMC,GAAQC,EAEnB,CAA2BC,EAAQC,IAAWC,GAAIC,EAAGH,EAAKC,CAAG,CAAC,EAE9D,CAACD,EAAKC,KAAS,CACb,MAAO,OAAOD,EAAI,KAAK,OAAOC,EAAI,KAAK,IACvC,SAAUG,CACZ,EACF,EAWaD,EAAKJ,EAEhB,CAA2BC,EAAQC,IACjCI,EAAU,GAAGL,EAAI,IAAI,EAAEA,EAAKC,CAAG,EAEjC,CAACD,EAAKC,KAAS,CACb,MAAO,IAAID,EAAI,KAAK,OAAOC,EAAI,KAAK,IACpC,SAAUR,EAAiCO,CAAG,CAChD,EACF,EAUaM,GAAKP,EAEhB,CAA2BC,EAAQC,IAAWM,EAAIJ,EAAGH,EAAKC,CAAG,CAAC,EAE9D,CAACD,EAAKC,KAAS,CACb,MAAO,IAAID,EAAI,KAAK,OAAOC,EAAI,KAAK,IACpC,SAAUR,EAAiCO,CAAG,CAChD,EACF,EAUaQ,EAAKT,EAEhB,CAAkCC,EAAQC,IACxCI,EAAU,GAAGL,EAAI,IAAI,EAAEA,EAAKC,CAAG,EAEjC,CAACD,EAAKC,KAAS,CACb,MAAO,IAAID,EAAI,KAAK,MAAMC,EAAI,KAAK,IACnC,SAAUR,EAAiCO,CAAG,CAChD,EACF,EAUaS,GAAKV,EAEhB,CAAkCC,EAAQC,IACxCS,GAAGF,EAAGR,EAAKC,CAAG,EAAGE,EAAGH,EAAKC,CAAG,CAAC,EAE/B,CAACD,EAAKC,KAAS,CACb,MAAO,IAAID,EAAI,KAAK,OAAOC,EAAI,KAAK,IACpC,SAAUR,EAAiCO,CAAG,CAChD,EACF,EAUaW,GAAKZ,EAEhB,CAAkCC,EAAQC,IACxCW,GAAIL,EAAIC,EAAGR,EAAKC,CAAG,CAAC,EAAGM,EAAIJ,EAAGH,EAAKC,CAAG,CAAC,CAAC,EAE1C,CAACD,EAAKC,KAAS,CACb,MAAO,IAAID,EAAI,KAAK,MAAMC,EAAI,KAAK,IACnC,SAAUR,EAAiCO,CAAG,CAChD,EACF,EAUaa,GAAKd,EAEhB,CAAkCC,EAAQC,IAAWM,EAAIC,EAAGR,EAAKC,CAAG,CAAC,EAErE,CAACD,EAAKC,KAAS,CACb,MAAO,IAAID,EAAI,KAAK,OAAOC,EAAI,KAAK,IACpC,SAAUR,EAAiCO,CAAG,CAChD,EACF,EAUaO,EAAMR,EAEiBL,GAChCW,EAAU,IAAIX,EAAM,IAAI,EAAEA,CAAK,EAEhCA,IAAW,CACV,MAAO,KAAKA,EAAM,KAAK,IACvB,SAAUA,EAAM,QAClB,EACF,EAQagB,GAAKX,EAEhB,CAAkCC,EAAQC,IACxCI,EAAU,GAAGL,EAAI,IAAI,EAAEA,EAAKC,CAAG,EAEjC,CAACD,EAAKC,KAAS,CACb,MAAO,IAAID,EAAI,KAAK,MAAMC,EAAI,KAAK,IACnC,SAAUD,EAAI,QAChB,EACF,EAQaY,GAAMb,EAEjB,CAAkCC,EAAQC,IACxCM,EAAIG,GAAGH,EAAIP,CAAG,EAAGO,EAAIN,CAAG,CAAC,CAAC,EAE5B,CAACD,EAAKC,KAAS,CACb,MAAO,IAAID,EAAI,KAAK,MAAMC,EAAI,KAAK,IACnC,SAAUD,EAAI,QAChB,EACF,EAUaE,GAAMH,EAEhBL,GAAiCW,EAAU,IAAIX,EAAM,IAAI,EAAEA,CAAK,EAEhEA,IAAW,CACV,MAAO,OAAOA,EAAM,KAAK,IACzB,SAAUU,CACZ,EACF,EAQaU,GAAMf,EAEhBL,GAAiC,CAACQ,GAAIK,EAAIb,CAAK,CAAC,EAEhDA,IAAW,CACV,MAAO,OAAOA,EAAM,KAAK,IACzB,SAAUU,CACZ,EACF,EAaaW,GAAYhB,EAEvB,CACEC,EACAC,EACAe,EAAY,MAER,OAAOhB,GAAQ,UAAY,OAAOC,GAAQ,SACrC,KAAK,IAAID,EAAMC,CAAG,EAAIe,EAE3B,OAAOhB,GAAQ,UAAY,OAAOC,GAAQ,SACrCI,EAAU,cAAcL,EAAI,IAAI,EAAEiB,EAAIjB,EAAKC,CAAG,EAAGe,CAAS,EAE5D,GAGT,CAAChB,EAAKC,EAAKe,EAAY,CAAE,MAAO,IAAM,SAAUE,CAAI,IAC9CC,EAAUnB,CAAG,GAAKmB,EAAUlB,CAAG,EAC1B,CACL,MAAO,YAAYD,EAAI,KAAK,WAAWC,EAAI,KAAK,SAASe,EAAU,KAAK,IACxE,SAAUZ,CACZ,EAEE,CAACe,EAAUnB,CAAG,GAAK,CAACmB,EAAUlB,CAAG,EAC5B,CAGL,MAAO,WAAWD,EAAI,KAAK,MAAMC,EAAI,KAAK,SAASD,EAAI,KAAK,MAAMA,EAAI,KAAK,OAAOgB,EAAU,KAAK,IACjG,SAAUZ,CACZ,EAEK,CACL,MAAO,QACP,SAAUA,CACZ,CAEJ,EAsBagB,GAAyBrB,EAEpC,CACEsB,EACA,EACAC,IAEI,OAAOA,GAAS,UACXA,EAAO,EAAID,EAEbhB,EAAU,OAAQgB,EAAqB,IAAI,EAChDA,EACA,EACAC,CACF,EAGF,CAACD,EAAG,EAAGC,KAAU,CACf,MAAO,UAAUD,EAAE,KAAK,KAAK,EAAE,KAAK,KAAKC,EAAK,KAAK,IACnD,SAAUD,EAAE,QACd,EACF,ECxUO,IAAME,GAAmBC,EAE9B,IAAM,QAAQ,KAAK,kDAAkD,EAErE,KAAO,CAAE,MAAO,qBAAsB,SAAUC,CAAK,EACvD,EAEaC,GAAiBF,EAE5B,IAAM,QAAQ,KAAK,gDAAgD,EAEnE,KAAO,CAAE,MAAO,mBAAoB,SAAUC,CAAK,EACrD,EAEaE,GAAiBH,EAE5B,IAAM,QAAQ,KAAK,gDAAgD,EAEnE,KAAO,CAAE,MAAO,mBAAoB,SAAUC,CAAK,EACrD,EAEaG,GAAaJ,EAEFK,GAAiB,CACrC,MAAM,IAAI,MAAM,0DAA0D,CAC5E,EAECA,GAAM,CACL,GAAIC,EAAWD,EAAE,QAAQ,GAAKA,EAAE,SAAS,OAAS,SAChD,MAAO,CAAE,MAAO,eAAeA,EAAE,KAAK,IAAK,SAAUA,EAAE,SAAS,KAAM,EAExE,MAAM,IAAI,MACR,wBAAwB,KAAK,UAAUA,EAAE,SAAU,KAAM,CAAC,CAAC,EAC7D,CACF,CACF,EAEaE,GAAcP,EAEzB,CAAsBK,EAAMG,IAAwB,CAClD,MAAM,IAAI,MAAM,0DAA0D,CAC5E,EAEA,CAACH,EAAGG,IAAU,CACZ,GAAI,CAACF,EAAWD,EAAE,QAAQ,GAAKA,EAAE,SAAS,OAAS,SACjD,MAAM,IAAI,MACR,wBAAwB,KAAK,UAAUA,EAAE,SAAU,KAAM,CAAC,CAAC,EAC7D,EAEF,MAAO,CACL,MAAO,gBAAgBA,EAAE,KAAK,KAAKG,EAAM,KAAK,IAC9C,SAAUP,CACZ,CACF,CACF,EAEaQ,GAAYT,EAEvB,CAAsBK,EAAMG,IAA0B,CACpD,MAAM,IAAI,MAAM,0DAA0D,CAC5E,EAEA,CAACH,EAAGG,IAAU,CACZ,GAAIF,EAAWD,EAAE,QAAQ,GAAKA,EAAE,SAAS,OAAS,SAChD,MAAO,CACL,MAAO,cAAcA,EAAE,KAAK,KAAKG,EAAM,KAAK,IAC5C,SAAUH,EAAE,SAAS,KACvB,EAEF,MAAM,IAAI,MACR,wBAAwB,KAAK,UAAUA,EAAE,SAAU,KAAM,CAAC,CAAC,EAC7D,CACF,CACF,EAEaK,GAAYV,EAEvB,CAAsBK,EAAMG,IAA0B,CACpD,MAAM,IAAI,MAAM,0DAA0D,CAC5E,EAEA,CAACH,EAAGG,IAAU,CACZ,GAAIF,EAAWD,EAAE,QAAQ,GAAKA,EAAE,SAAS,OAAS,SAChD,MAAO,CACL,MAAO,cAAcA,EAAE,KAAK,KAAKG,EAAM,KAAK,IAC5C,SAAUH,EAAE,SAAS,KACvB,EAEF,MAAM,IAAI,MACR,wBAAwB,KAAK,UAAUA,EAAE,SAAU,KAAM,CAAC,CAAC,EAC7D,CACF,CACF,EAEaM,GAAYX,EAEvB,CAAsBK,EAAMG,IAA0B,CACpD,MAAM,IAAI,MAAM,0DAA0D,CAC5E,EAEA,CAACH,EAAGG,IAAU,CACZ,GAAIF,EAAWD,EAAE,QAAQ,GAAKA,EAAE,SAAS,OAAS,SAChD,MAAO,CACL,MAAO,cAAcA,EAAE,KAAK,KAAKG,EAAM,KAAK,IAC5C,SAAUH,EAAE,SAAS,KACvB,EAEF,MAAM,IAAI,MACR,wBAAwB,KAAK,UAAUA,EAAE,SAAU,KAAM,CAAC,CAAC,EAC7D,CACF,CACF,EAEaO,GAAYZ,EAEvB,CAAsBK,EAAMG,IAA0B,CACpD,MAAM,IAAI,MAAM,0DAA0D,CAC5E,EAEA,CAACH,EAAGG,IAAU,CACZ,GAAIF,EAAWD,EAAE,QAAQ,GAAKA,EAAE,SAAS,OAAS,SAChD,MAAO,CACL,MAAO,cAAcA,EAAE,KAAK,KAAKG,EAAM,KAAK,IAC5C,SAAUH,EAAE,SAAS,KACvB,EAEF,MAAM,IAAI,MACR,wBAAwB,KAAK,UAAUA,EAAE,SAAU,KAAM,CAAC,CAAC,EAC7D,CACF,CACF,EAEaQ,GAAYb,EAEvB,CAAsBK,EAAMG,IAA0B,CACpD,MAAM,IAAI,MAAM,0DAA0D,CAC5E,EAEA,CAACH,EAAGG,IAAU,CACZ,GAAIF,EAAWD,EAAE,QAAQ,GAAKA,EAAE,SAAS,OAAS,SAChD,MAAO,CACL,MAAO,cAAcA,EAAE,KAAK,KAAKG,EAAM,KAAK,IAC5C,SAAUH,EAAE,SAAS,KACvB,EAEF,MAAM,IAAI,MACR,wBAAwB,KAAK,UAAUA,EAAE,SAAU,KAAM,CAAC,CAAC,EAC7D,CACF,CACF,EAEaS,GAAWd,EAEtB,CAAsBK,EAAMG,IAA0B,CACpD,MAAM,IAAI,MAAM,0DAA0D,CAC5E,EAEA,CAACH,EAAGG,IAAU,CACZ,GAAIF,EAAWD,EAAE,QAAQ,GAAKA,EAAE,SAAS,OAAS,SAChD,MAAO,CACL,MAAO,aAAaA,EAAE,KAAK,KAAKG,EAAM,KAAK,IAC3C,SAAUH,EAAE,SAAS,KACvB,EAEF,MAAM,IAAI,MACR,wBAAwB,KAAK,UAAUA,EAAE,SAAU,KAAM,CAAC,CAAC,EAC7D,CACF,CACF,EAEaU,GAAYf,EAEvB,CAAsBK,EAAMG,IAA0B,CACpD,MAAM,IAAI,MAAM,0DAA0D,CAC5E,EAEA,CAACH,EAAGG,IAAU,CACZ,GAAIF,EAAWD,EAAE,QAAQ,GAAKA,EAAE,SAAS,OAAS,SAChD,MAAO,CACL,MAAO,cAAcA,EAAE,KAAK,KAAKG,EAAM,KAAK,IAC5C,SAAUH,EAAE,SAAS,KACvB,EAEF,MAAM,IAAI,MACR,wBAAwB,KAAK,UAAUA,EAAE,SAAU,KAAM,CAAC,CAAC,EAC7D,CACF,CACF,EClMO,IAAMW,GAAcC,EAExBC,GAAiBA,EAAE,OAEnBA,IAAO,CAAE,MAAO,gBAAgBA,EAAE,KAAK,IAAK,SAAUC,CAAI,EAC7D,ECRA,UAAYC,MAAQ,eAUb,IAAMC,GAAkBC,EAE5B,GAAmB,CAClB,IAAMC,EAAS,IAAI,YAAY,CAAC,EACjB,IAAO,eAAaA,CAAM,EAClC,YAAY,CAAC,EACpB,IAAMC,EAAS,IAAO,eAAaD,CAAM,EACzC,OAAOE,EAAMD,EAAO,YAAY,EAAGA,EAAO,YAAY,CAAC,CACzD,EAEC,IACQ,CACL,MAAO,mBAAmB,EAAE,KAAK,IACjC,SAAUC,CACZ,EAEJ,EAMaC,GAAgBJ,EAE1B,GAAmB,CAClB,IAAMC,EAAS,IAAI,YAAY,CAAC,EAC1BI,EAAS,IAAO,eAAaJ,CAAM,EACzCI,EAAO,aAAa,EAAE,CAAC,EACvBA,EAAO,aAAa,EAAE,CAAC,EACvB,IAAMH,EAAS,IAAO,eAAaD,CAAM,EACzC,OAAOK,EAAIJ,EAAO,WAAW,CAAC,CAChC,EAEC,IACQ,CACL,MAAO,iBAAiB,EAAE,KAAK,IAC/B,SAAUI,CACZ,EAEJ,EAMaC,GAAiBP,EAE3B,GAAmB,CAClB,IAAMC,EAAS,IAAI,YAAY,CAAC,EACjB,IAAO,eAAaA,CAAM,EAClC,YAAY,CAAC,EACpB,IAAMC,EAAS,IAAO,eAAaD,CAAM,EACzC,OAAOO,EACLN,EAAO,UAAU,EAAI,IACrBA,EAAO,UAAU,EAAI,IACrBA,EAAO,UAAU,EAAI,IACrBA,EAAO,UAAU,EAAI,GACvB,CACF,EAEC,IACQ,CACL,MAAO,kBAAkB,EAAE,KAAK,IAChC,SAAUM,CACZ,EAEJ,EAMaC,GAAeT,EAEzB,GAAmB,CAClB,IAAMC,EAAS,IAAI,YAAY,CAAC,EAC1BI,EAAS,IAAO,eAAaJ,CAAM,EACzCI,EAAO,WAAW,EAAE,EAAI,GAAG,EAC3BA,EAAO,WAAW,EAAE,EAAI,GAAG,EAC3BA,EAAO,WAAW,EAAE,EAAI,GAAG,EAC3BA,EAAO,WAAW,EAAE,EAAI,GAAG,EAC3B,IAAMH,EAAS,IAAO,eAAaD,CAAM,EACzC,OAAOK,EAAIJ,EAAO,WAAW,CAAC,CAChC,EAEC,IACQ,CACL,MAAO,gBAAgB,EAAE,KAAK,IAC9B,SAAUI,CACZ,EAEJ,ECVO,IAAMI,GAAuCC,EAElD,CACEC,EACAC,EACAC,EACAC,EACAC,IACG,CACH,MAAM,IAAI,MAAM,wDAAwD,CAC1E,EAEA,CAACC,EAASC,EAASC,EAAQC,EAAoBC,IAAgB,CAC7D,IAAMC,EAAO,CAACL,EAASC,EAASC,CAAM,EAEtC,OAAIC,IAAuB,QACzBE,EAAK,KAAKF,CAAkB,EAG1BC,IAAgB,QAClBC,EAAK,KAAKD,CAAW,EAGhB,CACL,MAAO,iBAAiBC,EAAK,IAAKC,IAAMA,GAAE,KAAK,EAAE,KAAK,IAAI,CAAC,IAC3D,SAAUC,CACZ,CACF,CACF","names":["discard","createDualImpl","Void","lengthVec2","v","lengthVec3","lengthVec4","dotVec2","lhs","rhs","dotVec3","dotVec4","clamp","value","low","high","unary2f","op","a","vec2f","unary2h","vec2h","unary2i","vec2i","unary2u","vec2u","unary3f","vec3f","unary3h","vec3h","unary3i","vec3i","unary3u","vec3u","unary4f","vec4f","unary4h","vec4h","unary4i","vec4i","unary4u","vec4u","binaryComponentWise2f","b","binaryComponentWise2h","binaryComponentWise2i","binaryComponentWise2u","binaryComponentWise3f","binaryComponentWise3h","binaryComponentWise3i","binaryComponentWise3u","binaryComponentWise4f","binaryComponentWise4h","binaryComponentWise4i","binaryComponentWise4u","VectorOps","e1","e2","vec2b","vec3b","vec4b","s","m","m_","mat2x2f","mat3x3f","mat4x4f","a_","b_","len","base","exponent","e3","n","f","c","isNumeric","element","type","add","createDualImpl","lhs","rhs","VectorOps","sub","mul","s","v","sIsVector","vIsVector","returnType","abs","value","atan2","y","x","acos","asin","ceil","clamp","low","high","cos","cross","a","b","dot","f32","normalize","floor","fract","length","max","min","sin","exp","pow","base","exponent","mix","e1","e2","e3","reflect","distance","neg","correspondingBooleanVectorSchema","value","vec2b","vec3b","vec4b","allEq","createDualImpl","lhs","rhs","all","eq","bool","VectorOps","ne","not","lt","le","or","gt","and","ge","any","isCloseTo","precision","sub","f32","isNumeric","select","f","cond","workgroupBarrier","createDualImpl","Void","storageBarrier","textureBarrier","atomicLoad","a","isWgslData","atomicStore","value","atomicAdd","atomicSub","atomicMax","atomicMin","atomicAnd","atomicOr","atomicXor","arrayLength","createDualImpl","a","u32","TB","unpack2x16float","createDualImpl","buffer","reader","vec2f","pack2x16float","writer","u32","unpack4x8unorm","vec4f","pack4x8unorm","textureSample","createDualImpl","_texture","_sampler","_coords","_offsetOrArrayIndex","_maybeOffset","texture","sampler","coords","offsetOrArrayIndex","maybeOffset","args","v","vec4f"]}
|
1
|
+
{"version":3,"sources":["../../src/std/discard.ts","../../src/data/vectorOps.ts","../../src/std/numeric.ts","../../src/std/boolean.ts","../../src/std/atomic.ts","../../src/std/array.ts","../../src/std/packing.ts","../../src/std/texture.ts"],"sourcesContent":["import { Void } from '../data/wgslTypes.ts';\nimport { createDualImpl } from '../shared/generators.ts';\n\nexport const discard = createDualImpl(\n // CPU\n (): never => {\n throw new Error('discard() can only be used on the GPU.');\n },\n // GPU\n () => ({\n value: 'discard;',\n dataType: Void,\n }),\n);\n","import { mat2x2f, mat3x3f, mat4x4f } from './matrix.ts';\nimport {\n vec2b,\n vec2f,\n vec2h,\n vec2i,\n vec2u,\n vec3b,\n vec3f,\n vec3h,\n vec3i,\n vec3u,\n vec4b,\n vec4f,\n vec4h,\n vec4i,\n vec4u,\n} from './vector.ts';\nimport type * as wgsl from './wgslTypes.ts';\nimport type { VecKind } from './wgslTypes.ts';\n\ntype vBase = { kind: VecKind };\ntype v2 = wgsl.v2f | wgsl.v2h | wgsl.v2i | wgsl.v2u;\ntype v3 = wgsl.v3f | wgsl.v3h | wgsl.v3i | wgsl.v3u;\ntype v4 = wgsl.v4f | wgsl.v4h | wgsl.v4i | wgsl.v4u;\n\ntype MatKind = 'mat2x2f' | 'mat3x3f' | 'mat4x4f';\n\nconst lengthVec2 = (v: v2) => Math.sqrt(v.x ** 2 + v.y ** 2);\nconst lengthVec3 = (v: v3) => Math.sqrt(v.x ** 2 + v.y ** 2 + v.z ** 2);\nconst lengthVec4 = (v: v4) =>\n Math.sqrt(v.x ** 2 + v.y ** 2 + v.z ** 2 + v.w ** 2);\n\nconst dotVec2 = (lhs: v2, rhs: v2) => lhs.x * rhs.x + lhs.y * rhs.y;\nconst dotVec3 = (lhs: v3, rhs: v3) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z;\nconst dotVec4 = (lhs: v4, rhs: v4) =>\n lhs.x * rhs.x + lhs.y * rhs.y + lhs.z * rhs.z + lhs.w * rhs.w;\n\nconst clamp = (value: number, low: number, high: number) =>\n Math.min(Math.max(low, value), high);\n\ntype UnaryOp = (a: number) => number;\ntype BinaryOp = (a: number, b: number) => number;\n\nconst unary2f = (op: UnaryOp) => (a: wgsl.v2f) => vec2f(op(a.x), op(a.y));\nconst unary2h = (op: UnaryOp) => (a: wgsl.v2h) => vec2h(op(a.x), op(a.y));\nconst unary2i = (op: UnaryOp) => (a: wgsl.v2i) => vec2i(op(a.x), op(a.y));\nconst unary2u = (op: UnaryOp) => (a: wgsl.v2u) => vec2u(op(a.x), op(a.y));\n\nconst unary3f = (op: UnaryOp) => (a: wgsl.v3f) =>\n vec3f(op(a.x), op(a.y), op(a.z));\n\nconst unary3h = (op: UnaryOp) => (a: wgsl.v3h) =>\n vec3h(op(a.x), op(a.y), op(a.z));\n\nconst unary3i = (op: UnaryOp) => (a: wgsl.v3i) =>\n vec3i(op(a.x), op(a.y), op(a.z));\n\nconst unary3u = (op: UnaryOp) => (a: wgsl.v3u) =>\n vec3u(op(a.x), op(a.y), op(a.z));\n\nconst unary4f = (op: UnaryOp) => (a: wgsl.v4f) =>\n vec4f(op(a.x), op(a.y), op(a.z), op(a.w));\n\nconst unary4h = (op: UnaryOp) => (a: wgsl.v4h) =>\n vec4h(op(a.x), op(a.y), op(a.z), op(a.w));\n\nconst unary4i = (op: UnaryOp) => (a: wgsl.v4i) =>\n vec4i(op(a.x), op(a.y), op(a.z), op(a.w));\n\nconst unary4u = (op: UnaryOp) => (a: wgsl.v4u) =>\n vec4u(op(a.x), op(a.y), op(a.z), op(a.w));\n\nconst binaryComponentWise2f = (op: BinaryOp) => (a: wgsl.v2f, b: wgsl.v2f) =>\n vec2f(op(a.x, b.x), op(a.y, b.y));\n\nconst binaryComponentWise2h = (op: BinaryOp) => (a: wgsl.v2h, b: wgsl.v2h) =>\n vec2h(op(a.x, b.x), op(a.y, b.y));\n\nconst binaryComponentWise2i = (op: BinaryOp) => (a: wgsl.v2i, b: wgsl.v2i) =>\n vec2i(op(a.x, b.x), op(a.y, b.y));\n\nconst binaryComponentWise2u = (op: BinaryOp) => (a: wgsl.v2u, b: wgsl.v2u) =>\n vec2u(op(a.x, b.x), op(a.y, b.y));\n\nconst binaryComponentWise3f = (op: BinaryOp) => (a: wgsl.v3f, b: wgsl.v3f) =>\n vec3f(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z));\n\nconst binaryComponentWise3h = (op: BinaryOp) => (a: wgsl.v3h, b: wgsl.v3h) =>\n vec3h(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z));\n\nconst binaryComponentWise3i = (op: BinaryOp) => (a: wgsl.v3i, b: wgsl.v3i) =>\n vec3i(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z));\n\nconst binaryComponentWise3u = (op: BinaryOp) => (a: wgsl.v3u, b: wgsl.v3u) =>\n vec3u(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z));\n\nconst binaryComponentWise4f = (op: BinaryOp) => (a: wgsl.v4f, b: wgsl.v4f) =>\n vec4f(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z), op(a.w, b.w));\n\nconst binaryComponentWise4h = (op: BinaryOp) => (a: wgsl.v4h, b: wgsl.v4h) =>\n vec4h(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z), op(a.w, b.w));\n\nconst binaryComponentWise4i = (op: BinaryOp) => (a: wgsl.v4i, b: wgsl.v4i) =>\n vec4i(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z), op(a.w, b.w));\n\nconst binaryComponentWise4u = (op: BinaryOp) => (a: wgsl.v4u, b: wgsl.v4u) =>\n vec4u(op(a.x, b.x), op(a.y, b.y), op(a.z, b.z), op(a.w, b.w));\n\nexport const VectorOps = {\n eq: {\n vec2f: (e1: wgsl.v2f, e2: wgsl.v2f) => vec2b(e1.x === e2.x, e1.y === e2.y),\n vec2h: (e1: wgsl.v2h, e2: wgsl.v2h) => vec2b(e1.x === e2.x, e1.y === e2.y),\n vec2i: (e1: wgsl.v2i, e2: wgsl.v2i) => vec2b(e1.x === e2.x, e1.y === e2.y),\n vec2u: (e1: wgsl.v2u, e2: wgsl.v2u) => vec2b(e1.x === e2.x, e1.y === e2.y),\n 'vec2<bool>': (e1: wgsl.v2b, e2: wgsl.v2b) =>\n vec2b(e1.x === e2.x, e1.y === e2.y),\n\n vec3f: (e1: wgsl.v3f, e2: wgsl.v3f) =>\n vec3b(e1.x === e2.x, e1.y === e2.y, e1.z === e2.z),\n vec3h: (e1: wgsl.v3h, e2: wgsl.v3h) =>\n vec3b(e1.x === e2.x, e1.y === e2.y, e1.z === e2.z),\n vec3i: (e1: wgsl.v3i, e2: wgsl.v3i) =>\n vec3b(e1.x === e2.x, e1.y === e2.y, e1.z === e2.z),\n vec3u: (e1: wgsl.v3u, e2: wgsl.v3u) =>\n vec3b(e1.x === e2.x, e1.y === e2.y, e1.z === e2.z),\n 'vec3<bool>': (e1: wgsl.v3b, e2: wgsl.v3b) =>\n vec3b(e1.x === e2.x, e1.y === e2.y, e1.z === e2.z),\n\n vec4f: (e1: wgsl.v4f, e2: wgsl.v4f) =>\n vec4b(e1.x === e2.x, e1.y === e2.y, e1.z === e2.z, e1.w === e2.w),\n vec4h: (e1: wgsl.v4h, e2: wgsl.v4h) =>\n vec4b(e1.x === e2.x, e1.y === e2.y, e1.z === e2.z, e1.w === e2.w),\n vec4i: (e1: wgsl.v4i, e2: wgsl.v4i) =>\n vec4b(e1.x === e2.x, e1.y === e2.y, e1.z === e2.z, e1.w === e2.w),\n vec4u: (e1: wgsl.v4u, e2: wgsl.v4u) =>\n vec4b(e1.x === e2.x, e1.y === e2.y, e1.z === e2.z, e1.w === e2.w),\n 'vec4<bool>': (e1: wgsl.v4b, e2: wgsl.v4b) =>\n vec4b(e1.x === e2.x, e1.y === e2.y, e1.z === e2.z, e1.w === e2.w),\n } as Record<\n VecKind,\n <T extends wgsl.AnyVecInstance>(\n e1: T,\n e2: T,\n ) => T extends wgsl.AnyVec2Instance ? wgsl.v2b\n : T extends wgsl.AnyVec3Instance ? wgsl.v3b\n : wgsl.v4b\n >,\n\n lt: {\n vec2f: (e1: wgsl.v2f, e2: wgsl.v2f) => vec2b(e1.x < e2.x, e1.y < e2.y),\n vec2h: (e1: wgsl.v2h, e2: wgsl.v2h) => vec2b(e1.x < e2.x, e1.y < e2.y),\n vec2i: (e1: wgsl.v2i, e2: wgsl.v2i) => vec2b(e1.x < e2.x, e1.y < e2.y),\n vec2u: (e1: wgsl.v2u, e2: wgsl.v2u) => vec2b(e1.x < e2.x, e1.y < e2.y),\n\n vec3f: (e1: wgsl.v3f, e2: wgsl.v3f) =>\n vec3b(e1.x < e2.x, e1.y < e2.y, e1.z < e2.z),\n vec3h: (e1: wgsl.v3h, e2: wgsl.v3h) =>\n vec3b(e1.x < e2.x, e1.y < e2.y, e1.z < e2.z),\n vec3i: (e1: wgsl.v3i, e2: wgsl.v3i) =>\n vec3b(e1.x < e2.x, e1.y < e2.y, e1.z < e2.z),\n vec3u: (e1: wgsl.v3u, e2: wgsl.v3u) =>\n vec3b(e1.x < e2.x, e1.y < e2.y, e1.z < e2.z),\n\n vec4f: (e1: wgsl.v4f, e2: wgsl.v4f) =>\n vec4b(e1.x < e2.x, e1.y < e2.y, e1.z < e2.z, e1.w < e2.w),\n vec4h: (e1: wgsl.v4h, e2: wgsl.v4h) =>\n vec4b(e1.x < e2.x, e1.y < e2.y, e1.z < e2.z, e1.w < e2.w),\n vec4i: (e1: wgsl.v4i, e2: wgsl.v4i) =>\n vec4b(e1.x < e2.x, e1.y < e2.y, e1.z < e2.z, e1.w < e2.w),\n vec4u: (e1: wgsl.v4u, e2: wgsl.v4u) =>\n vec4b(e1.x < e2.x, e1.y < e2.y, e1.z < e2.z, e1.w < e2.w),\n } as Record<\n VecKind,\n <T extends wgsl.AnyNumericVecInstance>(\n e1: T,\n e2: T,\n ) => T extends wgsl.AnyVec2Instance ? wgsl.v2b\n : T extends wgsl.AnyVec3Instance ? wgsl.v3b\n : wgsl.v4b\n >,\n\n or: {\n 'vec2<bool>': (e1: wgsl.v2b, e2: wgsl.v2b) =>\n vec2b(e1.x || e2.x, e1.y || e2.y),\n 'vec3<bool>': (e1: wgsl.v3b, e2: wgsl.v3b) =>\n vec3b(e1.x || e2.x, e1.y || e2.y, e1.z || e2.z),\n 'vec4<bool>': (e1: wgsl.v4b, e2: wgsl.v4b) =>\n vec4b(e1.x || e2.x, e1.y || e2.y, e1.z || e2.z, e1.w || e2.w),\n } as Record<\n VecKind,\n <T extends wgsl.AnyBooleanVecInstance>(e1: T, e2: T) => T\n >,\n\n all: {\n 'vec2<bool>': (e: wgsl.v2b) => e.x && e.y,\n 'vec3<bool>': (e: wgsl.v3b) => e.x && e.y && e.z,\n 'vec4<bool>': (e: wgsl.v4b) => e.x && e.y && e.z && e.w,\n } as Record<VecKind, (v: wgsl.AnyBooleanVecInstance) => boolean>,\n\n abs: {\n vec2f: unary2f(Math.abs),\n vec2h: unary2h(Math.abs),\n vec2i: unary2i(Math.abs),\n vec2u: unary2u(Math.abs),\n\n vec3f: unary3f(Math.abs),\n vec3h: unary3h(Math.abs),\n vec3i: unary3i(Math.abs),\n vec3u: unary3u(Math.abs),\n\n vec4f: unary4f(Math.abs),\n vec4h: unary4h(Math.abs),\n vec4i: unary4i(Math.abs),\n vec4u: unary4u(Math.abs),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n atan2: {\n vec2f: binaryComponentWise2f(Math.atan2),\n vec2h: binaryComponentWise2h(Math.atan2),\n\n vec3f: binaryComponentWise3f(Math.atan2),\n vec3h: binaryComponentWise3h(Math.atan2),\n\n vec4f: binaryComponentWise4f(Math.atan2),\n vec4h: binaryComponentWise4h(Math.atan2),\n } as Record<VecKind, <T extends vBase>(a: T, b: T) => T>,\n\n acos: {\n vec2f: unary2f(Math.acos),\n vec2h: unary2h(Math.acos),\n vec2i: unary2i(Math.acos),\n vec2u: unary2u(Math.acos),\n\n vec3f: unary3f(Math.acos),\n vec3h: unary3h(Math.acos),\n vec3i: unary3i(Math.acos),\n vec3u: unary3u(Math.acos),\n\n vec4f: unary4f(Math.acos),\n vec4h: unary4h(Math.acos),\n vec4i: unary4i(Math.acos),\n vec4u: unary4u(Math.acos),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n asin: {\n vec2f: unary2f(Math.asin),\n vec2h: unary2h(Math.asin),\n vec2i: unary2i(Math.asin),\n vec2u: unary2u(Math.asin),\n\n vec3f: unary3f(Math.asin),\n vec3h: unary3h(Math.asin),\n vec3i: unary3i(Math.asin),\n vec3u: unary3u(Math.asin),\n\n vec4f: unary4f(Math.asin),\n vec4h: unary4h(Math.asin),\n vec4i: unary4i(Math.asin),\n vec4u: unary4u(Math.asin),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n ceil: {\n vec2f: unary2f(Math.ceil),\n vec2h: unary2h(Math.ceil),\n\n vec3f: unary3f(Math.ceil),\n vec3h: unary3h(Math.ceil),\n\n vec4f: unary4f(Math.ceil),\n vec4h: unary4h(Math.ceil),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n clamp: {\n vec2f: (v: wgsl.v2f, low: wgsl.v2f, high: wgsl.v2f) =>\n vec2f(clamp(v.x, low.x, high.x), clamp(v.y, low.y, high.y)),\n vec2h: (v: wgsl.v2h, low: wgsl.v2h, high: wgsl.v2h) =>\n vec2h(clamp(v.x, low.x, high.x), clamp(v.y, low.y, high.y)),\n vec2i: (v: wgsl.v2i, low: wgsl.v2i, high: wgsl.v2i) =>\n vec2i(clamp(v.x, low.x, high.x), clamp(v.y, low.y, high.y)),\n vec2u: (v: wgsl.v2u, low: wgsl.v2u, high: wgsl.v2u) =>\n vec2u(clamp(v.x, low.x, high.x), clamp(v.y, low.y, high.y)),\n\n vec3f: (v: wgsl.v3f, low: wgsl.v3f, high: wgsl.v3f) =>\n vec3f(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n ),\n vec3h: (v: wgsl.v3h, low: wgsl.v3h, high: wgsl.v3h) =>\n vec3h(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n ),\n vec3i: (v: wgsl.v3i, low: wgsl.v3i, high: wgsl.v3f) =>\n vec3i(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n ),\n vec3u: (v: wgsl.v3u, low: wgsl.v3u, high: wgsl.v3f) =>\n vec3u(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n ),\n\n vec4f: (v: wgsl.v4f, low: wgsl.v4f, high: wgsl.v4f) =>\n vec4f(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n clamp(v.w, low.w, high.w),\n ),\n vec4h: (v: wgsl.v4h, low: wgsl.v4h, high: wgsl.v4h) =>\n vec4h(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n clamp(v.w, low.w, high.w),\n ),\n vec4i: (v: wgsl.v4i, low: wgsl.v4i, high: wgsl.v4i) =>\n vec4i(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n clamp(v.w, low.w, high.w),\n ),\n vec4u: (v: wgsl.v4u, low: wgsl.v4u, high: wgsl.v4u) =>\n vec4u(\n clamp(v.x, low.x, high.x),\n clamp(v.y, low.y, high.y),\n clamp(v.z, low.z, high.z),\n clamp(v.w, low.w, high.w),\n ),\n } as Record<VecKind, <T extends vBase>(v: T, low: T, high: T) => T>,\n\n length: {\n vec2f: lengthVec2,\n vec2h: lengthVec2,\n\n vec3f: lengthVec3,\n vec3h: lengthVec3,\n\n vec4f: lengthVec4,\n vec4h: lengthVec4,\n } as Record<VecKind, (v: vBase) => number>,\n\n add: {\n vec2f: (a: wgsl.v2f, b: wgsl.v2f) => vec2f(a.x + b.x, a.y + b.y),\n vec2h: (a: wgsl.v2h, b: wgsl.v2h) => vec2h(a.x + b.x, a.y + b.y),\n vec2i: (a: wgsl.v2i, b: wgsl.v2i) => vec2i(a.x + b.x, a.y + b.y),\n vec2u: (a: wgsl.v2u, b: wgsl.v2u) => vec2u(a.x + b.x, a.y + b.y),\n\n vec3f: (a: wgsl.v3f, b: wgsl.v3f) => vec3f(a.x + b.x, a.y + b.y, a.z + b.z),\n vec3h: (a: wgsl.v3h, b: wgsl.v3h) => vec3h(a.x + b.x, a.y + b.y, a.z + b.z),\n vec3i: (a: wgsl.v3i, b: wgsl.v3i) => vec3i(a.x + b.x, a.y + b.y, a.z + b.z),\n vec3u: (a: wgsl.v3u, b: wgsl.v3u) => vec3u(a.x + b.x, a.y + b.y, a.z + b.z),\n\n vec4f: (a: wgsl.v4f, b: wgsl.v4f) =>\n vec4f(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w),\n vec4h: (a: wgsl.v4h, b: wgsl.v4h) =>\n vec4h(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w),\n vec4i: (a: wgsl.v4i, b: wgsl.v4i) =>\n vec4i(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w),\n vec4u: (a: wgsl.v4u, b: wgsl.v4u) =>\n vec4u(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w),\n } as Record<VecKind, <T extends vBase>(lhs: T, rhs: T) => T>,\n\n sub: {\n vec2f: (a: wgsl.v2f, b: wgsl.v2f) => vec2f(a.x - b.x, a.y - b.y),\n vec2h: (a: wgsl.v2h, b: wgsl.v2h) => vec2h(a.x - b.x, a.y - b.y),\n vec2i: (a: wgsl.v2i, b: wgsl.v2i) => vec2i(a.x - b.x, a.y - b.y),\n vec2u: (a: wgsl.v2u, b: wgsl.v2u) => vec2u(a.x - b.x, a.y - b.y),\n\n vec3f: (a: wgsl.v3f, b: wgsl.v3f) => vec3f(a.x - b.x, a.y - b.y, a.z - b.z),\n vec3h: (a: wgsl.v3h, b: wgsl.v3h) => vec3h(a.x - b.x, a.y - b.y, a.z - b.z),\n vec3i: (a: wgsl.v3i, b: wgsl.v3i) => vec3i(a.x - b.x, a.y - b.y, a.z - b.z),\n vec3u: (a: wgsl.v3u, b: wgsl.v3u) => vec3u(a.x - b.x, a.y - b.y, a.z - b.z),\n\n vec4f: (a: wgsl.v4f, b: wgsl.v4f) =>\n vec4f(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w),\n vec4h: (a: wgsl.v4h, b: wgsl.v4h) =>\n vec4h(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w),\n vec4i: (a: wgsl.v4i, b: wgsl.v4i) =>\n vec4i(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w),\n vec4u: (a: wgsl.v4u, b: wgsl.v4u) =>\n vec4u(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w),\n } as Record<VecKind, <T extends vBase>(lhs: T, rhs: T) => T>,\n\n mulSxV: {\n vec2f: (s: number, v: wgsl.v2f) => vec2f(s * v.x, s * v.y),\n vec2h: (s: number, v: wgsl.v2h) => vec2h(s * v.x, s * v.y),\n vec2i: (s: number, v: wgsl.v2i) => vec2i(s * v.x, s * v.y),\n vec2u: (s: number, v: wgsl.v2u) => vec2u(s * v.x, s * v.y),\n\n vec3f: (s: number, v: wgsl.v3f) => vec3f(s * v.x, s * v.y, s * v.z),\n vec3h: (s: number, v: wgsl.v3h) => vec3h(s * v.x, s * v.y, s * v.z),\n vec3i: (s: number, v: wgsl.v3i) => vec3i(s * v.x, s * v.y, s * v.z),\n vec3u: (s: number, v: wgsl.v3u) => vec3u(s * v.x, s * v.y, s * v.z),\n\n vec4f: (s: number, v: wgsl.v4f) =>\n vec4f(s * v.x, s * v.y, s * v.z, s * v.w),\n vec4h: (s: number, v: wgsl.v4h) =>\n vec4h(s * v.x, s * v.y, s * v.z, s * v.w),\n vec4i: (s: number, v: wgsl.v4i) =>\n vec4i(s * v.x, s * v.y, s * v.z, s * v.w),\n vec4u: (s: number, v: wgsl.v4u) =>\n vec4u(s * v.x, s * v.y, s * v.z, s * v.w),\n\n mat2x2f: (s: number, m: wgsl.m2x2f) => {\n const m_ = m.columns as [wgsl.v2f, wgsl.v2f];\n return mat2x2f(s * m_[0].x, s * m_[0].y, s * m_[1].x, s * m_[1].y);\n },\n\n mat3x3f: (s: number, m: wgsl.m3x3f) => {\n const m_ = m.columns as [wgsl.v3f, wgsl.v3f, wgsl.v3f];\n return mat3x3f(\n s * m_[0].x,\n s * m_[0].y,\n s * m_[0].z,\n s * m_[1].x,\n s * m_[1].y,\n s * m_[1].z,\n s * m_[2].x,\n s * m_[2].y,\n s * m_[2].z,\n );\n },\n\n mat4x4f: (s: number, m: wgsl.m4x4f) => {\n const m_ = m.columns as [wgsl.v4f, wgsl.v4f, wgsl.v4f, wgsl.v4f];\n return mat4x4f(\n s * m_[0].x,\n s * m_[0].y,\n s * m_[0].z,\n s * m_[0].w,\n s * m_[1].x,\n s * m_[1].y,\n s * m_[1].z,\n s * m_[1].w,\n s * m_[2].x,\n s * m_[2].y,\n s * m_[2].z,\n s * m_[2].w,\n s * m_[3].x,\n s * m_[3].y,\n s * m_[3].z,\n s * m_[3].w,\n );\n },\n } as Record<\n VecKind | MatKind,\n <T extends vBase | wgsl.AnyMatInstance>(s: number, v: T) => T\n >,\n\n mulVxV: {\n vec2f: (a: wgsl.v2f, b: wgsl.v2f) => vec2f(a.x * b.x, a.y * b.y),\n vec2h: (a: wgsl.v2h, b: wgsl.v2h) => vec2h(a.x * b.x, a.y * b.y),\n vec2i: (a: wgsl.v2i, b: wgsl.v2i) => vec2i(a.x * b.x, a.y * b.y),\n vec2u: (a: wgsl.v2u, b: wgsl.v2u) => vec2u(a.x * b.x, a.y * b.y),\n\n vec3f: (a: wgsl.v3f, b: wgsl.v3f) => vec3f(a.x * b.x, a.y * b.y, a.z * b.z),\n vec3h: (a: wgsl.v3h, b: wgsl.v3h) => vec3h(a.x * b.x, a.y * b.y, a.z * b.z),\n vec3i: (a: wgsl.v3i, b: wgsl.v3i) => vec3i(a.x * b.x, a.y * b.y, a.z * b.z),\n vec3u: (a: wgsl.v3u, b: wgsl.v3u) => vec3u(a.x * b.x, a.y * b.y, a.z * b.z),\n\n vec4f: (a: wgsl.v4f, b: wgsl.v4f) =>\n vec4f(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w),\n vec4h: (a: wgsl.v4h, b: wgsl.v4h) =>\n vec4h(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w),\n vec4i: (a: wgsl.v4i, b: wgsl.v4i) =>\n vec4i(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w),\n vec4u: (a: wgsl.v4u, b: wgsl.v4u) =>\n vec4u(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w),\n\n mat2x2f: (a: wgsl.m2x2f, b: wgsl.m2x2f) => {\n const a_ = a.columns as [wgsl.v2f, wgsl.v2f];\n const b_ = b.columns as [wgsl.v2f, wgsl.v2f];\n\n return mat2x2f(\n a_[0].x * b_[0].x + a_[1].x * b_[0].y,\n a_[0].y * b_[0].x + a_[1].y * b_[0].y,\n a_[0].x * b_[1].x + a_[1].x * b_[1].y,\n a_[0].y * b_[1].x + a_[1].y * b_[1].y,\n );\n },\n\n mat3x3f: (a: wgsl.m3x3f, b: wgsl.m3x3f) => {\n const a_ = a.columns as [wgsl.v3f, wgsl.v3f, wgsl.v3f];\n const b_ = b.columns as [wgsl.v3f, wgsl.v3f, wgsl.v3f];\n\n return mat3x3f(\n a_[0].x * b_[0].x + a_[1].x * b_[0].y + a_[2].x * b_[0].z,\n a_[0].y * b_[0].x + a_[1].y * b_[0].y + a_[2].y * b_[0].z,\n a_[0].z * b_[0].x + a_[1].z * b_[0].y + a_[2].z * b_[0].z,\n a_[0].x * b_[1].x + a_[1].x * b_[1].y + a_[2].x * b_[1].z,\n a_[0].y * b_[1].x + a_[1].y * b_[1].y + a_[2].y * b_[1].z,\n a_[0].z * b_[1].x + a_[1].z * b_[1].y + a_[2].z * b_[1].z,\n a_[0].x * b_[2].x + a_[1].x * b_[2].y + a_[2].x * b_[2].z,\n a_[0].y * b_[2].x + a_[1].y * b_[2].y + a_[2].y * b_[2].z,\n a_[0].z * b_[2].x + a_[1].z * b_[2].y + a_[2].z * b_[2].z,\n );\n },\n\n mat4x4f: (a: wgsl.m4x4f, b: wgsl.m4x4f) => {\n const a_ = a.columns as [wgsl.v4f, wgsl.v4f, wgsl.v4f, wgsl.v4f];\n const b_ = b.columns as [wgsl.v4f, wgsl.v4f, wgsl.v4f, wgsl.v4f];\n\n return mat4x4f(\n a_[0].x * b_[0].x +\n a_[1].x * b_[0].y +\n a_[2].x * b_[0].z +\n a_[3].x * b_[0].w,\n a_[0].y * b_[0].x +\n a_[1].y * b_[0].y +\n a_[2].y * b_[0].z +\n a_[3].y * b_[0].w,\n a_[0].z * b_[0].x +\n a_[1].z * b_[0].y +\n a_[2].z * b_[0].z +\n a_[3].z * b_[0].w,\n a_[0].w * b_[0].x +\n a_[1].w * b_[0].y +\n a_[2].w * b_[0].z +\n a_[3].w * b_[0].w,\n a_[0].x * b_[1].x +\n a_[1].x * b_[1].y +\n a_[2].x * b_[1].z +\n a_[3].x * b_[1].w,\n a_[0].y * b_[1].x +\n a_[1].y * b_[1].y +\n a_[2].y * b_[1].z +\n a_[3].y * b_[1].w,\n a_[0].z * b_[1].x +\n a_[1].z * b_[1].y +\n a_[2].z * b_[1].z +\n a_[3].z * b_[1].w,\n a_[0].w * b_[1].x +\n a_[1].w * b_[1].y +\n a_[2].w * b_[1].z +\n a_[3].w * b_[1].w,\n a_[0].x * b_[2].x +\n a_[1].x * b_[2].y +\n a_[2].x * b_[2].z +\n a_[3].x * b_[2].w,\n a_[0].y * b_[2].x +\n a_[1].y * b_[2].y +\n a_[2].y * b_[2].z +\n a_[3].y * b_[2].w,\n a_[0].z * b_[2].x +\n a_[1].z * b_[2].y +\n a_[2].z * b_[2].z +\n a_[3].z * b_[2].w,\n a_[0].w * b_[2].x +\n a_[1].w * b_[2].y +\n a_[2].w * b_[2].z +\n a_[3].w * b_[2].w,\n a_[0].x * b_[3].x +\n a_[1].x * b_[3].y +\n a_[2].x * b_[3].z +\n a_[3].x * b_[3].w,\n a_[0].y * b_[3].x +\n a_[1].y * b_[3].y +\n a_[2].y * b_[3].z +\n a_[3].y * b_[3].w,\n a_[0].z * b_[3].x +\n a_[1].z * b_[3].y +\n a_[2].z * b_[3].z +\n a_[3].z * b_[3].w,\n a_[0].w * b_[3].x +\n a_[1].w * b_[3].y +\n a_[2].w * b_[3].z +\n a_[3].w * b_[3].w,\n );\n },\n } as Record<\n VecKind | MatKind,\n <T extends vBase | wgsl.AnyMatInstance>(lhs: T, rhs: T) => T\n >,\n\n mulMxV: {\n mat2x2f: (m: wgsl.m2x2f, v: wgsl.v2f) => {\n const m_ = m.columns as [wgsl.v2f, wgsl.v2f];\n return vec2f(\n m_[0].x * v.x + m_[1].x * v.y,\n m_[0].y * v.x + m_[1].y * v.y,\n );\n },\n\n mat3x3f: (m: wgsl.m3x3f, v: wgsl.v3f) => {\n const m_ = m.columns as [wgsl.v3f, wgsl.v3f, wgsl.v3f];\n return vec3f(\n m_[0].x * v.x + m_[1].x * v.y + m_[2].x * v.z,\n m_[0].y * v.x + m_[1].y * v.y + m_[2].y * v.z,\n m_[0].z * v.x + m_[1].z * v.y + m_[2].z * v.z,\n );\n },\n\n mat4x4f: (m: wgsl.m4x4f, v: wgsl.v4f) => {\n const m_ = m.columns as [wgsl.v4f, wgsl.v4f, wgsl.v4f, wgsl.v4f];\n return vec4f(\n m_[0].x * v.x + m_[1].x * v.y + m_[2].x * v.z + m_[3].x * v.w,\n m_[0].y * v.x + m_[1].y * v.y + m_[2].y * v.z + m_[3].y * v.w,\n m_[0].z * v.x + m_[1].z * v.y + m_[2].z * v.z + m_[3].z * v.w,\n m_[0].w * v.x + m_[1].w * v.y + m_[2].w * v.z + m_[3].w * v.w,\n );\n },\n } as Record<\n MatKind,\n <T extends wgsl.AnyMatInstance>(\n m: T,\n v: wgsl.vBaseForMat<T>,\n ) => wgsl.vBaseForMat<T>\n >,\n\n mulVxM: {\n mat2x2f: (v: wgsl.v2f, m: wgsl.m2x2f) => {\n const m_ = m.columns as [wgsl.v2f, wgsl.v2f];\n return vec2f(\n v.x * m_[0].x + v.y * m_[0].y,\n v.x * m_[1].x + v.y * m_[1].y,\n );\n },\n\n mat3x3f: (v: wgsl.v3f, m: wgsl.m3x3f) => {\n const m_ = m.columns as [wgsl.v3f, wgsl.v3f, wgsl.v3f];\n return vec3f(\n v.x * m_[0].x + v.y * m_[0].y + v.z * m_[0].z,\n v.x * m_[1].x + v.y * m_[1].y + v.z * m_[1].z,\n v.x * m_[2].x + v.y * m_[2].y + v.z * m_[2].z,\n );\n },\n\n mat4x4f: (v: wgsl.v4f, m: wgsl.m4x4f) => {\n const m_ = m.columns as [wgsl.v4f, wgsl.v4f, wgsl.v4f, wgsl.v4f];\n return vec4f(\n v.x * m_[0].x + v.y * m_[0].y + v.z * m_[0].z + v.w * m_[0].w,\n v.x * m_[1].x + v.y * m_[1].y + v.z * m_[1].z + v.w * m_[1].w,\n v.x * m_[2].x + v.y * m_[2].y + v.z * m_[2].z + v.w * m_[2].w,\n v.x * m_[3].x + v.y * m_[3].y + v.z * m_[3].z + v.w * m_[3].w,\n );\n },\n } as Record<\n MatKind,\n <T extends wgsl.AnyMatInstance>(\n v: wgsl.vBaseForMat<T>,\n m: T,\n ) => wgsl.vBaseForMat<T>\n >,\n\n dot: {\n vec2f: dotVec2,\n vec2h: dotVec2,\n vec2i: dotVec2,\n vec2u: dotVec2,\n vec3f: dotVec3,\n vec3h: dotVec3,\n vec3i: dotVec3,\n vec3u: dotVec3,\n vec4f: dotVec4,\n vec4h: dotVec4,\n vec4i: dotVec4,\n vec4u: dotVec4,\n } as Record<VecKind, <T extends vBase>(lhs: T, rhs: T) => number>,\n\n normalize: {\n vec2f: (v: wgsl.v2f) => {\n const len = lengthVec2(v);\n return vec2f(v.x / len, v.y / len);\n },\n vec2h: (v: wgsl.v2h) => {\n const len = lengthVec2(v);\n return vec2h(v.x / len, v.y / len);\n },\n vec2i: (v: wgsl.v2i) => {\n const len = lengthVec2(v);\n return vec2i(v.x / len, v.y / len);\n },\n vec2u: (v: wgsl.v2u) => {\n const len = lengthVec2(v);\n return vec2u(v.x / len, v.y / len);\n },\n\n vec3f: (v: wgsl.v3f) => {\n const len = lengthVec3(v);\n return vec3f(v.x / len, v.y / len, v.z / len);\n },\n vec3h: (v: wgsl.v3h) => {\n const len = lengthVec3(v);\n return vec3h(v.x / len, v.y / len, v.z / len);\n },\n vec3i: (v: wgsl.v3i) => {\n const len = lengthVec3(v);\n return vec3i(v.x / len, v.y / len, v.z / len);\n },\n vec3u: (v: wgsl.v3u) => {\n const len = lengthVec3(v);\n return vec3u(v.x / len, v.y / len, v.z / len);\n },\n\n vec4f: (v: wgsl.v4f) => {\n const len = lengthVec4(v);\n return vec4f(v.x / len, v.y / len, v.z / len, v.w / len);\n },\n vec4h: (v: wgsl.v4h) => {\n const len = lengthVec4(v);\n return vec4h(v.x / len, v.y / len, v.z / len, v.w / len);\n },\n vec4i: (v: wgsl.v4i) => {\n const len = lengthVec4(v);\n return vec4i(v.x / len, v.y / len, v.z / len, v.w / len);\n },\n vec4u: (v: wgsl.v4u) => {\n const len = lengthVec4(v);\n return vec4u(v.x / len, v.y / len, v.z / len, v.w / len);\n },\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n cross: {\n vec3f: (a: wgsl.v3f, b: wgsl.v3f) => {\n return vec3f(\n a.y * b.z - a.z * b.y,\n a.z * b.x - a.x * b.z,\n a.x * b.y - a.y * b.x,\n );\n },\n vec3h: (a: wgsl.v3h, b: wgsl.v3h) => {\n return vec3h(\n a.y * b.z - a.z * b.y,\n a.z * b.x - a.x * b.z,\n a.x * b.y - a.y * b.x,\n );\n },\n } as Record<\n 'vec3f' | 'vec3h',\n <T extends wgsl.v3f | wgsl.v3h>(a: T, b: T) => T\n >,\n\n floor: {\n vec2f: unary2f(Math.floor),\n vec2h: unary2h(Math.floor),\n\n vec3f: unary3f(Math.floor),\n vec3h: unary3h(Math.floor),\n\n vec4f: unary4f(Math.floor),\n vec4h: unary4h(Math.floor),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n max: {\n vec2f: binaryComponentWise2f(Math.max),\n vec2h: binaryComponentWise2h(Math.max),\n vec2i: binaryComponentWise2i(Math.max),\n vec2u: binaryComponentWise2u(Math.max),\n\n vec3f: binaryComponentWise3f(Math.max),\n vec3h: binaryComponentWise3h(Math.max),\n vec3i: binaryComponentWise3i(Math.max),\n vec3u: binaryComponentWise3u(Math.max),\n\n vec4f: binaryComponentWise4f(Math.max),\n vec4h: binaryComponentWise4h(Math.max),\n vec4i: binaryComponentWise4i(Math.max),\n vec4u: binaryComponentWise4u(Math.max),\n } as Record<VecKind, <T extends vBase>(a: T, b: T) => T>,\n\n min: {\n vec2f: binaryComponentWise2f(Math.min),\n vec2h: binaryComponentWise2h(Math.min),\n vec2i: binaryComponentWise2i(Math.min),\n vec2u: binaryComponentWise2u(Math.min),\n\n vec3f: binaryComponentWise3f(Math.min),\n vec3h: binaryComponentWise3h(Math.min),\n vec3i: binaryComponentWise3i(Math.min),\n vec3u: binaryComponentWise3u(Math.min),\n\n vec4f: binaryComponentWise4f(Math.min),\n vec4h: binaryComponentWise4h(Math.min),\n vec4i: binaryComponentWise4i(Math.min),\n vec4u: binaryComponentWise4u(Math.min),\n } as Record<VecKind, <T extends vBase>(a: T, b: T) => T>,\n\n pow: {\n vec2f: (base: wgsl.v2f, exponent: wgsl.v2f) =>\n vec2f(base.x ** exponent.x, base.y ** exponent.y),\n vec2h: (base: wgsl.v2h, exponent: wgsl.v2h) =>\n vec2h(base.x ** exponent.x, base.y ** exponent.y),\n\n vec3f: (base: wgsl.v3f, exponent: wgsl.v3f) =>\n vec3f(base.x ** exponent.x, base.y ** exponent.y, base.z ** exponent.z),\n vec3h: (base: wgsl.v3h, exponent: wgsl.v3h) =>\n vec3h(base.x ** exponent.x, base.y ** exponent.y, base.z ** exponent.z),\n\n vec4f: (base: wgsl.v4f, exponent: wgsl.v4f) =>\n vec4f(\n base.x ** exponent.x,\n base.y ** exponent.y,\n base.z ** exponent.z,\n base.w ** exponent.w,\n ),\n vec4h: (base: wgsl.v4h, exponent: wgsl.v4h) =>\n vec4h(\n base.x ** exponent.x,\n base.y ** exponent.y,\n base.z ** exponent.z,\n base.w ** exponent.w,\n ),\n } as Record<\n 'vec2f' | 'vec3f' | 'vec4f' | 'vec2h' | 'vec3h' | 'vec4h' | 'number',\n <T extends wgsl.AnyFloatVecInstance | number>(a: T, b: T) => T\n >,\n\n sign: {\n vec2f: unary2f(Math.sign),\n vec2h: unary2h(Math.sign),\n vec2i: unary2i(Math.sign),\n\n vec3f: unary3f(Math.sign),\n vec3h: unary3h(Math.sign),\n vec3i: unary3i(Math.sign),\n\n vec4f: unary4f(Math.sign),\n vec4h: unary4h(Math.sign),\n vec4i: unary4i(Math.sign),\n } as Record<VecKind, <T extends vBase>(e: T) => T>,\n\n sqrt: {\n vec2f: unary2f(Math.sqrt),\n vec2h: unary2h(Math.sqrt),\n\n vec3f: unary3f(Math.sqrt),\n vec3h: unary3h(Math.sqrt),\n\n vec4f: unary4f(Math.sqrt),\n vec4h: unary4h(Math.sqrt),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n div: {\n vec2f: binaryComponentWise2f((a, b) => a / b),\n vec2h: binaryComponentWise2h((a, b) => a / b),\n vec2i: binaryComponentWise2i((a, b) => a / b),\n vec2u: binaryComponentWise2u((a, b) => a / b),\n vec3f: binaryComponentWise3f((a, b) => a / b),\n vec3h: binaryComponentWise3h((a, b) => a / b),\n vec3i: binaryComponentWise3i((a, b) => a / b),\n vec3u: binaryComponentWise3u((a, b) => a / b),\n vec4f: binaryComponentWise4f((a, b) => a / b),\n vec4h: binaryComponentWise4h((a, b) => a / b),\n vec4i: binaryComponentWise4i((a, b) => a / b),\n vec4u: binaryComponentWise4u((a, b) => a / b),\n } as Record<VecKind, <T extends vBase>(a: T, b: T) => T>,\n\n mix: {\n vec2f: (e1: wgsl.v2f, e2: wgsl.v2f, e3: wgsl.v2f | number) => {\n if (typeof e3 === 'number') {\n return vec2f(e1.x * (1 - e3) + e2.x * e3, e1.y * (1 - e3) + e2.y * e3);\n }\n return vec2f(\n e1.x * (1 - e3.x) + e2.x * e3.x,\n e1.y * (1 - e3.y) + e2.y * e3.y,\n );\n },\n vec2h: (e1: wgsl.v2h, e2: wgsl.v2h, e3: wgsl.v2h | number) => {\n if (typeof e3 === 'number') {\n return vec2h(e1.x * (1 - e3) + e2.x * e3, e1.y * (1 - e3) + e2.y * e3);\n }\n return vec2h(\n e1.x * (1 - e3.x) + e2.x * e3.x,\n e1.y * (1 - e3.y) + e2.y * e3.y,\n );\n },\n\n vec3f: (e1: wgsl.v3f, e2: wgsl.v3f, e3: wgsl.v3f | number) => {\n if (typeof e3 === 'number') {\n return vec3f(\n e1.x * (1 - e3) + e2.x * e3,\n e1.y * (1 - e3) + e2.y * e3,\n e1.z * (1 - e3) + e2.z * e3,\n );\n }\n return vec3f(\n e1.x * (1 - e3.x) + e2.x * e3.x,\n e1.y * (1 - e3.y) + e2.y * e3.y,\n e1.z * (1 - e3.z) + e2.z * e3.z,\n );\n },\n vec3h: (e1: wgsl.v3h, e2: wgsl.v3h, e3: wgsl.v3h | number) => {\n if (typeof e3 === 'number') {\n return vec3h(\n e1.x * (1 - e3) + e2.x * e3,\n e1.y * (1 - e3) + e2.y * e3,\n e1.z * (1 - e3) + e2.z * e3,\n );\n }\n return vec3h(\n e1.x * (1 - e3.x) + e2.x * e3.x,\n e1.y * (1 - e3.y) + e2.y * e3.y,\n e1.z * (1 - e3.z) + e2.z * e3.z,\n );\n },\n\n vec4f: (e1: wgsl.v4f, e2: wgsl.v4f, e3: wgsl.v4f | number) => {\n if (typeof e3 === 'number') {\n return vec4f(\n e1.x * (1 - e3) + e2.x * e3,\n e1.y * (1 - e3) + e2.y * e3,\n e1.z * (1 - e3) + e2.z * e3,\n e1.w * (1 - e3) + e2.w * e3,\n );\n }\n return vec4f(\n e1.x * (1 - e3.x) + e2.x * e3.x,\n e1.y * (1 - e3.y) + e2.y * e3.y,\n e1.z * (1 - e3.z) + e2.z * e3.z,\n e1.w * (1 - e3.w) + e2.w * e3.w,\n );\n },\n vec4h: (e1: wgsl.v4h, e2: wgsl.v4h, e3: wgsl.v4h | number) => {\n if (typeof e3 === 'number') {\n return vec4h(\n e1.x * (1 - e3) + e2.x * e3,\n e1.y * (1 - e3) + e2.y * e3,\n e1.z * (1 - e3) + e2.z * e3,\n e1.w * (1 - e3) + e2.w * e3,\n );\n }\n return vec4h(\n e1.x * (1 - e3.x) + e2.x * e3.x,\n e1.y * (1 - e3.y) + e2.y * e3.y,\n e1.z * (1 - e3.z) + e2.z * e3.z,\n e1.w * (1 - e3.w) + e2.w * e3.w,\n );\n },\n } as Record<\n 'vec2f' | 'vec3f' | 'vec4f' | 'vec2h' | 'vec3h' | 'vec4h',\n <T extends wgsl.v2f | wgsl.v3f | wgsl.v4f | wgsl.v2h | wgsl.v3h | wgsl.v4h>(\n a: T,\n b: T,\n c: T | number,\n ) => T\n >,\n\n sin: {\n vec2f: unary2f(Math.sin),\n vec2h: unary2h(Math.sin),\n\n vec3f: unary3f(Math.sin),\n vec3h: unary3h(Math.sin),\n\n vec4f: unary4f(Math.sin),\n vec4h: unary4h(Math.sin),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n cos: {\n vec2f: unary2f(Math.cos),\n vec2h: unary2h(Math.cos),\n\n vec3f: unary3f(Math.cos),\n vec3h: unary3h(Math.cos),\n\n vec4f: unary4f(Math.cos),\n vec4h: unary4h(Math.cos),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n exp: {\n vec2f: unary2f(Math.exp),\n vec2h: unary2h(Math.exp),\n\n vec3f: unary3f(Math.exp),\n vec3h: unary3h(Math.exp),\n\n vec4f: unary4f(Math.exp),\n vec4h: unary4h(Math.exp),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n fract: {\n vec2f: unary2f((value) => value - Math.floor(value)),\n vec2h: unary2h((value) => value - Math.floor(value)),\n\n vec3f: unary3f((value) => value - Math.floor(value)),\n vec3h: unary3h((value) => value - Math.floor(value)),\n\n vec4f: unary4f((value) => value - Math.floor(value)),\n vec4h: unary4h((value) => value - Math.floor(value)),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n isCloseToZero: {\n vec2f: (v: wgsl.v2f, n: number) => Math.abs(v.x) <= n && Math.abs(v.y) <= n,\n vec2h: (v: wgsl.v2h, n: number) => Math.abs(v.x) <= n && Math.abs(v.y) <= n,\n\n vec3f: (v: wgsl.v3f, n: number) =>\n Math.abs(v.x) <= n && Math.abs(v.y) <= n && Math.abs(v.z) <= n,\n vec3h: (v: wgsl.v3h, n: number) =>\n Math.abs(v.x) <= n && Math.abs(v.y) <= n && Math.abs(v.z) <= n,\n\n vec4f: (v: wgsl.v4f, n: number) =>\n Math.abs(v.x) <= n &&\n Math.abs(v.y) <= n &&\n Math.abs(v.z) <= n &&\n Math.abs(v.w) <= n,\n vec4h: (v: wgsl.v4h, n: number) =>\n Math.abs(v.x) <= n &&\n Math.abs(v.y) <= n &&\n Math.abs(v.z) <= n &&\n Math.abs(v.w) <= n,\n } as Record<VecKind, <T extends vBase>(v: T, n: number) => boolean>,\n\n neg: {\n vec2f: unary2f((value) => -value),\n vec2h: unary2h((value) => -value),\n vec2i: unary2i((value) => -value),\n vec2u: unary2u((value) => -value),\n 'vec2<bool>': (e: wgsl.v2b) => vec2b(!e.x, !e.y),\n\n vec3f: unary3f((value) => -value),\n vec3h: unary3h((value) => -value),\n vec3i: unary3i((value) => -value),\n vec3u: unary3u((value) => -value),\n 'vec3<bool>': (e: wgsl.v3b) => vec3b(!e.x, !e.y, !e.z),\n\n vec4f: unary4f((value) => -value),\n vec4h: unary4h((value) => -value),\n vec4i: unary4i((value) => -value),\n vec4u: unary4u((value) => -value),\n 'vec4<bool>': (e: wgsl.v4b) => vec4b(!e.x, !e.y, !e.z, !e.w),\n } as Record<VecKind, <T extends vBase>(v: T) => T>,\n\n select: {\n vec2f: (f: wgsl.v2f, t: wgsl.v2f, c: wgsl.v2b) =>\n vec2f(c.x ? t.x : f.x, c.y ? t.y : f.y),\n vec2h: (f: wgsl.v2h, t: wgsl.v2h, c: wgsl.v2b) =>\n vec2h(c.x ? t.x : f.x, c.y ? t.y : f.y),\n vec2i: (f: wgsl.v2i, t: wgsl.v2i, c: wgsl.v2b) =>\n vec2i(c.x ? t.x : f.x, c.y ? t.y : f.y),\n vec2u: (f: wgsl.v2u, t: wgsl.v2u, c: wgsl.v2b) =>\n vec2u(c.x ? t.x : f.x, c.y ? t.y : f.y),\n 'vec2<bool>': (f: wgsl.v2b, t: wgsl.v2b, c: wgsl.v2b) =>\n vec2b(c.x ? t.x : f.x, c.y ? t.y : f.y),\n\n vec3f: (f: wgsl.v3f, t: wgsl.v3f, c: wgsl.v3b) =>\n vec3f(c.x ? t.x : f.x, c.y ? t.y : f.y, c.z ? t.z : f.z),\n vec3h: (f: wgsl.v3h, t: wgsl.v3h, c: wgsl.v3b) =>\n vec3h(c.x ? t.x : f.x, c.y ? t.y : f.y, c.z ? t.z : f.z),\n vec3i: (f: wgsl.v3i, t: wgsl.v3i, c: wgsl.v3b) =>\n vec3i(c.x ? t.x : f.x, c.y ? t.y : f.y, c.z ? t.z : f.z),\n vec3u: (f: wgsl.v3u, t: wgsl.v3u, c: wgsl.v3b) =>\n vec3u(c.x ? t.x : f.x, c.y ? t.y : f.y, c.z ? t.z : f.z),\n 'vec3<bool>': (f: wgsl.v3b, t: wgsl.v3b, c: wgsl.v3b) =>\n vec3b(c.x ? t.x : f.x, c.y ? t.y : f.y, c.z ? t.z : f.z),\n\n vec4f: (f: wgsl.v4f, t: wgsl.v4f, c: wgsl.v4b) =>\n vec4f(c.x ? t.x : f.x, c.y ? t.y : f.y, c.z ? t.z : f.z, c.w ? t.w : f.w),\n vec4h: (f: wgsl.v4h, t: wgsl.v4h, c: wgsl.v4b) =>\n vec4h(c.x ? t.x : f.x, c.y ? t.y : f.y, c.z ? t.z : f.z, c.w ? t.w : f.w),\n vec4i: (f: wgsl.v4i, t: wgsl.v4i, c: wgsl.v4b) =>\n vec4i(c.x ? t.x : f.x, c.y ? t.y : f.y, c.z ? t.z : f.z, c.w ? t.w : f.w),\n vec4u: (f: wgsl.v4u, t: wgsl.v4u, c: wgsl.v4b) =>\n vec4u(c.x ? t.x : f.x, c.y ? t.y : f.y, c.z ? t.z : f.z, c.w ? t.w : f.w),\n 'vec4<bool>': (f: wgsl.v4b, t: wgsl.v4b, c: wgsl.v4b) =>\n vec4b(c.x ? t.x : f.x, c.y ? t.y : f.y, c.z ? t.z : f.z, c.w ? t.w : f.w),\n } as Record<\n VecKind,\n <T extends wgsl.AnyVecInstance>(\n f: T,\n t: T,\n c: T extends wgsl.AnyVec2Instance ? wgsl.v2b\n : T extends wgsl.AnyVec3Instance ? wgsl.v3b\n : wgsl.v4b,\n ) => T\n >,\n};\n","import { f32 } from '../data/numeric.ts';\nimport { VectorOps } from '../data/vectorOps.ts';\nimport type {\n AnyFloatVecInstance,\n AnyMatInstance,\n AnyNumericVecInstance,\n AnyWgslData,\n v2f,\n v2h,\n v2i,\n v3f,\n v3h,\n v3i,\n v4f,\n v4h,\n v4i,\n vBaseForMat,\n} from '../data/wgslTypes.ts';\nimport { createDualImpl } from '../shared/generators.ts';\nimport type { Snippet } from '../types.ts';\n\nexport function isNumeric(element: Snippet) {\n const type = element.dataType.type;\n return (\n type === 'abstractInt' ||\n type === 'abstractFloat' ||\n type === 'f32' ||\n type === 'f16' ||\n type === 'i32' ||\n type === 'u32'\n );\n}\n\nexport const add = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance>(lhs: T, rhs: T): T =>\n VectorOps.add[lhs.kind](lhs, rhs),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} + ${rhs.value})`,\n dataType: lhs.dataType,\n }),\n 'coerce',\n);\n\nexport const sub = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance>(lhs: T, rhs: T): T =>\n VectorOps.sub[lhs.kind](lhs, rhs),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} - ${rhs.value})`,\n dataType: lhs.dataType,\n }),\n 'coerce',\n);\n\ntype MulOverload = {\n <T extends AnyMatInstance, TVec extends vBaseForMat<T>>(s: T, v: TVec): TVec;\n <T extends AnyMatInstance, TVec extends vBaseForMat<T>>(s: TVec, v: T): TVec;\n <T extends AnyNumericVecInstance | AnyMatInstance>(s: number | T, v: T): T;\n};\n\nexport const mul: MulOverload = createDualImpl(\n // CPU implementation\n (\n s: number | AnyNumericVecInstance | AnyMatInstance,\n v: AnyNumericVecInstance | AnyMatInstance,\n ): AnyNumericVecInstance | AnyMatInstance => {\n if (typeof s === 'number') {\n // Scalar * Vector/Matrix case\n return VectorOps.mulSxV[v.kind](s, v);\n }\n if (\n typeof s === 'object' &&\n typeof v === 'object' &&\n 'kind' in s &&\n 'kind' in v\n ) {\n const sIsVector = !s.kind.startsWith('mat');\n const vIsVector = !v.kind.startsWith('mat');\n if (!sIsVector && vIsVector) {\n // Matrix * Vector case\n return VectorOps.mulMxV[(s as AnyMatInstance).kind](\n s as AnyMatInstance,\n v as vBaseForMat<AnyMatInstance>,\n );\n }\n if (sIsVector && !vIsVector) {\n // Vector * Matrix case\n return VectorOps.mulVxM[(v as AnyMatInstance).kind](\n s as vBaseForMat<AnyMatInstance>,\n v as AnyMatInstance,\n );\n }\n }\n // Vector * Vector or Matrix * Matrix case\n return VectorOps.mulVxV[v.kind](s, v);\n },\n // GPU implementation\n (s, v) => {\n const returnType = isNumeric(s)\n // Scalar * Vector/Matrix\n ? (v.dataType as AnyWgslData)\n : !s.dataType.type.startsWith('mat')\n // Vector * Matrix\n ? (s.dataType as AnyWgslData)\n : !v.dataType.type.startsWith('mat')\n // Matrix * Vector\n ? (v.dataType as AnyWgslData)\n // Vector * Vector or Matrix * Matrix\n : (s.dataType as AnyWgslData);\n return { value: `(${s.value} * ${v.value})`, dataType: returnType };\n },\n);\n\nexport const abs = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.abs(value) as T;\n }\n return VectorOps.abs[value.kind](value) as T;\n },\n // GPU implementation\n (value) => ({ value: `abs(${value.value})`, dataType: value.dataType }),\n);\n\nexport const atan2 = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(y: T, x: T): T => {\n if (typeof y === 'number' && typeof x === 'number') {\n return Math.atan2(y, x) as T;\n }\n return VectorOps.atan2[(y as AnyFloatVecInstance).kind](\n y as never,\n x as never,\n ) as T;\n },\n // GPU implementation\n (y, x) => ({ value: `atan2(${y.value}, ${x.value})`, dataType: y.dataType }),\n);\n\nexport const acos = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.acos(value) as T;\n }\n return VectorOps.acos[(value as AnyFloatVecInstance).kind](\n value as never,\n ) as T;\n },\n // GPU implementation\n (value) => ({ value: `acos(${value.value})`, dataType: value.dataType }),\n);\n\nexport const asin = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.asin(value) as T;\n }\n return VectorOps.asin[(value as AnyFloatVecInstance).kind](\n value as never,\n ) as T;\n },\n // GPU implementation\n (value) => ({ value: `asin(${value.value})`, dataType: value.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#ceil-builtin\n */\nexport const ceil = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.ceil(value) as T;\n }\n return VectorOps.ceil[value.kind](value) as T;\n },\n // GPU implementation\n (value) => ({ value: `ceil(${value.value})`, dataType: value.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#clamp\n */\nexport const clamp = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance | number>(value: T, low: T, high: T): T => {\n if (typeof value === 'number') {\n return Math.min(Math.max(low as number, value), high as number) as T;\n }\n return VectorOps.clamp[value.kind](\n value,\n low as AnyNumericVecInstance,\n high as AnyNumericVecInstance,\n ) as T;\n },\n // GPU implementation\n (value, low, high) => {\n return {\n value: `clamp(${value.value}, ${low.value}, ${high.value})`,\n dataType: value.dataType,\n };\n },\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#cos-builtin\n */\nexport const cos = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.cos(value) as T;\n }\n return VectorOps.cos[value.kind](value) as T;\n },\n // GPU implementation\n (value) => ({ value: `cos(${value.value})`, dataType: value.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#cross-builtin\n */\nexport const cross = createDualImpl(\n // CPU implementation\n <T extends v3f | v3h>(a: T, b: T): T => VectorOps.cross[a.kind](a, b),\n // GPU implementation\n (a, b) => ({ value: `cross(${a.value}, ${b.value})`, dataType: a.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#dot-builtin\n */\nexport const dot = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance>(lhs: T, rhs: T): number =>\n VectorOps.dot[lhs.kind](lhs, rhs),\n // GPU implementation\n (lhs, rhs) => ({ value: `dot(${lhs.value}, ${rhs.value})`, dataType: f32 }),\n);\n\nexport const normalize = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance>(v: T): T => VectorOps.normalize[v.kind](v),\n // GPU implementation\n (v) => ({ value: `normalize(${v.value})`, dataType: v.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#floor-builtin\n */\nexport const floor = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.floor(value) as T;\n }\n return VectorOps.floor[value.kind](value) as T;\n },\n // GPU implementation\n (value) => ({ value: `floor(${value.value})`, dataType: value.dataType }),\n);\n\nexport const fract = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(a: T): T => {\n if (typeof a === 'number') {\n return (a - Math.floor(a)) as T;\n }\n return VectorOps.fract[a.kind](a) as T;\n },\n // GPU implementation\n (a) => ({ value: `fract(${a.value})`, dataType: a.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#length-builtin\n */\nexport const length = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(value: T): number => {\n if (typeof value === 'number') {\n return Math.abs(value);\n }\n return VectorOps.length[value.kind](value);\n },\n // GPU implementation\n (value) => ({ value: `length(${value.value})`, dataType: f32 }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#max-float-builtin\n */\nexport const max = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance | number>(a: T, b: T): T => {\n if (typeof a === 'number') {\n return Math.max(a, b as number) as T;\n }\n return VectorOps.max[a.kind](a, b as AnyNumericVecInstance) as T;\n },\n // GPU implementation\n (a, b) => ({ value: `max(${a.value}, ${b.value})`, dataType: a.dataType }),\n 'coerce',\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#min-float-builtin\n */\nexport const min = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance | number>(a: T, b: T): T => {\n if (typeof a === 'number') {\n return Math.min(a, b as number) as T;\n }\n return VectorOps.min[a.kind](a, b as AnyNumericVecInstance) as T;\n },\n // GPU implementation\n (a, b) => ({\n value: `min(${a.value}, ${b.value})`,\n dataType: a.dataType,\n }),\n 'coerce',\n);\n\nexport const sign = createDualImpl(\n // CPU implementation\n // \\/ specifically no unsigned variants\n <T extends v2f | v2h | v2i | v3f | v3h | v3i | v4f | v4h | v4i | number>(\n e: T,\n ): T => {\n if (typeof e === 'number') {\n return Math.sign(e) as T;\n }\n return VectorOps.sign[e.kind](e) as T;\n },\n // GPU implementation\n (e) => ({ value: `sign(${e.value})`, dataType: e.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#sin-builtin\n */\nexport const sin = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.sin(value) as T;\n }\n return VectorOps.sin[value.kind](value) as T;\n },\n // GPU implementation\n (value) => ({ value: `sin(${value.value})`, dataType: value.dataType }),\n);\n\n/**\n * @privateRemarks\n * https://www.w3.org/TR/WGSL/#exp-builtin\n */\nexport const exp = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.exp(value) as T;\n }\n return VectorOps.exp[value.kind](value) as T;\n },\n // GPU implementation\n (value) => ({ value: `exp(${value.value})`, dataType: value.dataType }),\n);\n\ntype PowOverload = {\n (base: number, exponent: number): number;\n <T extends AnyFloatVecInstance>(base: T, exponent: T): T;\n};\n\nexport const pow: PowOverload = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(base: T, exponent: T): T => {\n if (typeof base === 'number' && typeof exponent === 'number') {\n return (base ** exponent) as T;\n }\n if (\n typeof base === 'object' &&\n typeof exponent === 'object' &&\n 'kind' in base &&\n 'kind' in exponent\n ) {\n return VectorOps.pow[base.kind](base, exponent) as T;\n }\n throw new Error('Invalid arguments to pow()');\n },\n // GPU implementation\n (base, exponent) => {\n return {\n value: `pow(${base.value}, ${exponent.value})`,\n dataType: base.dataType,\n };\n },\n);\n\ntype MixOverload = {\n (e1: number, e2: number, e3: number): number;\n <T extends AnyFloatVecInstance>(e1: T, e2: T, e3: number): T;\n <T extends AnyFloatVecInstance>(e1: T, e2: T, e3: T): T;\n};\n\nexport const mix: MixOverload = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(e1: T, e2: T, e3: T | number): T => {\n if (typeof e1 === 'number') {\n if (typeof e3 !== 'number' || typeof e2 !== 'number') {\n throw new Error(\n 'When e1 and e2 are numbers, the blend factor must be a number.',\n );\n }\n return (e1 * (1 - e3) + e2 * e3) as T;\n }\n\n if (typeof e1 === 'number' || typeof e2 === 'number') {\n throw new Error('e1 and e2 need to both be vectors of the same kind.');\n }\n\n return VectorOps.mix[e1.kind](e1, e2, e3) as T;\n },\n // GPU implementation\n (e1, e2, e3) => {\n return {\n value: `mix(${e1.value}, ${e2.value}, ${e3.value})`,\n dataType: e1.dataType,\n };\n },\n);\n\nexport const reflect = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance>(e1: T, e2: T): T =>\n sub(e1, mul(2 * dot(e2, e1), e2)),\n // GPU implementation\n (e1, e2) => {\n return {\n value: `reflect(${e1.value}, ${e2.value})`,\n dataType: e1.dataType,\n };\n },\n);\n\nexport const distance = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(a: T, b: T): number => {\n if (typeof a === 'number' && typeof b === 'number') {\n return Math.abs(a - b);\n }\n return length(\n sub(a as AnyFloatVecInstance, b as AnyFloatVecInstance),\n ) as number;\n },\n // GPU implementation\n (a, b) => ({ value: `distance(${a.value}, ${b.value})`, dataType: f32 }),\n);\n\nexport const neg = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance | number>(value: T): T => {\n if (typeof value === 'number') {\n return -value as T;\n }\n return VectorOps.neg[value.kind](value) as T;\n },\n // GPU implementation\n (value) => ({ value: `-(${value.value})`, dataType: value.dataType }),\n);\n\nexport const sqrt = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(value: T): T => {\n if (typeof value === 'number') {\n return Math.sqrt(value) as T;\n }\n return VectorOps.sqrt[value.kind](value) as T;\n },\n // GPU implementation\n (value) => ({ value: `sqrt(${value.value})`, dataType: value.dataType }),\n);\n\nexport const div = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance | number>(lhs: T, rhs: T | number): T => {\n if (typeof lhs === 'number' && typeof rhs === 'number') {\n return (lhs / rhs) as T;\n }\n if (typeof rhs === 'number') {\n return VectorOps.mulSxV[(lhs as AnyNumericVecInstance).kind](\n 1 / rhs,\n lhs as AnyNumericVecInstance,\n ) as T;\n }\n // Vector / Vector case\n return VectorOps.div[(lhs as AnyNumericVecInstance).kind](\n lhs as AnyNumericVecInstance,\n rhs as AnyNumericVecInstance,\n ) as T;\n },\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} / ${rhs.value})`,\n dataType: lhs.dataType,\n }),\n);\n","import { bool, f32 } from '../data/numeric.ts';\nimport { vec2b, vec3b, vec4b } from '../data/vector.ts';\nimport { VectorOps } from '../data/vectorOps.ts';\nimport type {\n AnyBooleanVecInstance,\n AnyFloatVecInstance,\n AnyNumericVecInstance,\n AnyVec2Instance,\n AnyVec3Instance,\n AnyVecInstance,\n v2b,\n v3b,\n v4b,\n} from '../data/wgslTypes.ts';\nimport { createDualImpl } from '../shared/generators.ts';\nimport type { Snippet } from '../types.ts';\nimport { isNumeric, sub } from './numeric.ts';\n\nfunction correspondingBooleanVectorSchema(value: Snippet) {\n if (value.dataType.type.includes('2')) {\n return vec2b;\n }\n if (value.dataType.type.includes('3')) {\n return vec3b;\n }\n return vec4b;\n}\n\n// comparison\n\n/**\n * Checks whether `lhs == rhs` on all components.\n * Equivalent to `all(eq(lhs, rhs))`.\n * @example\n * allEq(vec2f(0.0, 1.0), vec2f(0.0, 2.0)) // returns false\n * allEq(vec3u(0, 1, 2), vec3u(0, 1, 2)) // returns true\n */\nexport const allEq = createDualImpl(\n // CPU implementation\n <T extends AnyVecInstance>(lhs: T, rhs: T) => all(eq(lhs, rhs)),\n // GPU implementation\n (lhs, rhs) => ({\n value: `all(${lhs.value} == ${rhs.value})`,\n dataType: bool,\n }),\n);\n\n/**\n * Checks **component-wise** whether `lhs == rhs`.\n * This function does **not** return `bool`, for that use-case, wrap the result in `all`, or use `allEq`.\n * @example\n * eq(vec2f(0.0, 1.0), vec2f(0.0, 2.0)) // returns vec2b(true, false)\n * eq(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(false, true, false)\n * all(eq(vec4i(4, 3, 2, 1), vec4i(4, 3, 2, 1))) // returns true\n * allEq(vec4i(4, 3, 2, 1), vec4i(4, 3, 2, 1)) // returns true\n */\nexport const eq = createDualImpl(\n // CPU implementation\n <T extends AnyVecInstance>(lhs: T, rhs: T) =>\n VectorOps.eq[lhs.kind](lhs, rhs),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} == ${rhs.value})`,\n dataType: correspondingBooleanVectorSchema(lhs),\n }),\n);\n\n/**\n * Checks **component-wise** whether `lhs != rhs`.\n * This function does **not** return `bool`, for that use-case, wrap the result in `any`.\n * @example\n * ne(vec2f(0.0, 1.0), vec2f(0.0, 2.0)) // returns vec2b(false, true)\n * ne(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(true, false, true)\n * any(ne(vec4i(4, 3, 2, 1), vec4i(4, 2, 2, 1))) // returns true\n */\nexport const ne = createDualImpl(\n // CPU implementation\n <T extends AnyVecInstance>(lhs: T, rhs: T) => not(eq(lhs, rhs)),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} != ${rhs.value})`,\n dataType: correspondingBooleanVectorSchema(lhs),\n }),\n);\n\n/**\n * Checks **component-wise** whether `lhs < rhs`.\n * This function does **not** return `bool`, for that use-case, wrap the result in `all`.\n * @example\n * lt(vec2f(0.0, 0.0), vec2f(0.0, 1.0)) // returns vec2b(false, true)\n * lt(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(true, false, false)\n * all(lt(vec4i(1, 2, 3, 4), vec4i(2, 3, 4, 5))) // returns true\n */\nexport const lt = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance>(lhs: T, rhs: T) =>\n VectorOps.lt[lhs.kind](lhs, rhs),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} < ${rhs.value})`,\n dataType: correspondingBooleanVectorSchema(lhs),\n }),\n);\n\n/**\n * Checks **component-wise** whether `lhs <= rhs`.\n * This function does **not** return `bool`, for that use-case, wrap the result in `all`.\n * @example\n * le(vec2f(0.0, 0.0), vec2f(0.0, 1.0)) // returns vec2b(true, true)\n * le(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(true, true, false)\n * all(le(vec4i(1, 2, 3, 4), vec4i(2, 3, 3, 5))) // returns true\n */\nexport const le = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance>(lhs: T, rhs: T) =>\n or(lt(lhs, rhs), eq(lhs, rhs)),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} <= ${rhs.value})`,\n dataType: correspondingBooleanVectorSchema(lhs),\n }),\n);\n\n/**\n * Checks **component-wise** whether `lhs > rhs`.\n * This function does **not** return `bool`, for that use-case, wrap the result in `all`.\n * @example\n * gt(vec2f(0.0, 0.0), vec2f(0.0, 1.0)) // returns vec2b(false, false)\n * gt(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(false, false, true)\n * all(gt(vec4i(2, 3, 4, 5), vec4i(1, 2, 3, 4))) // returns true\n */\nexport const gt = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance>(lhs: T, rhs: T) =>\n and(not(lt(lhs, rhs)), not(eq(lhs, rhs))),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} > ${rhs.value})`,\n dataType: correspondingBooleanVectorSchema(lhs),\n }),\n);\n\n/**\n * Checks **component-wise** whether `lhs >= rhs`.\n * This function does **not** return `bool`, for that use-case, wrap the result in `all`.\n * @example\n * ge(vec2f(0.0, 0.0), vec2f(0.0, 1.0)) // returns vec2b(true, false)\n * ge(vec3u(0, 1, 2), vec3u(2, 1, 0)) // returns vec3b(false, true, true)\n * all(ge(vec4i(2, 2, 4, 5), vec4i(1, 2, 3, 4))) // returns true\n */\nexport const ge = createDualImpl(\n // CPU implementation\n <T extends AnyNumericVecInstance>(lhs: T, rhs: T) => not(lt(lhs, rhs)),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} >= ${rhs.value})`,\n dataType: correspondingBooleanVectorSchema(lhs),\n }),\n);\n\n// logical ops\n\n/**\n * Returns **component-wise** `!value`.\n * @example\n * not(vec2b(false, true)) // returns vec2b(true, false)\n * not(vec3b(true, true, false)) // returns vec3b(false, false, true)\n */\nexport const not = createDualImpl(\n // CPU implementation\n <T extends AnyBooleanVecInstance>(value: T): T =>\n VectorOps.neg[value.kind](value),\n // GPU implementation\n (value) => ({\n value: `!(${value.value})`,\n dataType: value.dataType,\n }),\n);\n\n/**\n * Returns **component-wise** logical `or` result.\n * @example\n * or(vec2b(false, true), vec2b(false, false)) // returns vec2b(false, true)\n * or(vec3b(true, true, false), vec3b(false, true, false)) // returns vec3b(true, true, false)\n */\nexport const or = createDualImpl(\n // CPU implementation\n <T extends AnyBooleanVecInstance>(lhs: T, rhs: T) =>\n VectorOps.or[lhs.kind](lhs, rhs),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} | ${rhs.value})`,\n dataType: lhs.dataType,\n }),\n);\n\n/**\n * Returns **component-wise** logical `and` result.\n * @example\n * and(vec2b(false, true), vec2b(true, true)) // returns vec2b(false, true)\n * and(vec3b(true, true, false), vec3b(false, true, false)) // returns vec3b(false, true, false)\n */\nexport const and = createDualImpl(\n // CPU implementation\n <T extends AnyBooleanVecInstance>(lhs: T, rhs: T) =>\n not(or(not(lhs), not(rhs))),\n // GPU implementation\n (lhs, rhs) => ({\n value: `(${lhs.value} & ${rhs.value})`,\n dataType: lhs.dataType,\n }),\n);\n\n// logical aggregation\n\n/**\n * Returns `true` if each component of `value` is true.\n * @example\n * all(vec2b(false, true)) // returns false\n * all(vec3b(true, true, true)) // returns true\n */\nexport const all = createDualImpl(\n // CPU implementation\n (value: AnyBooleanVecInstance) => VectorOps.all[value.kind](value),\n // GPU implementation\n (value) => ({\n value: `all(${value.value})`,\n dataType: bool,\n }),\n);\n\n/**\n * Returns `true` if any component of `value` is true.\n * @example\n * any(vec2b(false, true)) // returns true\n * any(vec3b(false, false, false)) // returns false\n */\nexport const any = createDualImpl(\n // CPU implementation\n (value: AnyBooleanVecInstance) => !all(not(value)),\n // GPU implementation\n (value) => ({\n value: `any(${value.value})`,\n dataType: bool,\n }),\n);\n\n// other\n\n/**\n * Checks whether the given elements differ by at most the `precision` value.\n * Checks all elements of `lhs` and `rhs` if arguments are vectors.\n * @example\n * isCloseTo(0, 0.1) // returns false\n * isCloseTo(vec3f(0, 0, 0), vec3f(0.002, -0.009, 0)) // returns true\n *\n * @param {number} precision argument that specifies the maximum allowed difference, 0.01 by default.\n */\nexport const isCloseTo = createDualImpl(\n // CPU implementation\n <T extends AnyFloatVecInstance | number>(\n lhs: T,\n rhs: T,\n precision = 0.01,\n ) => {\n if (typeof lhs === 'number' && typeof rhs === 'number') {\n return Math.abs(lhs - rhs) < precision;\n }\n if (typeof lhs !== 'number' && typeof rhs !== 'number') {\n return VectorOps.isCloseToZero[lhs.kind](sub(lhs, rhs), precision);\n }\n return false;\n },\n // GPU implementation\n (lhs, rhs, precision = { value: 0.01, dataType: f32 }) => {\n if (isNumeric(lhs) && isNumeric(rhs)) {\n return {\n value:\n `(abs(f32(${lhs.value}) - f32(${rhs.value})) <= ${precision.value})`,\n dataType: bool,\n };\n }\n if (!isNumeric(lhs) && !isNumeric(rhs)) {\n return {\n // https://www.w3.org/TR/WGSL/#vector-multi-component:~:text=Binary%20arithmetic%20expressions%20with%20mixed%20scalar%20and%20vector%20operands\n // (a-a)+prec creates a vector of a.length elements, all equal to prec\n value:\n `all(abs(${lhs.value} - ${rhs.value}) <= (${lhs.value} - ${lhs.value}) + ${precision.value})`,\n dataType: bool,\n };\n }\n return {\n value: 'false',\n dataType: bool,\n };\n },\n);\n\nexport type SelectOverload = {\n <T extends number | boolean | AnyVecInstance>(f: T, t: T, cond: boolean): T;\n <T extends AnyVecInstance>(\n f: T,\n t: T,\n cond: T extends AnyVec2Instance ? v2b\n : T extends AnyVec3Instance ? v3b\n : v4b,\n ): T;\n};\n\n/**\n * Returns `t` if `cond` is `true`, and `f` otherwise.\n * Component-wise if `cond` is a vector.\n * @example\n * select(1, 2, false) // returns 1\n * select(1, 2, true) // returns 2\n * select(vec2i(1, 2), vec2i(3, 4), true) // returns vec2i(3, 4)\n * select(vec2i(1, 2), vec2i(3, 4), vec2b(false, true)) // returns vec2i(1, 4)\n */\nexport const select: SelectOverload = createDualImpl(\n // CPU implementation\n <T extends number | boolean | AnyVecInstance>(\n f: T,\n t: T,\n cond: AnyBooleanVecInstance | boolean,\n ) => {\n if (typeof cond === 'boolean') {\n return cond ? t : f;\n }\n return VectorOps.select[(f as AnyVecInstance).kind](\n f as AnyVecInstance,\n t as AnyVecInstance,\n cond,\n );\n },\n // GPU implementation\n (f, t, cond) => ({\n value: `select(${f.value}, ${t.value}, ${cond.value})`,\n dataType: f.dataType,\n }),\n);\n","import { i32, u32 } from '../data/numeric.ts';\nimport {\n type AnyWgslData,\n type atomicI32,\n type atomicU32,\n isWgslData,\n Void,\n} from '../data/wgslTypes.ts';\nimport { createDualImpl } from '../shared/generators.ts';\nimport type { Snippet } from '../types.ts';\ntype AnyAtomic = atomicI32 | atomicU32;\n\nexport const workgroupBarrier = createDualImpl(\n // CPU implementation\n () => console.warn('workgroupBarrier is a no-op outside of GPU mode.'),\n // GPU implementation\n () => ({ value: 'workgroupBarrier()', dataType: Void }),\n);\n\nexport const storageBarrier = createDualImpl(\n // CPU implementation\n () => console.warn('storageBarrier is a no-op outside of GPU mode.'),\n // GPU implementation\n () => ({ value: 'storageBarrier()', dataType: Void }),\n);\n\nexport const textureBarrier = createDualImpl(\n // CPU implementation\n () => console.warn('textureBarrier is a no-op outside of GPU mode.'),\n // GPU implementation\n () => ({ value: 'textureBarrier()', dataType: Void }),\n);\n\nexport const atomicLoad = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return { value: `atomicLoad(&${a.value})`, dataType: a.dataType.inner };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n);\n\nexport const atomicStore = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): void => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (!isWgslData(a.dataType) || a.dataType.type !== 'atomic') {\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n }\n return {\n value: `atomicStore(&${a.value}, ${value.value})`,\n dataType: Void,\n };\n },\n);\n\nconst atomicTypeFn = (a: Snippet, _value: Snippet): AnyWgslData[] => {\n if (a.dataType.type === 'atomic' && a.dataType.inner.type === 'i32') {\n return [a.dataType, i32];\n }\n return [a.dataType as AnyWgslData, u32];\n};\n\nexport const atomicAdd = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return {\n value: `atomicAdd(&${a.value}, ${value.value})`,\n dataType: a.dataType.inner,\n };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n atomicTypeFn,\n);\n\nexport const atomicSub = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return {\n value: `atomicSub(&${a.value}, ${value.value})`,\n dataType: a.dataType.inner,\n };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n atomicTypeFn,\n);\n\nexport const atomicMax = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return {\n value: `atomicMax(&${a.value}, ${value.value})`,\n dataType: a.dataType.inner,\n };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n atomicTypeFn,\n);\n\nexport const atomicMin = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return {\n value: `atomicMin(&${a.value}, ${value.value})`,\n dataType: a.dataType.inner,\n };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n atomicTypeFn,\n);\n\nexport const atomicAnd = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return {\n value: `atomicAnd(&${a.value}, ${value.value})`,\n dataType: a.dataType.inner,\n };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n atomicTypeFn,\n);\n\nexport const atomicOr = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return {\n value: `atomicOr(&${a.value}, ${value.value})`,\n dataType: a.dataType.inner,\n };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n atomicTypeFn,\n);\n\nexport const atomicXor = createDualImpl(\n // CPU implementation\n <T extends AnyAtomic>(a: T, value: number): number => {\n throw new Error('Atomic operations are not supported outside of GPU mode.');\n },\n // GPU implementation\n (a, value) => {\n if (isWgslData(a.dataType) && a.dataType.type === 'atomic') {\n return {\n value: `atomicXor(&${a.value}, ${value.value})`,\n dataType: a.dataType.inner,\n };\n }\n throw new Error(\n `Invalid atomic type: ${JSON.stringify(a.dataType, null, 2)}`,\n );\n },\n atomicTypeFn,\n);\n","import { u32 } from '../data/numeric.ts';\nimport { ptrFn } from '../data/ptr.ts';\nimport type { AnyWgslData } from '../data/wgslTypes.ts';\nimport { createDualImpl } from '../shared/generators.ts';\n\nexport const arrayLength = createDualImpl(\n // CPU implementation\n (a: unknown[]) => a.length,\n // GPU implementation\n (a) => ({ value: `arrayLength(${a.value})`, dataType: u32 }),\n (a) => [ptrFn(a.dataType as AnyWgslData)],\n);\n","import * as TB from 'typed-binary';\nimport { u32 } from '../data/numeric.ts';\nimport { vec2f, vec4f } from '../data/vector.ts';\nimport type { v2f, v4f } from '../data/wgslTypes.ts';\nimport { createDualImpl } from '../shared/generators.ts';\n\n/**\n * @privateRemarks\n * https://gpuweb.github.io/gpuweb/wgsl/#unpack2x16float-builtin\n */\nexport const unpack2x16float = createDualImpl(\n // CPU implementation\n (e: number): v2f => {\n const buffer = new ArrayBuffer(4);\n const writer = new TB.BufferWriter(buffer);\n writer.writeUint32(e);\n const reader = new TB.BufferReader(buffer);\n return vec2f(reader.readFloat16(), reader.readFloat16());\n },\n // GPU implementation\n (e) => {\n return {\n value: `unpack2x16float(${e.value})`,\n dataType: vec2f,\n };\n },\n);\n\n/**\n * @privateRemarks\n * https://gpuweb.github.io/gpuweb/wgsl/#pack2x16float-builtin\n */\nexport const pack2x16float = createDualImpl(\n // CPU implementation\n (e: v2f): number => {\n const buffer = new ArrayBuffer(4);\n const writer = new TB.BufferWriter(buffer);\n writer.writeFloat16(e.x);\n writer.writeFloat16(e.y);\n const reader = new TB.BufferReader(buffer);\n return u32(reader.readUint32());\n },\n // GPU implementation\n (e) => {\n return {\n value: `pack2x16float(${e.value})`,\n dataType: u32,\n };\n },\n);\n\n/**\n * @privateRemarks\n * https://gpuweb.github.io/gpuweb/wgsl/#unpack4x8unorm-builtin\n */\nexport const unpack4x8unorm = createDualImpl(\n // CPU implementation\n (e: number): v4f => {\n const buffer = new ArrayBuffer(4);\n const writer = new TB.BufferWriter(buffer);\n writer.writeUint32(e);\n const reader = new TB.BufferReader(buffer);\n return vec4f(\n reader.readUint8() / 255,\n reader.readUint8() / 255,\n reader.readUint8() / 255,\n reader.readUint8() / 255,\n );\n },\n // GPU implementation\n (e) => {\n return {\n value: `unpack4x8unorm(${e.value})`,\n dataType: vec4f,\n };\n },\n);\n\n/**\n * @privateRemarks\n * https://gpuweb.github.io/gpuweb/wgsl/#pack4x8unorm-builtin\n */\nexport const pack4x8unorm = createDualImpl(\n // CPU implementation\n (e: v4f): number => {\n const buffer = new ArrayBuffer(4);\n const writer = new TB.BufferWriter(buffer);\n writer.writeUint8(e.x * 255);\n writer.writeUint8(e.y * 255);\n writer.writeUint8(e.z * 255);\n writer.writeUint8(e.w * 255);\n const reader = new TB.BufferReader(buffer);\n return u32(reader.readUint32());\n },\n // GPU implementation\n (e) => {\n return {\n value: `pack4x8unorm(${e.value})`,\n dataType: u32,\n };\n },\n);\n","import type { TgpuSampler } from '../core/sampler/sampler.ts';\nimport type {\n TgpuSampledTexture,\n TgpuStorageTexture,\n} from '../core/texture/texture.ts';\nimport type { ChannelData, TexelData } from '../core/texture/texture.ts';\nimport { u32 } from '../data/numeric.ts';\nimport { vec2u, vec3u, vec4f, vec4i, vec4u } from '../data/vector.ts';\nimport {\n type v2f,\n type v2i,\n type v2u,\n type v3f,\n type v3i,\n type v3u,\n type v4f,\n type v4i,\n type v4u,\n Void,\n} from '../data/wgslTypes.ts';\nimport { createDualImpl } from '../shared/generators.ts';\n\ntype TextureSampleOverload = {\n <T extends TgpuSampledTexture<'1d'>>(\n texture: T,\n sampler: TgpuSampler,\n coords: number,\n ): v4f;\n <T extends TgpuSampledTexture<'2d'>>(\n texture: T,\n sampler: TgpuSampler,\n coords: v2f,\n ): v4f;\n <T extends TgpuSampledTexture<'2d'>>(\n texture: T,\n sampler: TgpuSampler,\n coords: v2f,\n offset: v2i,\n ): v4f;\n <T extends TgpuSampledTexture<'2d-array'>>(\n texture: T,\n sampler: TgpuSampler,\n coords: v2f,\n arrayIndex: number,\n ): v4f;\n <T extends TgpuSampledTexture<'2d-array'>>(\n texture: T,\n sampler: TgpuSampler,\n coords: v2f,\n arrayIndex: number,\n offset: v2i,\n ): v4f;\n <T extends TgpuSampledTexture<'3d' | 'cube'>>(\n texture: T,\n sampler: TgpuSampler,\n coords: v3f,\n ): v4f;\n <T extends TgpuSampledTexture<'3d'>>(\n texture: T,\n sampler: TgpuSampler,\n coords: v3f,\n offset: v3i,\n ): v4f;\n <T extends TgpuSampledTexture<'cube-array'>>(\n texture: T,\n sampler: TgpuSampler,\n coords: v3f,\n arrayIndex: number,\n ): v4f;\n // TODO: Support this\n // <T extends TgpuSampledTexture<'depth-2d'>>(\n // texture: T,\n // sampler: TgpuSampler,\n // coords: v2f,\n // ): number;\n // <T extends TgpuSampledTexture<'depth-2d'>>(\n // texture: T,\n // sampler: TgpuSampler,\n // coords: v2f,\n // offset: v2i,\n // ): number;\n // <T extends TgpuSampledTexture<'depth-2d-array'>>(\n // texture: T,\n // sampler: TgpuSampler,\n // coords: v2f,\n // arrayIndex: number,\n // ): number;\n // <T extends TgpuSampledTexture<'depth-2d-array'>>(\n // texture: T,\n // sampler: TgpuSampler,\n // coords: v2f,\n // arrayIndex: number,\n // offset: v2i,\n // ): number;\n // <T extends TgpuSampledTexture<'depth-cube'>>(\n // texture: T,\n // sampler: TgpuSampler,\n // coords: v3i,\n // ): number;\n // <T extends TgpuSampledTexture<'depth-cube-array'>>(\n // texture: T,\n // sampler: TgpuSampler,\n // coords: v3i,\n // arrayIndex: number,\n // ): number;\n};\n\nexport const textureSample: TextureSampleOverload = createDualImpl(\n // CPU implementation\n (\n _texture: TgpuSampledTexture,\n _sampler: TgpuSampler,\n _coords: number | v2f | v3f,\n _offsetOrArrayIndex?: v2i | v3i | number,\n _maybeOffset?: v2i | v3i,\n ) => {\n throw new Error('Texture sampling is not supported outside of GPU mode.');\n },\n // GPU implementation\n (texture, sampler, coords, offsetOrArrayIndex, maybeOffset) => {\n const args = [texture, sampler, coords];\n\n if (offsetOrArrayIndex !== undefined) {\n args.push(offsetOrArrayIndex);\n }\n\n if (maybeOffset !== undefined) {\n args.push(maybeOffset);\n }\n\n return {\n value: `textureSample(${args.map((v) => v.value).join(', ')})`,\n dataType: vec4f,\n };\n },\n);\n\ntype TextureSampleLevelOverload = {\n <T extends TgpuSampledTexture<'2d'>>(\n texture: T,\n sampler: TgpuSampler,\n coords: v2f,\n level: number,\n offset?: v2i,\n ): v4f;\n <T extends TgpuSampledTexture<'2d-array'>>(\n texture: T,\n sampler: TgpuSampler,\n coords: v2f,\n arrayIndex: number,\n level: number,\n offset?: v2i,\n ): v4f;\n <T extends TgpuSampledTexture<'3d' | 'cube'>>(\n texture: T,\n sampler: TgpuSampler,\n coords: v3f,\n level: number,\n offset?: v3i,\n ): v4f;\n <T extends TgpuSampledTexture<'cube-array'>>(\n texture: T,\n sampler: TgpuSampler,\n coords: v3f,\n arrayIndex: number,\n level: number,\n ): v4f;\n};\n\nexport const textureSampleLevel: TextureSampleLevelOverload = createDualImpl(\n // CPU implementation\n (\n _texture: TgpuSampledTexture,\n _sampler: TgpuSampler,\n _coords: number | v2f | v3f,\n _level: number,\n _offsetOrArrayIndex?: v2i | v3i | number,\n ) => {\n throw new Error('Texture sampling is not supported outside of GPU mode.');\n },\n // GPU implementation\n (texture, sampler, coords, level, offsetOrArrayIndex) => {\n const args = [texture, sampler, coords, level];\n\n if (offsetOrArrayIndex !== undefined) {\n args.push(offsetOrArrayIndex);\n }\n\n return {\n value: `textureSampleLevel(${args.map((v) => v.value).join(', ')})`,\n dataType: vec4f,\n };\n },\n);\n\ntype TexelDataToInstance<TF extends TexelData> = {\n vec4f: v4f;\n vec4i: v4i;\n vec4u: v4u;\n}[TF['type']];\n\ntype SampleTypeToInstance<TF extends ChannelData> = {\n u32: v4u;\n i32: v4i;\n f32: v4f;\n}[TF['type']];\n\nconst channelDataToInstance = {\n u32: vec4u,\n i32: vec4i,\n f32: vec4f,\n};\n\ntype TextureLoadOverload = {\n <T extends TgpuStorageTexture<'1d'>>(\n texture: T,\n coords: number,\n ): TexelDataToInstance<T['texelDataType']>;\n <T extends TgpuStorageTexture<'2d'>>(\n texture: T,\n coords: v2i | v2u,\n ): TexelDataToInstance<T['texelDataType']>;\n <T extends TgpuStorageTexture<'2d-array'>>(\n texture: T,\n coords: v2i | v2u,\n arrayIndex: number,\n ): TexelDataToInstance<T['texelDataType']>;\n <T extends TgpuStorageTexture<'3d'>>(\n texture: T,\n coords: v3i | v3u,\n ): TexelDataToInstance<T['texelDataType']>;\n\n <T extends TgpuSampledTexture<'1d'>>(\n texture: T,\n coords: number,\n level: number,\n ): SampleTypeToInstance<T['channelDataType']>;\n <T extends TgpuSampledTexture<'2d'>>(\n texture: T,\n coords: v2i | v2u,\n level: number,\n ): SampleTypeToInstance<T['channelDataType']>;\n <T extends TgpuSampledTexture<'2d-array'>>(\n texture: T,\n coords: v2i | v2u,\n arrayIndex: number,\n level: number,\n ): SampleTypeToInstance<T['channelDataType']>;\n <T extends TgpuSampledTexture<'3d'>>(\n texture: T,\n coords: v3i | v3u,\n level: number,\n ): SampleTypeToInstance<T['channelDataType']>;\n // TODO: Support multisampled textures and depth textures\n};\n\nexport const textureLoad: TextureLoadOverload = createDualImpl(\n // CPU implementation\n (\n _texture: TgpuStorageTexture | TgpuSampledTexture,\n _coords: number | v2i | v2u | v3i | v3u,\n _levelOrArrayIndex?: number,\n ) => {\n throw new Error('Texture loading is not supported outside of GPU mode.');\n },\n // GPU implementation\n (texture, coords, levelOrArrayIndex) => {\n const args = [texture, coords];\n\n if (levelOrArrayIndex !== undefined) {\n args.push(levelOrArrayIndex);\n }\n\n const textureInfo = texture.dataType as unknown as\n | TgpuStorageTexture\n | TgpuSampledTexture;\n\n return {\n value: `textureLoad(${args.map((v) => v.value).join(', ')})`,\n dataType: 'texelDataType' in textureInfo\n ? textureInfo.texelDataType\n : channelDataToInstance[textureInfo.channelDataType.type],\n };\n },\n);\n\ntype TextureStoreOverload = {\n <T extends TgpuStorageTexture<'1d'>>(\n texture: T,\n coords: number,\n value: TexelDataToInstance<T['texelDataType']>,\n ): void;\n <T extends TgpuStorageTexture<'2d'>>(\n texture: T,\n coords: v2i | v2u,\n value: TexelDataToInstance<T['texelDataType']>,\n ): void;\n <T extends TgpuStorageTexture<'2d-array'>>(\n texture: T,\n coords: v2i | v2u,\n arrayIndex: number,\n value: TexelDataToInstance<T['texelDataType']>,\n ): void;\n <T extends TgpuStorageTexture<'3d'>>(\n texture: T,\n coords: v3i | v3u,\n value: TexelDataToInstance<T['texelDataType']>,\n ): void;\n};\n\nexport const textureStore: TextureStoreOverload = createDualImpl(\n // CPU implementation\n (\n _texture: TgpuStorageTexture,\n _coords: number | v2i | v2u | v3i | v3u,\n _arrayIndexOrValue?: number | TexelData,\n _maybeValue?: TexelData,\n ) => {\n throw new Error('Texture storing is not supported outside of GPU mode.');\n },\n // GPU implementation\n (texture, coords, arrayIndexOrValue, maybeValue) => ({\n value: `textureStore(${\n [texture, coords, arrayIndexOrValue, maybeValue].filter(\n (arg) => arg !== undefined,\n ).map((v) => v.value).join(', ')\n })`,\n dataType: Void,\n }),\n);\n\ntype TextureDimensionsOverload = {\n <T extends TgpuSampledTexture<'1d'> | TgpuStorageTexture<'1d'>>(\n texture: T,\n ): number;\n <T extends TgpuSampledTexture<'1d'>>(texture: T, level: number): number;\n\n <\n T extends\n | TgpuSampledTexture<'2d'>\n | TgpuSampledTexture<'2d-array'>\n | TgpuSampledTexture<'cube'>\n | TgpuSampledTexture<'cube-array'>\n | TgpuStorageTexture<'2d'>\n | TgpuStorageTexture<'2d-array'>,\n >(\n texture: T,\n ): v2u;\n <\n T extends\n | TgpuSampledTexture<'2d'>\n | TgpuSampledTexture<'2d-array'>\n | TgpuSampledTexture<'cube'>\n | TgpuSampledTexture<'cube-array'>,\n >(\n texture: T,\n level: number,\n ): v2u;\n\n <T extends TgpuSampledTexture<'3d'> | TgpuStorageTexture<'3d'>>(\n texture: T,\n ): v3u;\n <T extends TgpuSampledTexture<'3d'>>(texture: T, level: number): v3u;\n};\n\nexport const textureDimensions: TextureDimensionsOverload = createDualImpl(\n // CPU implementation\n (_texture: TgpuSampledTexture | TgpuStorageTexture, _level?: number) => {\n throw new Error(\n 'Texture dimensions are not supported outside of GPU mode.',\n );\n },\n // GPU implementation\n (texture, level) => {\n const dim =\n (texture.dataType as unknown as TgpuSampledTexture | TgpuStorageTexture)\n .dimension;\n return {\n value: `textureDimensions(${texture.value}${\n level !== undefined ? `, ${level.value}` : ''\n })`,\n dataType: dim === '1d' ? u32 : dim === '3d' ? vec3u : vec2u,\n };\n },\n);\n"],"mappings":"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CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAClBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EACdD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAAC,EAAE,EAAIC,EAAG,CAAC,EAAE,EAChBD,EAAG,CAA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","names":["discard","createDualImpl","Void","lengthVec2","v","lengthVec3","lengthVec4","dotVec2","lhs","rhs","dotVec3","dotVec4","clamp","value","low","high","unary2f","op","a","vec2f","unary2h","vec2h","unary2i","vec2i","unary2u","vec2u","unary3f","vec3f","unary3h","vec3h","unary3i","vec3i","unary3u","vec3u","unary4f","vec4f","unary4h","vec4h","unary4i","vec4i","unary4u","vec4u","binaryComponentWise2f","b","binaryComponentWise2h","binaryComponentWise2i","binaryComponentWise2u","binaryComponentWise3f","binaryComponentWise3h","binaryComponentWise3i","binaryComponentWise3u","binaryComponentWise4f","binaryComponentWise4h","binaryComponentWise4i","binaryComponentWise4u","VectorOps","e1","e2","vec2b","vec3b","vec4b","s","m","m_","mat2x2f","mat3x3f","mat4x4f","a_","b_","len","base","exponent","e3","n","f","c","isNumeric","element","type","add","createDualImpl","lhs","rhs","VectorOps","sub","mul","s","v","sIsVector","vIsVector","returnType","abs","value","atan2","y","x","acos","asin","ceil","clamp","low","high","cos","cross","a","b","dot","f32","normalize","floor","fract","length","max","min","sign","sin","exp","pow","base","exponent","mix","e1","e2","e3","reflect","distance","neg","sqrt","div","correspondingBooleanVectorSchema","value","vec2b","vec3b","vec4b","allEq","createDualImpl","lhs","rhs","all","eq","bool","VectorOps","ne","not","lt","le","or","gt","and","ge","any","isCloseTo","precision","sub","f32","isNumeric","select","f","cond","workgroupBarrier","createDualImpl","Void","storageBarrier","textureBarrier","atomicLoad","a","isWgslData","atomicStore","value","atomicTypeFn","_value","i32","u32","atomicAdd","atomicSub","atomicMax","atomicMin","atomicAnd","atomicOr","atomicXor","arrayLength","createDualImpl","a","u32","ptrFn","TB","unpack2x16float","createDualImpl","buffer","reader","vec2f","pack2x16float","writer","u32","unpack4x8unorm","vec4f","pack4x8unorm","textureSample","createDualImpl","_texture","_sampler","_coords","_offsetOrArrayIndex","_maybeOffset","texture","sampler","coords","offsetOrArrayIndex","maybeOffset","args","v","vec4f","textureSampleLevel","_level","level","channelDataToInstance","vec4u","vec4i","textureLoad","_levelOrArrayIndex","levelOrArrayIndex","textureInfo","textureStore","_arrayIndexOrValue","_maybeValue","arrayIndexOrValue","maybeValue","arg","Void","textureDimensions","dim","u32","vec3u","vec2u"]}
|