Uploaded using `kernel-builder`.

#2
by kernels-bot - opened
Files changed (35) hide show
  1. README.md +30 -0
  2. build/torch210-metal-aarch64-darwin/__init__.py +98 -0
  3. build/torch210-metal-aarch64-darwin/_ggml_quantization_metal_fe2bb66.abi3.so +3 -0
  4. build/torch210-metal-aarch64-darwin/_ops.py +9 -0
  5. build/torch210-metal-aarch64-darwin/metadata.json +32 -0
  6. build/torch210-metal-aarch64-darwin/metadata.json.sigstore +1 -0
  7. build/torch210-metal-aarch64-darwin/symbols.json +169 -0
  8. build/torch211-metal-aarch64-darwin/__init__.py +98 -0
  9. build/torch211-metal-aarch64-darwin/_ggml_quantization_metal_fe2bb66.abi3.so +3 -0
  10. build/torch211-metal-aarch64-darwin/_ops.py +9 -0
  11. build/torch211-metal-aarch64-darwin/metadata.json +32 -0
  12. build/torch211-metal-aarch64-darwin/metadata.json.sigstore +1 -0
  13. build/torch211-metal-aarch64-darwin/symbols.json +169 -0
  14. build/torch212-metal-aarch64-darwin/{_ggml_quantization_metal_63f3c1e.abi3.so → _ggml_quantization_metal_fe2bb66.abi3.so} +1 -1
  15. build/torch212-metal-aarch64-darwin/_ops.py +3 -3
  16. build/torch212-metal-aarch64-darwin/metadata.json +9 -6
  17. build/torch212-metal-aarch64-darwin/metadata.json.sigstore +1 -1
  18. build/torch212-metal-aarch64-darwin/symbols.json +169 -0
  19. build/torch213-metal-aarch64-darwin/{_ggml_quantization_metal_63f3c1e.abi3.so → _ggml_quantization_metal_fe2bb66.abi3.so} +1 -1
  20. build/torch213-metal-aarch64-darwin/_ops.py +3 -3
  21. build/torch213-metal-aarch64-darwin/metadata.json +9 -6
  22. build/torch213-metal-aarch64-darwin/metadata.json.sigstore +1 -1
  23. build/torch213-metal-aarch64-darwin/symbols.json +169 -0
  24. build/torch214-metal-aarch64-darwin/__init__.py +98 -0
  25. build/torch214-metal-aarch64-darwin/_ggml_quantization_metal_fe2bb66.abi3.so +3 -0
  26. build/torch214-metal-aarch64-darwin/_ops.py +9 -0
  27. build/torch214-metal-aarch64-darwin/metadata.json +32 -0
  28. build/torch214-metal-aarch64-darwin/metadata.json.sigstore +1 -0
  29. build/torch214-metal-aarch64-darwin/symbols.json +169 -0
  30. build/torch215-metal-aarch64-darwin/__init__.py +98 -0
  31. build/torch215-metal-aarch64-darwin/_ggml_quantization_metal_fe2bb66.abi3.so +3 -0
  32. build/torch215-metal-aarch64-darwin/_ops.py +9 -0
  33. build/torch215-metal-aarch64-darwin/metadata.json +32 -0
  34. build/torch215-metal-aarch64-darwin/metadata.json.sigstore +1 -0
  35. build/torch215-metal-aarch64-darwin/symbols.json +169 -0
