export declare const CONV1D_FORWARD_WGSL = "\n\nstruct ConvParams {\n seq_len : u32, // L\n d_channels : u32, // D (number of depthwise channels in this call)\n kernel_size : u32, // K (typically 4)\n batch : u32, // B\n groups : u32, // number of channel groups (1 = standard depthwise)\n};\n\n@group(0) @binding(0) var params : ConvParams;\n// x (B, L, D) \u2013 input\n@group(0) @binding(1) var x : array;\n// weight (D, K) \u2013 depthwise conv weights\n@group(0) @binding(2) var weight : array;\n// bias (D,) \u2013 optional bias (zeros if unused)\n@group(0) @binding(3) var bias : array;\n// y (B, L, D) \u2013 output\n@group(0) @binding(4) var y : array;\n\n// Dispatch: (ceil(L/16), ceil(D/16), B)\n@compute @workgroup_size(16, 16, 1)\nfn conv1d_forward(\n @builtin(global_invocation_id) gid : vec3,\n) {\n let L = params.seq_len;\n let D = params.d_channels;\n let K = params.kernel_size;\n let B = params.batch;\n\n let t = gid.x; // time position\n let d = gid.y; // channel\n let b = gid.z; // batch\n\n if (t >= L || d >= D || b >= B) { return; }\n\n var acc: f32 = 0.0;\n\n // Causal: convolve over k = 0..K-1, reading position (t - k)\n for (var k: u32 = 0u; k < K; k = k + 1u) {\n let w_idx = d * K + k;\n let w_val = weight[w_idx];\n\n // t - k: use causal zero-padding for t < k\n if (t >= k) {\n let src = b * L * D + (t - k) * D + d;\n acc = acc + w_val * x[src];\n }\n // else: zero-padding contributes 0\n }\n\n acc = acc + bias[d];\n\n let out = b * L * D + t * D + d;\n y[out] = acc;\n}\n"; export declare const CONV1D_BACKWARD_WGSL = "\n\nstruct ConvParams {\n seq_len : u32,\n d_channels : u32,\n kernel_size : u32,\n batch : u32,\n};\n\n@group(0) @binding(0) var params : ConvParams;\n@group(0) @binding(1) var x : array;\n@group(0) @binding(2) var weight : array;\n@group(0) @binding(3) var dy : array;\n@group(0) @binding(4) var dx : array;\n@group(0) @binding(5) var dweight : array;\n@group(0) @binding(6) var dbias : array;\n\n// Dispatch: (ceil(L/16), ceil(D/16), B) \u2013 computes dx\n@compute @workgroup_size(16, 16, 1)\nfn conv1d_backward_dx(\n @builtin(global_invocation_id) gid : vec3,\n) {\n let L = params.seq_len;\n let D = params.d_channels;\n let K = params.kernel_size;\n let B = params.batch;\n\n let t = gid.x;\n let d = gid.y;\n let b = gid.z;\n\n if (t >= L || d >= D || b >= B) { return; }\n\n var grad: f32 = 0.0;\n\n // dx[b, t, d] = sum_{k=0}^{K-1} dy[b, t+k, d] * weight[d, k]\n for (var k: u32 = 0u; k < K; k = k + 1u) {\n let tp = t + k;\n if (tp < L) {\n let dy_idx = b * L * D + tp * D + d;\n let w_idx = d * K + k;\n grad = grad + dy[dy_idx] * weight[w_idx];\n }\n }\n\n let dx_idx = b * L * D + t * D + d;\n dx[dx_idx] = grad;\n}\n\n// Dispatch: (K, D, 1) \u2013 accumulates dweight over (B, L)\n@compute @workgroup_size(1, 1, 1)\nfn conv1d_backward_dw(\n @builtin(global_invocation_id) gid : vec3,\n) {\n let L = params.seq_len;\n let D = params.d_channels;\n let K = params.kernel_size;\n let B = params.batch;\n\n let k = gid.x;\n let d = gid.y;\n\n if (k >= K || d >= D) { return; }\n\n var grad_w: f32 = 0.0;\n var grad_b: f32 = 0.0;\n\n for (var b: u32 = 0u; b < B; b = b + 1u) {\n for (var t: u32 = 0u; t < L; t = t + 1u) {\n let dy_idx = b * L * D + t * D + d;\n let dy_val = dy[dy_idx];\n if (t >= k) {\n let x_idx = b * L * D + (t - k) * D + d;\n grad_w = grad_w + dy_val * x[x_idx];\n }\n if (k == 0u) {\n grad_b = grad_b + dy_val;\n }\n }\n }\n\n dweight[d * K + k] = grad_w;\n if (k == 0u) {\n dbias[d] = grad_b;\n }\n}\n"; //# sourceMappingURL=conv1d.d.ts.map