@genai-fi/nanogpt 0.6.0 → 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/dist/Generator.js +7 -7
  2. package/dist/NanoGPTModel.js +70 -121
  3. package/dist/RealDiv-BYViZwhN.js +540 -0
  4. package/dist/Reshape-t7Kcikjk.js +127 -0
  5. package/dist/TeachableLLM.d.ts +2 -0
  6. package/dist/TeachableLLM.js +34 -27
  7. package/dist/{TiedEmbedding-BhxWO8QR.js → TiedEmbedding-9WeDwvjO.js} +12 -13
  8. package/dist/{axis_util-D17qZRQm.js → axis_util-Bu4h7XWV.js} +14 -12
  9. package/dist/{broadcast_to-BMQLjvt_.js → broadcast_to-DARN-DBD.js} +2 -2
  10. package/dist/{concat-DhZfF1GY.js → concat-5aPGqw3Z.js} +3 -3
  11. package/dist/{dataset-oilnemHf.js → dataset-pgqp-YfL.js} +3 -3
  12. package/dist/{dropout-CrMQPCeG.js → dropout-Bciw46HT.js} +7 -7
  13. package/dist/{gather-DZCMHZuN.js → gather-DjyCjmOD.js} +1 -1
  14. package/dist/gpgpu_math-CNslybmD.js +3115 -0
  15. package/dist/{index-bMBtI-WR.js → index-BAzbokzv.js} +846 -649
  16. package/dist/{kernel_funcs_utils-CNmjLWnB.js → kernel_funcs_utils-CUxJCg0g.js} +232 -138
  17. package/dist/layers/BaseLayer.js +2 -2
  18. package/dist/layers/CausalSelfAttention.js +6 -6
  19. package/dist/layers/MLP.js +5 -5
  20. package/dist/layers/RMSNorm.js +3 -3
  21. package/dist/layers/RoPECache.js +13 -33
  22. package/dist/layers/TiedEmbedding.js +6 -7
  23. package/dist/layers/TransformerBlock.js +1 -1
  24. package/dist/loader/load.d.ts +13 -0
  25. package/dist/loader/load.js +27 -0
  26. package/dist/loader/loadHF.d.ts +7 -0
  27. package/dist/loader/loadHF.js +22 -0
  28. package/dist/{utilities/load.d.ts → loader/loadTransformers.d.ts} +11 -11
  29. package/dist/loader/loadTransformers.js +28 -0
  30. package/dist/loader/newZipLoad.d.ts +8 -0
  31. package/dist/loader/newZipLoad.js +21 -0
  32. package/dist/loader/oldZipLoad.d.ts +7 -0
  33. package/dist/loader/oldZipLoad.js +76 -0
  34. package/dist/{log_sum_exp-BHdkCb4s.js → log_sum_exp-YEo2h3gb.js} +14 -14
  35. package/dist/main.js +23 -20
  36. package/dist/{mat_mul-BsrLfy81.js → mat_mul-7121rsJk.js} +1 -1
  37. package/dist/{max-DechV4Bc.js → max-DtlIuVeW.js} +1 -1
  38. package/dist/mulmat_packed_gpu-D4nKF7Je.js +71 -0
  39. package/dist/{norm-B9hWHZH1.js → norm-CzltS9Fz.js} +16 -16
  40. package/dist/{ones-g0K8jVwm.js → ones-BBlSRqn1.js} +2 -2
  41. package/dist/ops/appendCache.js +3 -3
  42. package/dist/ops/attentionMask.js +1 -1
  43. package/dist/ops/cpu/appendCache.js +2 -2
  44. package/dist/ops/cpu/attentionMask.js +6 -6
  45. package/dist/ops/cpu/fusedSoftmax.js +2 -2
  46. package/dist/ops/cpu/gatherSub.js +9 -9
  47. package/dist/ops/cpu/gelu.js +1 -1
  48. package/dist/ops/cpu/matMulGelu.js +1 -1
  49. package/dist/ops/cpu/matMulMul.js +1 -1
  50. package/dist/ops/cpu/mulDropout.js +1 -1
  51. package/dist/ops/cpu/normRMS.js +1 -1
  52. package/dist/ops/cpu/qkv.js +3 -3
  53. package/dist/ops/cpu/rope.js +5 -5
  54. package/dist/ops/cpu/scatterSub.js +17 -48
  55. package/dist/ops/fusedSoftmax.js +1 -1
  56. package/dist/ops/gatherSub.js +1 -1
  57. package/dist/ops/gelu.js +1 -1
  58. package/dist/ops/grads/attentionMask.js +1 -1
  59. package/dist/ops/grads/fusedSoftmax.js +4 -4
  60. package/dist/ops/grads/gelu.js +1 -1
  61. package/dist/ops/grads/matMulGelu.js +1 -1
  62. package/dist/ops/grads/normRMS.js +1 -1
  63. package/dist/ops/grads/qkv.js +1 -1
  64. package/dist/ops/grads/rope.js +1 -1
  65. package/dist/ops/matMulGelu.js +1 -1
  66. package/dist/ops/matMulMul.js +1 -1
  67. package/dist/ops/mulDrop.js +1 -1
  68. package/dist/ops/node/sparseCrossEntropy.js +1 -1
  69. package/dist/ops/normRMS.js +1 -1
  70. package/dist/ops/qkv.js +1 -1
  71. package/dist/ops/rope.js +8 -4
  72. package/dist/ops/scatterSub.js +1 -1
  73. package/dist/ops/webgl/appendCache.js +1 -1
  74. package/dist/ops/webgl/attentionMask.js +1 -1
  75. package/dist/ops/webgl/fusedSoftmax.js +29 -560
  76. package/dist/ops/webgl/gatherSub.js +1 -1
  77. package/dist/ops/webgl/gelu.js +2 -2
  78. package/dist/ops/webgl/log.js +3 -3
  79. package/dist/ops/webgl/matMulGelu.js +46 -113
  80. package/dist/ops/webgl/matMulMul.js +1 -1
  81. package/dist/ops/webgl/mulDropout.js +1 -1
  82. package/dist/ops/webgl/normRMS.js +2 -2
  83. package/dist/ops/webgl/qkv.js +1 -1
  84. package/dist/ops/webgl/rope.js +1 -1
  85. package/dist/ops/webgl/scatterSub.js +1 -1
  86. package/dist/{ops-Mv7Ta72x.js → ops-C0sQEcPw.js} +117 -109
  87. package/dist/{random_width-BBAWzDym.js → random_width-DWzaOgrn.js} +6925 -6291
  88. package/dist/{range-DMaG9A3G.js → range-DYsrnfiy.js} +1 -1
  89. package/dist/{gpgpu_math-Ctc31slO.js → reciprocal-CJQeasVa.js} +7 -5
  90. package/dist/register_all_kernels-BfFCQAqs.js +21397 -0
  91. package/dist/{reshape-T4yDEqoF.js → reshape-krWGKraP.js} +1 -1
  92. package/dist/scatter_nd_util-93ln7Hut.js +46 -0
  93. package/dist/selu_util-sntGesxr.js +740 -0
  94. package/dist/{shared-XNAoXhOa.js → shared-Ca6iDobD.js} +1462 -1089
  95. package/dist/{sin-EEhbrRO_.js → sin-D_h-qCSx.js} +1 -1
  96. package/dist/{softmax-B2_IKPDR.js → softmax-fsdtf6JC.js} +1 -1
  97. package/dist/{split-dcks18H1.js → split-eiktj-6L.js} +1 -1
  98. package/dist/{stack-lpJ5kYvE.js → stack-dfEEz2OY.js} +2 -2
  99. package/dist/{sum-CutF5lj2.js → sum-BE_Irnim.js} +1 -1
  100. package/dist/{tensor-C15NA2LA.js → tensor-Xyi595sG.js} +1 -1
  101. package/dist/{tensor2d-DZ_e5eKM.js → tensor2d-CPEkynbH.js} +1 -1
  102. package/dist/training/AdamExt.js +1 -1
  103. package/dist/training/DatasetBuilder.js +2 -2
  104. package/dist/training/FullTrainer.js +1 -1
  105. package/dist/training/Trainer.js +3 -3
  106. package/dist/training/sparseCrossEntropy.js +5 -5
  107. package/dist/utilities/dummy.d.ts +6 -0
  108. package/dist/utilities/dummy.js +31 -10
  109. package/dist/utilities/generate.js +3 -3
  110. package/dist/utilities/profile.d.ts +5 -0
  111. package/dist/utilities/profile.js +10 -7
  112. package/dist/utilities/safetensors.js +2 -2
  113. package/dist/utilities/save.js +1 -1
  114. package/dist/utilities/weights.js +2 -2
  115. package/dist/{variable-CdRKKp8x.js → variable-wSS22xj5.js} +1 -1
  116. package/dist/{zeros-CAbHfODe.js → zeros-YJDE7oRb.js} +4 -4
  117. package/package.json +2 -8
  118. package/dist/Reshape-CLOrdpve.js +0 -212
  119. package/dist/slice_util-Ddk0uxGJ.js +0 -49
  120. package/dist/tfjs_backend-BDb8r9qx.js +0 -1010
  121. package/dist/utilities/load.js +0 -99