README.md ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ library_name: kernels
3
+ license: mit
4
+ ---
5
+
6
+ This is the repository card of ggml-org/ggml-quantization that has been pushed on the Hub. It was built to be used with the [`kernels` library](https://github.com/huggingface/kernels). This card was automatically generated.
7
+
8
+ ## How to use
9
+
10
+ ```python
11
+ # make sure `kernels` is installed: `pip install -U kernels`
12
+ from kernels import get_kernel
13
+
14
+ kernel_module = get_kernel("ggml-org/ggml-quantization", version=1)
15
+ GEMV_TYPES = kernel_module.GEMV_TYPES
16
+
17
+ GEMV_TYPES(...)
18
+ ```
19
+
20
+ ## Available functions
21
+ - `GEMV_TYPES`
22
+ - `MAX_GEMV_ROWS`
23
+ - `dequantize`
24
+ - `get_rows`
25
+ - `mul_mat_id`
26
+ - `mul_mat_vec`
27
+
28
+ ## Benchmarks
29
+
30
+ No benchmark available yet.
build/torch210-metal-aarch64-darwin/__init__.py ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Compute directly on the packed blocks of a GGUF checkpoint.
2
+
3
+ A GGUF weight is stored as blocks of 32 or 256 values sharing a scale. These kernels read that
4
+ layout as it is, so a quantized model can be loaded and run without ever materializing a dense
5
+ copy — which is the whole memory saving.
6
+
7
+ Ported from llama.cpp's ggml-cuda; `vendor/UPSTREAM` pins the revision. The ops are named for what
8
+ they do rather than for a backend: each backend registers its own implementation of the same
9
+ schema, so calls dispatch on the tensor's device.
10
+ """
11
+
12
+ import torch
13
+
14
+ from ._ops import add_op_namespace_prefix, ops
15
+
16
+
17
+ __all__ = ["GEMV_TYPES", "MAX_GEMV_ROWS", "dequantize", "get_rows", "mul_mat_id", "mul_mat_vec"]
18
+
19
+ # Upstream's MMVQ_MAX_BATCH_SIZE: `mul_mat_vec` has no implementation beyond this many rows, so a
20
+ # caller with more (prefill) dequantizes and uses an ordinary matmul.
21
+ MAX_GEMV_ROWS = 8
22
+
23
+ # ggml type ids `mul_mat_vec` implements, as this build reports them -- it is backend-specific, and
24
+ # a type routed into a gemv that has no kernel for it is a fault, not a fallback. CUDA covers
25
+ # Q4_0/Q4_1/Q5_0/Q5_1/Q8_0, the K quants, the IQ quants, MXFP4/NVFP4 and Q1_0/Q2_0; Metal is the
26
+ # same minus NVFP4/Q1_0/Q2_0, which its metallib has no kernels for. `dequantize` covers more, so
27
+ # check this before choosing the fused path.
28
+ try:
29
+ GEMV_TYPES = frozenset(ops.gemv_types())
30
+ except AttributeError:
31
+ # A build published before `gemv_types` existed; those are CUDA-only, so its list is theirs.
32
+ GEMV_TYPES = frozenset({2, 3, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 29, 39, 40, 41, 42})
33
+
34
+
35
+ def get_rows(
36
+ blocks: torch.Tensor, indices: torch.Tensor, ggml_type: int, cols: int, dtype: torch.dtype
37
+ ) -> torch.Tensor:
38
+ """The rows `indices` names, unpacked: `(rows, bytes_per_row)` uint8 -> `(len(indices), cols)`.
39
+
40
+ ggml's `get_rows`, which dequantizes as it gathers -- so reading a few rows out of a large table
41
+ never touches the rest.
42
+ """
43
+ return ops.get_rows(blocks, indices, ggml_type, cols, dtype)
44
+
45
+
46
+ def dequantize(
47
+ blocks: torch.Tensor, ggml_type: int, rows: int, cols: int, dtype: torch.dtype
48
+ ) -> torch.Tensor:
49
+ """`(rows, bytes_per_row)` uint8 blocks -> `(rows, cols)` values of `dtype`."""
50
+ return ops.dequantize(blocks, ggml_type, rows, cols, dtype)
51
+
52
+
53
+ def mul_mat_vec(
54
+ blocks: torch.Tensor, x: torch.Tensor, ggml_type: int, out_features: int
55
+ ) -> torch.Tensor:
56
+ """Fused dequantize-gemv: `x @ blocks.T` without unpacking `blocks`.
57
+
58
+ `x` is `(rows, in_features)` and `rows` must be at most `MAX_GEMV_ROWS`. The result is f32
59
+ whatever `x`'s dtype was, since the kernel writes an f32 destination; cast it at the call site,
60
+ where the cast can be fused into whatever consumes it.
61
+ """
62
+ return ops.mul_mat_vec(blocks, x, ggml_type, out_features)
63
+
64
+
65
+ def mul_mat_id(
66
+ blocks: torch.Tensor, x: torch.Tensor, ids: torch.Tensor, ggml_type: int, out_features: int
67
+ ) -> torch.Tensor:
68
+ """One dispatch for a bank of routed experts: ggml's `mul_mv_id`.
69
+
70
+ `blocks` is `(n_experts, out_features, bytes_per_row)`, `x` is `(n_tokens, in_features)`, and
71
+ `ids` is `(n_tokens, n_used)` naming the expert each of a token's slots picked. The result is
72
+ `(n_tokens, n_used, out_features)` f32, one row per slot.
73
+
74
+ The alternative is a gemv per expert per layer, whose arithmetic is dwarfed by the dispatch
75
+ around it -- which is most of what a MoE decode step costs.
76
+ """
77
+ return ops.mul_mat_id(blocks, x, ids, ggml_type, out_features)
78
+
79
+
80
+ # Without these, torch.compile cannot trace the ops and breaks the graph at every call.
81
+ @torch.library.register_fake(add_op_namespace_prefix("get_rows"))
82
+ def _get_rows_fake(blocks, indices, ggml_type, cols, dtype):
83
+ return blocks.new_empty((indices.numel(), cols), dtype=dtype)
84
+
85
+
86
+ @torch.library.register_fake(add_op_namespace_prefix("dequantize"))
87
+ def _dequantize_fake(blocks, ggml_type, rows, cols, dtype):
88
+ return blocks.new_empty((rows, cols), dtype=dtype)
89
+
90
+
91
+ @torch.library.register_fake(add_op_namespace_prefix("mul_mat_vec"))
92
+ def _mul_mat_vec_fake(blocks, x, ggml_type, out_features):
93
+ return x.new_empty((x.shape[0], out_features), dtype=torch.float32)
94
+
95
+
96
+ @torch.library.register_fake(add_op_namespace_prefix("mul_mat_id"))
97
+ def _mul_mat_id_fake(blocks, x, ids, ggml_type, out_features):
98
+ return x.new_empty((x.shape[0], ids.shape[1], out_features), dtype=torch.float32)
build/torch210-metal-aarch64-darwin/_ggml_quantization_metal_fe2bb66.abi3.so ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:42bd13628d742f41c5a18c37d96ec02782ca1e67418ec05d0d9a3e380b6ebfe5
3
+ size 3347640
build/torch210-metal-aarch64-darwin/_ops.py ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ from . import _ggml_quantization_metal_fe2bb66
3
+ ops = torch.ops._ggml_quantization_metal_fe2bb66
4
+
5
+ def add_op_namespace_prefix(op_name: str):
6
+ """
7
+ Prefix op by namespace.
8
+ """
9
+ return f"_ggml_quantization_metal_fe2bb66::{op_name}"
build/torch210-metal-aarch64-darwin/metadata.json ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "ggml-quantization",
3
+ "id": "_ggml_quantization_metal_fe2bb66",
4
+ "version": 1,
5
+ "kernels-minver": "0.14.0",
6
+ "license": "MIT",
7
+ "python-depends": [],
8
+ "kernel-depends": [],
9
+ "backend": {
10
+ "type": "metal"
11
+ },
12
+ "digest": {
13
+ "algorithm": "sha256",
14
+ "files": {
15
+ "__init__.py": "iPXgZXBgY3CzpNUSjmCovMVNPLBol1KBaNoTzkXp5mM=",
16
+ "_ggml_quantization_metal_fe2bb66.abi3.so": "Qr0TYo10L0HFoYw32W7AJ4LKHmdBjsBdDZo+OAtuv+U=",
17
+ "_ops.py": "7JPqKK8z3jmEj5qhydHkeSXOsZMXb424/1/5MR/BZuk=",
18
+ "symbols.json": "y6E2ftRiVpYGHN9aFeGUjoXci6YSNZRswRiLbHiaxFw="
19
+ }
20
+ },
21
+ "provenance": {
22
+ "kernel-builder": {
23
+ "version": "0.18.0-dev0",
24
+ "commit": "d054906a13710b811b96697b4635f03020842733",
25
+ "dirty": false
26
+ },
27
+ "kernel": {
28
+ "commit": "fe2bb66fee6c2a77eccf08a0508dc57428d488ed",
29
+ "dirty": false
30
+ }
31
+ }
32
+ }
build/torch210-metal-aarch64-darwin/metadata.json.sigstore ADDED
@@ -0,0 +1 @@
 
 
1
+ {"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHQjCCBsigAwIBAgIUJGteEND7RIf3MLMQREiAvkKj0FIwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYxMDE5MTEwNzI4WhcNMjYxMDE5MTExNzI4WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAELvj4JhvlnMFQzEJWoXPeT7iqBAHWEVtoaNF0fKQuzBrxh1kZaCBFQozhOAWVoGEE3KWjznnRbuei7RX++3rKYqOCBecwggXjMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAfBgNVHSMEGDAWgBTf0+nPViQRlvmo2OkoVaLGLhhkPzBvBgNVHREBAf8EZTBjhmFodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvLmdpdGh1Yi93b3JrZmxvd3MvYnVpbGQtbWFjLnlhbWxAcmVmcy9oZWFkcy9tYWluMDkGCisGAQQBg78wAQEEK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wHwYKKwYBBAGDvzABAgQRd29ya2Zsb3dfZGlzcGF0Y2gwNgYKKwYBBAGDvzABAwQoZmUyYmI2NmZlZTZjMmE3N2VjY2YwOGEwNTA4ZGM1NzQyOGQ0ODhlZDAbBgorBgEEAYO/MAEEBA1CdWlsZCAobWFjT1MpMCsGCisGAQQBg78wAQUEHWh1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MB0GCisGAQQBg78wAQYED3JlZnMvaGVhZHMvbWFpbjA7BgorBgEEAYO/MAEIBC0MK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wcQYKKwYBBAGDvzABCQRjDGFodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvLmdpdGh1Yi93b3JrZmxvd3MvYnVpbGQtbWFjLnlhbWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoZmUyYmI2NmZlZTZjMmE3N2VjY2YwOGEwNTA4ZGM1NzQyOGQ0ODhlZDAdBgorBgEEAYO/MAELBA8MDWdpdGh1Yi1ob3N0ZWQwQAYKKwYBBAGDvzABDAQyDDBodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkwOAYKKwYBBAGDvzABDQQqDChmZTJiYjY2ZmVlNmMyYTc3ZWNjZjA4YTA1MDhkYzU3NDI4ZDQ4OGVkMB8GCisGAQQBg78wAQ4EEQwPcmVmcy9oZWFkcy9tYWluMBoGCisGAQQBg78wAQ8EDAwKMTA3MTQ3NTUyOTAuBgorBgEEAYO/MAEQBCAMHmh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZTAYBgorBgEEAYO/MAERBAoMCDI1NzIwNzQzMHEGCisGAQQBg78wARIEYwxhaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLW1hYy55YW1sQHJlZnMvaGVhZHMvbWFpbjA4BgorBgEEAYO/MAETBCoMKGZlMmJiNjZmZWU2YzJhNzdlY2NmMDhhMDUwOGRjNTc0MjhkNDg4ZWQwIQYKKwYBBAGDvzABFAQTDBF3b3JrZmxvd19kaXNwYXRjaDBkBgorBgEEAYO/MAEVBFYMVGh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS9hY3Rpb25zL3J1bnMvMzkyMzk1NzkyOTQvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzBGBgorBgEEAYO/MAEYBDgMNnJlcG86aHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHk6cmVmOnJlZnMvaGVhZHMvbWFpbjCBigYKKwYBBAHWeQIEAgR8BHoAeAB2AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABoVPYVRMAAAQDAEcwRQIhALbTVCunPnkDY9FSmXpWG1gfGa/ApGCrPW548v2i5/ifAiBbVIqCrZg1SgFaOYMazx2McIOI6P4Qm/MuA112kTZxujAKBggqhkjOPQQDAwNoADBlAjEAheRXkGxA1jRkXgazjW9KvCjcMKIjdJCC3xsvuhXRZ1wcF1lp1IeRLDLYswpLPuTMAjAx5Vqhe/fHugBSckfmCSRcGlSZj6OgW7pvtxsm/oRU5xm2XXiVjehnjDEHbRpuG2E="},"tlogEntries":[{"logIndex":"3320116296","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1792408049","inclusionPromise":{"signedEntryTimestamp":"MEUCIATfmBW9W5amWxsXtisaWltf1zOUNUHSum5p6UGIXffUAiEA8reyZpExem3qhtQVJshQQuUYAgHCSWyU4dRcdAlxZ04="},"inclusionProof":{"logIndex":"3198212034","rootHash":"bsflV2Q/qJGRpwHZg35KEQxZYdxZzi0dhg6Rlo+vS/A=","treeSize":"3198212035","hashes":["iXTTtHKMgDr69Y4dp0JTqDBh72uLBeGLaathRsejmks=","ccDIAPywAQxX9xqkvcUYlcGnnC3XAZDflI9KMZCNhzU=","KfLkT2WZ0QP1XrrjzReMUrJIiMnbZT/NOrjsx9C313c=","xjJ60bWZdwtADBCQagSD2HlSIhe0x2cvZDn80+Q7fP8=","adnAraSTV7w7Y/rcE+QRhgZITBmEpFvaDRUcGIXFcZs=","NvhAA1+LqtXvaowiFXcolXI/TyFO3CsufLfJu3VJv2k=","PJRsVvScXNHmqQge+wrG01cIyckZNEkkYLfYRFm0H14=","f4MktXqhBPk7ruDBxwgqTvXa7eCNzak9cUObXS0eTxI=","OlLDeTiZ1vIMDel4vGDtbNVnrFnzDe1MFV5rBN5Ep4o=","uCZQe757l2sS1c05Y7TzOwEm+X8MeGLIUCkEOmFVOz4=","nyQV/+cWQUG5Hb2PKjQQNkQIJmz2qzAZKBQlkHGIknM=","G+nk7mgE5h6dUmv2UY7NDJrY3WvrZY31raaO1AETt+o=","qlTWNDzERnTBQVcHHXXVPjiUP0SsikGxfcxVlgqVFDo=","gg9GNApNke3+zNhl4tsWtmIycCFrOMCB3lys6XuSQNQ=","NlOclldmKPA1tMKIskqHAwuQDYHp31YwpK+OOMrMccc=","qxzHanAzz57SDdmJe0B7bJK72NTIBbwEMGBBKvDOROw=","xH/DCseLHr9eKoYT8qsORZK7zVdEGYWHuVtsVrD95wY="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n3198212035\nbsflV2Q/qJGRpwHZg35KEQxZYdxZzi0dhg6Rlo+vS/A=\n\n— rekor.sigstore.dev wNI9ajBGAiEAi9eJVqJliueD25S6zIL9A8htTcxJPPVwJqp7Lrh08twCIQCn9A9EVs6PyRUwdihL8ZuK8qoTbO7ztCaF89IX+xCKqw==\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiJkYTk4OTMyNDdmMjIyNTkwMGYwZDQwY2JiZDAxZGFiNmI4NGIzOTA3YzY5NDQ1ZDE5NjBiMDlhYzQxNjY5MGM5In19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FVUNJQmw2VUpxc2FaZHp4NGMzeHA3dFUwT3pYQjlEWThOaEd1NFVvaDZLcGtVa0FpRUE4Y2NtQ2JraEZWaXRGVno5Uk44TGE3TjFWaHBpT3JTSy85ME44aEQ0MlA0PSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaFJha05EUW5OcFowRjNTVUpCWjBsVlNrZDBaVVZPUkRkU1NXWXpUVXhOVVZKRmFVRjJhMHRxTUVaSmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFplRTFFUlRWTlZFVjNUbnBKTkZkb1kwNU5hbGw0VFVSRk5VMVVSWGhPZWtrMFYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZNZG1vMFNtaDJiRzVOUmxGNlJVcFhiMWhRWlZRM2FYRkNRVWhYUlZaMGIyRk9SakFLWmt0UmRYcENjbmhvTVd0YVlVTkNSbEZ2ZW1oUFFWZFdiMGRGUlROTFYycDZibTVTWW5WbGFUZFNXQ3NyTTNKTFdYRlBRMEpsWTNkbloxaHFUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXWkNaMDVXU0ZOTlJVZEVRVmRuUWxSbUNqQXJibEJXYVZGU2JIWnRiekpQYTI5V1lVeEhUR2hvYTFCNlFuWkNaMDVXU0ZKRlFrRm1PRVZhVkVKcWFHMUdiMlJJVW5kamVtOTJUREprY0dSSGFERUtXV2sxYW1JeU1IWmhTRlp1V2pKc2RWb3lXbWhaTWxWMllUSldlV0p0Vm5OamVURnFZakl4ZEdSWE5YQmtTR3QyVEcxa2NHUkhhREZaYVRrellqTktjZ3BhYlhoMlpETk5kbGx1Vm5CaVIxRjBZbGRHYWt4dWJHaGlWM2hCWTIxV2JXTjVPVzlhVjBaclkzazVkRmxYYkhWTlJHdEhRMmx6UjBGUlVVSm5OemgzQ2tGUlJVVkxNbWd3WkVoQ2VrOXBPSFprUnpseVdsYzBkVmxYVGpCaFZ6bDFZM2sxYm1GWVVtOWtWMG94WXpKV2VWa3lPWFZrUjFaMVpFTTFhbUl5TUhjS1NIZFpTMHQzV1VKQ1FVZEVkbnBCUWtGblVWSmtNamw1WVRKYWMySXpaR1phUjJ4NlkwZEdNRmt5WjNkT1oxbExTM2RaUWtKQlIwUjJla0ZDUVhkUmJ3cGFiVlY1V1cxSk1rNXRXbXhhVkZwcVRXMUZNMDR5Vm1wWk1sbDNUMGRGZDA1VVFUUmFSMDB4VG5wUmVVOUhVVEJQUkdoc1drUkJZa0puYjNKQ1owVkZDa0ZaVHk5TlFVVkZRa0V4UTJSWGJITmFRMEZ2WWxkR2FsUXhUWEJOUTNOSFEybHpSMEZSVVVKbk56aDNRVkZWUlVoWGFERmFNbVJ3WW0xa2JWbFhUbXdLVERKMGJHTnROV3hpU0UxMFdUSTVkR0pZVm5WaFdGSTFUVUl3UjBOcGMwZEJVVkZDWnpjNGQwRlJXVVZFTTBwc1dtNU5kbUZIVm1oYVNFMTJZbGRHY0FwaWFrRTNRbWR2Y2tKblJVVkJXVTh2VFVGRlNVSkRNRTFMTW1nd1pFaENlazlwT0haa1J6bHlXbGMwZFZsWFRqQmhWemwxWTNrMWJtRllVbTlrVjBveENtTXlWbmxaTWpsMVpFZFdkV1JETldwaU1qQjNZMUZaUzB0M1dVSkNRVWRFZG5wQlFrTlJVbXBFUjBadlpFaFNkMk42YjNaTU1tUndaRWRvTVZscE5Xb0tZakl3ZG1GSVZtNWFNbXgxV2pKYWFGa3lWWFpoTWxaNVltMVdjMk41TVdwaU1qRjBaRmMxY0dSSWEzWk1iV1J3WkVkb01WbHBPVE5pTTBweVdtMTRkZ3BrTTAxMldXNVdjR0pIVVhSaVYwWnFURzVzYUdKWGVFRmpiVlp0WTNrNWIxcFhSbXRqZVRsMFdWZHNkVTFFWjBkRGFYTkhRVkZSUW1jM09IZEJVVzlGQ2t0bmQyOWFiVlY1V1cxSk1rNXRXbXhhVkZwcVRXMUZNMDR5Vm1wWk1sbDNUMGRGZDA1VVFUUmFSMDB4VG5wUmVVOUhVVEJQUkdoc1drUkJaRUpuYjNJS1FtZEZSVUZaVHk5TlFVVk1Ra0U0VFVSWFpIQmtSMmd4V1dreGIySXpUakJhVjFGM1VVRlpTMHQzV1VKQ1FVZEVkbnBCUWtSQlVYbEVSRUp2WkVoU2R3cGplbTkyVERKa2NHUkhhREZaYVRWcVlqSXdkbUZJVm01YU1teDFXakphYUZreVZYWmhNbFo1WW0xV2MyTjVNV3BpTWpGMFpGYzFjR1JJYTNkUFFWbExDa3QzV1VKQ1FVZEVkbnBCUWtSUlVYRkVRMmh0V2xSS2FWbHFXVEphYlZac1RtMU5lVmxVWXpOYVYwNXFXbXBCTkZsVVFURk5SR2hyV1hwVk0wNUVTVFFLV2tSUk5FOUhWbXROUWpoSFEybHpSMEZSVVVKbk56aDNRVkUwUlVWUmQxQmpiVlp0WTNrNWIxcFhSbXRqZVRsMFdWZHNkVTFDYjBkRGFYTkhRVkZSUWdwbk56aDNRVkU0UlVSQmQwdE5WRUV6VFZSUk0wNVVWWGxQVkVGMVFtZHZja0puUlVWQldVOHZUVUZGVVVKRFFVMUliV2d3WkVoQ2VrOXBPSFphTW13d0NtRklWbWxNYlU1MllsTTViMlJYWkc1aFZ6VnVXbTFHYWxwVVFWbENaMjl5UW1kRlJVRlpUeTlOUVVWU1FrRnZUVU5FU1RGT2VrbDNUbnBSZWsxSVJVY0tRMmx6UjBGUlVVSm5OemgzUVZKSlJWbDNlR2hoU0ZJd1kwaE5Oa3g1T1c1aFdGSnZaRmRKZFZreU9YUk1NbWd4V2pKa2NHSnRaRzFaVjA1c1RESjBiQXBqYlRWc1lraE5kRmt5T1hSaVdGWjFZVmhTTlV4NU5XNWhXRkp2WkZkSmRtUXlPWGxoTWxwellqTmtla3d5U2pGaFYzaHJURmN4YUZsNU5UVlpWekZ6Q2xGSVNteGFiazEyWVVkV2FGcElUWFppVjBad1ltcEJORUpuYjNKQ1owVkZRVmxQTDAxQlJWUkNRMjlOUzBkYWJFMXRTbWxPYWxwdFdsZFZNbGw2U21nS1RucGtiRmt5VG0xTlJHaG9UVVJWZDA5SFVtcE9WR013VFdwb2EwNUVaelJhVjFGM1NWRlpTMHQzV1VKQ1FVZEVkbnBCUWtaQlVWUkVRa1l6WWpOS2NncGFiWGgyWkRFNWEyRllUbmRaV0ZKcVlVUkNhMEpuYjNKQ1owVkZRVmxQTDAxQlJWWkNSbGxOVmtkb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJDbUpUT1c5a1YyUnVZVmMxYmxwdFJtcGFVemx5V2xoS2RWcFhlSHBNVjA1MllsY3hNV0p0YkRCbFV6bG9XVE5TY0dJeU5YcE1NMG94WW01TmRrMTZhM2tLVFhwck1VNTZhM2xQVkZGMldWaFNNRnBYTVhka1NFMTJUVlJCVjBKbmIzSkNaMFZGUVZsUEwwMUJSVmRDUVdkTlFtNUNNVmx0ZUhCWmVrSkhRbWR2Y2dwQ1owVkZRVmxQTDAxQlJWbENSR2ROVG01S2JHTkhPRFpoU0ZadVdqSnNkVm95V21oWk1sVjJZVEpXZVdKdFZuTmplVEZxWWpJeGRHUlhOWEJrU0dzMkNtTnRWbTFQYmtwc1dtNU5kbUZIVm1oYVNFMTJZbGRHY0dKcVEwSnBaMWxMUzNkWlFrSkJTRmRsVVVsRlFXZFNPRUpJYjBGbFFVSXlRVTR3T1UxSGNrY0tlSGhGZVZsNGEyVklTbXh1VG5kTGFWTnNOalF6YW5sMEx6UmxTMk52UVhaTFpUWlBRVUZCUW05V1VGbFdVazFCUVVGUlJFRkZZM2RTVVVsb1FVeGlWQXBXUTNWdVVHNXJSRms1UmxOdFdIQlhSekZuWmtkaEwwRndSME55VUZjMU5EaDJNbWsxTDJsbVFXbENZbFpKY1VOeVdtY3hVMmRHWVU5WlRXRjZlREpOQ21OSlQwazJVRFJSYlM5TmRVRXhNVEpyVkZwNGRXcEJTMEpuWjNGb2EycFBVRkZSUkVGM1RtOUJSRUpzUVdwRlFXaGxVbGhyUjNoQk1XcFNhMWhuWVhvS2FsYzVTM1pEYW1OTlMwbHFaRXBEUXpONGMzWjFhRmhTV2pGM1kwWXhiSEF4U1dWU1RFUk1XWE4zY0V4UWRWUk5RV3BCZURWV2NXaGxMMlpJZFdkQ1V3cGphMlp0UTFOU1kwZHNVMXBxTms5blZ6ZHdkblI0YzIwdmIxSlZOWGh0TWxoWWFWWnFaV2h1YWtSRlNHSlNjSFZITWtVOUNpMHRMUzB0UlU1RUlFTkZVbFJKUmtsRFFWUkZMUzB0TFMwSyJ9fX19"}],"timestampVerificationData":{"rfc3161Timestamps":[{"signedTimestamp":"MIICyzADAgEAMIICwgYJKoZIhvcNAQcCoIICszCCAq8CAQMxDTALBglghkgBZQMEAgEwgbgGCyqGSIb3DQEJEAEEoIGoBIGlMIGiAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQgywumrSzZA8MFG3HuDhUE1DZDxLIyHy9MsebUTysGG3sCFQDe31oxNwc0Ms1l21aYsR7lvd4lcBgPMjAyNjEwMTkxMTA3MjlaMAMCAQGgMqQwMC4xFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEVMBMGA1UEAxMMc2lnc3RvcmUtdHNhoAAxggHcMIIB2AIBATBRMDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAsGCWCGSAFlAwQCAaCB/DAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTI2MTAxOTExMDcyOVowLwYJKoZIhvcNAQkEMSIEIOYUjjzS+ah1CVOOLlISfZCTqcgdRiYpiALqgB4XiPB1MIGOBgsqhkiG9w0BCRACLzF/MH0wezB5BCCF+Se8B6tiysO0Q1bBDvyBssaIP9p6uebYcNnROs0FtzBVMD2kOzA5MRUwEwYDVQQKEwxzaWdzdG9yZS5kZXYxIDAeBgNVBAMTF3NpZ3N0b3JlLXRzYS1zZWxmc2lnbmVkAhQ6E1QvDJBh7rzBQy/Lio6LKiOLDDAKBggqhkjOPQQDAgRoMGYCMQDBdDkCQMn9KQE95la/TeC2MxcyfnH8s7hF53WAwKUfkY6uwUmziUx/3KLORD0m+vUCMQC7l6wvVRpIm3015meML3DDb6HXX66wlz1cnKaXDojuiJB3nWq3EiLx/gAOLDdq0JA="}]}},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"2piTJH8iJZAPDUDLvQHatrhLOQfGlEXRlgsJrEFmkMk="},"signature":"MEUCIBl6UJqsaZdzx4c3xp7tU0OzXB9DY8NhGu4Uoh6KpkUkAiEA8ccmCbkhFVitFVz9RN8La7N1VhpiOrSK/90N8hD42P4="}}
build/torch210-metal-aarch64-darwin/symbols.json ADDED
@@ -0,0 +1,169 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema_version": 1,
3
+ "module": "_ggml_quantization_metal_fe2bb66",
4
+ "functions": [
5
+ {
6
+ "name": "dequantize",
7
+ "qualname": "dequantize",
8
+ "module": "_ggml_quantization_metal_fe2bb66",
9
+ "kind": "function",
10
+ "doc": "`(rows, bytes_per_row)` uint8 blocks -> `(rows, cols)` values of `dtype`.",
11
+ "signature": {
12
+ "parameters": [
13
+ {
14
+ "name": "blocks",
15
+ "kind": "POSITIONAL_OR_KEYWORD",
16
+ "default": null,
17
+ "annotation": "torch.Tensor"
18
+ },
19
+ {
20
+ "name": "ggml_type",
21
+ "kind": "POSITIONAL_OR_KEYWORD",
22
+ "default": null,
23
+ "annotation": "int"
24
+ },
25
+ {
26
+ "name": "rows",
27
+ "kind": "POSITIONAL_OR_KEYWORD",
28
+ "default": null,
29
+ "annotation": "int"
30
+ },
31
+ {
32
+ "name": "cols",
33
+ "kind": "POSITIONAL_OR_KEYWORD",
34
+ "default": null,
35
+ "annotation": "int"
36
+ },
37
+ {
38
+ "name": "dtype",
39
+ "kind": "POSITIONAL_OR_KEYWORD",
40
+ "default": null,
41
+ "annotation": "torch.dtype"
42
+ }
43
+ ],
44
+ "return_annotation": "torch.Tensor"
45
+ }
46
+ },
47
+ {
48
+ "name": "get_rows",
49
+ "qualname": "get_rows",
50
+ "module": "_ggml_quantization_metal_fe2bb66",
51
+ "kind": "function",
52
+ "doc": "The rows `indices` names, unpacked: `(rows, bytes_per_row)` uint8 -> `(len(indices), cols)`.\n\nggml's `get_rows`, which dequantizes as it gathers -- so reading a few rows out of a large table\nnever touches the rest.",
53
+ "signature": {
54
+ "parameters": [
55
+ {
56
+ "name": "blocks",
57
+ "kind": "POSITIONAL_OR_KEYWORD",
58
+ "default": null,
59
+ "annotation": "torch.Tensor"
60
+ },
61
+ {
62
+ "name": "indices",
63
+ "kind": "POSITIONAL_OR_KEYWORD",
64
+ "default": null,
65
+ "annotation": "torch.Tensor"
66
+ },
67
+ {
68
+ "name": "ggml_type",
69
+ "kind": "POSITIONAL_OR_KEYWORD",
70
+ "default": null,
71
+ "annotation": "int"
72
+ },
73
+ {
74
+ "name": "cols",
75
+ "kind": "POSITIONAL_OR_KEYWORD",
76
+ "default": null,
77
+ "annotation": "int"
78
+ },
79
+ {
80
+ "name": "dtype",
81
+ "kind": "POSITIONAL_OR_KEYWORD",
82
+ "default": null,
83
+ "annotation": "torch.dtype"
84
+ }
85
+ ],
86
+ "return_annotation": "torch.Tensor"
87
+ }
88
+ },
89
+ {
90
+ "name": "mul_mat_id",
91
+ "qualname": "mul_mat_id",
92
+ "module": "_ggml_quantization_metal_fe2bb66",
93
+ "kind": "function",
94
+ "doc": "One dispatch for a bank of routed experts: ggml's `mul_mv_id`.\n\n`blocks` is `(n_experts, out_features, bytes_per_row)`, `x` is `(n_tokens, in_features)`, and\n`ids` is `(n_tokens, n_used)` naming the expert each of a token's slots picked. The result is\n`(n_tokens, n_used, out_features)` f32, one row per slot.\n\nThe alternative is a gemv per expert per layer, whose arithmetic is dwarfed by the dispatch\naround it -- which is most of what a MoE decode step costs.",
95
+ "signature": {
96
+ "parameters": [
97
+ {
98
+ "name": "blocks",
99
+ "kind": "POSITIONAL_OR_KEYWORD",
100
+ "default": null,
101
+ "annotation": "torch.Tensor"
102
+ },
103
+ {
104
+ "name": "x",
105
+ "kind": "POSITIONAL_OR_KEYWORD",
106
+ "default": null,
107
+ "annotation": "torch.Tensor"
108
+ },
109
+ {
110
+ "name": "ids",
111
+ "kind": "POSITIONAL_OR_KEYWORD",
112
+ "default": null,
113
+ "annotation": "torch.Tensor"
114
+ },
115
+ {
116
+ "name": "ggml_type",
117
+ "kind": "POSITIONAL_OR_KEYWORD",
118
+ "default": null,
119
+ "annotation": "int"
120
+ },
121
+ {
122
+ "name": "out_features",
123
+ "kind": "POSITIONAL_OR_KEYWORD",
124
+ "default": null,
125
+ "annotation": "int"
126
+ }
127
+ ],
128
+ "return_annotation": "torch.Tensor"
129
+ }
130
+ },
131
+ {
132
+ "name": "mul_mat_vec",
133
+ "qualname": "mul_mat_vec",
134
+ "module": "_ggml_quantization_metal_fe2bb66",
135
+ "kind": "function",
136
+ "doc": "Fused dequantize-gemv: `x @ blocks.T` without unpacking `blocks`.\n\n`x` is `(rows, in_features)` and `rows` must be at most `MAX_GEMV_ROWS`. The result is f32\nwhatever `x`'s dtype was, since the kernel writes an f32 destination; cast it at the call site,\nwhere the cast can be fused into whatever consumes it.",
137
+ "signature": {
138
+ "parameters": [
139
+ {
140
+ "name": "blocks",
141
+ "kind": "POSITIONAL_OR_KEYWORD",
142
+ "default": null,
143
+ "annotation": "torch.Tensor"
144
+ },
145
+ {
146
+ "name": "x",
147
+ "kind": "POSITIONAL_OR_KEYWORD",
148
+ "default": null,
149
+ "annotation": "torch.Tensor"
150
+ },
151
+ {
152
+ "name": "ggml_type",
153
+ "kind": "POSITIONAL_OR_KEYWORD",
154
+ "default": null,
155
+ "annotation": "int"
156
+ },
157
+ {
158
+ "name": "out_features",
159
+ "kind": "POSITIONAL_OR_KEYWORD",
160
+ "default": null,
161
+ "annotation": "int"
162
+ }
163
+ ],
164
+ "return_annotation": "torch.Tensor"
165
+ }
166
+ }
167
+ ],
168
+ "layers": []
169
+ }
build/torch211-metal-aarch64-darwin/__init__.py ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Compute directly on the packed blocks of a GGUF checkpoint.
2
+
3
+ A GGUF weight is stored as blocks of 32 or 256 values sharing a scale. These kernels read that
4
+ layout as it is, so a quantized model can be loaded and run without ever materializing a dense
5
+ copy — which is the whole memory saving.
6
+
7
+ Ported from llama.cpp's ggml-cuda; `vendor/UPSTREAM` pins the revision. The ops are named for what
8
+ they do rather than for a backend: each backend registers its own implementation of the same
9
+ schema, so calls dispatch on the tensor's device.
10
+ """
11
+
12
+ import torch
13
+
14
+ from ._ops import add_op_namespace_prefix, ops
15
+
16
+
17
+ __all__ = ["GEMV_TYPES", "MAX_GEMV_ROWS", "dequantize", "get_rows", "mul_mat_id", "mul_mat_vec"]
18
+
19
+ # Upstream's MMVQ_MAX_BATCH_SIZE: `mul_mat_vec` has no implementation beyond this many rows, so a
20
+ # caller with more (prefill) dequantizes and uses an ordinary matmul.
21
+ MAX_GEMV_ROWS = 8
22
+
23
+ # ggml type ids `mul_mat_vec` implements, as this build reports them -- it is backend-specific, and
24
+ # a type routed into a gemv that has no kernel for it is a fault, not a fallback. CUDA covers
25
+ # Q4_0/Q4_1/Q5_0/Q5_1/Q8_0, the K quants, the IQ quants, MXFP4/NVFP4 and Q1_0/Q2_0; Metal is the
26
+ # same minus NVFP4/Q1_0/Q2_0, which its metallib has no kernels for. `dequantize` covers more, so
27
+ # check this before choosing the fused path.
28
+ try:
29
+ GEMV_TYPES = frozenset(ops.gemv_types())
30
+ except AttributeError:
31
+ # A build published before `gemv_types` existed; those are CUDA-only, so its list is theirs.
32
+ GEMV_TYPES = frozenset({2, 3, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 29, 39, 40, 41, 42})
33
+
34
+
35
+ def get_rows(
36
+ blocks: torch.Tensor, indices: torch.Tensor, ggml_type: int, cols: int, dtype: torch.dtype
37
+ ) -> torch.Tensor:
38
+ """The rows `indices` names, unpacked: `(rows, bytes_per_row)` uint8 -> `(len(indices), cols)`.
39
+
40
+ ggml's `get_rows`, which dequantizes as it gathers -- so reading a few rows out of a large table
41
+ never touches the rest.
42
+ """
43
+ return ops.get_rows(blocks, indices, ggml_type, cols, dtype)
44
+
45
+
46
+ def dequantize(
47
+ blocks: torch.Tensor, ggml_type: int, rows: int, cols: int, dtype: torch.dtype
48
+ ) -> torch.Tensor:
49
+ """`(rows, bytes_per_row)` uint8 blocks -> `(rows, cols)` values of `dtype`."""
50
+ return ops.dequantize(blocks, ggml_type, rows, cols, dtype)
51
+
52
+
53
+ def mul_mat_vec(
54
+ blocks: torch.Tensor, x: torch.Tensor, ggml_type: int, out_features: int
55
+ ) -> torch.Tensor:
56
+ """Fused dequantize-gemv: `x @ blocks.T` without unpacking `blocks`.
57
+
58
+ `x` is `(rows, in_features)` and `rows` must be at most `MAX_GEMV_ROWS`. The result is f32
59
+ whatever `x`'s dtype was, since the kernel writes an f32 destination; cast it at the call site,
60
+ where the cast can be fused into whatever consumes it.
61
+ """
62
+ return ops.mul_mat_vec(blocks, x, ggml_type, out_features)
63
+
64
+
65
+ def mul_mat_id(
66
+ blocks: torch.Tensor, x: torch.Tensor, ids: torch.Tensor, ggml_type: int, out_features: int
67
+ ) -> torch.Tensor:
68
+ """One dispatch for a bank of routed experts: ggml's `mul_mv_id`.
69
+
70
+ `blocks` is `(n_experts, out_features, bytes_per_row)`, `x` is `(n_tokens, in_features)`, and
71
+ `ids` is `(n_tokens, n_used)` naming the expert each of a token's slots picked. The result is
72
+ `(n_tokens, n_used, out_features)` f32, one row per slot.
73
+
74
+ The alternative is a gemv per expert per layer, whose arithmetic is dwarfed by the dispatch
75
+ around it -- which is most of what a MoE decode step costs.
76
+ """
77
+ return ops.mul_mat_id(blocks, x, ids, ggml_type, out_features)
78
+
79
+
80
+ # Without these, torch.compile cannot trace the ops and breaks the graph at every call.
81
+ @torch.library.register_fake(add_op_namespace_prefix("get_rows"))
82
+ def _get_rows_fake(blocks, indices, ggml_type, cols, dtype):
83
+ return blocks.new_empty((indices.numel(), cols), dtype=dtype)
84
+
85
+
86
+ @torch.library.register_fake(add_op_namespace_prefix("dequantize"))
87
+ def _dequantize_fake(blocks, ggml_type, rows, cols, dtype):
88
+ return blocks.new_empty((rows, cols), dtype=dtype)
89
+
90
+
91
+ @torch.library.register_fake(add_op_namespace_prefix("mul_mat_vec"))
92
+ def _mul_mat_vec_fake(blocks, x, ggml_type, out_features):
93
+ return x.new_empty((x.shape[0], out_features), dtype=torch.float32)
94
+
95
+
96
+ @torch.library.register_fake(add_op_namespace_prefix("mul_mat_id"))
97
+ def _mul_mat_id_fake(blocks, x, ids, ggml_type, out_features):
98
+ return x.new_empty((x.shape[0], ids.shape[1], out_features), dtype=torch.float32)
build/torch211-metal-aarch64-darwin/_ggml_quantization_metal_fe2bb66.abi3.so ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c34eb8ea993475e3665a09c6912951c9d78c12ee30e719c0112609d7409fe9bc
3
+ size 3347640
build/torch211-metal-aarch64-darwin/_ops.py ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ from . import _ggml_quantization_metal_fe2bb66
3
+ ops = torch.ops._ggml_quantization_metal_fe2bb66
4
+
5
+ def add_op_namespace_prefix(op_name: str):
6
+ """
7
+ Prefix op by namespace.
8
+ """
9
+ return f"_ggml_quantization_metal_fe2bb66::{op_name}"
build/torch211-metal-aarch64-darwin/metadata.json ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "ggml-quantization",
3
+ "id": "_ggml_quantization_metal_fe2bb66",
4
+ "version": 1,
5
+ "kernels-minver": "0.14.0",
6
+ "license": "MIT",
7
+ "python-depends": [],
8
+ "kernel-depends": [],
9
+ "backend": {
10
+ "type": "metal"
11
+ },
12
+ "digest": {
13
+ "algorithm": "sha256",
14
+ "files": {
15
+ "__init__.py": "iPXgZXBgY3CzpNUSjmCovMVNPLBol1KBaNoTzkXp5mM=",
16
+ "_ggml_quantization_metal_fe2bb66.abi3.so": "w0646pk0deNmWgnGkSlRydeMEu4w5xnAESYJ10Cf6bw=",
17
+ "_ops.py": "7JPqKK8z3jmEj5qhydHkeSXOsZMXb424/1/5MR/BZuk=",
18
+ "symbols.json": "y6E2ftRiVpYGHN9aFeGUjoXci6YSNZRswRiLbHiaxFw="
19
+ }
20
+ },
21
+ "provenance": {
22
+ "kernel-builder": {
23
+ "version": "0.18.0-dev0",
24
+ "commit": "d054906a13710b811b96697b4635f03020842733",
25
+ "dirty": false
26
+ },
27
+ "kernel": {
28
+ "commit": "fe2bb66fee6c2a77eccf08a0508dc57428d488ed",
29
+ "dirty": false
30
+ }
31
+ }
32
+ }
build/torch211-metal-aarch64-darwin/metadata.json.sigstore ADDED
@@ -0,0 +1 @@
 
 
1
+ {"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHQjCCBsigAwIBAgIUTk/FiXHpBzEbvqczomg0g5x3iykwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYxMDE5MTEwNzMwWhcNMjYxMDE5MTExNzMwWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEN2PjutOclPNMVywKVT44pVJdKf+S+FoB6Ftc0AybVdEgdsBrI0aY4jr/gri6Rb16vyl6jpET5ngqql1s5vlibaOCBecwggXjMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAfBgNVHSMEGDAWgBTf0+nPViQRlvmo2OkoVaLGLhhkPzBvBgNVHREBAf8EZTBjhmFodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvLmdpdGh1Yi93b3JrZmxvd3MvYnVpbGQtbWFjLnlhbWxAcmVmcy9oZWFkcy9tYWluMDkGCisGAQQBg78wAQEEK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wHwYKKwYBBAGDvzABAgQRd29ya2Zsb3dfZGlzcGF0Y2gwNgYKKwYBBAGDvzABAwQoZmUyYmI2NmZlZTZjMmE3N2VjY2YwOGEwNTA4ZGM1NzQyOGQ0ODhlZDAbBgorBgEEAYO/MAEEBA1CdWlsZCAobWFjT1MpMCsGCisGAQQBg78wAQUEHWh1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MB0GCisGAQQBg78wAQYED3JlZnMvaGVhZHMvbWFpbjA7BgorBgEEAYO/MAEIBC0MK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wcQYKKwYBBAGDvzABCQRjDGFodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvLmdpdGh1Yi93b3JrZmxvd3MvYnVpbGQtbWFjLnlhbWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoZmUyYmI2NmZlZTZjMmE3N2VjY2YwOGEwNTA4ZGM1NzQyOGQ0ODhlZDAdBgorBgEEAYO/MAELBA8MDWdpdGh1Yi1ob3N0ZWQwQAYKKwYBBAGDvzABDAQyDDBodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkwOAYKKwYBBAGDvzABDQQqDChmZTJiYjY2ZmVlNmMyYTc3ZWNjZjA4YTA1MDhkYzU3NDI4ZDQ4OGVkMB8GCisGAQQBg78wAQ4EEQwPcmVmcy9oZWFkcy9tYWluMBoGCisGAQQBg78wAQ8EDAwKMTA3MTQ3NTUyOTAuBgorBgEEAYO/MAEQBCAMHmh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZTAYBgorBgEEAYO/MAERBAoMCDI1NzIwNzQzMHEGCisGAQQBg78wARIEYwxhaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLW1hYy55YW1sQHJlZnMvaGVhZHMvbWFpbjA4BgorBgEEAYO/MAETBCoMKGZlMmJiNjZmZWU2YzJhNzdlY2NmMDhhMDUwOGRjNTc0MjhkNDg4ZWQwIQYKKwYBBAGDvzABFAQTDBF3b3JrZmxvd19kaXNwYXRjaDBkBgorBgEEAYO/MAEVBFYMVGh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS9hY3Rpb25zL3J1bnMvMzkyMzk1NzkyOTQvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzBGBgorBgEEAYO/MAEYBDgMNnJlcG86aHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHk6cmVmOnJlZnMvaGVhZHMvbWFpbjCBigYKKwYBBAHWeQIEAgR8BHoAeAB2AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABoVPYXOsAAAQDAEcwRQIhAP18Dctwg2lt33C/YX541lnUniIdSPC6pmrPOQTuDxJ9AiAK1MzEJ71wg61X3JJhCqhWiYv7asK4fOCjWmK0hgOxDzAKBggqhkjOPQQDAwNoADBlAjEAiUkT/JoPAPhh+zKOy0D/aWUdAtZ/GT3ocyE5YHj+uw/76jKUf94dD4OtMSWNnXitAjASUSKTjOHgTOsgtlM4ChLzDKz5pxNXFSSjw1Cd41DeTlQZ06r3A9A03Gv4ziXU8CI="},"tlogEntries":[{"logIndex":"3320116339","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1792408051","inclusionPromise":{"signedEntryTimestamp":"MEYCIQCG+yj8tjrkaK1fLM1Ibu291ryq8sBZ6ZB9jI0hHaN1TwIhAMY5b6esMAoxVFm+oJGebE92swmAMPiEvt4y+AU4Z4nW"},"inclusionProof":{"logIndex":"3198212077","rootHash":"rNj6Lp/1JFuwcovzNWjkKhu3WjKnvBOj573YzNP1/mc=","treeSize":"3198212082","hashes":["2Exek44eOJW23+QN/yUNddygsHCz+hSarvOSU7AC4/8=","cMDLj6DjaliQyIDmUpG07QqzTKbd+AhXqmLf4I/+PIA=","KWtVe/j22iym6grTIlmMFB3zsxU0jRyvgYdnSO7BemE=","adGoL6govAXVZSE6WkmyMQFBYqkFjw3z40PEm0VlN2I=","zmszGFLCxhXaM60/i4BnO8/GKsJ4Ta9oY+Bcu3hnEEw=","Xmd/6lhwUb70YQDZeaWVdZ+K5ZHOUh2LnQCsnYUtPRs=","ccDIAPywAQxX9xqkvcUYlcGnnC3XAZDflI9KMZCNhzU=","KfLkT2WZ0QP1XrrjzReMUrJIiMnbZT/NOrjsx9C313c=","xjJ60bWZdwtADBCQagSD2HlSIhe0x2cvZDn80+Q7fP8=","adnAraSTV7w7Y/rcE+QRhgZITBmEpFvaDRUcGIXFcZs=","NvhAA1+LqtXvaowiFXcolXI/TyFO3CsufLfJu3VJv2k=","PJRsVvScXNHmqQge+wrG01cIyckZNEkkYLfYRFm0H14=","f4MktXqhBPk7ruDBxwgqTvXa7eCNzak9cUObXS0eTxI=","OlLDeTiZ1vIMDel4vGDtbNVnrFnzDe1MFV5rBN5Ep4o=","uCZQe757l2sS1c05Y7TzOwEm+X8MeGLIUCkEOmFVOz4=","nyQV/+cWQUG5Hb2PKjQQNkQIJmz2qzAZKBQlkHGIknM=","G+nk7mgE5h6dUmv2UY7NDJrY3WvrZY31raaO1AETt+o=","qlTWNDzERnTBQVcHHXXVPjiUP0SsikGxfcxVlgqVFDo=","gg9GNApNke3+zNhl4tsWtmIycCFrOMCB3lys6XuSQNQ=","NlOclldmKPA1tMKIskqHAwuQDYHp31YwpK+OOMrMccc=","qxzHanAzz57SDdmJe0B7bJK72NTIBbwEMGBBKvDOROw=","xH/DCseLHr9eKoYT8qsORZK7zVdEGYWHuVtsVrD95wY="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n3198212082\nrNj6Lp/1JFuwcovzNWjkKhu3WjKnvBOj573YzNP1/mc=\n\n— rekor.sigstore.dev wNI9ajBEAiBtIByjoLW+i+BMtE6P91MxhA48zQvFRRA7ZwwUZXU56gIgYWzbKYOmvSHgrAC9pTqZLSr+9UAJ18DPDKntyYpf7D4=\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiJlNWU0OWE5NDQ4NDE4ZTdjZTNlOGJmZGI1ODBlYWZkMjQ5Y2VhNTcxNDYwOWExZDE1ZWJiYWI0OGZiZWM1ZjFlIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FUUNJRkNRU1daM1hCUHE0SXJsekNPbjJONGRDT2hRbnpiZFJFWXNBWWdQc1c5Z0FpQUVTd1IvNHBPS0VaTkJkZktpZHJNUmpuazlpK3Zia1J6bHN2OXo2aGVwR1E9PSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaFJha05EUW5OcFowRjNTVUpCWjBsVlZHc3ZSbWxZU0hCQ2VrVmlkbkZqZW05dFp6Qm5OWGd6YVhscmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFplRTFFUlRWTlZFVjNUbnBOZDFkb1kwNU5hbGw0VFVSRk5VMVVSWGhPZWsxM1YycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZPTWxCcWRYUlBZMnhRVGsxV2VYZExWbFEwTkhCV1NtUkxaaXRUSzBadlFqWkdkR01LTUVGNVlsWmtSV2RrYzBKeVNUQmhXVFJxY2k5bmNtazJVbUl4Tm5aNWJEWnFjRVZVTlc1bmNYRnNNWE0xZG14cFltRlBRMEpsWTNkbloxaHFUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXWkNaMDVXU0ZOTlJVZEVRVmRuUWxSbUNqQXJibEJXYVZGU2JIWnRiekpQYTI5V1lVeEhUR2hvYTFCNlFuWkNaMDVXU0ZKRlFrRm1PRVZhVkVKcWFHMUdiMlJJVW5kamVtOTJUREprY0dSSGFERUtXV2sxYW1JeU1IWmhTRlp1V2pKc2RWb3lXbWhaTWxWMllUSldlV0p0Vm5OamVURnFZakl4ZEdSWE5YQmtTR3QyVEcxa2NHUkhhREZaYVRrellqTktjZ3BhYlhoMlpETk5kbGx1Vm5CaVIxRjBZbGRHYWt4dWJHaGlWM2hCWTIxV2JXTjVPVzlhVjBaclkzazVkRmxYYkhWTlJHdEhRMmx6UjBGUlVVSm5OemgzQ2tGUlJVVkxNbWd3WkVoQ2VrOXBPSFprUnpseVdsYzBkVmxYVGpCaFZ6bDFZM2sxYm1GWVVtOWtWMG94WXpKV2VWa3lPWFZrUjFaMVpFTTFhbUl5TUhjS1NIZFpTMHQzV1VKQ1FVZEVkbnBCUWtGblVWSmtNamw1WVRKYWMySXpaR1phUjJ4NlkwZEdNRmt5WjNkT1oxbExTM2RaUWtKQlIwUjJla0ZDUVhkUmJ3cGFiVlY1V1cxSk1rNXRXbXhhVkZwcVRXMUZNMDR5Vm1wWk1sbDNUMGRGZDA1VVFUUmFSMDB4VG5wUmVVOUhVVEJQUkdoc1drUkJZa0puYjNKQ1owVkZDa0ZaVHk5TlFVVkZRa0V4UTJSWGJITmFRMEZ2WWxkR2FsUXhUWEJOUTNOSFEybHpSMEZSVVVKbk56aDNRVkZWUlVoWGFERmFNbVJ3WW0xa2JWbFhUbXdLVERKMGJHTnROV3hpU0UxMFdUSTVkR0pZVm5WaFdGSTFUVUl3UjBOcGMwZEJVVkZDWnpjNGQwRlJXVVZFTTBwc1dtNU5kbUZIVm1oYVNFMTJZbGRHY0FwaWFrRTNRbWR2Y2tKblJVVkJXVTh2VFVGRlNVSkRNRTFMTW1nd1pFaENlazlwT0haa1J6bHlXbGMwZFZsWFRqQmhWemwxWTNrMWJtRllVbTlrVjBveENtTXlWbmxaTWpsMVpFZFdkV1JETldwaU1qQjNZMUZaUzB0M1dVSkNRVWRFZG5wQlFrTlJVbXBFUjBadlpFaFNkMk42YjNaTU1tUndaRWRvTVZscE5Xb0tZakl3ZG1GSVZtNWFNbXgxV2pKYWFGa3lWWFpoTWxaNVltMVdjMk41TVdwaU1qRjBaRmMxY0dSSWEzWk1iV1J3WkVkb01WbHBPVE5pTTBweVdtMTRkZ3BrTTAxMldXNVdjR0pIVVhSaVYwWnFURzVzYUdKWGVFRmpiVlp0WTNrNWIxcFhSbXRqZVRsMFdWZHNkVTFFWjBkRGFYTkhRVkZSUW1jM09IZEJVVzlGQ2t0bmQyOWFiVlY1V1cxSk1rNXRXbXhhVkZwcVRXMUZNMDR5Vm1wWk1sbDNUMGRGZDA1VVFUUmFSMDB4VG5wUmVVOUhVVEJQUkdoc1drUkJaRUpuYjNJS1FtZEZSVUZaVHk5TlFVVk1Ra0U0VFVSWFpIQmtSMmd4V1dreGIySXpUakJhVjFGM1VVRlpTMHQzV1VKQ1FVZEVkbnBCUWtSQlVYbEVSRUp2WkVoU2R3cGplbTkyVERKa2NHUkhhREZaYVRWcVlqSXdkbUZJVm01YU1teDFXakphYUZreVZYWmhNbFo1WW0xV2MyTjVNV3BpTWpGMFpGYzFjR1JJYTNkUFFWbExDa3QzV1VKQ1FVZEVkbnBCUWtSUlVYRkVRMmh0V2xSS2FWbHFXVEphYlZac1RtMU5lVmxVWXpOYVYwNXFXbXBCTkZsVVFURk5SR2hyV1hwVk0wNUVTVFFLV2tSUk5FOUhWbXROUWpoSFEybHpSMEZSVVVKbk56aDNRVkUwUlVWUmQxQmpiVlp0WTNrNWIxcFhSbXRqZVRsMFdWZHNkVTFDYjBkRGFYTkhRVkZSUWdwbk56aDNRVkU0UlVSQmQwdE5WRUV6VFZSUk0wNVVWWGxQVkVGMVFtZHZja0puUlVWQldVOHZUVUZGVVVKRFFVMUliV2d3WkVoQ2VrOXBPSFphTW13d0NtRklWbWxNYlU1MllsTTViMlJYWkc1aFZ6VnVXbTFHYWxwVVFWbENaMjl5UW1kRlJVRlpUeTlOUVVWU1FrRnZUVU5FU1RGT2VrbDNUbnBSZWsxSVJVY0tRMmx6UjBGUlVVSm5OemgzUVZKSlJWbDNlR2hoU0ZJd1kwaE5Oa3g1T1c1aFdGSnZaRmRKZFZreU9YUk1NbWd4V2pKa2NHSnRaRzFaVjA1c1RESjBiQXBqYlRWc1lraE5kRmt5T1hSaVdGWjFZVmhTTlV4NU5XNWhXRkp2WkZkSmRtUXlPWGxoTWxwellqTmtla3d5U2pGaFYzaHJURmN4YUZsNU5UVlpWekZ6Q2xGSVNteGFiazEyWVVkV2FGcElUWFppVjBad1ltcEJORUpuYjNKQ1owVkZRVmxQTDAxQlJWUkNRMjlOUzBkYWJFMXRTbWxPYWxwdFdsZFZNbGw2U21nS1RucGtiRmt5VG0xTlJHaG9UVVJWZDA5SFVtcE9WR013VFdwb2EwNUVaelJhVjFGM1NWRlpTMHQzV1VKQ1FVZEVkbnBCUWtaQlVWUkVRa1l6WWpOS2NncGFiWGgyWkRFNWEyRllUbmRaV0ZKcVlVUkNhMEpuYjNKQ1owVkZRVmxQTDAxQlJWWkNSbGxOVmtkb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJDbUpUT1c5a1YyUnVZVmMxYmxwdFJtcGFVemx5V2xoS2RWcFhlSHBNVjA1MllsY3hNV0p0YkRCbFV6bG9XVE5TY0dJeU5YcE1NMG94WW01TmRrMTZhM2tLVFhwck1VNTZhM2xQVkZGMldWaFNNRnBYTVhka1NFMTJUVlJCVjBKbmIzSkNaMFZGUVZsUEwwMUJSVmRDUVdkTlFtNUNNVmx0ZUhCWmVrSkhRbWR2Y2dwQ1owVkZRVmxQTDAxQlJWbENSR2ROVG01S2JHTkhPRFpoU0ZadVdqSnNkVm95V21oWk1sVjJZVEpXZVdKdFZuTmplVEZxWWpJeGRHUlhOWEJrU0dzMkNtTnRWbTFQYmtwc1dtNU5kbUZIVm1oYVNFMTJZbGRHY0dKcVEwSnBaMWxMUzNkWlFrSkJTRmRsVVVsRlFXZFNPRUpJYjBGbFFVSXlRVTR3T1UxSGNrY0tlSGhGZVZsNGEyVklTbXh1VG5kTGFWTnNOalF6YW5sMEx6UmxTMk52UVhaTFpUWlBRVUZCUW05V1VGbFlUM05CUVVGUlJFRkZZM2RTVVVsb1FWQXhPQXBFWTNSM1p6SnNkRE16UXk5WldEVTBNV3h1Vlc1cFNXUlRVRU0yY0cxeVVFOVJWSFZFZUVvNVFXbEJTekZOZWtWS056RjNaell4V0ROS1NtaERjV2hYQ21sWmRqZGhjMHMwWms5RGFsZHRTekJvWjA5NFJIcEJTMEpuWjNGb2EycFBVRkZSUkVGM1RtOUJSRUpzUVdwRlFXbFZhMVF2U205UVFWQm9hQ3Q2UzA4S2VUQkVMMkZYVldSQmRGb3ZSMVF6YjJONVJUVlpTR29yZFhjdk56WnFTMVZtT1RSa1JEUlBkRTFUVjA1dVdHbDBRV3BCVTFWVFMxUnFUMGhuVkU5elp3cDBiRTAwUTJoTWVrUkxlalZ3ZUU1WVJsTlRhbmN4UTJRME1VUmxWR3hSV2pBMmNqTkJPVUV3TTBkMk5IcHBXRlU0UTBrOUNpMHRMUzB0UlU1RUlFTkZVbFJKUmtsRFFWUkZMUzB0TFMwSyJ9fX19"}],"timestampVerificationData":{"rfc3161Timestamps":[{"signedTimestamp":"MIICyzADAgEAMIICwgYJKoZIhvcNAQcCoIICszCCAq8CAQMxDTALBglghkgBZQMEAgEwgbgGCyqGSIb3DQEJEAEEoIGoBIGlMIGiAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQgx/1zYiAXddYyvsMg8Kq+8hjD9k+6bG0LTqur8/xCfoECFQDQb9f4SckNhG3yzPtk8FW4d/ykfxgPMjAyNjEwMTkxMTA3MzFaMAMCAQGgMqQwMC4xFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEVMBMGA1UEAxMMc2lnc3RvcmUtdHNhoAAxggHcMIIB2AIBATBRMDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAsGCWCGSAFlAwQCAaCB/DAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTI2MTAxOTExMDczMVowLwYJKoZIhvcNAQkEMSIEIE30xc1541eFvNMUFHreJ3m0as8OCqhrxIvxA5jBdpJrMIGOBgsqhkiG9w0BCRACLzF/MH0wezB5BCCF+Se8B6tiysO0Q1bBDvyBssaIP9p6uebYcNnROs0FtzBVMD2kOzA5MRUwEwYDVQQKEwxzaWdzdG9yZS5kZXYxIDAeBgNVBAMTF3NpZ3N0b3JlLXRzYS1zZWxmc2lnbmVkAhQ6E1QvDJBh7rzBQy/Lio6LKiOLDDAKBggqhkjOPQQDAgRoMGYCMQDqmjWH/2FKSm1J99jOsf7J47zLGCbGWuvm5AQjUKg8+ahrwKAgnUaUH4UqbvnEqpQCMQDocNagXOx7nCbEP2rVC+/4lvBaUt1sr8MW/f4u1SCdGDhmX6oB/4uGHiwkpFhlOM0="}]}},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"5eSalEhBjnzj6L/bWA6v0knOpXFGCaHRXrurSPvsXx4="},"signature":"MEQCIFCQSWZ3XBPq4IrlzCOn2N4dCOhQnzbdREYsAYgPsW9gAiAESwR/4pOKEZNBdfKidrMRjnk9i+vbkRzlsv9z6hepGQ=="}}
build/torch211-metal-aarch64-darwin/symbols.json ADDED
@@ -0,0 +1,169 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema_version": 1,
3
+ "module": "_ggml_quantization_metal_fe2bb66",
4
+ "functions": [
5
+ {
6
+ "name": "dequantize",
7
+ "qualname": "dequantize",
8
+ "module": "_ggml_quantization_metal_fe2bb66",
9
+ "kind": "function",
10
+ "doc": "`(rows, bytes_per_row)` uint8 blocks -> `(rows, cols)` values of `dtype`.",
11
+ "signature": {
12
+ "parameters": [
13
+ {
14
+ "name": "blocks",
15
+ "kind": "POSITIONAL_OR_KEYWORD",
16
+ "default": null,
17
+ "annotation": "torch.Tensor"
18
+ },
19
+ {
20
+ "name": "ggml_type",
21
+ "kind": "POSITIONAL_OR_KEYWORD",
22
+ "default": null,
23
+ "annotation": "int"
24
+ },
25
+ {
26
+ "name": "rows",
27
+ "kind": "POSITIONAL_OR_KEYWORD",
28
+ "default": null,
29
+ "annotation": "int"
30
+ },
31
+ {
32
+ "name": "cols",
33
+ "kind": "POSITIONAL_OR_KEYWORD",
34
+ "default": null,
35
+ "annotation": "int"
36
+ },
37
+ {
38
+ "name": "dtype",
39
+ "kind": "POSITIONAL_OR_KEYWORD",
40
+ "default": null,
41
+ "annotation": "torch.dtype"
42
+ }
43
+ ],
44
+ "return_annotation": "torch.Tensor"
45
+ }
46
+ },
47
+ {
48
+ "name": "get_rows",
49
+ "qualname": "get_rows",
50
+ "module": "_ggml_quantization_metal_fe2bb66",
51
+ "kind": "function",
52
+ "doc": "The rows `indices` names, unpacked: `(rows, bytes_per_row)` uint8 -> `(len(indices), cols)`.\n\nggml's `get_rows`, which dequantizes as it gathers -- so reading a few rows out of a large table\nnever touches the rest.",
53
+ "signature": {
54
+ "parameters": [
55
+ {
56
+ "name": "blocks",
57
+ "kind": "POSITIONAL_OR_KEYWORD",
58
+ "default": null,
59
+ "annotation": "torch.Tensor"
60
+ },
61
+ {
62
+ "name": "indices",
63
+ "kind": "POSITIONAL_OR_KEYWORD",
64
+ "default": null,
65
+ "annotation": "torch.Tensor"
66
+ },
67
+ {
68
+ "name": "ggml_type",
69
+ "kind": "POSITIONAL_OR_KEYWORD",
70
+ "default": null,
71
+ "annotation": "int"
72
+ },
73
+ {
74
+ "name": "cols",
75
+ "kind": "POSITIONAL_OR_KEYWORD",
76
+ "default": null,
77
+ "annotation": "int"
78
+ },
79
+ {
80
+ "name": "dtype",
81
+ "kind": "POSITIONAL_OR_KEYWORD",
82
+ "default": null,
83
+ "annotation": "torch.dtype"
84
+ }
85
+ ],
86
+ "return_annotation": "torch.Tensor"
87
+ }
88
+ },
89
+ {
90
+ "name": "mul_mat_id",
91
+ "qualname": "mul_mat_id",
92
+ "module": "_ggml_quantization_metal_fe2bb66",
93
+ "kind": "function",
94
+ "doc": "One dispatch for a bank of routed experts: ggml's `mul_mv_id`.\n\n`blocks` is `(n_experts, out_features, bytes_per_row)`, `x` is `(n_tokens, in_features)`, and\n`ids` is `(n_tokens, n_used)` naming the expert each of a token's slots picked. The result is\n`(n_tokens, n_used, out_features)` f32, one row per slot.\n\nThe alternative is a gemv per expert per layer, whose arithmetic is dwarfed by the dispatch\naround it -- which is most of what a MoE decode step costs.",
95
+ "signature": {
96
+ "parameters": [
97
+ {
98
+ "name": "blocks",
99
+ "kind": "POSITIONAL_OR_KEYWORD",
100
+ "default": null,
101
+ "annotation": "torch.Tensor"
102
+ },
103
+ {
104
+ "name": "x",
105
+ "kind": "POSITIONAL_OR_KEYWORD",
106
+ "default": null,
107
+ "annotation": "torch.Tensor"
108
+ },
109
+ {
110
+ "name": "ids",
111
+ "kind": "POSITIONAL_OR_KEYWORD",
112
+ "default": null,
113
+ "annotation": "torch.Tensor"
114
+ },
115
+ {
116
+ "name": "ggml_type",
117
+ "kind": "POSITIONAL_OR_KEYWORD",
118
+ "default": null,
119
+ "annotation": "int"
120
+ },
121
+ {
122
+ "name": "out_features",
123
+ "kind": "POSITIONAL_OR_KEYWORD",
124
+ "default": null,
125
+ "annotation": "int"
126
+ }
127
+ ],
128
+ "return_annotation": "torch.Tensor"
129
+ }
130
+ },
131
+ {
132
+ "name": "mul_mat_vec",
133
+ "qualname": "mul_mat_vec",
134
+ "module": "_ggml_quantization_metal_fe2bb66",
135
+ "kind": "function",
136
+ "doc": "Fused dequantize-gemv: `x @ blocks.T` without unpacking `blocks`.\n\n`x` is `(rows, in_features)` and `rows` must be at most `MAX_GEMV_ROWS`. The result is f32\nwhatever `x`'s dtype was, since the kernel writes an f32 destination; cast it at the call site,\nwhere the cast can be fused into whatever consumes it.",
137
+ "signature": {
138
+ "parameters": [
139
+ {
140
+ "name": "blocks",
141
+ "kind": "POSITIONAL_OR_KEYWORD",
142
+ "default": null,
143
+ "annotation": "torch.Tensor"
144
+ },
145
+ {
146
+ "name": "x",
147
+ "kind": "POSITIONAL_OR_KEYWORD",
148
+ "default": null,
149
+ "annotation": "torch.Tensor"
150
+ },
151
+ {
152
+ "name": "ggml_type",
153
+ "kind": "POSITIONAL_OR_KEYWORD",
154
+ "default": null,
155
+ "annotation": "int"
156
+ },
157
+ {
158
+ "name": "out_features",
159
+ "kind": "POSITIONAL_OR_KEYWORD",
160
+ "default": null,
161
+ "annotation": "int"
162
+ }
163
+ ],
164
+ "return_annotation": "torch.Tensor"
165
+ }
166
+ }
167
+ ],
168
+ "layers": []
169
+ }
build/torch212-metal-aarch64-darwin/{_ggml_quantization_metal_63f3c1e.abi3.so → _ggml_quantization_metal_fe2bb66.abi3.so} RENAMED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:5c3b7f583105594757bbff3ef481ff808d14373787878b27772b27f22e210a46
3
  size 3347416
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:540f4e400bd2d8bb588d59fb90afc6f40d1f6bf93eddf438133f99802686af98
3
  size 3347416
build/torch212-metal-aarch64-darwin/_ops.py CHANGED
@@ -1,9 +1,9 @@
1
  import torch
2
- from . import _ggml_quantization_metal_63f3c1e
3
- ops = torch.ops._ggml_quantization_metal_63f3c1e
4
 
5
  def add_op_namespace_prefix(op_name: str):
6
  """
7
  Prefix op by namespace.
8
  """
9
- return f"_ggml_quantization_metal_63f3c1e::{op_name}"
 
1
  import torch
2
+ from . import _ggml_quantization_metal_fe2bb66
3
+ ops = torch.ops._ggml_quantization_metal_fe2bb66
4
 
5
  def add_op_namespace_prefix(op_name: str):
6
  """
7
  Prefix op by namespace.
8
  """
9
+ return f"_ggml_quantization_metal_fe2bb66::{op_name}"
build/torch212-metal-aarch64-darwin/metadata.json CHANGED
@@ -1,9 +1,11 @@
1
  {
2
  "name": "ggml-quantization",
3
- "id": "_ggml_quantization_metal_63f3c1e",
4
  "version": 1,
 
5
  "license": "MIT",
6
  "python-depends": [],
 
7
  "backend": {
8
  "type": "metal"
9
  },
@@ -11,18 +13,19 @@
11
  "algorithm": "sha256",
12
  "files": {
13
  "__init__.py": "iPXgZXBgY3CzpNUSjmCovMVNPLBol1KBaNoTzkXp5mM=",
14
- "_ggml_quantization_metal_63f3c1e.abi3.so": "XDt/WDEFWUdXu/8+9IH/gI0UNzeHh4sndysn8i4hCkY=",
15
- "_ops.py": "Ap/ials5aAa2giH9HUnXPFlmDos9zQ4ylpjIBpVUusQ="
 
16
  }
17
  },
18
  "provenance": {
19
  "kernel-builder": {
20
- "version": "0.17.0-dev0",
21
- "sha": "81f55ea30fd8f819dcf93a3c934dd584c895bd2f",
22
  "dirty": false
23
  },
24
  "kernel": {
25
- "sha": "63f3c1ea3f9eb1ba61b4a88bd93aaa86a84f55ea",
26
  "dirty": false
27
  }
28
  }
 
1
  {
2
  "name": "ggml-quantization",
3
+ "id": "_ggml_quantization_metal_fe2bb66",
4
  "version": 1,
5
+ "kernels-minver": "0.14.0",
6
  "license": "MIT",
7
  "python-depends": [],
8
+ "kernel-depends": [],
9
  "backend": {
10
  "type": "metal"
11
  },
 
13
  "algorithm": "sha256",
14
  "files": {
15
  "__init__.py": "iPXgZXBgY3CzpNUSjmCovMVNPLBol1KBaNoTzkXp5mM=",
16
+ "_ggml_quantization_metal_fe2bb66.abi3.so": "VA9OQAvS2LtYjVn7kK/G9A0fa/k+3fQ4Ez+ZgCaGr5g=",
17
+ "_ops.py": "7JPqKK8z3jmEj5qhydHkeSXOsZMXb424/1/5MR/BZuk=",
18
+ "symbols.json": "y6E2ftRiVpYGHN9aFeGUjoXci6YSNZRswRiLbHiaxFw="
19
  }
20
  },
21
  "provenance": {
22
  "kernel-builder": {
23
+ "version": "0.18.0-dev0",
24
+ "commit": "d054906a13710b811b96697b4635f03020842733",
25
  "dirty": false
26
  },
27
  "kernel": {
28
+ "commit": "fe2bb66fee6c2a77eccf08a0508dc57428d488ed",
29
  "dirty": false
30
  }
31
  }
build/torch212-metal-aarch64-darwin/metadata.json.sigstore CHANGED
@@ -1 +1 @@
1
- {"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHYjCCBuigAwIBAgIUQXr3qWLlkvNgZ5oCjIr9HFD5YzowCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwOTAyMTE1NTM4WhcNMjYwOTAyMTIwNTM4WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAELPJO+fGPjBvjhgPourSaofgGuNq7t4lxHeyH89x2B6McQm5YNV19pH2cj3bUZM5eeTLrw7noDsys+KHQhal36KOCBgcwggYDMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUukEyraXwCmbwZTVcJWGdLTm7C8wwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wbwYDVR0RAQH/BGUwY4ZhaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLW1hYy55YW1sQHJlZnMvaGVhZHMvbWFpbjA5BgorBgEEAYO/MAEBBCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMB8GCisGAQQBg78wAQIEEXdvcmtmbG93X2Rpc3BhdGNoMDYGCisGAQQBg78wAQMEKDYzZjNjMWVhM2Y5ZWIxYmE2MWI0YTg4YmQ5M2FhYTg2YTg0ZjU1ZWEwGwYKKwYBBAGDvzABBAQNQnVpbGQgKG1hY09TKTArBgorBgEEAYO/MAEFBB1odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eTAdBgorBgEEAYO/MAEGBA9yZWZzL2hlYWRzL21haW4wOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMHEGCisGAQQBg78wAQkEYwxhaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLW1hYy55YW1sQHJlZnMvaGVhZHMvbWFpbjA4BgorBgEEAYO/MAEKBCoMKDYzZjNjMWVhM2Y5ZWIxYmE2MWI0YTg4YmQ5M2FhYTg2YTg0ZjU1ZWEwHQYKKwYBBAGDvzABCwQPDA1naXRodWItaG9zdGVkMEAGCisGAQQBg78wAQwEMgwwaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MDgGCisGAQQBg78wAQ0EKgwoNjNmM2MxZWEzZjllYjFiYTYxYjRhODhiZDkzYWFhODZhODRmNTVlYTAfBgorBgEEAYO/MAEOBBEMD3JlZnMvaGVhZHMvbWFpbjAaBgorBgEEAYO/MAEPBAwMCjEwNzE0NzU1MjkwLgYKKwYBBAGDvzABEAQgDB5odHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2UwGAYKKwYBBAGDvzABEQQKDAgyNTcyMDc0MzBxBgorBgEEAYO/MAESBGMMYWh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS8uZ2l0aHViL3dvcmtmbG93cy9idWlsZC1tYWMueWFtbEByZWZzL2hlYWRzL21haW4wOAYKKwYBBAGDvzABEwQqDCg2M2YzYzFlYTNmOWViMWJhNjFiNGE4OGJkOTNhYWE4NmE4NGY1NWVhMCEGCisGAQQBg78wARQEEwwRd29ya2Zsb3dfZGlzcGF0Y2gwZAYKKwYBBAGDvzABFQRWDFRodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvYWN0aW9ucy9ydW5zLzMzNjI0ODc1MDE2L2F0dGVtcHRzLzEwFgYKKwYBBAGDvzABFgQIDAZwdWJsaWMwRgYKKwYBBAGDvzABGAQ4DDZyZXBvOmh1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5OnJlZjpyZWZzL2hlYWRzL21haW4wgYsGCisGAQQB1nkCBAIEfQR7AHkAdwDdPTBqxscRMmMZHhyZZzcCokpeuN48rf+HinKALynujgAAAaBh+YfPAAAEAwBIMEYCIQDQyK7X2XKAJoEWPEiU82bsPwkuB7mgRj0XIBQqIuHrSQIhALiT0fjvaiH1IJ0p+4plFH4PjnildREnt/VedmE5CRPBMAoGCCqGSM49BAMDA2gAMGUCMQCgR5Z7G0v8fYDEoqSC6NARuD6ErLjUj/rMWpsiv8izBjhMAG4Ys78TH8fqFUZvKA8CMGwE4zuJV6vj4vvsF++2e5rl04rsJKzlEOpp1LB0IPuVLJJi5tre7zQu5g1+vk+bnA=="},"tlogEntries":[{"logIndex":"2685308347","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1788350138","inclusionPromise":{"signedEntryTimestamp":"MEUCIQCeukhGjzuXb+V9F6Lr4J4re/aF7x8sLiOzrp5Mq67a1QIgNGOVLfWTv+gtE1MrzoM7tYmK3lSPofrseDPjgJ1sGSY="},"inclusionProof":{"logIndex":"2563404085","rootHash":"Yw9Kn0q+nQVf2cuMQmOqmEaY8EW8n06DQij5asxKjB0=","treeSize":"2563404094","hashes":["i+GhLf5HyqgbPxJFV0GfSNnbesbf22PC5MVtIUFbUHY=","ViyKVuv/dOtSgW6MZJj7gtx3EeRpFMSzX2FgHrCyXZg=","IsbWJXsVgWvJiIA8rjkp+r2Dp7faiuOFkImJ6NL64ag=","AGnN1ZO3629gQ1gpcU+Y/63sxn/UaZ09YrnqnzWsVVw=","pKmPCnDXe0+wm5aqFxAI4sPud0ihKy7W+3X6E5RvUKs=","RVSwGqFrgqLA+QVr9gTnk9li2haKE3xpLvjzoUvYOSk=","PLcJyFMz+PX4iElWppigcChwVTSvWQKm0jAsw90GQ2U=","yx1C8qORgQZyEAY/S3IweAzoPmtYm93g7ouqo0XujJQ=","7qHI9xRdbuuSQzIEYjspvGUklwG3oQUfXM2gwWzda2o=","F+YuHc8O3xlVfXj9owStrUJMnQTwY/NpQ4opoGW8gKc=","H2EWTqHaPzZyLGzFNdm1vZITRk/1WU8HnEukaJgoG2E=","oHcOV2H5nfxCFsD3J616h87Eiz+X30EjHngkLoDqRJQ=","HiSowX/eHl/VU2Q+A0EfICMiguqx41ThMqJf2HY+o9M=","itRV5Rvo1MAx7h7FsTOgBX8gRAnu5MLfPmZWuLwhlhA=","eXSLrLqKSxRTixSP/k4YimriB2lufao6trqTrsxxlyg=","SndbMKVtcTenAkwi2JBfGzD+mhexp1qJbRIY+A1JRIU=","xH/DCseLHr9eKoYT8qsORZK7zVdEGYWHuVtsVrD95wY="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n2563404094\nYw9Kn0q+nQVf2cuMQmOqmEaY8EW8n06DQij5asxKjB0=\n\n— rekor.sigstore.dev wNI9ajBFAiBFIs7b3+Kzd7xNy6Vj52XFpaa+V7+q4woJfE1gHlPmEAIhAIv1Hscfp7Zt5TPXfNoIZuXkj0p1LNDWeERR9zjYwYvt\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiIwNzQwMTdiZmQ4MDkxMDZhMjZhM2M3NThjODZlODBiMDA5NTI2ODQ5NmJmNzBiMGEwZTdhNDQwNDA2YTYzNjUxIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FUUNJSFRlUkN5WGdXVDhPSHY2bjNoT1ZzVmU4N0V6Z3kzLzdOUk5JT2xKZGdaMkFpQm1uM0pWMHhPd2YvYStBTXNBa2RpSVUyclZGWSs5UEVkMFhSOHdIdTlZeEE9PSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaFpha05EUW5WcFowRjNTVUpCWjBsVlVWaHlNM0ZYVEd4cmRrNW5XalZ2UTJwSmNqbElSa1ExV1hwdmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDlVUVhsTlZFVXhUbFJOTkZkb1kwNU5hbGwzVDFSQmVVMVVTWGRPVkUwMFYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZNVUVwUEsyWkhVR3BDZG1wb1oxQnZkWEpUWVc5bVowZDFUbkUzZERSc2VFaGxlVWdLT0RsNE1rSTJUV05SYlRWWlRsWXhPWEJJTW1OcU0ySlZXazAxWldWVVRISjNOMjV2UkhONWN5dExTRkZvWVd3ek5rdFBRMEpuWTNkbloxbEVUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlYxYTBWNUNuSmhXSGREYldKM1dsUldZMHBYUjJSTVZHMDNRemgzZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJKM1dVUldVakJTUVZGSUwwSkhWWGRaTkZwb1lVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKb01Wb3laSEJpYldSdFdWZE9iQXBNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk1lVFZ1WVZoU2IyUlhTWFprTWpsNVlUSmFjMkl6WkhwTU1rb3hZVmQ0YTB4WE1XaFplVFUxQ2xsWE1YTlJTRXBzV201TmRtRkhWbWhhU0UxMllsZEdjR0pxUVRWQ1oyOXlRbWRGUlVGWlR5OU5RVVZDUWtOMGIyUklVbmRqZW05MlRETlNkbUV5Vm5VS1RHMUdhbVJIYkhaaWJrMTFXakpzTUdGSVZtbGtXRTVzWTIxT2RtSnVVbXhpYmxGMVdUSTVkRTFDT0VkRGFYTkhRVkZSUW1jM09IZEJVVWxGUlZoa2RncGpiWFJ0WWtjNU0xZ3lVbkJqTTBKb1pFZE9iMDFFV1VkRGFYTkhRVkZSUW1jM09IZEJVVTFGUzBSWmVscHFUbXBOVjFab1RUSlpOVnBYU1hoWmJVVXlDazFYU1RCWlZHYzBXVzFSTlUweVJtaFpWR2N5V1ZSbk1GcHFWVEZhVjBWM1IzZFpTMHQzV1VKQ1FVZEVkbnBCUWtKQlVVNVJibFp3WWtkUlowdEhNV2dLV1RBNVZFdFVRWEpDWjI5eVFtZEZSVUZaVHk5TlFVVkdRa0l4YjJSWFpHNWhWelZ1V20xR2FscFRPWEphV0VwMVdsZDRla3hYVG5aaVZ6RXhZbTFzTUFwbFZFRmtRbWR2Y2tKblJVVkJXVTh2VFVGRlIwSkJPWGxhVjFwNlRESm9iRmxYVW5wTU1qRm9ZVmMwZDA5M1dVdExkMWxDUWtGSFJIWjZRVUpEUVZGMENrUkRkRzlrU0ZKM1kzcHZka3d6VW5aaE1sWjFURzFHYW1SSGJIWmliazExV2pKc01HRklWbWxrV0U1c1kyMU9kbUp1VW14aWJsRjFXVEk1ZEUxSVJVY0tRMmx6UjBGUlVVSm5OemgzUVZGclJWbDNlR2hoU0ZJd1kwaE5Oa3g1T1c1aFdGSnZaRmRKZFZreU9YUk1NbWd4V2pKa2NHSnRaRzFaVjA1c1RESjBiQXBqYlRWc1lraE5kRmt5T1hSaVdGWjFZVmhTTlV4NU5XNWhXRkp2WkZkSmRtUXlPWGxoTWxwellqTmtla3d5U2pGaFYzaHJURmN4YUZsNU5UVlpWekZ6Q2xGSVNteGFiazEyWVVkV2FGcElUWFppVjBad1ltcEJORUpuYjNKQ1owVkZRVmxQTDAxQlJVdENRMjlOUzBSWmVscHFUbXBOVjFab1RUSlpOVnBYU1hnS1dXMUZNazFYU1RCWlZHYzBXVzFSTlUweVJtaFpWR2N5V1ZSbk1GcHFWVEZhVjBWM1NGRlpTMHQzV1VKQ1FVZEVkbnBCUWtOM1VWQkVRVEZ1WVZoU2J3cGtWMGwwWVVjNWVtUkhWbXROUlVGSFEybHpSMEZSVVVKbk56aDNRVkYzUlUxbmQzZGhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkVmt5T1hSTU1tZ3hDbG95WkhCaWJXUnRXVmRPYkV3eWRHeGpiVFZzWWtoTmRGa3lPWFJpV0ZaMVlWaFNOVTFFWjBkRGFYTkhRVkZSUW1jM09IZEJVVEJGUzJkM2IwNXFUbTBLVFRKTmVGcFhSWHBhYW14c1dXcEdhVmxVV1hoWmFsSm9UMFJvYVZwRWEzcFpWMFpvVDBSYWFFOUVVbTFPVkZac1dWUkJaa0puYjNKQ1owVkZRVmxQTHdwTlFVVlBRa0pGVFVRelNteGFiazEyWVVkV2FGcElUWFppVjBad1ltcEJZVUpuYjNKQ1owVkZRVmxQTDAxQlJWQkNRWGROUTJwRmQwNTZSVEJPZWxVeENrMXFhM2RNWjFsTFMzZFpRa0pCUjBSMmVrRkNSVUZSWjBSQ05XOWtTRkozWTNwdmRrd3laSEJrUjJneFdXazFhbUl5TUhaaFNGWnVXakpzZFZveVdtZ0tXVEpWZDBkQldVdExkMWxDUWtGSFJIWjZRVUpGVVZGTFJFRm5lVTVVWTNsTlJHTXdUWHBDZUVKbmIzSkNaMFZGUVZsUEwwMUJSVk5DUjAxTldWZG9NQXBrU0VKNlQyazRkbG95YkRCaFNGWnBURzFPZG1KVE9XOWtWMlJ1WVZjMWJscHRSbXBhVXpseVdsaEtkVnBYZUhwTVYwNTJZbGN4TVdKdGJEQmxVemgxQ2xveWJEQmhTRlpwVEROa2RtTnRkRzFpUnprelkzazVhV1JYYkhOYVF6RjBXVmROZFdWWFJuUmlSVUo1V2xkYWVrd3lhR3haVjFKNlRESXhhR0ZYTkhjS1QwRlpTMHQzV1VKQ1FVZEVkbnBCUWtWM1VYRkVRMmN5VFRKWmVsbDZSbXhaVkU1dFQxZFdhVTFYU21oT2FrWnBUa2RGTkU5SFNtdFBWRTVvV1ZkRk5BcE9iVVUwVGtkWk1VNVhWbWhOUTBWSFEybHpSMEZSVVVKbk56aDNRVkpSUlVWM2QxSmtNamw1WVRKYWMySXpaR1phUjJ4NlkwZEdNRmt5WjNkYVFWbExDa3QzV1VKQ1FVZEVkbnBCUWtaUlVsZEVSbEp2WkVoU2QyTjZiM1pNTW1Sd1pFZG9NVmxwTldwaU1qQjJZVWhXYmxveWJIVmFNbHBvV1RKVmRtRXlWbmtLWW0xV2MyTjVNV3BpTWpGMFpGYzFjR1JJYTNaWlYwNHdZVmM1ZFdONU9YbGtWelY2VEhwTmVrNXFTVEJQUkdNeFRVUkZNa3d5UmpCa1IxWjBZMGhTZWdwTWVrVjNSbWRaUzB0M1dVSkNRVWRFZG5wQlFrWm5VVWxFUVZwM1pGZEtjMkZYVFhkU1oxbExTM2RaUWtKQlIwUjJla0ZDUjBGUk5FUkVXbmxhV0VKMkNrOXRhREZhTW1Sd1ltMWtiVmxYVG14TU1uUnNZMjAxYkdKSVRYUlpNamwwWWxoV2RXRllValZQYmtwc1dtcHdlVnBYV25wTU1taHNXVmRTZWt3eU1XZ0tZVmMwZDJkWmMwZERhWE5IUVZGUlFqRnVhME5DUVVsRlpsRlNOMEZJYTBGa2QwUmtVRlJDY1hoelkxSk5iVTFhU0doNVdscDZZME52YTNCbGRVNDBPQXB5Wml0SWFXNUxRVXg1Ym5WcVowRkJRV0ZDYUN0WlpsQkJRVUZGUVhkQ1NVMUZXVU5KVVVSUmVVczNXREpZUzBGS2IwVlhVRVZwVlRneVluTlFkMnQxQ2tJM2JXZFNhakJZU1VKUmNVbDFTSEpUVVVsb1FVeHBWREJtYW5aaGFVZ3hTVW93Y0NzMGNHeEdTRFJRYW01cGJHUlNSVzUwTDFabFpHMUZOVU5TVUVJS1RVRnZSME5EY1VkVFRUUTVRa0ZOUkVFeVowRk5SMVZEVFZGRFoxSTFXamRITUhZNFpsbEVSVzl4VTBNMlRrRlNkVVEyUlhKTWFsVnFMM0pOVjNCemFRcDJPR2w2UW1wb1RVRkhORmx6TnpoVVNEaG1jVVpWV25aTFFUaERUVWQzUlRSNmRVcFdOblpxTkhaMmMwWXJLekpsTlhKc01EUnljMHBMZW14RlQzQndDakZNUWpCSlVIVldURXBLYVRWMGNtVTNlbEYxTldjeEszWnJLMkp1UVQwOUNpMHRMUzB0UlU1RUlFTkZVbFJKUmtsRFFWUkZMUzB0TFMwSyJ9fX19"}],"timestampVerificationData":{"rfc3161Timestamps":[{"signedTimestamp":"MIICyTADAgEAMIICwAYJKoZIhvcNAQcCoIICsTCCAq0CAQMxDTALBglghkgBZQMEAgEwgbgGCyqGSIb3DQEJEAEEoIGoBIGlMIGiAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQgR0To2Ev67fMbng7zhxNPRE0px1JskZPyKl248kSsC48CFQDDGgK5S7O24hDhORh5dHiDxWcIYBgPMjAyNjA5MDIxMTU1MzhaMAMCAQGgMqQwMC4xFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEVMBMGA1UEAxMMc2lnc3RvcmUtdHNhoAAxggHaMIIB1gIBATBRMDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAsGCWCGSAFlAwQCAaCB/DAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTI2MDkwMjExNTUzOFowLwYJKoZIhvcNAQkEMSIEIEvMCLwKUNcI5bhcltde8tQJbHAYFisHWV0VcmjxKwhQMIGOBgsqhkiG9w0BCRACLzF/MH0wezB5BCCF+Se8B6tiysO0Q1bBDvyBssaIP9p6uebYcNnROs0FtzBVMD2kOzA5MRUwEwYDVQQKEwxzaWdzdG9yZS5kZXYxIDAeBgNVBAMTF3NpZ3N0b3JlLXRzYS1zZWxmc2lnbmVkAhQ6E1QvDJBh7rzBQy/Lio6LKiOLDDAKBggqhkjOPQQDAgRmMGQCMF6jlzoBJBK0Vq/XeIpb6l0kZkR75wZIakVyJZuBiSugZ4tR5fJ1OWuxZZfbHNufWwIwEUjDVbIY+jzanNMrZju0gAHUgOv61sgR8HDRo9y9bRwt9406dTsa5IaX567LhS81"}]}},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"B0AXv9gJEGomo8dYyG6AsAlSaElr9wsKDnpEBAamNlE="},"signature":"MEQCIHTeRCyXgWT8OHv6n3hOVsVe87Ezgy3/7NRNIOlJdgZ2AiBmn3JV0xOwf/a+AMsAkdiIU2rVFY+9PEd0XR8wHu9YxA=="}}
 
1
+ {"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHQTCCBsegAwIBAgIUAPHjxq4hdJxNf4RxmLu8uULQNIwwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYxMDE5MTEwNzMxWhcNMjYxMDE5MTExNzMxWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEq0iceXQ9CMLjfR5xof2FhfVA9ojuXUSb0WdJ/bpIb9T9z3zfUsq6IzMC7MgKLixHiLue5q+cgngXSv41fKrT4aOCBeYwggXiMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAfBgNVHSMEGDAWgBTf0+nPViQRlvmo2OkoVaLGLhhkPzBvBgNVHREBAf8EZTBjhmFodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvLmdpdGh1Yi93b3JrZmxvd3MvYnVpbGQtbWFjLnlhbWxAcmVmcy9oZWFkcy9tYWluMDkGCisGAQQBg78wAQEEK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wHwYKKwYBBAGDvzABAgQRd29ya2Zsb3dfZGlzcGF0Y2gwNgYKKwYBBAGDvzABAwQoZmUyYmI2NmZlZTZjMmE3N2VjY2YwOGEwNTA4ZGM1NzQyOGQ0ODhlZDAbBgorBgEEAYO/MAEEBA1CdWlsZCAobWFjT1MpMCsGCisGAQQBg78wAQUEHWh1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MB0GCisGAQQBg78wAQYED3JlZnMvaGVhZHMvbWFpbjA7BgorBgEEAYO/MAEIBC0MK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wcQYKKwYBBAGDvzABCQRjDGFodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvLmdpdGh1Yi93b3JrZmxvd3MvYnVpbGQtbWFjLnlhbWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoZmUyYmI2NmZlZTZjMmE3N2VjY2YwOGEwNTA4ZGM1NzQyOGQ0ODhlZDAdBgorBgEEAYO/MAELBA8MDWdpdGh1Yi1ob3N0ZWQwQAYKKwYBBAGDvzABDAQyDDBodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkwOAYKKwYBBAGDvzABDQQqDChmZTJiYjY2ZmVlNmMyYTc3ZWNjZjA4YTA1MDhkYzU3NDI4ZDQ4OGVkMB8GCisGAQQBg78wAQ4EEQwPcmVmcy9oZWFkcy9tYWluMBoGCisGAQQBg78wAQ8EDAwKMTA3MTQ3NTUyOTAuBgorBgEEAYO/MAEQBCAMHmh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZTAYBgorBgEEAYO/MAERBAoMCDI1NzIwNzQzMHEGCisGAQQBg78wARIEYwxhaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLW1hYy55YW1sQHJlZnMvaGVhZHMvbWFpbjA4BgorBgEEAYO/MAETBCoMKGZlMmJiNjZmZWU2YzJhNzdlY2NmMDhhMDUwOGRjNTc0MjhkNDg4ZWQwIQYKKwYBBAGDvzABFAQTDBF3b3JrZmxvd19kaXNwYXRjaDBkBgorBgEEAYO/MAEVBFYMVGh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS9hY3Rpb25zL3J1bnMvMzkyMzk1NzkyOTQvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzBGBgorBgEEAYO/MAEYBDgMNnJlcG86aHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHk6cmVmOnJlZnMvaGVhZHMvbWFpbjCBiQYKKwYBBAHWeQIEAgR7BHkAdwB1AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABoVPYYMwAAAQDAEYwRAIgEpSD0zIIZii/O5/ahKwjgS7pqLR5Dn8aSsp5GieOH08CIHNJ2IXv2P3WM6DIF2E3oNx4FxwyAgEBE3uPhYUid9qEMAoGCCqGSM49BAMDA2gAMGUCMQCfFEVnj0lLsAx0W1MA9fFqJ9jC+qCxt8PuyIp0Ce516ZgGCRo4xjsyS8pZpPgBJCcCMAUWgqo4PvUg5nbb68Wx/3O0xyVEkAcGhvbOS6w+556mPWA0lShyMX7MskepTClXuw=="},"tlogEntries":[{"logIndex":"3320116374","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1792408052","inclusionPromise":{"signedEntryTimestamp":"MEQCIDEauh69JpSR27Lo96DFSADoi+XOi271pyE/bp+0U/VGAiAxOPbFUp7PSfZXSF6mSoDODPcF1NRy43rDNfv+Dpe65g=="},"inclusionProof":{"logIndex":"3198212112","rootHash":"FSVJeDQFmAeOK02XLK/ZA9HrCBWo9vuvbAEBAtnmwBY=","treeSize":"3198212115","hashes":["V1U5Ku31De9B483NtZk/hfaDXxAb4DmsuKJhCy5BSpA=","zEXCVUW456azCsWgCvfuCWXR+oDEbFgKjsyqlYgaWsQ=","Z6P0BpwZexXp1aurbWxcD/arH6GY+SKMUbsYmC8b4QY=","CRaaLxGfk6OnDsoLNC+qt/FazULyIW5eUzB6DkBm2Dw=","PJRsVvScXNHmqQge+wrG01cIyckZNEkkYLfYRFm0H14=","f4MktXqhBPk7ruDBxwgqTvXa7eCNzak9cUObXS0eTxI=","OlLDeTiZ1vIMDel4vGDtbNVnrFnzDe1MFV5rBN5Ep4o=","uCZQe757l2sS1c05Y7TzOwEm+X8MeGLIUCkEOmFVOz4=","nyQV/+cWQUG5Hb2PKjQQNkQIJmz2qzAZKBQlkHGIknM=","G+nk7mgE5h6dUmv2UY7NDJrY3WvrZY31raaO1AETt+o=","qlTWNDzERnTBQVcHHXXVPjiUP0SsikGxfcxVlgqVFDo=","gg9GNApNke3+zNhl4tsWtmIycCFrOMCB3lys6XuSQNQ=","NlOclldmKPA1tMKIskqHAwuQDYHp31YwpK+OOMrMccc=","qxzHanAzz57SDdmJe0B7bJK72NTIBbwEMGBBKvDOROw=","xH/DCseLHr9eKoYT8qsORZK7zVdEGYWHuVtsVrD95wY="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n3198212115\nFSVJeDQFmAeOK02XLK/ZA9HrCBWo9vuvbAEBAtnmwBY=\n\n— rekor.sigstore.dev wNI9ajBGAiEA18F1SheBX6fV3r7hg/bL6VIoysGVWwqYYTdZBhyzV2ACIQD80S/ncL92Y4y8ORjEqnbldS4i1SDNhhXcgaZT0s+xdQ==\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiI5NDM0NDg2MjdlMjgwYjk3ZGQxZTgzYThkMGVhYTc3NGM0NmMzOTBmZTY0YjVhN2NlMzY2YzExYzVjNjk0OWY4In19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FUUNJRG5wdTBDd2x4VkJrSG15ZHNlT3BSRGpoVFh4M2pTMTkzWlVFVmFoT3c5ckFpQldCSUFVZUxtenFlclNEelJpS1ltTG4wRVNabzd6S1lpQVV5MDFQR1B3dlE9PSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaFJWRU5EUW5ObFowRjNTVUpCWjBsVlFWQklhbmh4Tkdoa1NuaE9aalJTZUcxTWRUaDFWVXhSVGtsM2QwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFplRTFFUlRWTlZFVjNUbnBOZUZkb1kwNU5hbGw0VFVSRk5VMVVSWGhPZWsxNFYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZ4TUdsalpWaFJPVU5OVEdwbVVqVjRiMll5Um1obVZrRTViMnAxV0ZWVFlqQlhaRW9LTDJKd1NXSTVWRGw2TTNwbVZYTnhOa2w2VFVNM1RXZExUR2w0U0dsTWRXVTFjU3RqWjI1bldGTjJOREZtUzNKVU5HRlBRMEpsV1hkbloxaHBUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXWkNaMDVXU0ZOTlJVZEVRVmRuUWxSbUNqQXJibEJXYVZGU2JIWnRiekpQYTI5V1lVeEhUR2hvYTFCNlFuWkNaMDVXU0ZKRlFrRm1PRVZhVkVKcWFHMUdiMlJJVW5kamVtOTJUREprY0dSSGFERUtXV2sxYW1JeU1IWmhTRlp1V2pKc2RWb3lXbWhaTWxWMllUSldlV0p0Vm5OamVURnFZakl4ZEdSWE5YQmtTR3QyVEcxa2NHUkhhREZaYVRrellqTktjZ3BhYlhoMlpETk5kbGx1Vm5CaVIxRjBZbGRHYWt4dWJHaGlWM2hCWTIxV2JXTjVPVzlhVjBaclkzazVkRmxYYkhWTlJHdEhRMmx6UjBGUlVVSm5OemgzQ2tGUlJVVkxNbWd3WkVoQ2VrOXBPSFprUnpseVdsYzBkVmxYVGpCaFZ6bDFZM2sxYm1GWVVtOWtWMG94WXpKV2VWa3lPWFZrUjFaMVpFTTFhbUl5TUhjS1NIZFpTMHQzV1VKQ1FVZEVkbnBCUWtGblVWSmtNamw1WVRKYWMySXpaR1phUjJ4NlkwZEdNRmt5WjNkT1oxbExTM2RaUWtKQlIwUjJla0ZDUVhkUmJ3cGFiVlY1V1cxSk1rNXRXbXhhVkZwcVRXMUZNMDR5Vm1wWk1sbDNUMGRGZDA1VVFUUmFSMDB4VG5wUmVVOUhVVEJQUkdoc1drUkJZa0puYjNKQ1owVkZDa0ZaVHk5TlFVVkZRa0V4UTJSWGJITmFRMEZ2WWxkR2FsUXhUWEJOUTNOSFEybHpSMEZSVVVKbk56aDNRVkZWUlVoWGFERmFNbVJ3WW0xa2JWbFhUbXdLVERKMGJHTnROV3hpU0UxMFdUSTVkR0pZVm5WaFdGSTFUVUl3UjBOcGMwZEJVVkZDWnpjNGQwRlJXVVZFTTBwc1dtNU5kbUZIVm1oYVNFMTJZbGRHY0FwaWFrRTNRbWR2Y2tKblJVVkJXVTh2VFVGRlNVSkRNRTFMTW1nd1pFaENlazlwT0haa1J6bHlXbGMwZFZsWFRqQmhWemwxWTNrMWJtRllVbTlrVjBveENtTXlWbmxaTWpsMVpFZFdkV1JETldwaU1qQjNZMUZaUzB0M1dVSkNRVWRFZG5wQlFrTlJVbXBFUjBadlpFaFNkMk42YjNaTU1tUndaRWRvTVZscE5Xb0tZakl3ZG1GSVZtNWFNbXgxV2pKYWFGa3lWWFpoTWxaNVltMVdjMk41TVdwaU1qRjBaRmMxY0dSSWEzWk1iV1J3WkVkb01WbHBPVE5pTTBweVdtMTRkZ3BrTTAxMldXNVdjR0pIVVhSaVYwWnFURzVzYUdKWGVFRmpiVlp0WTNrNWIxcFhSbXRqZVRsMFdWZHNkVTFFWjBkRGFYTkhRVkZSUW1jM09IZEJVVzlGQ2t0bmQyOWFiVlY1V1cxSk1rNXRXbXhhVkZwcVRXMUZNMDR5Vm1wWk1sbDNUMGRGZDA1VVFUUmFSMDB4VG5wUmVVOUhVVEJQUkdoc1drUkJaRUpuYjNJS1FtZEZSVUZaVHk5TlFVVk1Ra0U0VFVSWFpIQmtSMmd4V1dreGIySXpUakJhVjFGM1VVRlpTMHQzV1VKQ1FVZEVkbnBCUWtSQlVYbEVSRUp2WkVoU2R3cGplbTkyVERKa2NHUkhhREZaYVRWcVlqSXdkbUZJVm01YU1teDFXakphYUZreVZYWmhNbFo1WW0xV2MyTjVNV3BpTWpGMFpGYzFjR1JJYTNkUFFWbExDa3QzV1VKQ1FVZEVkbnBCUWtSUlVYRkVRMmh0V2xSS2FWbHFXVEphYlZac1RtMU5lVmxVWXpOYVYwNXFXbXBCTkZsVVFURk5SR2hyV1hwVk0wNUVTVFFLV2tSUk5FOUhWbXROUWpoSFEybHpSMEZSVVVKbk56aDNRVkUwUlVWUmQxQmpiVlp0WTNrNWIxcFhSbXRqZVRsMFdWZHNkVTFDYjBkRGFYTkhRVkZSUWdwbk56aDNRVkU0UlVSQmQwdE5WRUV6VFZSUk0wNVVWWGxQVkVGMVFtZHZja0puUlVWQldVOHZUVUZGVVVKRFFVMUliV2d3WkVoQ2VrOXBPSFphTW13d0NtRklWbWxNYlU1MllsTTViMlJYWkc1aFZ6VnVXbTFHYWxwVVFWbENaMjl5UW1kRlJVRlpUeTlOUVVWU1FrRnZUVU5FU1RGT2VrbDNUbnBSZWsxSVJVY0tRMmx6UjBGUlVVSm5OemgzUVZKSlJWbDNlR2hoU0ZJd1kwaE5Oa3g1T1c1aFdGSnZaRmRKZFZreU9YUk1NbWd4V2pKa2NHSnRaRzFaVjA1c1RESjBiQXBqYlRWc1lraE5kRmt5T1hSaVdGWjFZVmhTTlV4NU5XNWhXRkp2WkZkSmRtUXlPWGxoTWxwellqTmtla3d5U2pGaFYzaHJURmN4YUZsNU5UVlpWekZ6Q2xGSVNteGFiazEyWVVkV2FGcElUWFppVjBad1ltcEJORUpuYjNKQ1owVkZRVmxQTDAxQlJWUkNRMjlOUzBkYWJFMXRTbWxPYWxwdFdsZFZNbGw2U21nS1RucGtiRmt5VG0xTlJHaG9UVVJWZDA5SFVtcE9WR013VFdwb2EwNUVaelJhVjFGM1NWRlpTMHQzV1VKQ1FVZEVkbnBCUWtaQlVWUkVRa1l6WWpOS2NncGFiWGgyWkRFNWEyRllUbmRaV0ZKcVlVUkNhMEpuYjNKQ1owVkZRVmxQTDAxQlJWWkNSbGxOVmtkb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJDbUpUT1c5a1YyUnVZVmMxYmxwdFJtcGFVemx5V2xoS2RWcFhlSHBNVjA1MllsY3hNV0p0YkRCbFV6bG9XVE5TY0dJeU5YcE1NMG94WW01TmRrMTZhM2tLVFhwck1VNTZhM2xQVkZGMldWaFNNRnBYTVhka1NFMTJUVlJCVjBKbmIzSkNaMFZGUVZsUEwwMUJSVmRDUVdkTlFtNUNNVmx0ZUhCWmVrSkhRbWR2Y2dwQ1owVkZRVmxQTDAxQlJWbENSR2ROVG01S2JHTkhPRFpoU0ZadVdqSnNkVm95V21oWk1sVjJZVEpXZVdKdFZuTmplVEZxWWpJeGRHUlhOWEJrU0dzMkNtTnRWbTFQYmtwc1dtNU5kbUZIVm1oYVNFMTJZbGRHY0dKcVEwSnBVVmxMUzNkWlFrSkJTRmRsVVVsRlFXZFNOMEpJYTBGa2QwSXhRVTR3T1UxSGNrY0tlSGhGZVZsNGEyVklTbXh1VG5kTGFWTnNOalF6YW5sMEx6UmxTMk52UVhaTFpUWlBRVUZCUW05V1VGbFpUWGRCUVVGUlJFRkZXWGRTUVVsblJYQlRSQW93ZWtsSldtbHBMMDgxTDJGb1MzZHFaMU0zY0hGTVVqVkViamhoVTNOd05VZHBaVTlJTURoRFNVaE9TakpKV0hZeVVETlhUVFpFU1VZeVJUTnZUbmcwQ2taNGQzbEJaMFZDUlROMVVHaFpWV2xrT1hGRlRVRnZSME5EY1VkVFRUUTVRa0ZOUkVFeVowRk5SMVZEVFZGRFprWkZWbTVxTUd4TWMwRjRNRmN4VFVFS09XWkdjVW81YWtNcmNVTjRkRGhRZFhsSmNEQkRaVFV4TmxwblIwTlNielI0YW5ONVV6aHdXbkJRWjBKS1EyTkRUVUZWVjJkeGJ6UlFkbFZuTlc1aVlnbzJPRmQ0THpOUE1IaDVWa1ZyUVdOSGFIWmlUMU0yZHlzMU5UWnRVRmRCTUd4VGFIbE5XRGROYzJ0bGNGUkRiRmgxZHowOUNpMHRMUzB0UlU1RUlFTkZVbFJKUmtsRFFWUkZMUzB0TFMwSyJ9fX19"}],"timestampVerificationData":{"rfc3161Timestamps":[{"signedTimestamp":"MIICyjADAgEAMIICwQYJKoZIhvcNAQcCoIICsjCCAq4CAQMxDTALBglghkgBZQMEAgEwgbgGCyqGSIb3DQEJEAEEoIGoBIGlMIGiAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQgOpiyStE9Si28MEyoUulonYOaAK4bSEdrOE5GXw68Q34CFQCdbhokBEPVFYCPstMauzp0CATEFRgPMjAyNjEwMTkxMTA3MzJaMAMCAQGgMqQwMC4xFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEVMBMGA1UEAxMMc2lnc3RvcmUtdHNhoAAxggHbMIIB1wIBATBRMDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAsGCWCGSAFlAwQCAaCB/DAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTI2MTAxOTExMDczMlowLwYJKoZIhvcNAQkEMSIEIFcJ4KGJLzxoWj61TdXO7qxPDanDxJw1J4pNTGM7VG9uMIGOBgsqhkiG9w0BCRACLzF/MH0wezB5BCCF+Se8B6tiysO0Q1bBDvyBssaIP9p6uebYcNnROs0FtzBVMD2kOzA5MRUwEwYDVQQKEwxzaWdzdG9yZS5kZXYxIDAeBgNVBAMTF3NpZ3N0b3JlLXRzYS1zZWxmc2lnbmVkAhQ6E1QvDJBh7rzBQy/Lio6LKiOLDDAKBggqhkjOPQQDAgRnMGUCMQC6n/WFrLVhbgnBRUEt+PHfXoy4KHXq12xylJ45FeAVItesnpUx6UXEDz0wWvP1JYkCMEjW29fuIQCEAbS2hxRGiDIrpk8qP7mnR6vg9oO6pELtO99FFfCmSE6+tg6r8doyYw=="}]}},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"lDRIYn4oC5fdHoOo0OqndMRsOQ/mS1p842bBHFxpSfg="},"signature":"MEQCIDnpu0CwlxVBkHmydseOpRDjhTXx3jS193ZUEVahOw9rAiBWBIAUeLmzqerSDzRiKYmLn0ESZo7zKYiAUy01PGPwvQ=="}}
build/torch212-metal-aarch64-darwin/symbols.json ADDED
@@ -0,0 +1,169 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema_version": 1,
3
+ "module": "_ggml_quantization_metal_fe2bb66",
4
+ "functions": [
5
+ {
6
+ "name": "dequantize",
7
+ "qualname": "dequantize",
8
+ "module": "_ggml_quantization_metal_fe2bb66",
9
+ "kind": "function",
10
+ "doc": "`(rows, bytes_per_row)` uint8 blocks -> `(rows, cols)` values of `dtype`.",
11
+ "signature": {
12
+ "parameters": [
13
+ {
14
+ "name": "blocks",
15
+ "kind": "POSITIONAL_OR_KEYWORD",
16
+ "default": null,
17
+ "annotation": "torch.Tensor"
18
+ },
19
+ {
20
+ "name": "ggml_type",
21
+ "kind": "POSITIONAL_OR_KEYWORD",
22
+ "default": null,
23
+ "annotation": "int"
24
+ },
25
+ {
26
+ "name": "rows",
27
+ "kind": "POSITIONAL_OR_KEYWORD",
28
+ "default": null,
29
+ "annotation": "int"
30
+ },
31
+ {
32
+ "name": "cols",
33
+ "kind": "POSITIONAL_OR_KEYWORD",
34
+ "default": null,
35
+ "annotation": "int"
36
+ },
37
+ {
38
+ "name": "dtype",
39
+ "kind": "POSITIONAL_OR_KEYWORD",
40
+ "default": null,
41
+ "annotation": "torch.dtype"
42
+ }
43
+ ],
44
+ "return_annotation": "torch.Tensor"
45
+ }
46
+ },
47
+ {
48
+ "name": "get_rows",
49
+ "qualname": "get_rows",
50
+ "module": "_ggml_quantization_metal_fe2bb66",
51
+ "kind": "function",
52
+ "doc": "The rows `indices` names, unpacked: `(rows, bytes_per_row)` uint8 -> `(len(indices), cols)`.\n\nggml's `get_rows`, which dequantizes as it gathers -- so reading a few rows out of a large table\nnever touches the rest.",
53
+ "signature": {
54
+ "parameters": [
55
+ {
56
+ "name": "blocks",
57
+ "kind": "POSITIONAL_OR_KEYWORD",
58
+ "default": null,
59
+ "annotation": "torch.Tensor"
60
+ },
61
+ {
62
+ "name": "indices",
63
+ "kind": "POSITIONAL_OR_KEYWORD",
64
+ "default": null,
65
+ "annotation": "torch.Tensor"
66
+ },
67
+ {
68
+ "name": "ggml_type",
69
+ "kind": "POSITIONAL_OR_KEYWORD",
70
+ "default": null,
71
+ "annotation": "int"
72
+ },
73
+ {
74
+ "name": "cols",
75
+ "kind": "POSITIONAL_OR_KEYWORD",
76
+ "default": null,
77
+ "annotation": "int"
78
+ },
79
+ {
80
+ "name": "dtype",
81
+ "kind": "POSITIONAL_OR_KEYWORD",
82
+ "default": null,
83
+ "annotation": "torch.dtype"
84
+ }
85
+ ],
86
+ "return_annotation": "torch.Tensor"
87
+ }
88
+ },
89
+ {
90
+ "name": "mul_mat_id",
91
+ "qualname": "mul_mat_id",
92
+ "module": "_ggml_quantization_metal_fe2bb66",
93
+ "kind": "function",
94
+ "doc": "One dispatch for a bank of routed experts: ggml's `mul_mv_id`.\n\n`blocks` is `(n_experts, out_features, bytes_per_row)`, `x` is `(n_tokens, in_features)`, and\n`ids` is `(n_tokens, n_used)` naming the expert each of a token's slots picked. The result is\n`(n_tokens, n_used, out_features)` f32, one row per slot.\n\nThe alternative is a gemv per expert per layer, whose arithmetic is dwarfed by the dispatch\naround it -- which is most of what a MoE decode step costs.",
95
+ "signature": {
96
+ "parameters": [
97
+ {
98
+ "name": "blocks",
99
+ "kind": "POSITIONAL_OR_KEYWORD",
100
+ "default": null,
101
+ "annotation": "torch.Tensor"
102
+ },
103
+ {
104
+ "name": "x",
105
+ "kind": "POSITIONAL_OR_KEYWORD",
106
+ "default": null,
107
+ "annotation": "torch.Tensor"
108
+ },
109
+ {
110
+ "name": "ids",
111
+ "kind": "POSITIONAL_OR_KEYWORD",
112
+ "default": null,
113
+ "annotation": "torch.Tensor"
114
+ },
115
+ {
116
+ "name": "ggml_type",
117
+ "kind": "POSITIONAL_OR_KEYWORD",
118
+ "default": null,
119
+ "annotation": "int"
120
+ },
121
+ {
122
+ "name": "out_features",
123
+ "kind": "POSITIONAL_OR_KEYWORD",
124
+ "default": null,
125
+ "annotation": "int"
126
+ }
127
+ ],
128
+ "return_annotation": "torch.Tensor"
129
+ }
130
+ },
131
+ {
132
+ "name": "mul_mat_vec",
133
+ "qualname": "mul_mat_vec",
134
+ "module": "_ggml_quantization_metal_fe2bb66",
135
+ "kind": "function",
136
+ "doc": "Fused dequantize-gemv: `x @ blocks.T` without unpacking `blocks`.\n\n`x` is `(rows, in_features)` and `rows` must be at most `MAX_GEMV_ROWS`. The result is f32\nwhatever `x`'s dtype was, since the kernel writes an f32 destination; cast it at the call site,\nwhere the cast can be fused into whatever consumes it.",
137
+ "signature": {
138
+ "parameters": [
139
+ {
140
+ "name": "blocks",
141
+ "kind": "POSITIONAL_OR_KEYWORD",
142
+ "default": null,
143
+ "annotation": "torch.Tensor"
144
+ },
145
+ {
146
+ "name": "x",
147
+ "kind": "POSITIONAL_OR_KEYWORD",
148
+ "default": null,
149
+ "annotation": "torch.Tensor"
150
+ },
151
+ {
152
+ "name": "ggml_type",
153
+ "kind": "POSITIONAL_OR_KEYWORD",
154
+ "default": null,
155
+ "annotation": "int"
156
+ },
157
+ {
158
+ "name": "out_features",
159
+ "kind": "POSITIONAL_OR_KEYWORD",
160
+ "default": null,
161
+ "annotation": "int"
162
+ }
163
+ ],
164
+ "return_annotation": "torch.Tensor"
165
+ }
166
+ }
167
+ ],
168
+ "layers": []
169
+ }
build/torch213-metal-aarch64-darwin/{_ggml_quantization_metal_63f3c1e.abi3.so → _ggml_quantization_metal_fe2bb66.abi3.so} RENAMED
@@ -1,3 +1,3 @@
1
  version https://git-lfs.github.com/spec/v1
2
- oid sha256:2bb7cc62bb7f24bcb3bba127f53386f4b85b4ec8e8f7b472146dbbe32be2ba8a
3
  size 3347416
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0ad8047db9a09b94dd783a19cbed3e8670721d7fdb7a9c54e17c79af4e3ff39a
3
  size 3347416
build/torch213-metal-aarch64-darwin/_ops.py CHANGED
@@ -1,9 +1,9 @@
1
  import torch
2
- from . import _ggml_quantization_metal_63f3c1e
3
- ops = torch.ops._ggml_quantization_metal_63f3c1e
4
 
5
  def add_op_namespace_prefix(op_name: str):
6
  """
7
  Prefix op by namespace.
8
  """
9
- return f"_ggml_quantization_metal_63f3c1e::{op_name}"
 
1
  import torch
2
+ from . import _ggml_quantization_metal_fe2bb66
3
+ ops = torch.ops._ggml_quantization_metal_fe2bb66
4
 
5
  def add_op_namespace_prefix(op_name: str):
6
  """
7
  Prefix op by namespace.
8
  """
9
+ return f"_ggml_quantization_metal_fe2bb66::{op_name}"
build/torch213-metal-aarch64-darwin/metadata.json CHANGED
@@ -1,9 +1,11 @@
1
  {
2
  "name": "ggml-quantization",
3
- "id": "_ggml_quantization_metal_63f3c1e",
4
  "version": 1,
 
5
  "license": "MIT",
6
  "python-depends": [],
 
7
  "backend": {
8
  "type": "metal"
9
  },
@@ -11,18 +13,19 @@
11
  "algorithm": "sha256",
12
  "files": {
13
  "__init__.py": "iPXgZXBgY3CzpNUSjmCovMVNPLBol1KBaNoTzkXp5mM=",
14
- "_ggml_quantization_metal_63f3c1e.abi3.so": "K7fMYrt/JLyzu6En9TOG9LhbTsjo97RyFG274yviuoo=",
15
- "_ops.py": "Ap/ials5aAa2giH9HUnXPFlmDos9zQ4ylpjIBpVUusQ="
 
16
  }
17
  },
18
  "provenance": {
19
  "kernel-builder": {
20
- "version": "0.17.0-dev0",
21
- "sha": "81f55ea30fd8f819dcf93a3c934dd584c895bd2f",
22
  "dirty": false
23
  },
24
  "kernel": {
25
- "sha": "63f3c1ea3f9eb1ba61b4a88bd93aaa86a84f55ea",
26
  "dirty": false
27
  }
28
  }
 
1
  {
2
  "name": "ggml-quantization",
3
+ "id": "_ggml_quantization_metal_fe2bb66",
4
  "version": 1,
5
+ "kernels-minver": "0.14.0",
6
  "license": "MIT",
7
  "python-depends": [],
8
+ "kernel-depends": [],
9
  "backend": {
10
  "type": "metal"
11
  },
 
13
  "algorithm": "sha256",
14
  "files": {
15
  "__init__.py": "iPXgZXBgY3CzpNUSjmCovMVNPLBol1KBaNoTzkXp5mM=",
16
+ "_ggml_quantization_metal_fe2bb66.abi3.so": "CtgEfbmgm5TdeDoZy+0+hnByHX/bepxU4Xx5r04/85o=",
17
+ "_ops.py": "7JPqKK8z3jmEj5qhydHkeSXOsZMXb424/1/5MR/BZuk=",
18
+ "symbols.json": "y6E2ftRiVpYGHN9aFeGUjoXci6YSNZRswRiLbHiaxFw="
19
  }
20
  },
21
  "provenance": {
22
  "kernel-builder": {
23
+ "version": "0.18.0-dev0",
24
+ "commit": "d054906a13710b811b96697b4635f03020842733",
25
  "dirty": false
26
  },
27
  "kernel": {
28
+ "commit": "fe2bb66fee6c2a77eccf08a0508dc57428d488ed",
29
  "dirty": false
30
  }
31
  }
build/torch213-metal-aarch64-darwin/metadata.json.sigstore CHANGED
@@ -1 +1 @@
1
- {"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHYDCCBuegAwIBAgIUA8sAqyEQ+d1zWIR1sDcdeHk8ITgwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwOTAyMTE1NTM5WhcNMjYwOTAyMTIwNTM5WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEyD+evNcCKEAjAItElDyckX5uZyfAhr/prMLHO0bBVavexnJbiiidskYP6Q1IwvtCRp7UZ4WL3UAxeh/6FDPZZ6OCBgYwggYCMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUfIou181hDwZihGOM5mCKg7CeUGwwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wbwYDVR0RAQH/BGUwY4ZhaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLW1hYy55YW1sQHJlZnMvaGVhZHMvbWFpbjA5BgorBgEEAYO/MAEBBCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMB8GCisGAQQBg78wAQIEEXdvcmtmbG93X2Rpc3BhdGNoMDYGCisGAQQBg78wAQMEKDYzZjNjMWVhM2Y5ZWIxYmE2MWI0YTg4YmQ5M2FhYTg2YTg0ZjU1ZWEwGwYKKwYBBAGDvzABBAQNQnVpbGQgKG1hY09TKTArBgorBgEEAYO/MAEFBB1odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eTAdBgorBgEEAYO/MAEGBA9yZWZzL2hlYWRzL21haW4wOwYKKwYBBAGDvzABCAQtDCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMHEGCisGAQQBg78wAQkEYwxhaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLW1hYy55YW1sQHJlZnMvaGVhZHMvbWFpbjA4BgorBgEEAYO/MAEKBCoMKDYzZjNjMWVhM2Y5ZWIxYmE2MWI0YTg4YmQ5M2FhYTg2YTg0ZjU1ZWEwHQYKKwYBBAGDvzABCwQPDA1naXRodWItaG9zdGVkMEAGCisGAQQBg78wAQwEMgwwaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MDgGCisGAQQBg78wAQ0EKgwoNjNmM2MxZWEzZjllYjFiYTYxYjRhODhiZDkzYWFhODZhODRmNTVlYTAfBgorBgEEAYO/MAEOBBEMD3JlZnMvaGVhZHMvbWFpbjAaBgorBgEEAYO/MAEPBAwMCjEwNzE0NzU1MjkwLgYKKwYBBAGDvzABEAQgDB5odHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2UwGAYKKwYBBAGDvzABEQQKDAgyNTcyMDc0MzBxBgorBgEEAYO/MAESBGMMYWh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS8uZ2l0aHViL3dvcmtmbG93cy9idWlsZC1tYWMueWFtbEByZWZzL2hlYWRzL21haW4wOAYKKwYBBAGDvzABEwQqDCg2M2YzYzFlYTNmOWViMWJhNjFiNGE4OGJkOTNhYWE4NmE4NGY1NWVhMCEGCisGAQQBg78wARQEEwwRd29ya2Zsb3dfZGlzcGF0Y2gwZAYKKwYBBAGDvzABFQRWDFRodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvYWN0aW9ucy9ydW5zLzMzNjI0ODc1MDE2L2F0dGVtcHRzLzEwFgYKKwYBBAGDvzABFgQIDAZwdWJsaWMwRgYKKwYBBAGDvzABGAQ4DDZyZXBvOmh1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5OnJlZjpyZWZzL2hlYWRzL21haW4wgYoGCisGAQQB1nkCBAIEfAR6AHgAdgDdPTBqxscRMmMZHhyZZzcCokpeuN48rf+HinKALynujgAAAaBh+Y1gAAAEAwBHMEUCIBfg15c5eccaeocxgMXI6GBHXqS9mdIvF7ox1I4UmUrTAiEAsdJhOCn1wQOCExqmEdnl7yTWhGzDR7vD6lFFAUyL2LMwCgYIKoZIzj0EAwMDZwAwZAIwKBJZNxW90QcAwDBVVvgynfx+lqXNNIELpssEh/jgpQoZm5pl+7haMgJI8dRNkSOkAjAk3XiK9HvNX9o7hAj4ZXtbAKmFUB3DAEZYtPWtF9fgCzOklAyr5D7IeCTwCDlNkzQ="},"tlogEntries":[{"logIndex":"2685308397","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1788350140","inclusionPromise":{"signedEntryTimestamp":"MEQCIAsetNKbPLA6RI31K7ZgnhEkS2KNKn1AhnSsNwWmffKUAiAu9BkH7zvHIUtrokJOZgxX9atGu0ygUNECmZEC+gRAGA=="},"inclusionProof":{"logIndex":"2563404135","rootHash":"DYBdiHsnsjYqTAQmBs55k/z7N9v0gpw4QXjVK2fYzvk=","treeSize":"2563404141","hashes":["ZK/RFlw3+PGyKRbHSiRgZrwTOd4GMbROs5nYy9B3QDE=","LsJ5V9ZzRpKAXqsius6kWXqBqzW5QGT7X6rSgGD236s=","GGf/tdV93RclZZT6MP/g5DnB80nTv78VEHfVYc9X+Us=","vxBXON0lWFaxdw8wPWmcp61nVYl5M3Yy5M/BoJnvJVE=","DZytdJO5CQEp6d+H6mGVanwoLfha/VuIaUinDUy063o=","2CXIOfDeMiOU4dMcijEg2ej5frR5iF7WdHbtwLsADXc=","PLcJyFMz+PX4iElWppigcChwVTSvWQKm0jAsw90GQ2U=","yx1C8qORgQZyEAY/S3IweAzoPmtYm93g7ouqo0XujJQ=","7qHI9xRdbuuSQzIEYjspvGUklwG3oQUfXM2gwWzda2o=","F+YuHc8O3xlVfXj9owStrUJMnQTwY/NpQ4opoGW8gKc=","H2EWTqHaPzZyLGzFNdm1vZITRk/1WU8HnEukaJgoG2E=","oHcOV2H5nfxCFsD3J616h87Eiz+X30EjHngkLoDqRJQ=","HiSowX/eHl/VU2Q+A0EfICMiguqx41ThMqJf2HY+o9M=","itRV5Rvo1MAx7h7FsTOgBX8gRAnu5MLfPmZWuLwhlhA=","eXSLrLqKSxRTixSP/k4YimriB2lufao6trqTrsxxlyg=","SndbMKVtcTenAkwi2JBfGzD+mhexp1qJbRIY+A1JRIU=","xH/DCseLHr9eKoYT8qsORZK7zVdEGYWHuVtsVrD95wY="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n2563404141\nDYBdiHsnsjYqTAQmBs55k/z7N9v0gpw4QXjVK2fYzvk=\n\n— rekor.sigstore.dev wNI9ajBFAiBJhuN1JNT2QLfHsimPG8Ec3oL0AIkx8ckS07sWSZp22gIhAIhmwCsub+MT+8QXFmGMZJI/yZLokQMSRFsMTDo2qQhr\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiIxN2I3ODNmY2QyMmU4YzZlMDIwNWNlMTdmYWNjMzUyZTg1NTI3NmRiNDNkNTUyNDZmMjRiZTU0ZTJmY2JkMDUyIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FWUNJUUM1dnUwNkNCMVJCRTZXN2xOQkFyblk2Q2dkUXk2cTYvRTIvc2M1UFZEUFBBSWhBTGZwdEVRR0ljbGRmT0xjTERCZ3Z6R1ROdVF2SmhuamlRUGEzY0RBcS9DTCIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaFpSRU5EUW5WbFowRjNTVUpCWjBsVlFUaHpRWEY1UlZFclpERjZWMGxTTVhORVkyUmxTR3M0U1ZSbmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDlVUVhsTlZFVXhUbFJOTlZkb1kwNU5hbGwzVDFSQmVVMVVTWGRPVkUwMVYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVY1UkN0bGRrNWpRMHRGUVdwQlNYUkZiRVI1WTJ0WU5YVmFlV1pCYUhJdmNISk5URWdLVHpCaVFsWmhkbVY0YmtwaWFXbHBaSE5yV1ZBMlVURkpkM1owUTFKd04xVmFORmRNTTFWQmVHVm9MelpHUkZCYVdqWlBRMEpuV1hkbloxbERUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlZtU1c5MUNqRTRNV2hFZDFwcGFFZFBUVFZ0UTB0bk4wTmxWVWQzZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJKM1dVUldVakJTUVZGSUwwSkhWWGRaTkZwb1lVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKb01Wb3laSEJpYldSdFdWZE9iQXBNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk1lVFZ1WVZoU2IyUlhTWFprTWpsNVlUSmFjMkl6WkhwTU1rb3hZVmQ0YTB4WE1XaFplVFUxQ2xsWE1YTlJTRXBzV201TmRtRkhWbWhhU0UxMllsZEdjR0pxUVRWQ1oyOXlRbWRGUlVGWlR5OU5RVVZDUWtOMGIyUklVbmRqZW05MlRETlNkbUV5Vm5VS1RHMUdhbVJIYkhaaWJrMTFXakpzTUdGSVZtbGtXRTVzWTIxT2RtSnVVbXhpYmxGMVdUSTVkRTFDT0VkRGFYTkhRVkZSUW1jM09IZEJVVWxGUlZoa2RncGpiWFJ0WWtjNU0xZ3lVbkJqTTBKb1pFZE9iMDFFV1VkRGFYTkhRVkZSUW1jM09IZEJVVTFGUzBSWmVscHFUbXBOVjFab1RUSlpOVnBYU1hoWmJVVXlDazFYU1RCWlZHYzBXVzFSTlUweVJtaFpWR2N5V1ZSbk1GcHFWVEZhVjBWM1IzZFpTMHQzV1VKQ1FVZEVkbnBCUWtKQlVVNVJibFp3WWtkUlowdEhNV2dLV1RBNVZFdFVRWEpDWjI5eVFtZEZSVUZaVHk5TlFVVkdRa0l4YjJSWFpHNWhWelZ1V20xR2FscFRPWEphV0VwMVdsZDRla3hYVG5aaVZ6RXhZbTFzTUFwbFZFRmtRbWR2Y2tKblJVVkJXVTh2VFVGRlIwSkJPWGxhVjFwNlRESm9iRmxYVW5wTU1qRm9ZVmMwZDA5M1dVdExkMWxDUWtGSFJIWjZRVUpEUVZGMENrUkRkRzlrU0ZKM1kzcHZka3d6VW5aaE1sWjFURzFHYW1SSGJIWmliazExV2pKc01HRklWbWxrV0U1c1kyMU9kbUp1VW14aWJsRjFXVEk1ZEUxSVJVY0tRMmx6UjBGUlVVSm5OemgzUVZGclJWbDNlR2hoU0ZJd1kwaE5Oa3g1T1c1aFdGSnZaRmRKZFZreU9YUk1NbWd4V2pKa2NHSnRaRzFaVjA1c1RESjBiQXBqYlRWc1lraE5kRmt5T1hSaVdGWjFZVmhTTlV4NU5XNWhXRkp2WkZkSmRtUXlPWGxoTWxwellqTmtla3d5U2pGaFYzaHJURmN4YUZsNU5UVlpWekZ6Q2xGSVNteGFiazEyWVVkV2FGcElUWFppVjBad1ltcEJORUpuYjNKQ1owVkZRVmxQTDAxQlJVdENRMjlOUzBSWmVscHFUbXBOVjFab1RUSlpOVnBYU1hnS1dXMUZNazFYU1RCWlZHYzBXVzFSTlUweVJtaFpWR2N5V1ZSbk1GcHFWVEZhVjBWM1NGRlpTMHQzV1VKQ1FVZEVkbnBCUWtOM1VWQkVRVEZ1WVZoU2J3cGtWMGwwWVVjNWVtUkhWbXROUlVGSFEybHpSMEZSVVVKbk56aDNRVkYzUlUxbmQzZGhTRkl3WTBoTk5reDVPVzVoV0ZKdlpGZEpkVmt5T1hSTU1tZ3hDbG95WkhCaWJXUnRXVmRPYkV3eWRHeGpiVFZzWWtoTmRGa3lPWFJpV0ZaMVlWaFNOVTFFWjBkRGFYTkhRVkZSUW1jM09IZEJVVEJGUzJkM2IwNXFUbTBLVFRKTmVGcFhSWHBhYW14c1dXcEdhVmxVV1hoWmFsSm9UMFJvYVZwRWEzcFpWMFpvVDBSYWFFOUVVbTFPVkZac1dWUkJaa0puYjNKQ1owVkZRVmxQTHdwTlFVVlBRa0pGVFVRelNteGFiazEyWVVkV2FGcElUWFppVjBad1ltcEJZVUpuYjNKQ1owVkZRVmxQTDAxQlJWQkNRWGROUTJwRmQwNTZSVEJPZWxVeENrMXFhM2RNWjFsTFMzZFpRa0pCUjBSMmVrRkNSVUZSWjBSQ05XOWtTRkozWTNwdmRrd3laSEJrUjJneFdXazFhbUl5TUhaaFNGWnVXakpzZFZveVdtZ0tXVEpWZDBkQldVdExkMWxDUWtGSFJIWjZRVUpGVVZGTFJFRm5lVTVVWTNsTlJHTXdUWHBDZUVKbmIzSkNaMFZGUVZsUEwwMUJSVk5DUjAxTldWZG9NQXBrU0VKNlQyazRkbG95YkRCaFNGWnBURzFPZG1KVE9XOWtWMlJ1WVZjMWJscHRSbXBhVXpseVdsaEtkVnBYZUhwTVYwNTJZbGN4TVdKdGJEQmxVemgxQ2xveWJEQmhTRlpwVEROa2RtTnRkRzFpUnprelkzazVhV1JYYkhOYVF6RjBXVmROZFdWWFJuUmlSVUo1V2xkYWVrd3lhR3haVjFKNlRESXhhR0ZYTkhjS1QwRlpTMHQzV1VKQ1FVZEVkbnBCUWtWM1VYRkVRMmN5VFRKWmVsbDZSbXhaVkU1dFQxZFdhVTFYU21oT2FrWnBUa2RGTkU5SFNtdFBWRTVvV1ZkRk5BcE9iVVUwVGtkWk1VNVhWbWhOUTBWSFEybHpSMEZSVVVKbk56aDNRVkpSUlVWM2QxSmtNamw1WVRKYWMySXpaR1phUjJ4NlkwZEdNRmt5WjNkYVFWbExDa3QzV1VKQ1FVZEVkbnBCUWtaUlVsZEVSbEp2WkVoU2QyTjZiM1pNTW1Sd1pFZG9NVmxwTldwaU1qQjJZVWhXYmxveWJIVmFNbHBvV1RKVmRtRXlWbmtLWW0xV2MyTjVNV3BpTWpGMFpGYzFjR1JJYTNaWlYwNHdZVmM1ZFdONU9YbGtWelY2VEhwTmVrNXFTVEJQUkdNeFRVUkZNa3d5UmpCa1IxWjBZMGhTZWdwTWVrVjNSbWRaUzB0M1dVSkNRVWRFZG5wQlFrWm5VVWxFUVZwM1pGZEtjMkZYVFhkU1oxbExTM2RaUWtKQlIwUjJla0ZDUjBGUk5FUkVXbmxhV0VKMkNrOXRhREZhTW1Sd1ltMWtiVmxYVG14TU1uUnNZMjAxYkdKSVRYUlpNamwwWWxoV2RXRllValZQYmtwc1dtcHdlVnBYV25wTU1taHNXVmRTZWt3eU1XZ0tZVmMwZDJkWmIwZERhWE5IUVZGUlFqRnVhME5DUVVsRlprRlNOa0ZJWjBGa1owUmtVRlJDY1hoelkxSk5iVTFhU0doNVdscDZZME52YTNCbGRVNDBPQXB5Wml0SWFXNUxRVXg1Ym5WcVowRkJRV0ZDYUN0Wk1XZEJRVUZGUVhkQ1NFMUZWVU5KUW1abk1UVmpOV1ZqWTJGbGIyTjRaMDFZU1RaSFFraFljVk01Q20xa1NYWkdOMjk0TVVrMFZXMVZjbFJCYVVWQmMyUkthRTlEYmpGM1VVOURSWGh4YlVWa2JtdzNlVlJYYUVkNlJGSTNka1EyYkVaR1FWVjVUREpNVFhjS1EyZFpTVXR2V2tsNmFqQkZRWGROUkZwM1FYZGFRVWwzUzBKS1drNTRWemt3VVdOQmQwUkNWbFoyWjNsdVpuZ3JiSEZZVGs1SlJVeHdjM05GYUM5cVp3cHdVVzlhYlRWd2JDczNhR0ZOWjBwSk9HUlNUbXRUVDJ0QmFrRnJNMWhwU3psSWRrNVlPVzgzYUVGcU5GcFlkR0pCUzIxR1ZVSXpSRUZGV2xsMFVGZDBDa1k1Wm1kRGVrOXJiRUY1Y2pWRU4wbGxRMVIzUTBSc1RtdDZVVDBLTFMwdExTMUZUa1FnUTBWU1ZFbEdTVU5CVkVVdExTMHRMUW89In19fX0="}],"timestampVerificationData":{"rfc3161Timestamps":[{"signedTimestamp":"MIICyjADAgEAMIICwQYJKoZIhvcNAQcCoIICsjCCAq4CAQMxDTALBglghkgBZQMEAgEwgbgGCyqGSIb3DQEJEAEEoIGoBIGlMIGiAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQgIYXbfiWINeZSXjjiskHbXgmvL88876HC603DMx4Q9q0CFQCrtNJPdmF9O2vG8cV474rkByR/thgPMjAyNjA5MDIxMTU1MzlaMAMCAQGgMqQwMC4xFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEVMBMGA1UEAxMMc2lnc3RvcmUtdHNhoAAxggHbMIIB1wIBATBRMDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAsGCWCGSAFlAwQCAaCB/DAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTI2MDkwMjExNTUzOVowLwYJKoZIhvcNAQkEMSIEIKIRhpD/R4r4CGOldoIofDxKJpTRaxT8612K5ADGs7VAMIGOBgsqhkiG9w0BCRACLzF/MH0wezB5BCCF+Se8B6tiysO0Q1bBDvyBssaIP9p6uebYcNnROs0FtzBVMD2kOzA5MRUwEwYDVQQKEwxzaWdzdG9yZS5kZXYxIDAeBgNVBAMTF3NpZ3N0b3JlLXRzYS1zZWxmc2lnbmVkAhQ6E1QvDJBh7rzBQy/Lio6LKiOLDDAKBggqhkjOPQQDAgRnMGUCMQDdBuHEvqRV11MBdhkaCZ52ENv7FeZEfAK2GROLlga1OqeDFgnviuVdyoT9TdJSrA8CMHEbORtv/pqRR9m7tGc5qluxDoPs1r3YHCTbzqY8YfKVQRpNd9J3OOMnvaVfBlWQbA=="}]}},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"F7eD/NIujG4CBc4X+sw1LoVSdttD1VJG8kvlTi/L0FI="},"signature":"MEYCIQC5vu06CB1RBE6W7lNBArnY6CgdQy6q6/E2/sc5PVDPPAIhALfptEQGIcldfOLcLDBgvzGTNuQvJhnjiQPa3cDAq/CL"}}
 
1
+ {"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHQjCCBsigAwIBAgIUHV16X77YvQSUojxGpbw/re20lBkwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYxMDE5MTEwNzMyWhcNMjYxMDE5MTExNzMyWjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEMiTvwWcHMCXA3PrTEsCDYeHcrdrDr/w/vCqjiTysLOSUBt+1I49/0SDAIKw4f8NuvUAYzGLixcpqzVrLtBLCYaOCBecwggXjMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAfBgNVHSMEGDAWgBTf0+nPViQRlvmo2OkoVaLGLhhkPzBvBgNVHREBAf8EZTBjhmFodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvLmdpdGh1Yi93b3JrZmxvd3MvYnVpbGQtbWFjLnlhbWxAcmVmcy9oZWFkcy9tYWluMDkGCisGAQQBg78wAQEEK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wHwYKKwYBBAGDvzABAgQRd29ya2Zsb3dfZGlzcGF0Y2gwNgYKKwYBBAGDvzABAwQoZmUyYmI2NmZlZTZjMmE3N2VjY2YwOGEwNTA4ZGM1NzQyOGQ0ODhlZDAbBgorBgEEAYO/MAEEBA1CdWlsZCAobWFjT1MpMCsGCisGAQQBg78wAQUEHWh1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MB0GCisGAQQBg78wAQYED3JlZnMvaGVhZHMvbWFpbjA7BgorBgEEAYO/MAEIBC0MK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wcQYKKwYBBAGDvzABCQRjDGFodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvLmdpdGh1Yi93b3JrZmxvd3MvYnVpbGQtbWFjLnlhbWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoZmUyYmI2NmZlZTZjMmE3N2VjY2YwOGEwNTA4ZGM1NzQyOGQ0ODhlZDAdBgorBgEEAYO/MAELBA8MDWdpdGh1Yi1ob3N0ZWQwQAYKKwYBBAGDvzABDAQyDDBodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkwOAYKKwYBBAGDvzABDQQqDChmZTJiYjY2ZmVlNmMyYTc3ZWNjZjA4YTA1MDhkYzU3NDI4ZDQ4OGVkMB8GCisGAQQBg78wAQ4EEQwPcmVmcy9oZWFkcy9tYWluMBoGCisGAQQBg78wAQ8EDAwKMTA3MTQ3NTUyOTAuBgorBgEEAYO/MAEQBCAMHmh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZTAYBgorBgEEAYO/MAERBAoMCDI1NzIwNzQzMHEGCisGAQQBg78wARIEYwxhaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLW1hYy55YW1sQHJlZnMvaGVhZHMvbWFpbjA4BgorBgEEAYO/MAETBCoMKGZlMmJiNjZmZWU2YzJhNzdlY2NmMDhhMDUwOGRjNTc0MjhkNDg4ZWQwIQYKKwYBBAGDvzABFAQTDBF3b3JrZmxvd19kaXNwYXRjaDBkBgorBgEEAYO/MAEVBFYMVGh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS9hY3Rpb25zL3J1bnMvMzkyMzk1NzkyOTQvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzBGBgorBgEEAYO/MAEYBDgMNnJlcG86aHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHk6cmVmOnJlZnMvaGVhZHMvbWFpbjCBigYKKwYBBAHWeQIEAgR8BHoAeAB2AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABoVPYZPYAAAQDAEcwRQIgc1PH+c/1pIIvZlZeoVbgyYoBEhhiLHuynBl+W4IJV2ECIQCYZPsz/JnjY2GWPboZQTA0Mc7zEdwH/VqZkDZb3UK2HDAKBggqhkjOPQQDAwNoADBlAjBL3byelOhHdOA5Zu/JT0d0eu2BXBuGY02ueafXY2pYFkL1uv7UG5u/D1mqvksQ6XECMQDa8iqfhR22imMXGhOW8I57Frn0foEd+VhSMcvz7/aAVJ3yLyCdney5zJH2Pfj/4ns="},"tlogEntries":[{"logIndex":"3320116395","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1792408053","inclusionPromise":{"signedEntryTimestamp":"MEYCIQC/PgT1lFGK7EHLLuRwfQeeHa6Ah0Xt2CnGyW8a67dtfQIhANjAnmOS7WyVsTzTzG1zRCBjq+RB9sqrh28//I3Z2INu"},"inclusionProof":{"logIndex":"3198212133","rootHash":"NizZkDFkfTyAt9Hjxu8xkavcpwf43bMMdAnDIFGR0sA=","treeSize":"3198212134","hashes":["Wf92HJ2rA/nUbp21vZc49VF0Ue//GwFVPyj0HzR7jkw=","yJsehZRNvjZAH6zsn6iaYbFslIxLoOdJ4l3IgpIGQt4=","CuKVlzfUGxKevtH+pQRHfJo7TinK0VjbAlAUqtS13wU=","CRaaLxGfk6OnDsoLNC+qt/FazULyIW5eUzB6DkBm2Dw=","PJRsVvScXNHmqQge+wrG01cIyckZNEkkYLfYRFm0H14=","f4MktXqhBPk7ruDBxwgqTvXa7eCNzak9cUObXS0eTxI=","OlLDeTiZ1vIMDel4vGDtbNVnrFnzDe1MFV5rBN5Ep4o=","uCZQe757l2sS1c05Y7TzOwEm+X8MeGLIUCkEOmFVOz4=","nyQV/+cWQUG5Hb2PKjQQNkQIJmz2qzAZKBQlkHGIknM=","G+nk7mgE5h6dUmv2UY7NDJrY3WvrZY31raaO1AETt+o=","qlTWNDzERnTBQVcHHXXVPjiUP0SsikGxfcxVlgqVFDo=","gg9GNApNke3+zNhl4tsWtmIycCFrOMCB3lys6XuSQNQ=","NlOclldmKPA1tMKIskqHAwuQDYHp31YwpK+OOMrMccc=","qxzHanAzz57SDdmJe0B7bJK72NTIBbwEMGBBKvDOROw=","xH/DCseLHr9eKoYT8qsORZK7zVdEGYWHuVtsVrD95wY="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n3198212134\nNizZkDFkfTyAt9Hjxu8xkavcpwf43bMMdAnDIFGR0sA=\n\n— rekor.sigstore.dev wNI9ajBGAiEAi0Qyyc5iYvSdeN6Lbb7jpq3z4YNAqgpGGV0MIThB3bACIQCe1pmQjovowFWH2mHuj/m2dSXXAfgLzkcQVeG73pYtDg==\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiJlODJiNzg0NzRkYTAyNjUyNmIxNTk1Yjc5MjRjMTIzM2E0YzU5OWQwNDNlMmJkYjU5NTlkMGM0MTljNzhiMThlIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FWUNJUURld2k4SzdFUHpnNGcwMXpMQnIrV01MM3VBZkF5OEFiMzZwWUZNcUhHK2xBSWhBS3Jja1NCNGJCM0luUWxwOWE5cmN3Y1ZvSlN0RFRobHZzTHlRaXc0UE93ZyIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaFJha05EUW5OcFowRjNTVUpCWjBsVlNGWXhObGczTjFsMlVWTlZiMnA0UjNCaWR5OXlaVEl3YkVKcmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFplRTFFUlRWTlZFVjNUbnBOZVZkb1kwNU5hbGw0VFVSRk5VMVVSWGhPZWsxNVYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZOYVZSMmQxZGpTRTFEV0VFelVISlVSWE5EUkZsbFNHTnlaSEpFY2k5M0wzWkRjV29LYVZSNWMweFBVMVZDZENzeFNUUTVMekJUUkVGSlMzYzBaamhPZFhaVlFWbDZSMHhwZUdOd2NYcFdja3gwUWt4RFdXRlBRMEpsWTNkbloxaHFUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXWkNaMDVXU0ZOTlJVZEVRVmRuUWxSbUNqQXJibEJXYVZGU2JIWnRiekpQYTI5V1lVeEhUR2hvYTFCNlFuWkNaMDVXU0ZKRlFrRm1PRVZhVkVKcWFHMUdiMlJJVW5kamVtOTJUREprY0dSSGFERUtXV2sxYW1JeU1IWmhTRlp1V2pKc2RWb3lXbWhaTWxWMllUSldlV0p0Vm5OamVURnFZakl4ZEdSWE5YQmtTR3QyVEcxa2NHUkhhREZaYVRrellqTktjZ3BhYlhoMlpETk5kbGx1Vm5CaVIxRjBZbGRHYWt4dWJHaGlWM2hCWTIxV2JXTjVPVzlhVjBaclkzazVkRmxYYkhWTlJHdEhRMmx6UjBGUlVVSm5OemgzQ2tGUlJVVkxNbWd3WkVoQ2VrOXBPSFprUnpseVdsYzBkVmxYVGpCaFZ6bDFZM2sxYm1GWVVtOWtWMG94WXpKV2VWa3lPWFZrUjFaMVpFTTFhbUl5TUhjS1NIZFpTMHQzV1VKQ1FVZEVkbnBCUWtGblVWSmtNamw1WVRKYWMySXpaR1phUjJ4NlkwZEdNRmt5WjNkT1oxbExTM2RaUWtKQlIwUjJla0ZDUVhkUmJ3cGFiVlY1V1cxSk1rNXRXbXhhVkZwcVRXMUZNMDR5Vm1wWk1sbDNUMGRGZDA1VVFUUmFSMDB4VG5wUmVVOUhVVEJQUkdoc1drUkJZa0puYjNKQ1owVkZDa0ZaVHk5TlFVVkZRa0V4UTJSWGJITmFRMEZ2WWxkR2FsUXhUWEJOUTNOSFEybHpSMEZSVVVKbk56aDNRVkZWUlVoWGFERmFNbVJ3WW0xa2JWbFhUbXdLVERKMGJHTnROV3hpU0UxMFdUSTVkR0pZVm5WaFdGSTFUVUl3UjBOcGMwZEJVVkZDWnpjNGQwRlJXVVZFTTBwc1dtNU5kbUZIVm1oYVNFMTJZbGRHY0FwaWFrRTNRbWR2Y2tKblJVVkJXVTh2VFVGRlNVSkRNRTFMTW1nd1pFaENlazlwT0haa1J6bHlXbGMwZFZsWFRqQmhWemwxWTNrMWJtRllVbTlrVjBveENtTXlWbmxaTWpsMVpFZFdkV1JETldwaU1qQjNZMUZaUzB0M1dVSkNRVWRFZG5wQlFrTlJVbXBFUjBadlpFaFNkMk42YjNaTU1tUndaRWRvTVZscE5Xb0tZakl3ZG1GSVZtNWFNbXgxV2pKYWFGa3lWWFpoTWxaNVltMVdjMk41TVdwaU1qRjBaRmMxY0dSSWEzWk1iV1J3WkVkb01WbHBPVE5pTTBweVdtMTRkZ3BrTTAxMldXNVdjR0pIVVhSaVYwWnFURzVzYUdKWGVFRmpiVlp0WTNrNWIxcFhSbXRqZVRsMFdWZHNkVTFFWjBkRGFYTkhRVkZSUW1jM09IZEJVVzlGQ2t0bmQyOWFiVlY1V1cxSk1rNXRXbXhhVkZwcVRXMUZNMDR5Vm1wWk1sbDNUMGRGZDA1VVFUUmFSMDB4VG5wUmVVOUhVVEJQUkdoc1drUkJaRUpuYjNJS1FtZEZSVUZaVHk5TlFVVk1Ra0U0VFVSWFpIQmtSMmd4V1dreGIySXpUakJhVjFGM1VVRlpTMHQzV1VKQ1FVZEVkbnBCUWtSQlVYbEVSRUp2WkVoU2R3cGplbTkyVERKa2NHUkhhREZaYVRWcVlqSXdkbUZJVm01YU1teDFXakphYUZreVZYWmhNbFo1WW0xV2MyTjVNV3BpTWpGMFpGYzFjR1JJYTNkUFFWbExDa3QzV1VKQ1FVZEVkbnBCUWtSUlVYRkVRMmh0V2xSS2FWbHFXVEphYlZac1RtMU5lVmxVWXpOYVYwNXFXbXBCTkZsVVFURk5SR2hyV1hwVk0wNUVTVFFLV2tSUk5FOUhWbXROUWpoSFEybHpSMEZSVVVKbk56aDNRVkUwUlVWUmQxQmpiVlp0WTNrNWIxcFhSbXRqZVRsMFdWZHNkVTFDYjBkRGFYTkhRVkZSUWdwbk56aDNRVkU0UlVSQmQwdE5WRUV6VFZSUk0wNVVWWGxQVkVGMVFtZHZja0puUlVWQldVOHZUVUZGVVVKRFFVMUliV2d3WkVoQ2VrOXBPSFphTW13d0NtRklWbWxNYlU1MllsTTViMlJYWkc1aFZ6VnVXbTFHYWxwVVFWbENaMjl5UW1kRlJVRlpUeTlOUVVWU1FrRnZUVU5FU1RGT2VrbDNUbnBSZWsxSVJVY0tRMmx6UjBGUlVVSm5OemgzUVZKSlJWbDNlR2hoU0ZJd1kwaE5Oa3g1T1c1aFdGSnZaRmRKZFZreU9YUk1NbWd4V2pKa2NHSnRaRzFaVjA1c1RESjBiQXBqYlRWc1lraE5kRmt5T1hSaVdGWjFZVmhTTlV4NU5XNWhXRkp2WkZkSmRtUXlPWGxoTWxwellqTmtla3d5U2pGaFYzaHJURmN4YUZsNU5UVlpWekZ6Q2xGSVNteGFiazEyWVVkV2FGcElUWFppVjBad1ltcEJORUpuYjNKQ1owVkZRVmxQTDAxQlJWUkNRMjlOUzBkYWJFMXRTbWxPYWxwdFdsZFZNbGw2U21nS1RucGtiRmt5VG0xTlJHaG9UVVJWZDA5SFVtcE9WR013VFdwb2EwNUVaelJhVjFGM1NWRlpTMHQzV1VKQ1FVZEVkbnBCUWtaQlVWUkVRa1l6WWpOS2NncGFiWGgyWkRFNWEyRllUbmRaV0ZKcVlVUkNhMEpuYjNKQ1owVkZRVmxQTDAxQlJWWkNSbGxOVmtkb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJDbUpUT1c5a1YyUnVZVmMxYmxwdFJtcGFVemx5V2xoS2RWcFhlSHBNVjA1MllsY3hNV0p0YkRCbFV6bG9XVE5TY0dJeU5YcE1NMG94WW01TmRrMTZhM2tLVFhwck1VNTZhM2xQVkZGMldWaFNNRnBYTVhka1NFMTJUVlJCVjBKbmIzSkNaMFZGUVZsUEwwMUJSVmRDUVdkTlFtNUNNVmx0ZUhCWmVrSkhRbWR2Y2dwQ1owVkZRVmxQTDAxQlJWbENSR2ROVG01S2JHTkhPRFpoU0ZadVdqSnNkVm95V21oWk1sVjJZVEpXZVdKdFZuTmplVEZxWWpJeGRHUlhOWEJrU0dzMkNtTnRWbTFQYmtwc1dtNU5kbUZIVm1oYVNFMTJZbGRHY0dKcVEwSnBaMWxMUzNkWlFrSkJTRmRsVVVsRlFXZFNPRUpJYjBGbFFVSXlRVTR3T1UxSGNrY0tlSGhGZVZsNGEyVklTbXh1VG5kTGFWTnNOalF6YW5sMEx6UmxTMk52UVhaTFpUWlBRVUZCUW05V1VGbGFVRmxCUVVGUlJFRkZZM2RTVVVsbll6RlFTQW9yWXk4eGNFbEpkbHBzV21WdlZtSm5lVmx2UWtWb2FHbE1TSFY1YmtKc0sxYzBTVXBXTWtWRFNWRkRXVnBRYzNvdlNtNXFXVEpIVjFCaWIxcFJWRUV3Q2sxak4zcEZaSGRJTDFaeFdtdEVXbUl6VlVzeVNFUkJTMEpuWjNGb2EycFBVRkZSUkVGM1RtOUJSRUpzUVdwQ1RETmllV1ZzVDJoSVpFOUJOVnAxTDBvS1ZEQmtNR1YxTWtKWVFuVkhXVEF5ZFdWaFpsaFpNbkJaUm10TU1YVjJOMVZITlhVdlJERnRjWFpyYzFFMldFVkRUVkZFWVRocGNXWm9Vakl5YVcxTldBcEhhRTlYT0VrMU4wWnliakJtYjBWa0sxWm9VMDFqZG5vM0wyRkJWa296ZVV4NVEyUnVaWGsxZWtwSU1sQm1haTgwYm5NOUNpMHRMUzB0UlU1RUlFTkZVbFJKUmtsRFFWUkZMUzB0TFMwSyJ9fX19"}],"timestampVerificationData":{"rfc3161Timestamps":[{"signedTimestamp":"MIICyjADAgEAMIICwQYJKoZIhvcNAQcCoIICsjCCAq4CAQMxDTALBglghkgBZQMEAgEwgbgGCyqGSIb3DQEJEAEEoIGoBIGlMIGiAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQgapNmtoGhAL6a//rL0fEGBqGf/VWV4hNpL5FwYI7FS+ECFQDV1r8ZJP+gMAkR3NzxgLABEJ06iRgPMjAyNjEwMTkxMTA3MzNaMAMCAQGgMqQwMC4xFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEVMBMGA1UEAxMMc2lnc3RvcmUtdHNhoAAxggHbMIIB1wIBATBRMDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAsGCWCGSAFlAwQCAaCB/DAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTI2MTAxOTExMDczM1owLwYJKoZIhvcNAQkEMSIEIA2Bhc9Y5ZiBazxXSPvJ/IyANP+7qZax90j/UMOAYRP/MIGOBgsqhkiG9w0BCRACLzF/MH0wezB5BCCF+Se8B6tiysO0Q1bBDvyBssaIP9p6uebYcNnROs0FtzBVMD2kOzA5MRUwEwYDVQQKEwxzaWdzdG9yZS5kZXYxIDAeBgNVBAMTF3NpZ3N0b3JlLXRzYS1zZWxmc2lnbmVkAhQ6E1QvDJBh7rzBQy/Lio6LKiOLDDAKBggqhkjOPQQDAgRnMGUCMQCQ5MuXBsfa/s8+AzlHq+bcfS3MDBN56GRbF0//GMz55jEIEBsFzLkYTg6uO8BCu1wCMDmeDFxtdnBPdlvwBepzoF5RGxWjv3h9YM3yQQM3k8FTOdR4pZMMfNMg+8dPYGeMGQ=="}]}},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"6Ct4R02gJlJrFZW3kkwSM6TFmdBD4r21lZ0MQZx4sY4="},"signature":"MEYCIQDewi8K7EPzg4g01zLBr+WML3uAfAy8Ab36pYFMqHG+lAIhAKrckSB4bB3InQlp9a9rcwcVoJStDThlvsLyQiw4POwg"}}
build/torch213-metal-aarch64-darwin/symbols.json ADDED
@@ -0,0 +1,169 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema_version": 1,
3
+ "module": "_ggml_quantization_metal_fe2bb66",
4
+ "functions": [
5
+ {
6
+ "name": "dequantize",
7
+ "qualname": "dequantize",
8
+ "module": "_ggml_quantization_metal_fe2bb66",
9
+ "kind": "function",
10
+ "doc": "`(rows, bytes_per_row)` uint8 blocks -> `(rows, cols)` values of `dtype`.",
11
+ "signature": {
12
+ "parameters": [
13
+ {
14
+ "name": "blocks",
15
+ "kind": "POSITIONAL_OR_KEYWORD",
16
+ "default": null,
17
+ "annotation": "torch.Tensor"
18
+ },
19
+ {
20
+ "name": "ggml_type",
21
+ "kind": "POSITIONAL_OR_KEYWORD",
22
+ "default": null,
23
+ "annotation": "int"
24
+ },
25
+ {
26
+ "name": "rows",
27
+ "kind": "POSITIONAL_OR_KEYWORD",
28
+ "default": null,
29
+ "annotation": "int"
30
+ },
31
+ {
32
+ "name": "cols",
33
+ "kind": "POSITIONAL_OR_KEYWORD",
34
+ "default": null,
35
+ "annotation": "int"
36
+ },
37
+ {
38
+ "name": "dtype",
39
+ "kind": "POSITIONAL_OR_KEYWORD",
40
+ "default": null,
41
+ "annotation": "torch.dtype"
42
+ }
43
+ ],
44
+ "return_annotation": "torch.Tensor"
45
+ }
46
+ },
47
+ {
48
+ "name": "get_rows",
49
+ "qualname": "get_rows",
50
+ "module": "_ggml_quantization_metal_fe2bb66",
51
+ "kind": "function",
52
+ "doc": "The rows `indices` names, unpacked: `(rows, bytes_per_row)` uint8 -> `(len(indices), cols)`.\n\nggml's `get_rows`, which dequantizes as it gathers -- so reading a few rows out of a large table\nnever touches the rest.",
53
+ "signature": {
54
+ "parameters": [
55
+ {
56
+ "name": "blocks",
57
+ "kind": "POSITIONAL_OR_KEYWORD",
58
+ "default": null,
59
+ "annotation": "torch.Tensor"
60
+ },
61
+ {
62
+ "name": "indices",
63
+ "kind": "POSITIONAL_OR_KEYWORD",
64
+ "default": null,
65
+ "annotation": "torch.Tensor"
66
+ },
67
+ {
68
+ "name": "ggml_type",
69
+ "kind": "POSITIONAL_OR_KEYWORD",
70
+ "default": null,
71
+ "annotation": "int"
72
+ },
73
+ {
74
+ "name": "cols",
75
+ "kind": "POSITIONAL_OR_KEYWORD",
76
+ "default": null,
77
+ "annotation": "int"
78
+ },
79
+ {
80
+ "name": "dtype",
81
+ "kind": "POSITIONAL_OR_KEYWORD",
82
+ "default": null,
83
+ "annotation": "torch.dtype"
84
+ }
85
+ ],
86
+ "return_annotation": "torch.Tensor"
87
+ }
88
+ },
89
+ {
90
+ "name": "mul_mat_id",
91
+ "qualname": "mul_mat_id",
92
+ "module": "_ggml_quantization_metal_fe2bb66",
93
+ "kind": "function",
94
+ "doc": "One dispatch for a bank of routed experts: ggml's `mul_mv_id`.\n\n`blocks` is `(n_experts, out_features, bytes_per_row)`, `x` is `(n_tokens, in_features)`, and\n`ids` is `(n_tokens, n_used)` naming the expert each of a token's slots picked. The result is\n`(n_tokens, n_used, out_features)` f32, one row per slot.\n\nThe alternative is a gemv per expert per layer, whose arithmetic is dwarfed by the dispatch\naround it -- which is most of what a MoE decode step costs.",
95
+ "signature": {
96
+ "parameters": [
97
+ {
98
+ "name": "blocks",
99
+ "kind": "POSITIONAL_OR_KEYWORD",
100
+ "default": null,
101
+ "annotation": "torch.Tensor"
102
+ },
103
+ {
104
+ "name": "x",
105
+ "kind": "POSITIONAL_OR_KEYWORD",
106
+ "default": null,
107
+ "annotation": "torch.Tensor"
108
+ },
109
+ {
110
+ "name": "ids",
111
+ "kind": "POSITIONAL_OR_KEYWORD",
112
+ "default": null,
113
+ "annotation": "torch.Tensor"
114
+ },
115
+ {
116
+ "name": "ggml_type",
117
+ "kind": "POSITIONAL_OR_KEYWORD",
118
+ "default": null,
119
+ "annotation": "int"
120
+ },
121
+ {
122
+ "name": "out_features",
123
+ "kind": "POSITIONAL_OR_KEYWORD",
124
+ "default": null,
125
+ "annotation": "int"
126
+ }
127
+ ],
128
+ "return_annotation": "torch.Tensor"
129
+ }
130
+ },
131
+ {
132
+ "name": "mul_mat_vec",
133
+ "qualname": "mul_mat_vec",
134
+ "module": "_ggml_quantization_metal_fe2bb66",
135
+ "kind": "function",
136
+ "doc": "Fused dequantize-gemv: `x @ blocks.T` without unpacking `blocks`.\n\n`x` is `(rows, in_features)` and `rows` must be at most `MAX_GEMV_ROWS`. The result is f32\nwhatever `x`'s dtype was, since the kernel writes an f32 destination; cast it at the call site,\nwhere the cast can be fused into whatever consumes it.",
137
+ "signature": {
138
+ "parameters": [
139
+ {
140
+ "name": "blocks",
141
+ "kind": "POSITIONAL_OR_KEYWORD",
142
+ "default": null,
143
+ "annotation": "torch.Tensor"
144
+ },
145
+ {
146
+ "name": "x",
147
+ "kind": "POSITIONAL_OR_KEYWORD",
148
+ "default": null,
149
+ "annotation": "torch.Tensor"
150
+ },
151
+ {
152
+ "name": "ggml_type",
153
+ "kind": "POSITIONAL_OR_KEYWORD",
154
+ "default": null,
155
+ "annotation": "int"
156
+ },
157
+ {
158
+ "name": "out_features",
159
+ "kind": "POSITIONAL_OR_KEYWORD",
160
+ "default": null,
161
+ "annotation": "int"
162
+ }
163
+ ],
164
+ "return_annotation": "torch.Tensor"
165
+ }
166
+ }
167
+ ],
168
+ "layers": []
169
+ }
build/torch214-metal-aarch64-darwin/__init__.py ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Compute directly on the packed blocks of a GGUF checkpoint.
2
+
3
+ A GGUF weight is stored as blocks of 32 or 256 values sharing a scale. These kernels read that
4
+ layout as it is, so a quantized model can be loaded and run without ever materializing a dense
5
+ copy — which is the whole memory saving.
6
+
7
+ Ported from llama.cpp's ggml-cuda; `vendor/UPSTREAM` pins the revision. The ops are named for what
8
+ they do rather than for a backend: each backend registers its own implementation of the same
9
+ schema, so calls dispatch on the tensor's device.
10
+ """
11
+
12
+ import torch
13
+
14
+ from ._ops import add_op_namespace_prefix, ops
15
+
16
+
17
+ __all__ = ["GEMV_TYPES", "MAX_GEMV_ROWS", "dequantize", "get_rows", "mul_mat_id", "mul_mat_vec"]
18
+
19
+ # Upstream's MMVQ_MAX_BATCH_SIZE: `mul_mat_vec` has no implementation beyond this many rows, so a
20
+ # caller with more (prefill) dequantizes and uses an ordinary matmul.
21
+ MAX_GEMV_ROWS = 8
22
+
23
+ # ggml type ids `mul_mat_vec` implements, as this build reports them -- it is backend-specific, and
24
+ # a type routed into a gemv that has no kernel for it is a fault, not a fallback. CUDA covers
25
+ # Q4_0/Q4_1/Q5_0/Q5_1/Q8_0, the K quants, the IQ quants, MXFP4/NVFP4 and Q1_0/Q2_0; Metal is the
26
+ # same minus NVFP4/Q1_0/Q2_0, which its metallib has no kernels for. `dequantize` covers more, so
27
+ # check this before choosing the fused path.
28
+ try:
29
+ GEMV_TYPES = frozenset(ops.gemv_types())
30
+ except AttributeError:
31
+ # A build published before `gemv_types` existed; those are CUDA-only, so its list is theirs.
32
+ GEMV_TYPES = frozenset({2, 3, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 29, 39, 40, 41, 42})
33
+
34
+
35
+ def get_rows(
36
+ blocks: torch.Tensor, indices: torch.Tensor, ggml_type: int, cols: int, dtype: torch.dtype
37
+ ) -> torch.Tensor:
38
+ """The rows `indices` names, unpacked: `(rows, bytes_per_row)` uint8 -> `(len(indices), cols)`.
39
+
40
+ ggml's `get_rows`, which dequantizes as it gathers -- so reading a few rows out of a large table
41
+ never touches the rest.
42
+ """
43
+ return ops.get_rows(blocks, indices, ggml_type, cols, dtype)
44
+
45
+
46
+ def dequantize(
47
+ blocks: torch.Tensor, ggml_type: int, rows: int, cols: int, dtype: torch.dtype
48
+ ) -> torch.Tensor:
49
+ """`(rows, bytes_per_row)` uint8 blocks -> `(rows, cols)` values of `dtype`."""
50
+ return ops.dequantize(blocks, ggml_type, rows, cols, dtype)
51
+
52
+
53
+ def mul_mat_vec(
54
+ blocks: torch.Tensor, x: torch.Tensor, ggml_type: int, out_features: int
55
+ ) -> torch.Tensor:
56
+ """Fused dequantize-gemv: `x @ blocks.T` without unpacking `blocks`.
57
+
58
+ `x` is `(rows, in_features)` and `rows` must be at most `MAX_GEMV_ROWS`. The result is f32
59
+ whatever `x`'s dtype was, since the kernel writes an f32 destination; cast it at the call site,
60
+ where the cast can be fused into whatever consumes it.
61
+ """
62
+ return ops.mul_mat_vec(blocks, x, ggml_type, out_features)
63
+
64
+
65
+ def mul_mat_id(
66
+ blocks: torch.Tensor, x: torch.Tensor, ids: torch.Tensor, ggml_type: int, out_features: int
67
+ ) -> torch.Tensor:
68
+ """One dispatch for a bank of routed experts: ggml's `mul_mv_id`.
69
+
70
+ `blocks` is `(n_experts, out_features, bytes_per_row)`, `x` is `(n_tokens, in_features)`, and
71
+ `ids` is `(n_tokens, n_used)` naming the expert each of a token's slots picked. The result is
72
+ `(n_tokens, n_used, out_features)` f32, one row per slot.
73
+
74
+ The alternative is a gemv per expert per layer, whose arithmetic is dwarfed by the dispatch
75
+ around it -- which is most of what a MoE decode step costs.
76
+ """
77
+ return ops.mul_mat_id(blocks, x, ids, ggml_type, out_features)
78
+
79
+
80
+ # Without these, torch.compile cannot trace the ops and breaks the graph at every call.
81
+ @torch.library.register_fake(add_op_namespace_prefix("get_rows"))
82
+ def _get_rows_fake(blocks, indices, ggml_type, cols, dtype):
83
+ return blocks.new_empty((indices.numel(), cols), dtype=dtype)
84
+
85
+
86
+ @torch.library.register_fake(add_op_namespace_prefix("dequantize"))
87
+ def _dequantize_fake(blocks, ggml_type, rows, cols, dtype):
88
+ return blocks.new_empty((rows, cols), dtype=dtype)
89
+
90
+
91
+ @torch.library.register_fake(add_op_namespace_prefix("mul_mat_vec"))
92
+ def _mul_mat_vec_fake(blocks, x, ggml_type, out_features):
93
+ return x.new_empty((x.shape[0], out_features), dtype=torch.float32)
94
+
95
+
96
+ @torch.library.register_fake(add_op_namespace_prefix("mul_mat_id"))
97
+ def _mul_mat_id_fake(blocks, x, ids, ggml_type, out_features):
98
+ return x.new_empty((x.shape[0], ids.shape[1], out_features), dtype=torch.float32)
build/torch214-metal-aarch64-darwin/_ggml_quantization_metal_fe2bb66.abi3.so ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a49c6dd6100e61b0f9f7c5c0c72b3edcc72579d583045a81cdc8f78718bbbeb6
3
+ size 3347704
build/torch214-metal-aarch64-darwin/_ops.py ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ from . import _ggml_quantization_metal_fe2bb66
3
+ ops = torch.ops._ggml_quantization_metal_fe2bb66
4
+
5
+ def add_op_namespace_prefix(op_name: str):
6
+ """
7
+ Prefix op by namespace.
8
+ """
9
+ return f"_ggml_quantization_metal_fe2bb66::{op_name}"
build/torch214-metal-aarch64-darwin/metadata.json ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "ggml-quantization",
3
+ "id": "_ggml_quantization_metal_fe2bb66",
4
+ "version": 1,
5
+ "kernels-minver": "0.14.0",
6
+ "license": "MIT",
7
+ "python-depends": [],
8
+ "kernel-depends": [],
9
+ "backend": {
10
+ "type": "metal"
11
+ },
12
+ "digest": {
13
+ "algorithm": "sha256",
14
+ "files": {
15
+ "__init__.py": "iPXgZXBgY3CzpNUSjmCovMVNPLBol1KBaNoTzkXp5mM=",
16
+ "_ggml_quantization_metal_fe2bb66.abi3.so": "pJxt1hAOYbD598XAxys+3McledWDBFqBzcj3hxi7vrY=",
17
+ "_ops.py": "7JPqKK8z3jmEj5qhydHkeSXOsZMXb424/1/5MR/BZuk=",
18
+ "symbols.json": "y6E2ftRiVpYGHN9aFeGUjoXci6YSNZRswRiLbHiaxFw="
19
+ }
20
+ },
21
+ "provenance": {
22
+ "kernel-builder": {
23
+ "version": "0.18.0-dev0",
24
+ "commit": "d054906a13710b811b96697b4635f03020842733",
25
+ "dirty": false
26
+ },
27
+ "kernel": {
28
+ "commit": "fe2bb66fee6c2a77eccf08a0508dc57428d488ed",
29
+ "dirty": false
30
+ }
31
+ }
32
+ }
build/torch214-metal-aarch64-darwin/metadata.json.sigstore ADDED
@@ -0,0 +1 @@
 
 
1
+ {"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHQTCCBsegAwIBAgIUdHoVMUOtRB5njf1ZeBv/TtF248wwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYxMDE5MTEwNzI5WhcNMjYxMDE5MTExNzI5WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEfglv44mY9WYbxBtMSIyDzU6SO2CXhHcysqSCHWhoU69A3MDhlKs9tm2JgnuAn1TfQkAF6MvOVFmn2s7HyWQYbaOCBeYwggXiMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAfBgNVHSMEGDAWgBTf0+nPViQRlvmo2OkoVaLGLhhkPzBvBgNVHREBAf8EZTBjhmFodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvLmdpdGh1Yi93b3JrZmxvd3MvYnVpbGQtbWFjLnlhbWxAcmVmcy9oZWFkcy9tYWluMDkGCisGAQQBg78wAQEEK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wHwYKKwYBBAGDvzABAgQRd29ya2Zsb3dfZGlzcGF0Y2gwNgYKKwYBBAGDvzABAwQoZmUyYmI2NmZlZTZjMmE3N2VjY2YwOGEwNTA4ZGM1NzQyOGQ0ODhlZDAbBgorBgEEAYO/MAEEBA1CdWlsZCAobWFjT1MpMCsGCisGAQQBg78wAQUEHWh1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MB0GCisGAQQBg78wAQYED3JlZnMvaGVhZHMvbWFpbjA7BgorBgEEAYO/MAEIBC0MK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wcQYKKwYBBAGDvzABCQRjDGFodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvLmdpdGh1Yi93b3JrZmxvd3MvYnVpbGQtbWFjLnlhbWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoZmUyYmI2NmZlZTZjMmE3N2VjY2YwOGEwNTA4ZGM1NzQyOGQ0ODhlZDAdBgorBgEEAYO/MAELBA8MDWdpdGh1Yi1ob3N0ZWQwQAYKKwYBBAGDvzABDAQyDDBodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkwOAYKKwYBBAGDvzABDQQqDChmZTJiYjY2ZmVlNmMyYTc3ZWNjZjA4YTA1MDhkYzU3NDI4ZDQ4OGVkMB8GCisGAQQBg78wAQ4EEQwPcmVmcy9oZWFkcy9tYWluMBoGCisGAQQBg78wAQ8EDAwKMTA3MTQ3NTUyOTAuBgorBgEEAYO/MAEQBCAMHmh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZTAYBgorBgEEAYO/MAERBAoMCDI1NzIwNzQzMHEGCisGAQQBg78wARIEYwxhaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLW1hYy55YW1sQHJlZnMvaGVhZHMvbWFpbjA4BgorBgEEAYO/MAETBCoMKGZlMmJiNjZmZWU2YzJhNzdlY2NmMDhhMDUwOGRjNTc0MjhkNDg4ZWQwIQYKKwYBBAGDvzABFAQTDBF3b3JrZmxvd19kaXNwYXRjaDBkBgorBgEEAYO/MAEVBFYMVGh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS9hY3Rpb25zL3J1bnMvMzkyMzk1NzkyOTQvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzBGBgorBgEEAYO/MAEYBDgMNnJlcG86aHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHk6cmVmOnJlZnMvaGVhZHMvbWFpbjCBiQYKKwYBBAHWeQIEAgR7BHkAdwB1AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABoVPYWJ8AAAQDAEYwRAIgF6gxA0xkNMkiIOH9IzZTPq/o8zVugtF/eg6A4RfSpwcCIFb61xbhF4X5W3K2BQcwicFwRHIHxKb2YF0Sw9nq+ITkMAoGCCqGSM49BAMDA2gAMGUCMQCgJ9AnKfiVaOhXwOUUDWlyUlBpHQytPd/ZyaghfrNdpf0GuQF8aIKQW6WRbG7+1GMCMDiE6SZ7/QH51TE0P+8yciG9IEU7jxFhFXZvQiNzcF/tiuwFC7diKQajSVWmztc+oA=="},"tlogEntries":[{"logIndex":"3320116309","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1792408050","inclusionPromise":{"signedEntryTimestamp":"MEYCIQCwQMuugG//lGG2t86tIP/Cy6hL6M8MVeOf/vuA8EGxOwIhALi9i9RUwTH3pgbC8Gly6FYt9ht7hWGJ+8lc+S6ZqRui"},"inclusionProof":{"logIndex":"3198212047","rootHash":"8+1nZKcXkcZOXN8gPXZoMGgYi9IY4U3BEmBojMc9kIs=","treeSize":"3198212051","hashes":["0bFGIRPTc95JpYjiysKp2OWEuAdME2DvdPzBp6pdGsg=","fRuKkz1YiVdjCLn2pgLEelxRmEFrcsRuWzKtFHiuqEU=","S+TIDuYdyRp7EHi+St89BLTvgUb7egLSJl/V9SN9XGU=","4+krBuq9onnnymQOdZHj4+QY6hCpqMGryzzvZHPZ2I0=","leanKnDeUj+FCrbzP78vYWkpAkFh5dJXWS2ZqdTSDnE=","ccDIAPywAQxX9xqkvcUYlcGnnC3XAZDflI9KMZCNhzU=","KfLkT2WZ0QP1XrrjzReMUrJIiMnbZT/NOrjsx9C313c=","xjJ60bWZdwtADBCQagSD2HlSIhe0x2cvZDn80+Q7fP8=","adnAraSTV7w7Y/rcE+QRhgZITBmEpFvaDRUcGIXFcZs=","NvhAA1+LqtXvaowiFXcolXI/TyFO3CsufLfJu3VJv2k=","PJRsVvScXNHmqQge+wrG01cIyckZNEkkYLfYRFm0H14=","f4MktXqhBPk7ruDBxwgqTvXa7eCNzak9cUObXS0eTxI=","OlLDeTiZ1vIMDel4vGDtbNVnrFnzDe1MFV5rBN5Ep4o=","uCZQe757l2sS1c05Y7TzOwEm+X8MeGLIUCkEOmFVOz4=","nyQV/+cWQUG5Hb2PKjQQNkQIJmz2qzAZKBQlkHGIknM=","G+nk7mgE5h6dUmv2UY7NDJrY3WvrZY31raaO1AETt+o=","qlTWNDzERnTBQVcHHXXVPjiUP0SsikGxfcxVlgqVFDo=","gg9GNApNke3+zNhl4tsWtmIycCFrOMCB3lys6XuSQNQ=","NlOclldmKPA1tMKIskqHAwuQDYHp31YwpK+OOMrMccc=","qxzHanAzz57SDdmJe0B7bJK72NTIBbwEMGBBKvDOROw=","xH/DCseLHr9eKoYT8qsORZK7zVdEGYWHuVtsVrD95wY="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n3198212051\n8+1nZKcXkcZOXN8gPXZoMGgYi9IY4U3BEmBojMc9kIs=\n\n— rekor.sigstore.dev wNI9ajBFAiBd4WXoSHMsZjjopRVk1yb2JgLA7oPv5C9FanIzF9RPMwIhAOuEj/afG2MIpzpX4utT+OxiTXGHEw+7dBGnMtF7HfeM\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiJjZTg4NDVjZTI5MDU3YzQ5YzQwZmE1NGFkYmNiMjU4NTBmNWZlZTdlMWE2NGI0ZDU2ZjlmOTAxYWRiYTUwYjY1In19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FWUNJUUM1RU1tcVBINmprdlEzdGJNbUVTY2c3UkhNRjNvazdOQnlxMk1Uek56V2ZnSWhBS2pTOFVqOTE4R1g4RDI2Z25iNUltZ2FRZEdSc0x0Nk1aMTZOVExIMEJFNiIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaFJWRU5EUW5ObFowRjNTVUpCWjBsVlpFaHZWazFWVDNSU1FqVnVhbVl4V21WQ2RpOVVkRVl5TkRoM2QwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFplRTFFUlRWTlZFVjNUbnBKTlZkb1kwNU5hbGw0VFVSRk5VMVVSWGhPZWtrMVYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZtWjJ4Mk5EUnRXVGxYV1dKNFFuUk5VMGw1UkhwVk5sTlBNa05ZYUVoamVYTnhVME1LU0Zkb2IxVTJPVUV6VFVSb2JFdHpPWFJ0TWtwbmJuVkJiakZVWmxGclFVWTJUWFpQVmtadGJqSnpOMGg1VjFGWlltRlBRMEpsV1hkbloxaHBUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXWkNaMDVXU0ZOTlJVZEVRVmRuUWxSbUNqQXJibEJXYVZGU2JIWnRiekpQYTI5V1lVeEhUR2hvYTFCNlFuWkNaMDVXU0ZKRlFrRm1PRVZhVkVKcWFHMUdiMlJJVW5kamVtOTJUREprY0dSSGFERUtXV2sxYW1JeU1IWmhTRlp1V2pKc2RWb3lXbWhaTWxWMllUSldlV0p0Vm5OamVURnFZakl4ZEdSWE5YQmtTR3QyVEcxa2NHUkhhREZaYVRrellqTktjZ3BhYlhoMlpETk5kbGx1Vm5CaVIxRjBZbGRHYWt4dWJHaGlWM2hCWTIxV2JXTjVPVzlhVjBaclkzazVkRmxYYkhWTlJHdEhRMmx6UjBGUlVVSm5OemgzQ2tGUlJVVkxNbWd3WkVoQ2VrOXBPSFprUnpseVdsYzBkVmxYVGpCaFZ6bDFZM2sxYm1GWVVtOWtWMG94WXpKV2VWa3lPWFZrUjFaMVpFTTFhbUl5TUhjS1NIZFpTMHQzV1VKQ1FVZEVkbnBCUWtGblVWSmtNamw1WVRKYWMySXpaR1phUjJ4NlkwZEdNRmt5WjNkT1oxbExTM2RaUWtKQlIwUjJla0ZDUVhkUmJ3cGFiVlY1V1cxSk1rNXRXbXhhVkZwcVRXMUZNMDR5Vm1wWk1sbDNUMGRGZDA1VVFUUmFSMDB4VG5wUmVVOUhVVEJQUkdoc1drUkJZa0puYjNKQ1owVkZDa0ZaVHk5TlFVVkZRa0V4UTJSWGJITmFRMEZ2WWxkR2FsUXhUWEJOUTNOSFEybHpSMEZSVVVKbk56aDNRVkZWUlVoWGFERmFNbVJ3WW0xa2JWbFhUbXdLVERKMGJHTnROV3hpU0UxMFdUSTVkR0pZVm5WaFdGSTFUVUl3UjBOcGMwZEJVVkZDWnpjNGQwRlJXVVZFTTBwc1dtNU5kbUZIVm1oYVNFMTJZbGRHY0FwaWFrRTNRbWR2Y2tKblJVVkJXVTh2VFVGRlNVSkRNRTFMTW1nd1pFaENlazlwT0haa1J6bHlXbGMwZFZsWFRqQmhWemwxWTNrMWJtRllVbTlrVjBveENtTXlWbmxaTWpsMVpFZFdkV1JETldwaU1qQjNZMUZaUzB0M1dVSkNRVWRFZG5wQlFrTlJVbXBFUjBadlpFaFNkMk42YjNaTU1tUndaRWRvTVZscE5Xb0tZakl3ZG1GSVZtNWFNbXgxV2pKYWFGa3lWWFpoTWxaNVltMVdjMk41TVdwaU1qRjBaRmMxY0dSSWEzWk1iV1J3WkVkb01WbHBPVE5pTTBweVdtMTRkZ3BrTTAxMldXNVdjR0pIVVhSaVYwWnFURzVzYUdKWGVFRmpiVlp0WTNrNWIxcFhSbXRqZVRsMFdWZHNkVTFFWjBkRGFYTkhRVkZSUW1jM09IZEJVVzlGQ2t0bmQyOWFiVlY1V1cxSk1rNXRXbXhhVkZwcVRXMUZNMDR5Vm1wWk1sbDNUMGRGZDA1VVFUUmFSMDB4VG5wUmVVOUhVVEJQUkdoc1drUkJaRUpuYjNJS1FtZEZSVUZaVHk5TlFVVk1Ra0U0VFVSWFpIQmtSMmd4V1dreGIySXpUakJhVjFGM1VVRlpTMHQzV1VKQ1FVZEVkbnBCUWtSQlVYbEVSRUp2WkVoU2R3cGplbTkyVERKa2NHUkhhREZaYVRWcVlqSXdkbUZJVm01YU1teDFXakphYUZreVZYWmhNbFo1WW0xV2MyTjVNV3BpTWpGMFpGYzFjR1JJYTNkUFFWbExDa3QzV1VKQ1FVZEVkbnBCUWtSUlVYRkVRMmh0V2xSS2FWbHFXVEphYlZac1RtMU5lVmxVWXpOYVYwNXFXbXBCTkZsVVFURk5SR2hyV1hwVk0wNUVTVFFLV2tSUk5FOUhWbXROUWpoSFEybHpSMEZSVVVKbk56aDNRVkUwUlVWUmQxQmpiVlp0WTNrNWIxcFhSbXRqZVRsMFdWZHNkVTFDYjBkRGFYTkhRVkZSUWdwbk56aDNRVkU0UlVSQmQwdE5WRUV6VFZSUk0wNVVWWGxQVkVGMVFtZHZja0puUlVWQldVOHZUVUZGVVVKRFFVMUliV2d3WkVoQ2VrOXBPSFphTW13d0NtRklWbWxNYlU1MllsTTViMlJYWkc1aFZ6VnVXbTFHYWxwVVFWbENaMjl5UW1kRlJVRlpUeTlOUVVWU1FrRnZUVU5FU1RGT2VrbDNUbnBSZWsxSVJVY0tRMmx6UjBGUlVVSm5OemgzUVZKSlJWbDNlR2hoU0ZJd1kwaE5Oa3g1T1c1aFdGSnZaRmRKZFZreU9YUk1NbWd4V2pKa2NHSnRaRzFaVjA1c1RESjBiQXBqYlRWc1lraE5kRmt5T1hSaVdGWjFZVmhTTlV4NU5XNWhXRkp2WkZkSmRtUXlPWGxoTWxwellqTmtla3d5U2pGaFYzaHJURmN4YUZsNU5UVlpWekZ6Q2xGSVNteGFiazEyWVVkV2FGcElUWFppVjBad1ltcEJORUpuYjNKQ1owVkZRVmxQTDAxQlJWUkNRMjlOUzBkYWJFMXRTbWxPYWxwdFdsZFZNbGw2U21nS1RucGtiRmt5VG0xTlJHaG9UVVJWZDA5SFVtcE9WR013VFdwb2EwNUVaelJhVjFGM1NWRlpTMHQzV1VKQ1FVZEVkbnBCUWtaQlVWUkVRa1l6WWpOS2NncGFiWGgyWkRFNWEyRllUbmRaV0ZKcVlVUkNhMEpuYjNKQ1owVkZRVmxQTDAxQlJWWkNSbGxOVmtkb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJDbUpUT1c5a1YyUnVZVmMxYmxwdFJtcGFVemx5V2xoS2RWcFhlSHBNVjA1MllsY3hNV0p0YkRCbFV6bG9XVE5TY0dJeU5YcE1NMG94WW01TmRrMTZhM2tLVFhwck1VNTZhM2xQVkZGMldWaFNNRnBYTVhka1NFMTJUVlJCVjBKbmIzSkNaMFZGUVZsUEwwMUJSVmRDUVdkTlFtNUNNVmx0ZUhCWmVrSkhRbWR2Y2dwQ1owVkZRVmxQTDAxQlJWbENSR2ROVG01S2JHTkhPRFpoU0ZadVdqSnNkVm95V21oWk1sVjJZVEpXZVdKdFZuTmplVEZxWWpJeGRHUlhOWEJrU0dzMkNtTnRWbTFQYmtwc1dtNU5kbUZIVm1oYVNFMTJZbGRHY0dKcVEwSnBVVmxMUzNkWlFrSkJTRmRsVVVsRlFXZFNOMEpJYTBGa2QwSXhRVTR3T1UxSGNrY0tlSGhGZVZsNGEyVklTbXh1VG5kTGFWTnNOalF6YW5sMEx6UmxTMk52UVhaTFpUWlBRVUZCUW05V1VGbFhTamhCUVVGUlJFRkZXWGRTUVVsblJqWm5lQXBCTUhoclRrMXJhVWxQU0RsSmVscFVVSEV2YnpoNlZuVm5kRVl2WldjMlFUUlNabE53ZDJORFNVWmlOakY0WW1oR05GZzFWek5MTWtKUlkzZHBZMFozQ2xKSVNVaDRTMkl5V1VZd1UzYzVibkVyU1ZSclRVRnZSME5EY1VkVFRUUTVRa0ZOUkVFeVowRk5SMVZEVFZGRFowbzVRVzVMWm1sV1lVOW9XSGRQVlZVS1JGZHNlVlZzUW5CSVVYbDBVR1F2V25saFoyaG1jazVrY0dZd1IzVlJSamhoU1V0UlZ6WlhVbUpITnlzeFIwMURUVVJwUlRaVFdqY3ZVVWcxTVZSRk1BcFFLemg1WTJsSE9VbEZWVGRxZUVab1JsaGFkbEZwVG5walJpOTBhWFYzUmtNM1pHbExVV0ZxVTFaWGJYcDBZeXR2UVQwOUNpMHRMUzB0UlU1RUlFTkZVbFJKUmtsRFFWUkZMUzB0TFMwSyJ9fX19"}],"timestampVerificationData":{"rfc3161Timestamps":[{"signedTimestamp":"MIICyDADAgEAMIICvwYJKoZIhvcNAQcCoIICsDCCAqwCAQMxDTALBglghkgBZQMEAgEwgbcGCyqGSIb3DQEJEAEEoIGnBIGkMIGhAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQg48yqXLFwHONqaxVTNgwk6RzMPDzoSjRR05ZtccTXbT8CFAWxt8P3iKgVMvnFHlnMDY0OHBTHGA8yMDI2MTAxOTExMDcyOVowAwIBAaAypDAwLjEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MRUwEwYDVQQDEwxzaWdzdG9yZS10c2GgADGCAdowggHWAgEBMFEwOTEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MSAwHgYDVQQDExdzaWdzdG9yZS10c2Etc2VsZnNpZ25lZAIUOhNULwyQYe68wUMvy4qOiyojiwwwCwYJYIZIAWUDBAIBoIH8MBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjYxMDE5MTEwNzI5WjAvBgkqhkiG9w0BCQQxIgQg9BDebLVOMr6FgzLtCgf8VFXd0+OQMEomPg22shWROTQwgY4GCyqGSIb3DQEJEAIvMX8wfTB7MHkEIIX5J7wHq2LKw7RDVsEO/IGyxog/2nq55thw2dE6zQW3MFUwPaQ7MDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAoGCCqGSM49BAMCBGYwZAIwQ0k4ctyxiyp+qa5tceg4PQlNIh+Vpe5IwNeSZuWTJ9nN2ouVJa6F5J0mTrF/Kg6uAjArpV4paWqnY1ORlVAYYZOCIHq/UIX32qr/NadG8bcn3ORxXG36bBcSsIFOcw2BOro="}]}},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"zohFzikFfEnED6VK28slhQ9f7n4aZLTVb5+QGtulC2U="},"signature":"MEYCIQC5EMmqPH6jkvQ3tbMmEScg7RHMF3ok7NByq2MTzNzWfgIhAKjS8Uj918GX8D26gnb5ImgaQdGRsLt6MZ16NTLH0BE6"}}
build/torch214-metal-aarch64-darwin/symbols.json ADDED
@@ -0,0 +1,169 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema_version": 1,
3
+ "module": "_ggml_quantization_metal_fe2bb66",
4
+ "functions": [
5
+ {
6
+ "name": "dequantize",
7
+ "qualname": "dequantize",
8
+ "module": "_ggml_quantization_metal_fe2bb66",
9
+ "kind": "function",
10
+ "doc": "`(rows, bytes_per_row)` uint8 blocks -> `(rows, cols)` values of `dtype`.",
11
+ "signature": {
12
+ "parameters": [
13
+ {
14
+ "name": "blocks",
15
+ "kind": "POSITIONAL_OR_KEYWORD",
16
+ "default": null,
17
+ "annotation": "torch.Tensor"
18
+ },
19
+ {
20
+ "name": "ggml_type",
21
+ "kind": "POSITIONAL_OR_KEYWORD",
22
+ "default": null,
23
+ "annotation": "int"
24
+ },
25
+ {
26
+ "name": "rows",
27
+ "kind": "POSITIONAL_OR_KEYWORD",
28
+ "default": null,
29
+ "annotation": "int"
30
+ },
31
+ {
32
+ "name": "cols",
33
+ "kind": "POSITIONAL_OR_KEYWORD",
34
+ "default": null,
35
+ "annotation": "int"
36
+ },
37
+ {
38
+ "name": "dtype",
39
+ "kind": "POSITIONAL_OR_KEYWORD",
40
+ "default": null,
41
+ "annotation": "torch.dtype"
42
+ }
43
+ ],
44
+ "return_annotation": "torch.Tensor"
45
+ }
46
+ },
47
+ {
48
+ "name": "get_rows",
49
+ "qualname": "get_rows",
50
+ "module": "_ggml_quantization_metal_fe2bb66",
51
+ "kind": "function",
52
+ "doc": "The rows `indices` names, unpacked: `(rows, bytes_per_row)` uint8 -> `(len(indices), cols)`.\n\nggml's `get_rows`, which dequantizes as it gathers -- so reading a few rows out of a large table\nnever touches the rest.",
53
+ "signature": {
54
+ "parameters": [
55
+ {
56
+ "name": "blocks",
57
+ "kind": "POSITIONAL_OR_KEYWORD",
58
+ "default": null,
59
+ "annotation": "torch.Tensor"
60
+ },
61
+ {
62
+ "name": "indices",
63
+ "kind": "POSITIONAL_OR_KEYWORD",
64
+ "default": null,
65
+ "annotation": "torch.Tensor"
66
+ },
67
+ {
68
+ "name": "ggml_type",
69
+ "kind": "POSITIONAL_OR_KEYWORD",
70
+ "default": null,
71
+ "annotation": "int"
72
+ },
73
+ {
74
+ "name": "cols",
75
+ "kind": "POSITIONAL_OR_KEYWORD",
76
+ "default": null,
77
+ "annotation": "int"
78
+ },
79
+ {
80
+ "name": "dtype",
81
+ "kind": "POSITIONAL_OR_KEYWORD",
82
+ "default": null,
83
+ "annotation": "torch.dtype"
84
+ }
85
+ ],
86
+ "return_annotation": "torch.Tensor"
87
+ }
88
+ },
89
+ {
90
+ "name": "mul_mat_id",
91
+ "qualname": "mul_mat_id",
92
+ "module": "_ggml_quantization_metal_fe2bb66",
93
+ "kind": "function",
94
+ "doc": "One dispatch for a bank of routed experts: ggml's `mul_mv_id`.\n\n`blocks` is `(n_experts, out_features, bytes_per_row)`, `x` is `(n_tokens, in_features)`, and\n`ids` is `(n_tokens, n_used)` naming the expert each of a token's slots picked. The result is\n`(n_tokens, n_used, out_features)` f32, one row per slot.\n\nThe alternative is a gemv per expert per layer, whose arithmetic is dwarfed by the dispatch\naround it -- which is most of what a MoE decode step costs.",
95
+ "signature": {
96
+ "parameters": [
97
+ {
98
+ "name": "blocks",
99
+ "kind": "POSITIONAL_OR_KEYWORD",
100
+ "default": null,
101
+ "annotation": "torch.Tensor"
102
+ },
103
+ {
104
+ "name": "x",
105
+ "kind": "POSITIONAL_OR_KEYWORD",
106
+ "default": null,
107
+ "annotation": "torch.Tensor"
108
+ },
109
+ {
110
+ "name": "ids",
111
+ "kind": "POSITIONAL_OR_KEYWORD",
112
+ "default": null,
113
+ "annotation": "torch.Tensor"
114
+ },
115
+ {
116
+ "name": "ggml_type",
117
+ "kind": "POSITIONAL_OR_KEYWORD",
118
+ "default": null,
119
+ "annotation": "int"
120
+ },
121
+ {
122
+ "name": "out_features",
123
+ "kind": "POSITIONAL_OR_KEYWORD",
124
+ "default": null,
125
+ "annotation": "int"
126
+ }
127
+ ],
128
+ "return_annotation": "torch.Tensor"
129
+ }
130
+ },
131
+ {
132
+ "name": "mul_mat_vec",
133
+ "qualname": "mul_mat_vec",
134
+ "module": "_ggml_quantization_metal_fe2bb66",
135
+ "kind": "function",
136
+ "doc": "Fused dequantize-gemv: `x @ blocks.T` without unpacking `blocks`.\n\n`x` is `(rows, in_features)` and `rows` must be at most `MAX_GEMV_ROWS`. The result is f32\nwhatever `x`'s dtype was, since the kernel writes an f32 destination; cast it at the call site,\nwhere the cast can be fused into whatever consumes it.",
137
+ "signature": {
138
+ "parameters": [
139
+ {
140
+ "name": "blocks",
141
+ "kind": "POSITIONAL_OR_KEYWORD",
142
+ "default": null,
143
+ "annotation": "torch.Tensor"
144
+ },
145
+ {
146
+ "name": "x",
147
+ "kind": "POSITIONAL_OR_KEYWORD",
148
+ "default": null,
149
+ "annotation": "torch.Tensor"
150
+ },
151
+ {
152
+ "name": "ggml_type",
153
+ "kind": "POSITIONAL_OR_KEYWORD",
154
+ "default": null,
155
+ "annotation": "int"
156
+ },
157
+ {
158
+ "name": "out_features",
159
+ "kind": "POSITIONAL_OR_KEYWORD",
160
+ "default": null,
161
+ "annotation": "int"
162
+ }
163
+ ],
164
+ "return_annotation": "torch.Tensor"
165
+ }
166
+ }
167
+ ],
168
+ "layers": []
169
+ }
build/torch215-metal-aarch64-darwin/__init__.py ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Compute directly on the packed blocks of a GGUF checkpoint.
2
+
3
+ A GGUF weight is stored as blocks of 32 or 256 values sharing a scale. These kernels read that
4
+ layout as it is, so a quantized model can be loaded and run without ever materializing a dense
5
+ copy — which is the whole memory saving.
6
+
7
+ Ported from llama.cpp's ggml-cuda; `vendor/UPSTREAM` pins the revision. The ops are named for what
8
+ they do rather than for a backend: each backend registers its own implementation of the same
9
+ schema, so calls dispatch on the tensor's device.
10
+ """
11
+
12
+ import torch
13
+
14
+ from ._ops import add_op_namespace_prefix, ops
15
+
16
+
17
+ __all__ = ["GEMV_TYPES", "MAX_GEMV_ROWS", "dequantize", "get_rows", "mul_mat_id", "mul_mat_vec"]
18
+
19
+ # Upstream's MMVQ_MAX_BATCH_SIZE: `mul_mat_vec` has no implementation beyond this many rows, so a
20
+ # caller with more (prefill) dequantizes and uses an ordinary matmul.
21
+ MAX_GEMV_ROWS = 8
22
+
23
+ # ggml type ids `mul_mat_vec` implements, as this build reports them -- it is backend-specific, and
24
+ # a type routed into a gemv that has no kernel for it is a fault, not a fallback. CUDA covers
25
+ # Q4_0/Q4_1/Q5_0/Q5_1/Q8_0, the K quants, the IQ quants, MXFP4/NVFP4 and Q1_0/Q2_0; Metal is the
26
+ # same minus NVFP4/Q1_0/Q2_0, which its metallib has no kernels for. `dequantize` covers more, so
27
+ # check this before choosing the fused path.
28
+ try:
29
+ GEMV_TYPES = frozenset(ops.gemv_types())
30
+ except AttributeError:
31
+ # A build published before `gemv_types` existed; those are CUDA-only, so its list is theirs.
32
+ GEMV_TYPES = frozenset({2, 3, 6, 7, 8, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 23, 29, 39, 40, 41, 42})
33
+
34
+
35
+ def get_rows(
36
+ blocks: torch.Tensor, indices: torch.Tensor, ggml_type: int, cols: int, dtype: torch.dtype
37
+ ) -> torch.Tensor:
38
+ """The rows `indices` names, unpacked: `(rows, bytes_per_row)` uint8 -> `(len(indices), cols)`.
39
+
40
+ ggml's `get_rows`, which dequantizes as it gathers -- so reading a few rows out of a large table
41
+ never touches the rest.
42
+ """
43
+ return ops.get_rows(blocks, indices, ggml_type, cols, dtype)
44
+
45
+
46
+ def dequantize(
47
+ blocks: torch.Tensor, ggml_type: int, rows: int, cols: int, dtype: torch.dtype
48
+ ) -> torch.Tensor:
49
+ """`(rows, bytes_per_row)` uint8 blocks -> `(rows, cols)` values of `dtype`."""
50
+ return ops.dequantize(blocks, ggml_type, rows, cols, dtype)
51
+
52
+
53
+ def mul_mat_vec(
54
+ blocks: torch.Tensor, x: torch.Tensor, ggml_type: int, out_features: int
55
+ ) -> torch.Tensor:
56
+ """Fused dequantize-gemv: `x @ blocks.T` without unpacking `blocks`.
57
+
58
+ `x` is `(rows, in_features)` and `rows` must be at most `MAX_GEMV_ROWS`. The result is f32
59
+ whatever `x`'s dtype was, since the kernel writes an f32 destination; cast it at the call site,
60
+ where the cast can be fused into whatever consumes it.
61
+ """
62
+ return ops.mul_mat_vec(blocks, x, ggml_type, out_features)
63
+
64
+
65
+ def mul_mat_id(
66
+ blocks: torch.Tensor, x: torch.Tensor, ids: torch.Tensor, ggml_type: int, out_features: int
67
+ ) -> torch.Tensor:
68
+ """One dispatch for a bank of routed experts: ggml's `mul_mv_id`.
69
+
70
+ `blocks` is `(n_experts, out_features, bytes_per_row)`, `x` is `(n_tokens, in_features)`, and
71
+ `ids` is `(n_tokens, n_used)` naming the expert each of a token's slots picked. The result is
72
+ `(n_tokens, n_used, out_features)` f32, one row per slot.
73
+
74
+ The alternative is a gemv per expert per layer, whose arithmetic is dwarfed by the dispatch
75
+ around it -- which is most of what a MoE decode step costs.
76
+ """
77
+ return ops.mul_mat_id(blocks, x, ids, ggml_type, out_features)
78
+
79
+
80
+ # Without these, torch.compile cannot trace the ops and breaks the graph at every call.
81
+ @torch.library.register_fake(add_op_namespace_prefix("get_rows"))
82
+ def _get_rows_fake(blocks, indices, ggml_type, cols, dtype):
83
+ return blocks.new_empty((indices.numel(), cols), dtype=dtype)
84
+
85
+
86
+ @torch.library.register_fake(add_op_namespace_prefix("dequantize"))
87
+ def _dequantize_fake(blocks, ggml_type, rows, cols, dtype):
88
+ return blocks.new_empty((rows, cols), dtype=dtype)
89
+
90
+
91
+ @torch.library.register_fake(add_op_namespace_prefix("mul_mat_vec"))
92
+ def _mul_mat_vec_fake(blocks, x, ggml_type, out_features):
93
+ return x.new_empty((x.shape[0], out_features), dtype=torch.float32)
94
+
95
+
96
+ @torch.library.register_fake(add_op_namespace_prefix("mul_mat_id"))
97
+ def _mul_mat_id_fake(blocks, x, ids, ggml_type, out_features):
98
+ return x.new_empty((x.shape[0], ids.shape[1], out_features), dtype=torch.float32)
build/torch215-metal-aarch64-darwin/_ggml_quantization_metal_fe2bb66.abi3.so ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9ba194e4ec346cebbcff20a4d5309e7063e2ef45233dd2cfd08f376ab1347a3a
3
+ size 3347704
build/torch215-metal-aarch64-darwin/_ops.py ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ from . import _ggml_quantization_metal_fe2bb66
3
+ ops = torch.ops._ggml_quantization_metal_fe2bb66
4
+
5
+ def add_op_namespace_prefix(op_name: str):
6
+ """
7
+ Prefix op by namespace.
8
+ """
9
+ return f"_ggml_quantization_metal_fe2bb66::{op_name}"
build/torch215-metal-aarch64-darwin/metadata.json ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "ggml-quantization",
3
+ "id": "_ggml_quantization_metal_fe2bb66",
4
+ "version": 1,
5
+ "kernels-minver": "0.14.0",
6
+ "license": "MIT",
7
+ "python-depends": [],
8
+ "kernel-depends": [],
9
+ "backend": {
10
+ "type": "metal"
11
+ },
12
+ "digest": {
13
+ "algorithm": "sha256",
14
+ "files": {
15
+ "__init__.py": "iPXgZXBgY3CzpNUSjmCovMVNPLBol1KBaNoTzkXp5mM=",
16
+ "_ggml_quantization_metal_fe2bb66.abi3.so": "m6GU5Ow0bOu8/yCk1TCecGPi70UjPdLP0I83arE0ejo=",
17
+ "_ops.py": "7JPqKK8z3jmEj5qhydHkeSXOsZMXb424/1/5MR/BZuk=",
18
+ "symbols.json": "y6E2ftRiVpYGHN9aFeGUjoXci6YSNZRswRiLbHiaxFw="
19
+ }
20
+ },
21
+ "provenance": {
22
+ "kernel-builder": {
23
+ "version": "0.18.0-dev0",
24
+ "commit": "d054906a13710b811b96697b4635f03020842733",
25
+ "dirty": false
26
+ },
27
+ "kernel": {
28
+ "commit": "fe2bb66fee6c2a77eccf08a0508dc57428d488ed",
29
+ "dirty": false
30
+ }
31
+ }
32
+ }
build/torch215-metal-aarch64-darwin/metadata.json.sigstore ADDED
@@ -0,0 +1 @@
 
 
1
+ {"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHQjCCBsegAwIBAgIUTB4VD+cTE2J/FNRp+WB+PyojCyQwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYxMDE5MTEwNzI3WhcNMjYxMDE5MTExNzI3WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEke26yBujhfbnFCQ/mYa6JkQeuoZVqdb5xMSS9ObgcwZIrJvBUCHGxUxPO2JmkV682npy0bxMKmQM/6azndBwtqOCBeYwggXiMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAfBgNVHSMEGDAWgBTf0+nPViQRlvmo2OkoVaLGLhhkPzBvBgNVHREBAf8EZTBjhmFodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvLmdpdGh1Yi93b3JrZmxvd3MvYnVpbGQtbWFjLnlhbWxAcmVmcy9oZWFkcy9tYWluMDkGCisGAQQBg78wAQEEK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wHwYKKwYBBAGDvzABAgQRd29ya2Zsb3dfZGlzcGF0Y2gwNgYKKwYBBAGDvzABAwQoZmUyYmI2NmZlZTZjMmE3N2VjY2YwOGEwNTA4ZGM1NzQyOGQ0ODhlZDAbBgorBgEEAYO/MAEEBA1CdWlsZCAobWFjT1MpMCsGCisGAQQBg78wAQUEHWh1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MB0GCisGAQQBg78wAQYED3JlZnMvaGVhZHMvbWFpbjA7BgorBgEEAYO/MAEIBC0MK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wcQYKKwYBBAGDvzABCQRjDGFodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvLmdpdGh1Yi93b3JrZmxvd3MvYnVpbGQtbWFjLnlhbWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoZmUyYmI2NmZlZTZjMmE3N2VjY2YwOGEwNTA4ZGM1NzQyOGQ0ODhlZDAdBgorBgEEAYO/MAELBA8MDWdpdGh1Yi1ob3N0ZWQwQAYKKwYBBAGDvzABDAQyDDBodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkwOAYKKwYBBAGDvzABDQQqDChmZTJiYjY2ZmVlNmMyYTc3ZWNjZjA4YTA1MDhkYzU3NDI4ZDQ4OGVkMB8GCisGAQQBg78wAQ4EEQwPcmVmcy9oZWFkcy9tYWluMBoGCisGAQQBg78wAQ8EDAwKMTA3MTQ3NTUyOTAuBgorBgEEAYO/MAEQBCAMHmh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZTAYBgorBgEEAYO/MAERBAoMCDI1NzIwNzQzMHEGCisGAQQBg78wARIEYwxhaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL2J1aWxkLW1hYy55YW1sQHJlZnMvaGVhZHMvbWFpbjA4BgorBgEEAYO/MAETBCoMKGZlMmJiNjZmZWU2YzJhNzdlY2NmMDhhMDUwOGRjNTc0MjhkNDg4ZWQwIQYKKwYBBAGDvzABFAQTDBF3b3JrZmxvd19kaXNwYXRjaDBkBgorBgEEAYO/MAEVBFYMVGh0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS9hY3Rpb25zL3J1bnMvMzkyMzk1NzkyOTQvYXR0ZW1wdHMvMTAWBgorBgEEAYO/MAEWBAgMBnB1YmxpYzBGBgorBgEEAYO/MAEYBDgMNnJlcG86aHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHk6cmVmOnJlZnMvaGVhZHMvbWFpbjCBiQYKKwYBBAHWeQIEAgR7BHkAdwB1AN09MGrGxxEyYxkeHJlnNwKiSl643jyt/4eKcoAvKe6OAAABoVPYUNgAAAQDAEYwRAIgdot+D0kBpL0Vjd54/6ZFNezNdzxVB2S8jZ37cMWMkWICIEe6xQSNzfS/NgDMLvK477Ea3d/C1fpmkJ+mRLk/evfCMAoGCCqGSM49BAMDA2kAMGYCMQD5fvU45GxCHpPaO9zDJrRz+SGoLzrIGPGnXhE7573qsheg+gGoAjgJgW7/FfSjk4oCMQDQ9BE/R6ZPc8x/sL1r6oatDTftuzLE4wnBQZeTXS1G4vED5qVaWZ0FGws2pHP8BKs="},"tlogEntries":[{"logIndex":"3320116279","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1792408048","inclusionPromise":{"signedEntryTimestamp":"MEYCIQCWGCCdbQ2H/gmBNBHdhYoemW+AqV5r6eL9aLAjRyi+XwIhAKjMKZmdMA/qXEIP3SXmfHJGOK8rL7WOMzDjF+OOiOeS"},"inclusionProof":{"logIndex":"3198212017","rootHash":"fgy7/SHIH8bvgld2IyDPubflN1Qditlksei1P8fitkE=","treeSize":"3198212021","hashes":["7qYq5mEVhlkSbrH5LzIpC/XxK1iJmjeL/FdJUBU5FC8=","Y98/HAKTieCqw4kgWpLOLyE3jft0/rmqXrC3m5czjAk=","BUStfLyIXQ7AYT5K7UYcVREZ09Yi2kBvcemZgiqmDCc=","W6wfhADT4Xbxfc2C6azDDSWoSinX6T1ws5q7wfn2RtI=","d4WtEHUmTcrtCIawVPy/Z6Mj7rW/JWAx9yYrHmtcx6g=","KfLkT2WZ0QP1XrrjzReMUrJIiMnbZT/NOrjsx9C313c=","xjJ60bWZdwtADBCQagSD2HlSIhe0x2cvZDn80+Q7fP8=","adnAraSTV7w7Y/rcE+QRhgZITBmEpFvaDRUcGIXFcZs=","NvhAA1+LqtXvaowiFXcolXI/TyFO3CsufLfJu3VJv2k=","PJRsVvScXNHmqQge+wrG01cIyckZNEkkYLfYRFm0H14=","f4MktXqhBPk7ruDBxwgqTvXa7eCNzak9cUObXS0eTxI=","OlLDeTiZ1vIMDel4vGDtbNVnrFnzDe1MFV5rBN5Ep4o=","uCZQe757l2sS1c05Y7TzOwEm+X8MeGLIUCkEOmFVOz4=","nyQV/+cWQUG5Hb2PKjQQNkQIJmz2qzAZKBQlkHGIknM=","G+nk7mgE5h6dUmv2UY7NDJrY3WvrZY31raaO1AETt+o=","qlTWNDzERnTBQVcHHXXVPjiUP0SsikGxfcxVlgqVFDo=","gg9GNApNke3+zNhl4tsWtmIycCFrOMCB3lys6XuSQNQ=","NlOclldmKPA1tMKIskqHAwuQDYHp31YwpK+OOMrMccc=","qxzHanAzz57SDdmJe0B7bJK72NTIBbwEMGBBKvDOROw=","xH/DCseLHr9eKoYT8qsORZK7zVdEGYWHuVtsVrD95wY="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n3198212021\nfgy7/SHIH8bvgld2IyDPubflN1Qditlksei1P8fitkE=\n\n— rekor.sigstore.dev wNI9ajBGAiEAyfuy/ca6ZWoh0p6Gm3PDVAApw7qcIpDRTP/YUKbw4doCIQD2lZpR6zOH3mN6TqFzfpKEJUUj85gcogrkU3WLJNawug==\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiJlZWJmNTk5NDExYzYxZmFkMGExNDU2ZDE5Nzg2ODc0YzM5NmQxMzNiZDExYjEyNzJmOTc5YmVhZjE1YTIzYTk3In19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FVUNJQTJWUldmdURWNWhGK3Q5VE12ZU9HV3lQUTJPMnRZN2tHU210ZFp6dVljL0FpRUF3Vy9rbU9xcHVRZ3YvNTNpc0JYY3BwVVp0aXRFbCtWT3oySkhCcGFSVHE4PSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaFJha05EUW5ObFowRjNTVUpCWjBsVlZFSTBWa1FyWTFSRk1rb3ZSazVTY0N0WFFpdFFlVzlxUTNsUmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFplRTFFUlRWTlZFVjNUbnBKTTFkb1kwNU5hbGw0VFVSRk5VMVVSWGhPZWtrelYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZyWlRJMmVVSjFhbWhtWW01R1ExRXZiVmxoTmtwclVXVjFiMXBXY1dSaU5YaE5VMU1LT1U5aVoyTjNXa2x5U25aQ1ZVTklSM2hWZUZCUE1rcHRhMVkyT0RKdWNIa3dZbmhOUzIxUlRTODJZWHB1WkVKM2RIRlBRMEpsV1hkbloxaHBUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXWkNaMDVXU0ZOTlJVZEVRVmRuUWxSbUNqQXJibEJXYVZGU2JIWnRiekpQYTI5V1lVeEhUR2hvYTFCNlFuWkNaMDVXU0ZKRlFrRm1PRVZhVkVKcWFHMUdiMlJJVW5kamVtOTJUREprY0dSSGFERUtXV2sxYW1JeU1IWmhTRlp1V2pKc2RWb3lXbWhaTWxWMllUSldlV0p0Vm5OamVURnFZakl4ZEdSWE5YQmtTR3QyVEcxa2NHUkhhREZaYVRrellqTktjZ3BhYlhoMlpETk5kbGx1Vm5CaVIxRjBZbGRHYWt4dWJHaGlWM2hCWTIxV2JXTjVPVzlhVjBaclkzazVkRmxYYkhWTlJHdEhRMmx6UjBGUlVVSm5OemgzQ2tGUlJVVkxNbWd3WkVoQ2VrOXBPSFprUnpseVdsYzBkVmxYVGpCaFZ6bDFZM2sxYm1GWVVtOWtWMG94WXpKV2VWa3lPWFZrUjFaMVpFTTFhbUl5TUhjS1NIZFpTMHQzV1VKQ1FVZEVkbnBCUWtGblVWSmtNamw1WVRKYWMySXpaR1phUjJ4NlkwZEdNRmt5WjNkT1oxbExTM2RaUWtKQlIwUjJla0ZDUVhkUmJ3cGFiVlY1V1cxSk1rNXRXbXhhVkZwcVRXMUZNMDR5Vm1wWk1sbDNUMGRGZDA1VVFUUmFSMDB4VG5wUmVVOUhVVEJQUkdoc1drUkJZa0puYjNKQ1owVkZDa0ZaVHk5TlFVVkZRa0V4UTJSWGJITmFRMEZ2WWxkR2FsUXhUWEJOUTNOSFEybHpSMEZSVVVKbk56aDNRVkZWUlVoWGFERmFNbVJ3WW0xa2JWbFhUbXdLVERKMGJHTnROV3hpU0UxMFdUSTVkR0pZVm5WaFdGSTFUVUl3UjBOcGMwZEJVVkZDWnpjNGQwRlJXVVZFTTBwc1dtNU5kbUZIVm1oYVNFMTJZbGRHY0FwaWFrRTNRbWR2Y2tKblJVVkJXVTh2VFVGRlNVSkRNRTFMTW1nd1pFaENlazlwT0haa1J6bHlXbGMwZFZsWFRqQmhWemwxWTNrMWJtRllVbTlrVjBveENtTXlWbmxaTWpsMVpFZFdkV1JETldwaU1qQjNZMUZaUzB0M1dVSkNRVWRFZG5wQlFrTlJVbXBFUjBadlpFaFNkMk42YjNaTU1tUndaRWRvTVZscE5Xb0tZakl3ZG1GSVZtNWFNbXgxV2pKYWFGa3lWWFpoTWxaNVltMVdjMk41TVdwaU1qRjBaRmMxY0dSSWEzWk1iV1J3WkVkb01WbHBPVE5pTTBweVdtMTRkZ3BrTTAxMldXNVdjR0pIVVhSaVYwWnFURzVzYUdKWGVFRmpiVlp0WTNrNWIxcFhSbXRqZVRsMFdWZHNkVTFFWjBkRGFYTkhRVkZSUW1jM09IZEJVVzlGQ2t0bmQyOWFiVlY1V1cxSk1rNXRXbXhhVkZwcVRXMUZNMDR5Vm1wWk1sbDNUMGRGZDA1VVFUUmFSMDB4VG5wUmVVOUhVVEJQUkdoc1drUkJaRUpuYjNJS1FtZEZSVUZaVHk5TlFVVk1Ra0U0VFVSWFpIQmtSMmd4V1dreGIySXpUakJhVjFGM1VVRlpTMHQzV1VKQ1FVZEVkbnBCUWtSQlVYbEVSRUp2WkVoU2R3cGplbTkyVERKa2NHUkhhREZaYVRWcVlqSXdkbUZJVm01YU1teDFXakphYUZreVZYWmhNbFo1WW0xV2MyTjVNV3BpTWpGMFpGYzFjR1JJYTNkUFFWbExDa3QzV1VKQ1FVZEVkbnBCUWtSUlVYRkVRMmh0V2xSS2FWbHFXVEphYlZac1RtMU5lVmxVWXpOYVYwNXFXbXBCTkZsVVFURk5SR2hyV1hwVk0wNUVTVFFLV2tSUk5FOUhWbXROUWpoSFEybHpSMEZSVVVKbk56aDNRVkUwUlVWUmQxQmpiVlp0WTNrNWIxcFhSbXRqZVRsMFdWZHNkVTFDYjBkRGFYTkhRVkZSUWdwbk56aDNRVkU0UlVSQmQwdE5WRUV6VFZSUk0wNVVWWGxQVkVGMVFtZHZja0puUlVWQldVOHZUVUZGVVVKRFFVMUliV2d3WkVoQ2VrOXBPSFphTW13d0NtRklWbWxNYlU1MllsTTViMlJYWkc1aFZ6VnVXbTFHYWxwVVFWbENaMjl5UW1kRlJVRlpUeTlOUVVWU1FrRnZUVU5FU1RGT2VrbDNUbnBSZWsxSVJVY0tRMmx6UjBGUlVVSm5OemgzUVZKSlJWbDNlR2hoU0ZJd1kwaE5Oa3g1T1c1aFdGSnZaRmRKZFZreU9YUk1NbWd4V2pKa2NHSnRaRzFaVjA1c1RESjBiQXBqYlRWc1lraE5kRmt5T1hSaVdGWjFZVmhTTlV4NU5XNWhXRkp2WkZkSmRtUXlPWGxoTWxwellqTmtla3d5U2pGaFYzaHJURmN4YUZsNU5UVlpWekZ6Q2xGSVNteGFiazEyWVVkV2FGcElUWFppVjBad1ltcEJORUpuYjNKQ1owVkZRVmxQTDAxQlJWUkNRMjlOUzBkYWJFMXRTbWxPYWxwdFdsZFZNbGw2U21nS1RucGtiRmt5VG0xTlJHaG9UVVJWZDA5SFVtcE9WR013VFdwb2EwNUVaelJhVjFGM1NWRlpTMHQzV1VKQ1FVZEVkbnBCUWtaQlVWUkVRa1l6WWpOS2NncGFiWGgyWkRFNWEyRllUbmRaV0ZKcVlVUkNhMEpuYjNKQ1owVkZRVmxQTDAxQlJWWkNSbGxOVmtkb01HUklRbnBQYVRoMldqSnNNR0ZJVm1sTWJVNTJDbUpUT1c5a1YyUnVZVmMxYmxwdFJtcGFVemx5V2xoS2RWcFhlSHBNVjA1MllsY3hNV0p0YkRCbFV6bG9XVE5TY0dJeU5YcE1NMG94WW01TmRrMTZhM2tLVFhwck1VNTZhM2xQVkZGMldWaFNNRnBYTVhka1NFMTJUVlJCVjBKbmIzSkNaMFZGUVZsUEwwMUJSVmRDUVdkTlFtNUNNVmx0ZUhCWmVrSkhRbWR2Y2dwQ1owVkZRVmxQTDAxQlJWbENSR2ROVG01S2JHTkhPRFpoU0ZadVdqSnNkVm95V21oWk1sVjJZVEpXZVdKdFZuTmplVEZxWWpJeGRHUlhOWEJrU0dzMkNtTnRWbTFQYmtwc1dtNU5kbUZIVm1oYVNFMTJZbGRHY0dKcVEwSnBVVmxMUzNkWlFrSkJTRmRsVVVsRlFXZFNOMEpJYTBGa2QwSXhRVTR3T1UxSGNrY0tlSGhGZVZsNGEyVklTbXh1VG5kTGFWTnNOalF6YW5sMEx6UmxTMk52UVhaTFpUWlBRVUZCUW05V1VGbFZUbWRCUVVGUlJFRkZXWGRTUVVsblpHOTBLd3BFTUd0Q2NFd3dWbXBrTlRRdk5scEdUbVY2VG1SNmVGWkNNbE00YWxvek4yTk5WMDFyVjBsRFNVVmxObmhSVTA1NlpsTXZUbWRFVFV4MlN6UTNOMFZoQ2pOa0wwTXhabkJ0YTBvcmJWSk1heTlsZG1aRFRVRnZSME5EY1VkVFRUUTVRa0ZOUkVFeWEwRk5SMWxEVFZGRU5XWjJWVFExUjNoRFNIQlFZVTg1ZWtRS1NuSlNlaXRUUjI5TWVuSkpSMUJIYmxob1JUYzFOek54YzJobFp5dG5SMjlCYW1kS1oxYzNMMFptVTJwck5HOURUVkZFVVRsQ1JTOVNObHBRWXpoNEx3cHpUREZ5Tm05aGRFUlVablIxZWt4Rk5IZHVRbEZhWlZSWVV6RkhOSFpGUkRWeFZtRlhXakJHUjNkek1uQklVRGhDUzNNOUNpMHRMUzB0UlU1RUlFTkZVbFJKUmtsRFFWUkZMUzB0TFMwSyJ9fX19"}],"timestampVerificationData":{"rfc3161Timestamps":[{"signedTimestamp":"MIICyTADAgEAMIICwAYJKoZIhvcNAQcCoIICsTCCAq0CAQMxDTALBglghkgBZQMEAgEwgbgGCyqGSIb3DQEJEAEEoIGoBIGlMIGiAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQg/nmJjiiIjVAFEwsMe4oETZP63FTQZujmyerbhJQHCDECFQCNGznPNb/vQyL/jI9TVJYDCPwm6BgPMjAyNjEwMTkxMTA3MjdaMAMCAQGgMqQwMC4xFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEVMBMGA1UEAxMMc2lnc3RvcmUtdHNhoAAxggHaMIIB1gIBATBRMDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAsGCWCGSAFlAwQCAaCB/DAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTI2MTAxOTExMDcyN1owLwYJKoZIhvcNAQkEMSIEIKZ8Ui6Vwz73+xaMwHUhSHD5ui+4SMcDrGvgQOiHa3bgMIGOBgsqhkiG9w0BCRACLzF/MH0wezB5BCCF+Se8B6tiysO0Q1bBDvyBssaIP9p6uebYcNnROs0FtzBVMD2kOzA5MRUwEwYDVQQKEwxzaWdzdG9yZS5kZXYxIDAeBgNVBAMTF3NpZ3N0b3JlLXRzYS1zZWxmc2lnbmVkAhQ6E1QvDJBh7rzBQy/Lio6LKiOLDDAKBggqhkjOPQQDAgRmMGQCMD4XyD/cuPr4UshH1omOGaMgDQdKBRMRNxJ+4s5y9nQgxL9KVTrH9Y10p/tdylNEwgIwM3lyQtgUZUVusSUwLWSRIzl8bPuEYR7/hhWnPpQMwPERaGDzmEL7p9Vn7I7sGkER"}]}},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"7r9ZlBHGH60KFFbRl4aHTDltEzvRGxJy+Xm+rxWiOpc="},"signature":"MEUCIA2VRWfuDV5hF+t9TMveOGWyPQ2O2tY7kGSmtdZzuYc/AiEAwW/kmOqpuQgv/53isBXcppUZtitEl+VOz2JHBpaRTq8="}}
build/torch215-metal-aarch64-darwin/symbols.json ADDED
@@ -0,0 +1,169 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema_version": 1,
3
+ "module": "_ggml_quantization_metal_fe2bb66",
4
+ "functions": [
5
+ {
6
+ "name": "dequantize",
7
+ "qualname": "dequantize",
8
+ "module": "_ggml_quantization_metal_fe2bb66",
9
+ "kind": "function",
10
+ "doc": "`(rows, bytes_per_row)` uint8 blocks -> `(rows, cols)` values of `dtype`.",
11
+ "signature": {
12
+ "parameters": [
13
+ {
14
+ "name": "blocks",
15
+ "kind": "POSITIONAL_OR_KEYWORD",
16
+ "default": null,
17
+ "annotation": "torch.Tensor"
18
+ },
19
+ {
20
+ "name": "ggml_type",
21
+ "kind": "POSITIONAL_OR_KEYWORD",
22
+ "default": null,
23
+ "annotation": "int"
24
+ },
25
+ {
26
+ "name": "rows",
27
+ "kind": "POSITIONAL_OR_KEYWORD",
28
+ "default": null,
29
+ "annotation": "int"
30
+ },
31
+ {
32
+ "name": "cols",
33
+ "kind": "POSITIONAL_OR_KEYWORD",
34
+ "default": null,
35
+ "annotation": "int"
36
+ },
37
+ {
38
+ "name": "dtype",
39
+ "kind": "POSITIONAL_OR_KEYWORD",
40
+ "default": null,
41
+ "annotation": "torch.dtype"
42
+ }
43
+ ],
44
+ "return_annotation": "torch.Tensor"
45
+ }
46
+ },
47
+ {
48
+ "name": "get_rows",
49
+ "qualname": "get_rows",
50
+ "module": "_ggml_quantization_metal_fe2bb66",
51
+ "kind": "function",
52
+ "doc": "The rows `indices` names, unpacked: `(rows, bytes_per_row)` uint8 -> `(len(indices), cols)`.\n\nggml's `get_rows`, which dequantizes as it gathers -- so reading a few rows out of a large table\nnever touches the rest.",
53
+ "signature": {
54
+ "parameters": [
55
+ {
56
+ "name": "blocks",
57
+ "kind": "POSITIONAL_OR_KEYWORD",
58
+ "default": null,
59
+ "annotation": "torch.Tensor"
60
+ },
61
+ {
62
+ "name": "indices",
63
+ "kind": "POSITIONAL_OR_KEYWORD",
64
+ "default": null,
65
+ "annotation": "torch.Tensor"
66
+ },
67
+ {
68
+ "name": "ggml_type",
69
+ "kind": "POSITIONAL_OR_KEYWORD",
70
+ "default": null,
71
+ "annotation": "int"
72
+ },
73
+ {
74
+ "name": "cols",
75
+ "kind": "POSITIONAL_OR_KEYWORD",
76
+ "default": null,
77
+ "annotation": "int"
78
+ },
79
+ {
80
+ "name": "dtype",
81
+ "kind": "POSITIONAL_OR_KEYWORD",
82
+ "default": null,
83
+ "annotation": "torch.dtype"
84
+ }
85
+ ],
86
+ "return_annotation": "torch.Tensor"
87
+ }
88
+ },
89
+ {
90
+ "name": "mul_mat_id",
91
+ "qualname": "mul_mat_id",
92
+ "module": "_ggml_quantization_metal_fe2bb66",
93
+ "kind": "function",
94
+ "doc": "One dispatch for a bank of routed experts: ggml's `mul_mv_id`.\n\n`blocks` is `(n_experts, out_features, bytes_per_row)`, `x` is `(n_tokens, in_features)`, and\n`ids` is `(n_tokens, n_used)` naming the expert each of a token's slots picked. The result is\n`(n_tokens, n_used, out_features)` f32, one row per slot.\n\nThe alternative is a gemv per expert per layer, whose arithmetic is dwarfed by the dispatch\naround it -- which is most of what a MoE decode step costs.",
95
+ "signature": {
96
+ "parameters": [
97
+ {
98
+ "name": "blocks",
99
+ "kind": "POSITIONAL_OR_KEYWORD",
100
+ "default": null,
101
+ "annotation": "torch.Tensor"
102
+ },
103
+ {
104
+ "name": "x",
105
+ "kind": "POSITIONAL_OR_KEYWORD",
106
+ "default": null,
107
+ "annotation": "torch.Tensor"
108
+ },
109
+ {
110
+ "name": "ids",
111
+ "kind": "POSITIONAL_OR_KEYWORD",
112
+ "default": null,
113
+ "annotation": "torch.Tensor"
114
+ },
115
+ {
116
+ "name": "ggml_type",
117
+ "kind": "POSITIONAL_OR_KEYWORD",
118
+ "default": null,
119
+ "annotation": "int"
120
+ },
121
+ {
122
+ "name": "out_features",
123
+ "kind": "POSITIONAL_OR_KEYWORD",
124
+ "default": null,
125
+ "annotation": "int"
126
+ }
127
+ ],
128
+ "return_annotation": "torch.Tensor"
129
+ }
130
+ },
131
+ {
132
+ "name": "mul_mat_vec",
133
+ "qualname": "mul_mat_vec",
134
+ "module": "_ggml_quantization_metal_fe2bb66",
135
+ "kind": "function",
136
+ "doc": "Fused dequantize-gemv: `x @ blocks.T` without unpacking `blocks`.\n\n`x` is `(rows, in_features)` and `rows` must be at most `MAX_GEMV_ROWS`. The result is f32\nwhatever `x`'s dtype was, since the kernel writes an f32 destination; cast it at the call site,\nwhere the cast can be fused into whatever consumes it.",
137
+ "signature": {
138
+ "parameters": [
139
+ {
140
+ "name": "blocks",
141
+ "kind": "POSITIONAL_OR_KEYWORD",
142
+ "default": null,
143
+ "annotation": "torch.Tensor"
144
+ },
145
+ {
146
+ "name": "x",
147
+ "kind": "POSITIONAL_OR_KEYWORD",
148
+ "default": null,
149
+ "annotation": "torch.Tensor"
150
+ },
151
+ {
152
+ "name": "ggml_type",
153
+ "kind": "POSITIONAL_OR_KEYWORD",
154
+ "default": null,
155
+ "annotation": "int"
156
+ },
157
+ {
158
+ "name": "out_features",
159
+ "kind": "POSITIONAL_OR_KEYWORD",
160
+ "default": null,
161
+ "annotation": "int"
162
+ }
163
+ ],
164
+ "return_annotation": "torch.Tensor"
165
+ }
166
+ }
167
+ ],
168
+ "layers": []
169
+ }