@@ -1,4 +1,4 @@
1
- import { r as n, t as M } from "../../index-bMBtI-WR.js";
1
+ import { r as n, t as M } from "../../index-BAzbokzv.js";
2
2
  function e(t) {
3
3
  const { inputs: r, attrs: o } = t, { transposeA: s, transposeB: l } = o, { x: c, kernel: u, y: a } = r, m = c, i = u, k = a;
4
4
  return M(() => m.matMul(i, s, l).mul(k));
@@ -1,4 +1,4 @@
1
- import { r as e, b as u } from "../../index-bMBtI-WR.js";
1
+ import { r as e, a as u } from "../../index-BAzbokzv.js";
2
2
  function n(o) {
3
3
  const { inputs: r } = o, { a: l, b: t } = r;
4
4
  return console.warn("Using fallback mulDrop implementation without dropout."), u(l, t);
@@ -1,4 +1,4 @@
1
- import { r as o, t as d } from "../../index-bMBtI-WR.js";
1
+ import { r as o, t as d } from "../../index-BAzbokzv.js";
2
2
  function i(t) {
3
3
  const { inputs: e } = t, { x: n, gamma: s } = e, r = n, a = s;
4
4
  return d(() => {
@@ -1,6 +1,6 @@
1
- import { r as q } from "../../index-bMBtI-WR.js";
2
- import { r as o } from "../../reshape-T4yDEqoF.js";
3
- import { s as x } from "../../split-dcks18H1.js";
1
+ import { r as q } from "../../index-BAzbokzv.js";
2
+ import { r as o } from "../../reshape-krWGKraP.js";
3
+ import { s as x } from "../../split-eiktj-6L.js";
4
4
  function v(p) {
5
5
  const { x: c, kernel: K } = p.inputs, { heads: n } = p.attrs, [s, e, t] = c.shape, a = o(c, [s * e, t]), i = a.dot(K);
6
6
  a.dispose();
@@ -1,8 +1,8 @@
1
- import { r as S } from "../../index-bMBtI-WR.js";
2
- import { r as F } from "../../range-DMaG9A3G.js";
3
- import { g as I } from "../../gather-DZCMHZuN.js";
4
- import { s as E } from "../../stack-lpJ5kYvE.js";
5
- import { c as T } from "../../concat-DhZfF1GY.js";
1
+ import { r as S } from "../../index-BAzbokzv.js";
2
+ import { r as F } from "../../range-DYsrnfiy.js";
3
+ import { g as I } from "../../gather-DjyCjmOD.js";
4
+ import { s as E } from "../../stack-dfEEz2OY.js";
5
+ import { c as T } from "../../concat-5aPGqw3Z.js";
6
6
  function U(t, c, p, o, r) {
7
7
  const n = o.shape[3], s = p;
8
8
  if (s > n) return o;
@@ -1,39 +1,8 @@
1
- import { o as l, n as g, j as h, E as k, a5 as w, r as $, s as d, b as m } from "../../index-bMBtI-WR.js";
2
- import { r as b } from "../../range-DMaG9A3G.js";
3
- import { s as E } from "../../stack-lpJ5kYvE.js";
4
- import { o as D } from "../../ones-g0K8jVwm.js";
5
- function N(a, r, t) {
6
- const s = r.rank > 1 ? r.shape[r.rank - 1] : 1, e = r.rank > 1 ? r.rank - 1 : 1, o = `Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${t.shape}, indices.shape: ${r.shape}, shape: ${a}, sliceDim: ${s}, and batchDim: ${e}.`;
7
- if (t.rank < e)
8
- throw new Error(o + ` update.rank < ${e}. `);
9
- if (a.length < s + (t.rank - e))
10
- throw new Error(o + ` Output shape length < ${s + (t.rank - e)}`);
11
- if (t.rank !== e + a.length - s)
12
- throw new Error(o + ` update.rank != ${e + a.length - s}`);
13
- for (let n = 0; n < e; ++n)
14
- if (t.shape[n] !== r.shape[n])
15
- throw new Error(o + ` updates.shape[${n}] (${t.shape[n]}) != indices.shape[${n}] (${r.shape[n]}).`);
16
- for (let n = 0; n < t.rank - e; ++n)
17
- if (t.shape[n + e] !== a[n + s])
18
- throw new Error(o + ` updates.shape[${n + e}] (${t.shape[n + e]}) != shape[${n + e}] (${a[n + e]})`);
19
- }
20
- function S(a, r, t) {
21
- if (r.rank < 1)
22
- throw new Error(`tf.scatterND() expects the indices to be rank 1 or higher, but the rank was ${r.rank}.`);
23
- if (a.rank < 1)
24
- throw new Error(`tf.scatterND() expects the updates to be rank 1 or higher, but the rank was ${a.rank}.`);
25
- if (r.dtype !== "int32")
26
- throw new Error(`The dtype of 'indices' should be int32, but got dtype: ${r.dtype}`);
27
- if (t.length < 1)
28
- throw new Error(`Output rank must be greater or equal to 1, but got shape: ${t}`);
29
- if (t.length === 0) {
30
- if (r.size === 0)
31
- throw new Error(`Indices specified for empty output. indices shape: ${r.shape}`);
32
- if (a.size === 0)
33
- throw new Error(`Updates specified for empty output. updates shape: ${a.shape}`);
34
- }
35
- N(t, r, a);
36
- }
1
+ import { o as f, x as g, q as r, E as l, X as N, r as b, b as S, a as h } from "../../index-BAzbokzv.js";
2
+ import { v as D } from "../../scatter_nd_util-93ln7Hut.js";
3
+ import { r as k } from "../../range-DYsrnfiy.js";
4
+ import { s as v } from "../../stack-dfEEz2OY.js";
5
+ import { o as E } from "../../ones-BBlSRqn1.js";
37
6
  /**
38
7
  * @license
39
8
  * Copyright 2018 Google LLC. All Rights Reserved.
@@ -50,21 +19,21 @@ function S(a, r, t) {
50
19
  * limitations under the License.
51
20
  * =============================================================================
52
21
  */
53
- function y(a, r, t) {
54
- g(t);
55
- const s = h(a, "indices", "scatterND", "int32"), e = h(r, "updates", "scatterND");
56
- S(e, s, t);
57
- const o = { indices: s, updates: e }, n = { shape: t };
58
- return k.runKernel(w, o, n);
22
+ function I(a, e, s) {
23
+ g(s);
24
+ const n = r(a, "indices", "scatterND", "int32"), t = r(e, "updates", "scatterND");
25
+ D(t, n, s);
26
+ const c = { indices: n, updates: t }, o = { shape: s };
27
+ return l.runKernel(N, c, o);
59
28
  }
60
- const v = /* @__PURE__ */ l({ scatterND_: y });
61
- function I(a) {
62
- const { logits: r, labels: t, dy: s } = a.inputs, e = t.shape[0], o = r.shape[1], n = b(0, e, 1, "int32"), i = E([n, t], 1), c = D([e]), p = v(i, c, [e, o]), f = d(r, p), u = s.reshape([e, 1]);
63
- return m(f, u);
29
+ const K = /* @__PURE__ */ f({ scatterND_: I });
30
+ function L(a) {
31
+ const { logits: e, labels: s, dy: n } = a.inputs, t = s.shape[0], c = e.shape[1], o = k(0, t, 1, "int32"), i = v([o, s], 1), d = E([t]), u = K(i, d, [t, c]), p = S(e, u), m = n.reshape([t, 1]);
32
+ return h(p, m);
64
33
  }
65
34
  const T = {
66
35
  kernelName: "EfficientScatterSub",
67
36
  backendName: "cpu",
68
- kernelFunc: I
37
+ kernelFunc: L
69
38
  };
70
- $(T);
39
+ b(T);
@@ -1,4 +1,4 @@
1
- import { e as t } from "../index-bMBtI-WR.js";
1
+ import { e as t } from "../index-BAzbokzv.js";
2
2
  import "./cpu/fusedSoftmax.js";
3
3
  import "./webgl/fusedSoftmax.js";
4
4
  import "./grads/fusedSoftmax.js";
@@ -1,4 +1,4 @@
1
- import { e as n } from "../index-bMBtI-WR.js";
1
+ import { e as n } from "../index-BAzbokzv.js";
2
2
  import "./cpu/gatherSub.js";
3
3
  import "./webgl/gatherSub.js";
4
4
  function f(r, e, t) {
package/dist/ops/gelu.js CHANGED
@@ -1,4 +1,4 @@
1
- import "../index-bMBtI-WR.js";
1
+ import "../index-BAzbokzv.js";
2
2
  import "./cpu/gelu.js";
3
3
  import "./webgl/gelu.js";
4
4
  import { d as e, g as i } from "./grads/gelu.js";
@@ -1,4 +1,4 @@
1
- import { h as m, f as i } from "../../index-bMBtI-WR.js";
1
+ import { c as m, s as i } from "../../index-BAzbokzv.js";
2
2
  import { matMulMul as u } from "../matMulMul.js";
3
3
  const p = {
4
4
  kernelName: "AttentionMask",
@@ -1,14 +1,14 @@
1
- import { h as f, b as i, s as l } from "../../index-bMBtI-WR.js";
1
+ import { c as f, a as i, b as l } from "../../index-BAzbokzv.js";
2
2
  import { mulDrop as g } from "../mulDrop.js";
3
- import { s as T } from "../../sum-CutF5lj2.js";
3
+ import { s as T } from "../../sum-BE_Irnim.js";
4
4
  const Y = {
5
5
  kernelName: "FusedSoftmax",
6
6
  outputsToSave: [!0],
7
7
  gradFunc: (o, n, a) => {
8
- const [s] = n, { dim: p, dropoutRate: t, seed: e } = a, c = !0, r = t && e ? g(o, s, t, e) : i(o, s);
8
+ const [s] = n, { dim: c, dropoutRate: t, seed: e } = a, p = !0, r = t && e ? g(o, s, t, e) : i(o, s);
9
9
  return {
10
10
  logits: () => {
11
- const m = T(r, [p], c), u = i(m, s);
11
+ const m = T(r, [c], p), u = i(m, s);
12
12
  m.dispose();
13
13
  const d = l(r, u);
14
14
  return u.dispose(), d;
@@ -1,4 +1,4 @@
1
- import { h as t, e as n } from "../../index-bMBtI-WR.js";
1
+ import { c as t, e as n } from "../../index-BAzbokzv.js";
2
2
  import "../cpu/gelu.js";
3
3
  import "../webgl/gelu.js";
4
4
  const o = {
@@ -1,4 +1,4 @@
1
- import { h as a, e as o } from "../../index-bMBtI-WR.js";
1
+ import { c as a, e as o } from "../../index-BAzbokzv.js";
2
2
  function s(e, n, r) {
3
3
  return o().runKernel("MatMulGeluGrad", { dy: e, x: n, kernel: r });
4
4
  }
@@ -1,4 +1,4 @@
1
- import { h as t, e as g } from "../../index-bMBtI-WR.js";
1
+ import { c as t, e as g } from "../../index-BAzbokzv.js";
2
2
  function s(r, a, n) {
3
3
  return g().runKernel("RMSNormGrad", { dy: r, x: a, gamma: n });
4
4
  }
@@ -1,4 +1,4 @@
1
- import { h as Q } from "../../index-bMBtI-WR.js";
1
+ import { c as Q } from "../../index-BAzbokzv.js";
2
2
  const V = {
3
3
  kernelName: "QKV",
4
4
  inputsToSave: ["x", "kernel"],
@@ -1,4 +1,4 @@
1
- import { h as a, e as i } from "../../index-bMBtI-WR.js";
1
+ import { c as a, e as i } from "../../index-BAzbokzv.js";
2
2
  function p(n, e, s, o) {
3
3
  return i().runKernel("Rope", { x: n, sin: e, cos: s }, { pastLen: o });
4
4
  }
@@ -1,4 +1,4 @@
1
- import { e as u } from "../index-bMBtI-WR.js";
1
+ import { e as u } from "../index-BAzbokzv.js";
2
2
  import "./cpu/matMulGelu.js";
3
3
  import "./webgl/matMulGelu.js";
4
4
  import "./grads/matMulGelu.js";
@@ -1,4 +1,4 @@
1
- import { e as u } from "../index-bMBtI-WR.js";
1
+ import { e as u } from "../index-BAzbokzv.js";
2
2
  import "./cpu/matMulMul.js";
3
3
  import "./webgl/matMulMul.js";
4
4
  function m(e, r, t, l = !1, n = !1) {
@@ -1,4 +1,4 @@
1
- import { e as t } from "../index-bMBtI-WR.js";
1
+ import { e as t } from "../index-BAzbokzv.js";
2
2
  import "./cpu/mulDropout.js";
3
3
  import "./webgl/mulDropout.js";
4
4
  function m(r, o, e, n) {
@@ -1,4 +1,4 @@
1
- import { r as o } from "../../index-bMBtI-WR.js";
1
+ import { r as o } from "../../index-BAzbokzv.js";
2
2
  function r(e) {
3
3
  const { logits: t, labels: n } = e.inputs;
4
4
  return e.backend.executeMultipleOutputs("SparseSoftmaxCrossEntropyWithLogits", [], [t, n], 2);
@@ -1,4 +1,4 @@
1
- import { e as n } from "../index-bMBtI-WR.js";
1
+ import { e as n } from "../index-BAzbokzv.js";
2
2
  import "./cpu/normRMS.js";
3
3
  import "./webgl/normRMS.js";
4
4
  import "./grads/normRMS.js";
package/dist/ops/qkv.js CHANGED
@@ -1,4 +1,4 @@
1
- import { e as o } from "../index-bMBtI-WR.js";
1
+ import { e as o } from "../index-BAzbokzv.js";
2
2
  import "./cpu/qkv.js";
3
3
  import "./webgl/qkv.js";
4
4
  import "./grads/qkv.js";
package/dist/ops/rope.js CHANGED
@@ -1,10 +1,14 @@
1
- import { engine as n } from "@tensorflow/tfjs";
1
+ import { e as p } from "../index-BAzbokzv.js";
2
+ import "../random_width-DWzaOgrn.js";
3
+ import "../register_all_kernels-BfFCQAqs.js";
4
+ import "../index-Tf7vU29b.js";
5
+ import "../dataset-pgqp-YfL.js";
2
6
  import "./cpu/rope.js";
3
7
  import "./webgl/rope.js";
4
8
  import "./grads/rope.js";
5
- function s(o, e, r) {
6
- return e.ensureRopeCache(o.shape[1] + r), n().runKernel("Rope", { x: o, sin: e.getSin(), cos: e.getCos() }, { pastLen: r });
9
+ function C(r, o, e) {
10
+ return o.ensureRopeCache(r.shape[1] + e), p().runKernel("Rope", { x: r, sin: o.getSin(), cos: o.getCos() }, { pastLen: e });
7
11
  }
8
12
  export {
9
- s as rope
13
+ C as rope
10
14
  };
@@ -1,4 +1,4 @@
1
- import { e as i } from "../index-bMBtI-WR.js";
1
+ import { e as i } from "../index-BAzbokzv.js";
2
2
  import "./cpu/scatterSub.js";
3
3
  import "./webgl/scatterSub.js";
4
4
  function c(t, r, e) {
@@ -1,4 +1,4 @@
1
- import { r as p } from "../../index-bMBtI-WR.js";
1
+ import { r as p } from "../../index-BAzbokzv.js";
2
2
  class m {
3
3
  variableNames = ["cache", "item"];
4
4
  outputShape;
@@ -1,4 +1,4 @@
1
- import { r as m } from "../../index-bMBtI-WR.js";
1
+ import { r as m } from "../../index-BAzbokzv.js";
2
2
  class h {
3
3
  variableNames = ["q", "k"];
4
4
  outputShape;