Uploaded using `kernel-builder`.
Browse files- .gitattributes +3 -0
- build/torch210-metal-aarch64-darwin/{_mlx_quantization_metal_kernels_metal_0aaded7.abi3.so → _mlx_quantization_metal_kernels_metal_38ff04e.abi3.so} +2 -2
- build/torch210-metal-aarch64-darwin/_ops.py +3 -3
- build/torch210-metal-aarch64-darwin/metadata.json +16 -1
- build/torch210-metal-aarch64-darwin/metadata.json.sigstore +1 -0
- build/torch210-metal-aarch64-darwin/mlx_quantization_metal_kernels/__init__.py +2 -2
- build/torch211-metal-aarch64-darwin/__init__.py +162 -0
- build/torch211-metal-aarch64-darwin/_mlx_quantization_metal_kernels_metal_38ff04e.abi3.so +3 -0
- build/torch211-metal-aarch64-darwin/_ops.py +9 -0
- build/torch211-metal-aarch64-darwin/metadata.json +19 -0
- build/torch211-metal-aarch64-darwin/metadata.json.sigstore +1 -0
- build/torch211-metal-aarch64-darwin/mlx_quantization_metal_kernels/__init__.py +26 -0
- build/torch212-metal-aarch64-darwin/__init__.py +162 -0
- build/torch212-metal-aarch64-darwin/_mlx_quantization_metal_kernels_metal_38ff04e.abi3.so +3 -0
- build/torch212-metal-aarch64-darwin/_ops.py +9 -0
- build/torch212-metal-aarch64-darwin/metadata.json +19 -0
- build/torch212-metal-aarch64-darwin/metadata.json.sigstore +1 -0
- build/torch212-metal-aarch64-darwin/mlx_quantization_metal_kernels/__init__.py +26 -0
.gitattributes
CHANGED
|
@@ -38,3 +38,6 @@ build/torch28-metal-aarch64-darwin/_mlx_quantization_metal_kernels_33fa8c7.abi3.
|
|
| 38 |
build/torch29-metal-aarch64-darwin/_mlx_quantization_metal_kernels_33fa8c7.abi3.so filter=lfs diff=lfs merge=lfs -text
|
| 39 |
build/torch210-metal-aarch64-darwin/_mlx_quantization_metal_kernels_metal_0aaded7.abi3.so filter=lfs diff=lfs merge=lfs -text
|
| 40 |
build/torch29-metal-aarch64-darwin/_mlx_quantization_metal_kernels_metal_0aaded7.abi3.so filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
| 38 |
build/torch29-metal-aarch64-darwin/_mlx_quantization_metal_kernels_33fa8c7.abi3.so filter=lfs diff=lfs merge=lfs -text
|
| 39 |
build/torch210-metal-aarch64-darwin/_mlx_quantization_metal_kernels_metal_0aaded7.abi3.so filter=lfs diff=lfs merge=lfs -text
|
| 40 |
build/torch29-metal-aarch64-darwin/_mlx_quantization_metal_kernels_metal_0aaded7.abi3.so filter=lfs diff=lfs merge=lfs -text
|
| 41 |
+
build/torch210-metal-aarch64-darwin/_mlx_quantization_metal_kernels_metal_38ff04e.abi3.so filter=lfs diff=lfs merge=lfs -text
|
| 42 |
+
build/torch211-metal-aarch64-darwin/_mlx_quantization_metal_kernels_metal_38ff04e.abi3.so filter=lfs diff=lfs merge=lfs -text
|
| 43 |
+
build/torch212-metal-aarch64-darwin/_mlx_quantization_metal_kernels_metal_38ff04e.abi3.so filter=lfs diff=lfs merge=lfs -text
|
build/torch210-metal-aarch64-darwin/{_mlx_quantization_metal_kernels_metal_0aaded7.abi3.so → _mlx_quantization_metal_kernels_metal_38ff04e.abi3.so}
RENAMED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:cdf40b4b1eda395f3b3078db1931397f49c92e35d29017125e6906988c0e635c
|
| 3 |
+
size 40010696
|
build/torch210-metal-aarch64-darwin/_ops.py
CHANGED
|
@@ -1,9 +1,9 @@
|
|
| 1 |
import torch
|
| 2 |
-
from . import
|
| 3 |
-
ops = torch.ops.
|
| 4 |
|
| 5 |
def add_op_namespace_prefix(op_name: str):
|
| 6 |
"""
|
| 7 |
Prefix op by namespace.
|
| 8 |
"""
|
| 9 |
-
return f"
|
|
|
|
| 1 |
import torch
|
| 2 |
+
from . import _mlx_quantization_metal_kernels_metal_38ff04e
|
| 3 |
+
ops = torch.ops._mlx_quantization_metal_kernels_metal_38ff04e
|
| 4 |
|
| 5 |
def add_op_namespace_prefix(op_name: str):
|
| 6 |
"""
|
| 7 |
Prefix op by namespace.
|
| 8 |
"""
|
| 9 |
+
return f"_mlx_quantization_metal_kernels_metal_38ff04e::{op_name}"
|
build/torch210-metal-aarch64-darwin/metadata.json
CHANGED
|
@@ -1,4 +1,19 @@
|
|
| 1 |
{
|
|
|
|
|
|
|
|
|
|
| 2 |
"license": "MIT",
|
| 3 |
-
"python-depends": []
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4 |
}
|
|
|
|
| 1 |
{
|
| 2 |
+
"name": "mlx-quantization-metal-kernels",
|
| 3 |
+
"id": "_mlx_quantization_metal_kernels_metal_38ff04e",
|
| 4 |
+
"version": 1,
|
| 5 |
"license": "MIT",
|
| 6 |
+
"python-depends": [],
|
| 7 |
+
"backend": {
|
| 8 |
+
"type": "metal"
|
| 9 |
+
},
|
| 10 |
+
"digest": {
|
| 11 |
+
"algorithm": "sha256",
|
| 12 |
+
"files": {
|
| 13 |
+
"__init__.py": "RPKCn/crnlxPPRM3jVlrOE93840kDxotM2/B0Tw2Rp4=",
|
| 14 |
+
"_mlx_quantization_metal_kernels_metal_38ff04e.abi3.so": "zfQLSx7aOV87MHjbGTE5f0nJLjXSkBcSXmkGmIwOY1w=",
|
| 15 |
+
"_ops.py": "kQ55lpyV+9iXLIPKBPbo8bvBXlYM3OgwXfrbaMg+t2A=",
|
| 16 |
+
"mlx_quantization_metal_kernels/__init__.py": "DFYPlrhXwYjEqCl/8n0SmWGZV8NFml5DPhMjKfv98GY="
|
| 17 |
+
}
|
| 18 |
+
}
|
| 19 |
}
|
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":"MIIHczCCBvmgAwIBAgIUR6UUTXWOWAeJouQVwghpgOuCTvMwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwNjE4MDcwMjI3WhcNMjYwNjE4MDcxMjI3WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE6ogH5bPgxABlkFuwFNXaRMRcnynh6BG726z0bEIcvZNSx6gxWY7qiesvQpAYeAuYr6nBHaOjrcjebQubJdnw8KOCBhgwggYUMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQU+39mPxb8obvaeMKrdV9BXIOjbE8wHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wdQYDVR0RAQH/BGswaYZnaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL3NpZ24tb2xkLWJ1aWxkcy55YW1sQHJlZnMvaGVhZHMvbWFpbjA5BgorBgEEAYO/MAEBBCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMB8GCisGAQQBg78wAQIEEXdvcmtmbG93X2Rpc3BhdGNoMDYGCisGAQQBg78wAQMEKDhhNmJlN2JjNzc1NjVhZDY1YzhhZTJkZWI0NTY0ODJmZjZhYTUwZWQwHQYKKwYBBAGDvzABBAQPU2lnbiBvbGQgYnVpbGRzMCsGCisGAQQBg78wAQUEHWh1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MB0GCisGAQQBg78wAQYED3JlZnMvaGVhZHMvbWFpbjA7BgorBgEEAYO/MAEIBC0MK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wdwYKKwYBBAGDvzABCQRpDGdodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvLmdpdGh1Yi93b3JrZmxvd3Mvc2lnbi1vbGQtYnVpbGRzLnlhbWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoOGE2YmU3YmM3NzU2NWFkNjVjOGFlMmRlYjQ1NjQ4MmZmNmFhNTBlZDAbBgorBgEEAYO/MAELBA0MC3NlbGYtaG9zdGVkMEAGCisGAQQBg78wAQwEMgwwaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MDgGCisGAQQBg78wAQ0EKgwoOGE2YmU3YmM3NzU2NWFkNjVjOGFlMmRlYjQ1NjQ4MmZmNmFhNTBlZDAfBgorBgEEAYO/MAEOBBEMD3JlZnMvaGVhZHMvbWFpbjAaBgorBgEEAYO/MAEPBAwMCjEwNzE0NzU1MjkwLgYKKwYBBAGDvzABEAQgDB5odHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2UwGAYKKwYBBAGDvzABEQQKDAgyNTcyMDc0MzB3BgorBgEEAYO/MAESBGkMZ2h0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS8uZ2l0aHViL3dvcmtmbG93cy9zaWduLW9sZC1idWlsZHMueWFtbEByZWZzL2hlYWRzL21haW4wOAYKKwYBBAGDvzABEwQqDCg4YTZiZTdiYzc3NTY1YWQ2NWM4YWUyZGViNDU2NDgyZmY2YWE1MGVkMCEGCisGAQQBg78wARQEEwwRd29ya2Zsb3dfZGlzcGF0Y2gwZAYKKwYBBAGDvzABFQRWDFRodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvYWN0aW9ucy9ydW5zLzI3NzQxNDY0ODQyL2F0dGVtcHRzLzEwFgYKKwYBBAGDvzABFgQIDAZwdWJsaWMwRgYKKwYBBAGDvzABGAQ4DDZyZXBvOmh1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5OnJlZjpyZWZzL2hlYWRzL21haW4wgYoGCisGAQQB1nkCBAIEfAR6AHgAdgDdPTBqxscRMmMZHhyZZzcCokpeuN48rf+HinKALynujgAAAZ7Zic3GAAAEAwBHMEUCIQDycLxSrfQQIpTsTMCLcqVUIH5j4vjDL9C/GVHOrgzLwAIgdoitHUsrH4AnGuoh4xiUmjFSlSZxxdBCjeZQDc6lSWwwCgYIKoZIzj0EAwMDaAAwZQIxAMve9wKY+EQ+kb3R7pcK/8sHp8o2iUGKrxkWk0U4Th9xZlzOOuxepHGM196l/HVuQgIwF8rnlkx1JiasAlTslCKTfTRkuotSG7qxXjCVLJrbBgCZSIrIOCLC3QIxF6BkUovX"},"tlogEntries":[{"logIndex":"1857857217","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1781766147","inclusionPromise":{"signedEntryTimestamp":"MEUCIQCmI1wBKYDVi45NWMsQAFim1Tp6kbAAuBgluRkWJobbZwIgFiyBZRTq09sozlL9caTI2GyItYDBVRZ14vGHTpvBcA4="},"inclusionProof":{"logIndex":"1735952955","rootHash":"8ocZH+6kt5eeANTUkUlasedI4g03qcgelvqREiKUxgg=","treeSize":"1735952969","hashes":["Sa3uREEbztV/BTdnPRwrvZQSjGjEK3MI4jNSAhgz5Ac=","+cQCt7EeFM8M8oE50WkkMD5A83tRbwzFmPp9H87EiLI=","20BMjeGyfDdqEGje2ugfZU7i0FzZROVlRr1+Pw9i3EU=","H7IW8KdoYwr2XCGUxOLduXDsPNA1TUaG1/cOyEQOSxs=","L8ZT++8S2ug16g3wTFggCQVbSpi2X8BY0n890Ag7IJ4=","eQD37OXncCbRsTGps8oP+WWghwkHN9Q0p4PqxLRx/gA=","n9X6wRSXjGGZyweSgtW7SRb+a1hUM8gvcOQjfmJrNcU=","UNxBNLng9RbCX0SfoxkThY8zQAlaSMaKLLMLJJBvpsM=","MxP2ben8j7HmUks/Fg3tZTUD4FagdrW3Q0g08RNSyMs=","Uz3W676tGaFDolUTU8KKwxGjR9Jyau7jGEZBmJ3zdM4=","95goX8Iw4H4P6V4eHvRqTdVdViLbhEhsF6i7ICnz/+A=","sWDh7SjDHbJf3HWKGRxiURh6iIYrOzn4Zs37yIij6OA=","x7kXd4VRJvVmTHoSla2KyPQdKvGKDX26/7ST9OONR78=","U8wMiVDzFlmyqT7Nw1RSZYU9+fftsSkRhjpbyXnXUk8=","mqM7J+i75IpuD09QejiUBjeH85AZa+fSm4RXXFmj3lI=","72FC5FYLhxB4a4iiC956o0B/fT54ip4R41vsw2QBKtU=","lYGQ9ibwC8+smMkPQ6TchJm3H9Nc/aTYLfdRacGFChw=","daxmZaajRpZV+JxHiOYZhJBiSKN5ucqjh2WnGbHhirw=","DOCeoSMovIvLExkhIvisow9AuNXgeWs4ECkyR6EcqYU="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n1735952969\n8ocZH+6kt5eeANTUkUlasedI4g03qcgelvqREiKUxgg=\n\n— rekor.sigstore.dev wNI9ajBEAiAA7ezW2yOwZOxNVHumWPsAKbZiB3ApO1IUGF5FKxNjgwIgA7ZM7pHLlnoijZSNoosXnmABMHyHsr73xeefAtkHAlE=\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiIxZThjZjA5OGQ5ZjlmYjBkMWQ0NjY4NWU2MGMxMmNjOWM0NTYzNDNjMGE0YTQwYTVmZTkwOTU5NjFjMzVmMGNkIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FWUNJUURMR0FIT3Bzb040eFdTNVE2a3hOVzZnTDA1OWpXYm90RmYwVllyclJQWEN3SWhBTWhQb0FpZ1k5QUtLVDVrT1JjaUhhSUFoR3pKczNzZ2s1WnhpWGR0cjA2RSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaGpla05EUW5adFowRjNTVUpCWjBsVlVqWlZWVlJZVjA5WFFXVktiM1ZSVm5kbmFIQm5UM1ZEVkhaTmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDVxUlRSTlJHTjNUV3BKTTFkb1kwNU5hbGwzVG1wRk5FMUVZM2hOYWtrelYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVUyYjJkSU5XSlFaM2hCUW14clJuVjNSazVZWVZKTlVtTnVlVzVvTmtKSE56STJlakFLWWtWSlkzWmFUbE40Tm1kNFYxazNjV2xsYzNaUmNFRlpaVUYxV1hJMmJrSklZVTlxY21OcVpXSlJkV0pLWkc1M09FdFBRMEpvWjNkbloxbFZUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlVyTXpsdENsQjRZamh2WW5aaFpVMUxjbVJXT1VKWVNVOXFZa1U0ZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJSUldVUldVakJTUVZGSUwwSkhjM2RoV1ZwdVlVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKb01Wb3laSEJpYldSdFdWZE9iQXBNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk1lVFZ1WVZoU2IyUlhTWFprTWpsNVlUSmFjMkl6WkhwTU0wNXdXakkwZEdJeWVHdE1WMG94Q21GWGVHdGplVFUxV1ZjeGMxRklTbXhhYmsxMllVZFdhRnBJVFhaaVYwWndZbXBCTlVKbmIzSkNaMFZGUVZsUEwwMUJSVUpDUTNSdlpFaFNkMk42YjNZS1RETlNkbUV5Vm5WTWJVWnFaRWRzZG1KdVRYVmFNbXd3WVVoV2FXUllUbXhqYlU1MlltNVNiR0p1VVhWWk1qbDBUVUk0UjBOcGMwZEJVVkZDWnpjNGR3cEJVVWxGUlZoa2RtTnRkRzFpUnpreldESlNjR016UW1oa1IwNXZUVVJaUjBOcGMwZEJVVkZDWnpjNGQwRlJUVVZMUkdob1RtMUtiRTR5U21wT2VtTXhDazVxVm1oYVJGa3hXWHBvYUZwVVNtdGFWMGt3VGxSWk1FOUVTbTFhYWxwb1dWUlZkMXBYVVhkSVVWbExTM2RaUWtKQlIwUjJla0ZDUWtGUlVGVXliRzRLWW1sQ2RtSkhVV2RaYmxad1lrZFNlazFEYzBkRGFYTkhRVkZSUW1jM09IZEJVVlZGU0Zkb01Wb3laSEJpYldSdFdWZE9iRXd5ZEd4amJUVnNZa2hOZEFwWk1qbDBZbGhXZFdGWVVqVk5RakJIUTJselIwRlJVVUpuTnpoM1FWRlpSVVF6U214YWJrMTJZVWRXYUZwSVRYWmlWMFp3WW1wQk4wSm5iM0pDWjBWRkNrRlpUeTlOUVVWSlFrTXdUVXN5YURCa1NFSjZUMms0ZG1SSE9YSmFWelIxV1ZkT01HRlhPWFZqZVRWdVlWaFNiMlJYU2pGak1sWjVXVEk1ZFdSSFZuVUtaRU0xYW1JeU1IZGtkMWxMUzNkWlFrSkJSMFIyZWtGQ1ExRlNjRVJIWkc5a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFpoU0ZadVdqSnNkUXBhTWxwb1dUSlZkbUV5Vm5saWJWWnpZM2t4YW1JeU1YUmtWelZ3WkVocmRreHRaSEJrUjJneFdXazVNMkl6U25KYWJYaDJaRE5OZG1NeWJHNWlhVEYyQ21KSFVYUlpibFp3WWtkU2VreHViR2hpVjNoQlkyMVdiV041T1c5YVYwWnJZM2s1ZEZsWGJIVk5SR2RIUTJselIwRlJVVUpuTnpoM1FWRnZSVXRuZDI4S1QwZEZNbGx0VlROWmJVMHpUbnBWTWs1WFJtdE9hbFpxVDBkR2JFMXRVbXhaYWxFeFRtcFJORTF0V20xT2JVWm9UbFJDYkZwRVFXSkNaMjl5UW1kRlJRcEJXVTh2VFVGRlRFSkJNRTFETTA1c1lrZFpkR0ZIT1hwa1IxWnJUVVZCUjBOcGMwZEJVVkZDWnpjNGQwRlJkMFZOWjNkM1lVaFNNR05JVFRaTWVUbHVDbUZZVW05a1YwbDFXVEk1ZEV3eWFERmFNbVJ3WW0xa2JWbFhUbXhNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk5SR2RIUTJselIwRlJVVUlLWnpjNGQwRlJNRVZMWjNkdlQwZEZNbGx0VlROWmJVMHpUbnBWTWs1WFJtdE9hbFpxVDBkR2JFMXRVbXhaYWxFeFRtcFJORTF0V20xT2JVWm9UbFJDYkFwYVJFRm1RbWR2Y2tKblJVVkJXVTh2VFVGRlQwSkNSVTFFTTBwc1dtNU5kbUZIVm1oYVNFMTJZbGRHY0dKcVFXRkNaMjl5UW1kRlJVRlpUeTlOUVVWUUNrSkJkMDFEYWtWM1RucEZNRTU2VlRGTmFtdDNUR2RaUzB0M1dVSkNRVWRFZG5wQlFrVkJVV2RFUWpWdlpFaFNkMk42YjNaTU1tUndaRWRvTVZscE5Xb0tZakl3ZG1GSVZtNWFNbXgxV2pKYWFGa3lWWGRIUVZsTFMzZFpRa0pCUjBSMmVrRkNSVkZSUzBSQlozbE9WR041VFVSak1FMTZRak5DWjI5eVFtZEZSUXBCV1U4dlRVRkZVMEpIYTAxYU1tZ3daRWhDZWs5cE9IWmFNbXd3WVVoV2FVeHRUblppVXpsdlpGZGtibUZYTlc1YWJVWnFXbE01Y2xwWVNuVmFWM2g2Q2t4WFRuWmlWekV4WW0xc01HVlRPSFZhTW13d1lVaFdhVXd6WkhaamJYUnRZa2M1TTJONU9YcGhWMlIxVEZjNWMxcERNV2xrVjJ4eldraE5kV1ZYUm5RS1lrVkNlVnBYV25wTU1taHNXVmRTZWt3eU1XaGhWelIzVDBGWlMwdDNXVUpDUVVkRWRucEJRa1YzVVhGRVEyYzBXVlJhYVZwVVpHbFplbU16VGxSWk1RcFpWMUV5VGxkTk5GbFhWWGxhUjFacFRrUlZNazVFWjNsYWJWa3lXVmRGTVUxSFZtdE5RMFZIUTJselIwRlJVVUpuTnpoM1FWSlJSVVYzZDFKa01qbDVDbUV5V25OaU0yUm1Xa2RzZW1OSFJqQlpNbWQzV2tGWlMwdDNXVUpDUVVkRWRucEJRa1pSVWxkRVJsSnZaRWhTZDJONmIzWk1NbVJ3WkVkb01WbHBOV29LWWpJd2RtRklWbTVhTW14MVdqSmFhRmt5VlhaaE1sWjVZbTFXYzJONU1XcGlNakYwWkZjMWNHUklhM1paVjA0d1lWYzVkV041T1hsa1Z6VjZUSHBKTXdwT2VsRjRUa1JaTUU5RVVYbE1Na1l3WkVkV2RHTklVbnBNZWtWM1JtZFpTMHQzV1VKQ1FVZEVkbnBCUWtablVVbEVRVnAzWkZkS2MyRlhUWGRTWjFsTENrdDNXVUpDUVVkRWRucEJRa2RCVVRSRVJGcDVXbGhDZGs5dGFERmFNbVJ3WW0xa2JWbFhUbXhNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVUtUMjVLYkZwcWNIbGFWMXA2VERKb2JGbFhVbnBNTWpGb1lWYzBkMmRaYjBkRGFYTkhRVkZSUWpGdWEwTkNRVWxGWmtGU05rRklaMEZrWjBSa1VGUkNjUXA0YzJOU1RXMU5Xa2hvZVZwYWVtTkRiMnR3WlhWT05EaHlaaXRJYVc1TFFVeDViblZxWjBGQlFWbzNXbWxqTTBkQlFVRkZRWGRDU0UxRlZVTkpVVVI1Q21OTWVGTnlabEZSU1hCVWMxUk5RMHhqY1ZaVlNVZzFhalIyYWtSTU9VTXZSMVpJVDNKbmVreDNRVWxuWkc5cGRFaFZjM0pJTkVGdVIzVnZhRFI0YVZVS2JXcEdVMnhUV25oNFpFSkRhbVZhVVVSak5teFRWM2QzUTJkWlNVdHZXa2w2YWpCRlFYZE5SR0ZCUVhkYVVVbDRRVTEyWlRsM1Mxa3JSVkVyYTJJelVnbzNjR05MTHpoelNIQTRiekpwVlVkTGNuaHJWMnN3VlRSVWFEbDRXbXg2VDA5MWVHVndTRWROTVRrMmJDOUlWblZSWjBsM1JqaHlibXhyZURGS2FXRnpDa0ZzVkhOc1EwdFVabFJTYTNWdmRGTkhOM0Y0V0dwRFZreEtjbUpDWjBOYVUwbHlTVTlEVEVNelVVbDRSalpDYTFWdmRsZ0tMUzB0TFMxRlRrUWdRMFZTVkVsR1NVTkJWRVV0TFMwdExRbz0ifX19fQ=="}],"timestampVerificationData":{"rfc3161Timestamps":[{"signedTimestamp":"MIICyTADAgEAMIICwAYJKoZIhvcNAQcCoIICsTCCAq0CAQMxDTALBglghkgBZQMEAgEwgbcGCyqGSIb3DQEJEAEEoIGnBIGkMIGhAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQgKw4iD5JtbSN0Na6t39BDg9peY9c1yB0/gZHA9mDdCf8CFGleGT8bOEkjQysjIgx/es270MNGGA8yMDI2MDYxODA3MDIyN1owAwIBAaAypDAwLjEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MRUwEwYDVQQDEwxzaWdzdG9yZS10c2GgADGCAdswggHXAgEBMFEwOTEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MSAwHgYDVQQDExdzaWdzdG9yZS10c2Etc2VsZnNpZ25lZAIUOhNULwyQYe68wUMvy4qOiyojiwwwCwYJYIZIAWUDBAIBoIH8MBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjYwNjE4MDcwMjI3WjAvBgkqhkiG9w0BCQQxIgQgAHqdbBGcrfeFZyVzExY5WYnpaP8f9XWekuiQTiNHKt8wgY4GCyqGSIb3DQEJEAIvMX8wfTB7MHkEIIX5J7wHq2LKw7RDVsEO/IGyxog/2nq55thw2dE6zQW3MFUwPaQ7MDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAoGCCqGSM49BAMCBGcwZQIxAIaEsfAf0Ldy4Foqsm2X1x3nt+PmB6Sq012NhhPWK+xLxv1Zsn6CSRQfb0mNwtso8wIwbhvDHNYKKOZ0YHX1mGSbZdxneckWJFxzxFA3dc4VvoVhc/WGUzYjqFThswnALzje"}]}},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"HozwmNn5+w0dRmheYMEsycRWNDwKSkCl/pCVlhw18M0="},"signature":"MEYCIQDLGAHOpsoN4xWS5Q6kxNW6gL059jWbotFf0VYrrRPXCwIhAMhPoAigY9AKKT5kORciHaIAhGzJs3sgk5ZxiXdtr06E"}}
|
build/torch210-metal-aarch64-darwin/mlx_quantization_metal_kernels/__init__.py
CHANGED
|
@@ -1,10 +1,10 @@
|
|
| 1 |
import ctypes
|
|
|
|
| 2 |
import sys
|
| 3 |
-
|
| 4 |
-
import importlib
|
| 5 |
from pathlib import Path
|
| 6 |
from types import ModuleType
|
| 7 |
|
|
|
|
| 8 |
def _import_from_path(file_path: Path) -> ModuleType:
|
| 9 |
# We cannot use the module name as-is, after adding it to `sys.modules`,
|
| 10 |
# it would also be used for other imports. So, we make a module name that
|
|
|
|
| 1 |
import ctypes
|
| 2 |
+
import importlib.util
|
| 3 |
import sys
|
|
|
|
|
|
|
| 4 |
from pathlib import Path
|
| 5 |
from types import ModuleType
|
| 6 |
|
| 7 |
+
|
| 8 |
def _import_from_path(file_path: Path) -> ModuleType:
|
| 9 |
# We cannot use the module name as-is, after adding it to `sys.modules`,
|
| 10 |
# it would also be used for other imports. So, we make a module name that
|
build/torch211-metal-aarch64-darwin/__init__.py
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from typing import Optional
|
| 2 |
+
|
| 3 |
+
import torch
|
| 4 |
+
|
| 5 |
+
from ._ops import ops
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
# =============================================================================
|
| 9 |
+
# FP-quantized (MXFP4) operations
|
| 10 |
+
# =============================================================================
|
| 11 |
+
|
| 12 |
+
|
| 13 |
+
def mxfp4_qmm_n(
|
| 14 |
+
x: torch.Tensor,
|
| 15 |
+
w: torch.Tensor,
|
| 16 |
+
scales: torch.Tensor,
|
| 17 |
+
output_features: int,
|
| 18 |
+
) -> torch.Tensor:
|
| 19 |
+
"""Matrix-matrix multiply with MXFP4 quantized non-transposed weight.
|
| 20 |
+
|
| 21 |
+
Computes y = x @ dequantize(w, scales).
|
| 22 |
+
x: [..., M, K], w: [K_packed, N_packed] (uint32), y: [..., M, output_features]
|
| 23 |
+
"""
|
| 24 |
+
return ops.mxfp4_qmm_n(x, w, scales, output_features)
|
| 25 |
+
|
| 26 |
+
|
| 27 |
+
def mxfp4_qmv(
|
| 28 |
+
x: torch.Tensor,
|
| 29 |
+
w: torch.Tensor,
|
| 30 |
+
scales: torch.Tensor,
|
| 31 |
+
output_features: int,
|
| 32 |
+
) -> torch.Tensor:
|
| 33 |
+
"""Matrix-vector multiply with MXFP4 quantized weight.
|
| 34 |
+
|
| 35 |
+
Computes y = dequantize(w, scales) @ x.
|
| 36 |
+
x: [..., K], w: [N, K_packed] (uint32), y: [..., output_features]
|
| 37 |
+
"""
|
| 38 |
+
return ops.mxfp4_qmv(x, w, scales, output_features)
|
| 39 |
+
|
| 40 |
+
|
| 41 |
+
# =============================================================================
|
| 42 |
+
# Affine quantized operations (scales + biases)
|
| 43 |
+
# =============================================================================
|
| 44 |
+
|
| 45 |
+
|
| 46 |
+
def affine_qmv(
|
| 47 |
+
x: torch.Tensor,
|
| 48 |
+
w: torch.Tensor,
|
| 49 |
+
scales: torch.Tensor,
|
| 50 |
+
biases: torch.Tensor,
|
| 51 |
+
output_features: int,
|
| 52 |
+
group_size: int = 128,
|
| 53 |
+
bits: int = 4,
|
| 54 |
+
) -> torch.Tensor:
|
| 55 |
+
"""Matrix-vector multiply with affine quantized weight.
|
| 56 |
+
|
| 57 |
+
x: [..., K], w: [N, K_packed], y: [..., output_features]
|
| 58 |
+
"""
|
| 59 |
+
return ops.affine_qmv(x, w, scales, biases, group_size, bits, output_features)
|
| 60 |
+
|
| 61 |
+
|
| 62 |
+
def affine_qmm_t(
|
| 63 |
+
x: torch.Tensor,
|
| 64 |
+
w: torch.Tensor,
|
| 65 |
+
scales: torch.Tensor,
|
| 66 |
+
biases: torch.Tensor,
|
| 67 |
+
group_size: int = 128,
|
| 68 |
+
bits: int = 4,
|
| 69 |
+
) -> torch.Tensor:
|
| 70 |
+
"""Matrix-matrix multiply with affine quantized transposed weight.
|
| 71 |
+
|
| 72 |
+
Computes y = x @ dequantize(w, scales, biases).T
|
| 73 |
+
x: [..., M, K], w: [N, K_packed], y: [..., M, N]
|
| 74 |
+
N is inferred from w.size(0).
|
| 75 |
+
"""
|
| 76 |
+
return ops.affine_qmm_t(x, w, scales, biases, group_size, bits)
|
| 77 |
+
|
| 78 |
+
|
| 79 |
+
def affine_qmm_n(
|
| 80 |
+
x: torch.Tensor,
|
| 81 |
+
w: torch.Tensor,
|
| 82 |
+
scales: torch.Tensor,
|
| 83 |
+
biases: torch.Tensor,
|
| 84 |
+
output_features: int,
|
| 85 |
+
group_size: int = 128,
|
| 86 |
+
bits: int = 4,
|
| 87 |
+
) -> torch.Tensor:
|
| 88 |
+
"""Matrix-matrix multiply with affine quantized non-transposed weight.
|
| 89 |
+
|
| 90 |
+
Computes y = x @ dequantize(w, scales, biases)
|
| 91 |
+
x: [..., M, K], w: [K_packed, N_packed], y: [..., M, output_features]
|
| 92 |
+
"""
|
| 93 |
+
return ops.affine_qmm_n(x, w, scales, biases, group_size, bits, output_features)
|
| 94 |
+
|
| 95 |
+
|
| 96 |
+
# =============================================================================
|
| 97 |
+
# Affine quantized NAX operations (MetalPerformancePrimitives accelerated)
|
| 98 |
+
# =============================================================================
|
| 99 |
+
|
| 100 |
+
|
| 101 |
+
def affine_qmm_t_nax(
|
| 102 |
+
x: torch.Tensor,
|
| 103 |
+
w: torch.Tensor,
|
| 104 |
+
scales: torch.Tensor,
|
| 105 |
+
biases: torch.Tensor,
|
| 106 |
+
group_size: int = 128,
|
| 107 |
+
bits: int = 4,
|
| 108 |
+
) -> torch.Tensor:
|
| 109 |
+
"""NAX-accelerated matrix-matrix multiply with transposed quantized weight.
|
| 110 |
+
|
| 111 |
+
x: [..., M, K], w: [N, K_packed], y: [..., M, N]
|
| 112 |
+
"""
|
| 113 |
+
return ops.affine_qmm_t_nax(x, w, scales, biases, group_size, bits)
|
| 114 |
+
|
| 115 |
+
|
| 116 |
+
def affine_qmm_n_nax(
|
| 117 |
+
x: torch.Tensor,
|
| 118 |
+
w: torch.Tensor,
|
| 119 |
+
scales: torch.Tensor,
|
| 120 |
+
biases: torch.Tensor,
|
| 121 |
+
output_features: int,
|
| 122 |
+
group_size: int = 128,
|
| 123 |
+
bits: int = 4,
|
| 124 |
+
) -> torch.Tensor:
|
| 125 |
+
"""NAX-accelerated matrix-matrix multiply with non-transposed quantized weight.
|
| 126 |
+
|
| 127 |
+
x: [..., M, K], w: [K_packed, N_packed], y: [..., M, output_features]
|
| 128 |
+
"""
|
| 129 |
+
return ops.affine_qmm_n_nax(x, w, scales, biases, group_size, bits, output_features)
|
| 130 |
+
|
| 131 |
+
|
| 132 |
+
def affine_gather_qmm_rhs_nax(
|
| 133 |
+
x: torch.Tensor,
|
| 134 |
+
w: torch.Tensor,
|
| 135 |
+
scales: torch.Tensor,
|
| 136 |
+
biases: torch.Tensor,
|
| 137 |
+
indices: torch.Tensor,
|
| 138 |
+
output_features: int,
|
| 139 |
+
group_size: int = 128,
|
| 140 |
+
bits: int = 4,
|
| 141 |
+
transpose: bool = True,
|
| 142 |
+
) -> torch.Tensor:
|
| 143 |
+
"""NAX-accelerated gather + matrix-matrix multiply.
|
| 144 |
+
|
| 145 |
+
Gathers weight rows using indices, then computes matmul.
|
| 146 |
+
x: [M, K], w: [num_experts, ...], indices: [M], y: [M, output_features]
|
| 147 |
+
"""
|
| 148 |
+
return ops.affine_gather_qmm_rhs_nax(
|
| 149 |
+
x, w, scales, biases, indices, group_size, bits, output_features, transpose
|
| 150 |
+
)
|
| 151 |
+
|
| 152 |
+
|
| 153 |
+
__all__ = [
|
| 154 |
+
"mxfp4_qmm_n",
|
| 155 |
+
"mxfp4_qmv",
|
| 156 |
+
"affine_qmv",
|
| 157 |
+
"affine_qmm_t",
|
| 158 |
+
"affine_qmm_n",
|
| 159 |
+
"affine_qmm_t_nax",
|
| 160 |
+
"affine_qmm_n_nax",
|
| 161 |
+
"affine_gather_qmm_rhs_nax",
|
| 162 |
+
]
|
build/torch211-metal-aarch64-darwin/_mlx_quantization_metal_kernels_metal_38ff04e.abi3.so
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:b4b007a9dd75308d7337b104b2eb53a98590c2274c112478003714f6b506d963
|
| 3 |
+
size 40010696
|
build/torch211-metal-aarch64-darwin/_ops.py
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import torch
|
| 2 |
+
from . import _mlx_quantization_metal_kernels_metal_38ff04e
|
| 3 |
+
ops = torch.ops._mlx_quantization_metal_kernels_metal_38ff04e
|
| 4 |
+
|
| 5 |
+
def add_op_namespace_prefix(op_name: str):
|
| 6 |
+
"""
|
| 7 |
+
Prefix op by namespace.
|
| 8 |
+
"""
|
| 9 |
+
return f"_mlx_quantization_metal_kernels_metal_38ff04e::{op_name}"
|
build/torch211-metal-aarch64-darwin/metadata.json
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"name": "mlx-quantization-metal-kernels",
|
| 3 |
+
"id": "_mlx_quantization_metal_kernels_metal_38ff04e",
|
| 4 |
+
"version": 1,
|
| 5 |
+
"license": "MIT",
|
| 6 |
+
"python-depends": [],
|
| 7 |
+
"backend": {
|
| 8 |
+
"type": "metal"
|
| 9 |
+
},
|
| 10 |
+
"digest": {
|
| 11 |
+
"algorithm": "sha256",
|
| 12 |
+
"files": {
|
| 13 |
+
"__init__.py": "RPKCn/crnlxPPRM3jVlrOE93840kDxotM2/B0Tw2Rp4=",
|
| 14 |
+
"_mlx_quantization_metal_kernels_metal_38ff04e.abi3.so": "tLAHqd11MI1zN7EEsutTqYWQwidMESR4ADcU9rUG2WM=",
|
| 15 |
+
"_ops.py": "kQ55lpyV+9iXLIPKBPbo8bvBXlYM3OgwXfrbaMg+t2A=",
|
| 16 |
+
"mlx_quantization_metal_kernels/__init__.py": "DFYPlrhXwYjEqCl/8n0SmWGZV8NFml5DPhMjKfv98GY="
|
| 17 |
+
}
|
| 18 |
+
}
|
| 19 |
+
}
|
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":"MIIHczCCBvqgAwIBAgIUMXQEwViHsOoTRcDEulM/iKmnOAEwCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwNjE4MDcwMjI4WhcNMjYwNjE4MDcxMjI4WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEgBvVREq9Hj8/s/uWkwie+lzkjjDMLU3JYuSWybUmOA/C9Om8MdN/4DLMMa/SXxfpA1GJhFBAhtoXDLY2qrM5YqOCBhkwggYVMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQU/tS5ROMcvXVrQNAm1JGaNqw80wcwHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wdQYDVR0RAQH/BGswaYZnaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL3NpZ24tb2xkLWJ1aWxkcy55YW1sQHJlZnMvaGVhZHMvbWFpbjA5BgorBgEEAYO/MAEBBCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMB8GCisGAQQBg78wAQIEEXdvcmtmbG93X2Rpc3BhdGNoMDYGCisGAQQBg78wAQMEKDhhNmJlN2JjNzc1NjVhZDY1YzhhZTJkZWI0NTY0ODJmZjZhYTUwZWQwHQYKKwYBBAGDvzABBAQPU2lnbiBvbGQgYnVpbGRzMCsGCisGAQQBg78wAQUEHWh1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MB0GCisGAQQBg78wAQYED3JlZnMvaGVhZHMvbWFpbjA7BgorBgEEAYO/MAEIBC0MK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wdwYKKwYBBAGDvzABCQRpDGdodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvLmdpdGh1Yi93b3JrZmxvd3Mvc2lnbi1vbGQtYnVpbGRzLnlhbWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoOGE2YmU3YmM3NzU2NWFkNjVjOGFlMmRlYjQ1NjQ4MmZmNmFhNTBlZDAbBgorBgEEAYO/MAELBA0MC3NlbGYtaG9zdGVkMEAGCisGAQQBg78wAQwEMgwwaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MDgGCisGAQQBg78wAQ0EKgwoOGE2YmU3YmM3NzU2NWFkNjVjOGFlMmRlYjQ1NjQ4MmZmNmFhNTBlZDAfBgorBgEEAYO/MAEOBBEMD3JlZnMvaGVhZHMvbWFpbjAaBgorBgEEAYO/MAEPBAwMCjEwNzE0NzU1MjkwLgYKKwYBBAGDvzABEAQgDB5odHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2UwGAYKKwYBBAGDvzABEQQKDAgyNTcyMDc0MzB3BgorBgEEAYO/MAESBGkMZ2h0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS8uZ2l0aHViL3dvcmtmbG93cy9zaWduLW9sZC1idWlsZHMueWFtbEByZWZzL2hlYWRzL21haW4wOAYKKwYBBAGDvzABEwQqDCg4YTZiZTdiYzc3NTY1YWQ2NWM4YWUyZGViNDU2NDgyZmY2YWE1MGVkMCEGCisGAQQBg78wARQEEwwRd29ya2Zsb3dfZGlzcGF0Y2gwZAYKKwYBBAGDvzABFQRWDFRodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvYWN0aW9ucy9ydW5zLzI3NzQxNDY0ODQyL2F0dGVtcHRzLzEwFgYKKwYBBAGDvzABFgQIDAZwdWJsaWMwRgYKKwYBBAGDvzABGAQ4DDZyZXBvOmh1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5OnJlZjpyZWZzL2hlYWRzL21haW4wgYsGCisGAQQB1nkCBAIEfQR7AHkAdwDdPTBqxscRMmMZHhyZZzcCokpeuN48rf+HinKALynujgAAAZ7ZidErAAAEAwBIMEYCIQDFTFLP7Q2LtDIv5/65kwpw32wW+5TMP/sRb8+wjFwGoQIhANSX7Xd2ZCwc9eXG04BgVFQfsTinoWQ3JkPGMTy5xdgnMAoGCCqGSM49BAMDA2cAMGQCMHVD1u0agFjcZy5bacQWCvVysUXii9YoaRLqajijR1hEZsuS9GemNscta1sEYJDzHQIwbFWIG03mdWIsTh1KX3fh6/R9xcxqIJdTqgfStyoDaeJJMzoX3IInEGX3ZGwbCmOt"},"tlogEntries":[{"logIndex":"1857857284","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1781766148","inclusionPromise":{"signedEntryTimestamp":"MEQCIFSfQ/LwwlznKSDzsw0MJXumoikgJLsxOn3DAS5b+FT5AiAU/ED8IE/7Zjn5A8AaFOWU1x8llTLfyKYfE0C/EMFjsw=="},"inclusionProof":{"logIndex":"1735953022","rootHash":"3MDGeJsJ9EWZpAtGI2OJRkoBMZ9cYepsQu89zFjjgUY=","treeSize":"1735953034","hashes":["TMT9ElgyZfEvEJzYO9vRbDby01emKSm8JsEyhRJIBeM=","oY3OxESB5S5JAUNjmqe2Txk8dfQsbjMMyTcc38zL3iA=","yvjQPKlE0C7oS/dBCf3mCLWTHNMxdu90HCCVVGIXPU0=","ZKY+F4LbYL0BoaWNGxhSa07EmwuEYZiAHBczmtMJXh8=","8XCUK92XRWxGTnbErzq+rBubCyoDokvdA0fbrAdA5C8=","s4pmdNl6hbCXioaF/WFM5NxHXFTOBwmywE5QhByhNdQ=","WDSCjIiTp8RZOc1yy5SEy8o8g9HD2nbFiYo05pQofxc=","bR52jvpnRkBNyi398NQxQvre9NbB5hjYW3z45cLtmec=","UNxBNLng9RbCX0SfoxkThY8zQAlaSMaKLLMLJJBvpsM=","MxP2ben8j7HmUks/Fg3tZTUD4FagdrW3Q0g08RNSyMs=","Uz3W676tGaFDolUTU8KKwxGjR9Jyau7jGEZBmJ3zdM4=","95goX8Iw4H4P6V4eHvRqTdVdViLbhEhsF6i7ICnz/+A=","sWDh7SjDHbJf3HWKGRxiURh6iIYrOzn4Zs37yIij6OA=","x7kXd4VRJvVmTHoSla2KyPQdKvGKDX26/7ST9OONR78=","U8wMiVDzFlmyqT7Nw1RSZYU9+fftsSkRhjpbyXnXUk8=","mqM7J+i75IpuD09QejiUBjeH85AZa+fSm4RXXFmj3lI=","72FC5FYLhxB4a4iiC956o0B/fT54ip4R41vsw2QBKtU=","lYGQ9ibwC8+smMkPQ6TchJm3H9Nc/aTYLfdRacGFChw=","daxmZaajRpZV+JxHiOYZhJBiSKN5ucqjh2WnGbHhirw=","DOCeoSMovIvLExkhIvisow9AuNXgeWs4ECkyR6EcqYU="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n1735953034\n3MDGeJsJ9EWZpAtGI2OJRkoBMZ9cYepsQu89zFjjgUY=\n\n— rekor.sigstore.dev wNI9ajBEAiBUJyPGRDvoxyMUNfIUWo2s33KJ1Z+cwIu6Yd+m6ux0IAIgGHlrsFFhymHOTZQ1329VyHhYHzHh8whaMyWZzLTfMWU=\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiIwMmY5NTA0ZWE0YTZlMDBiNTk4MmZlNGMyNzFlYjAwYTM5ZWU5ODI4YWNkZmY4OTBjNmNlZGNjOTU5YjU4ZTk2In19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FVUNJQ3MxVU5TdTRCbWlJOU53S3I4bGJhYTg3dlpRVENrODEwMVVJbGN0NEFhREFpRUEwUXRXY0ZUZkd5eXRhUTZYTi8reUxwZFpjbGVqbktyY25UZFBKZkF3SU5jPSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaGpla05EUW5aeFowRjNTVUpCWjBsVlRWaFJSWGRXYVVoelQyOVVVbU5FUlhWc1RTOXBTMjF1VDBGRmQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDVxUlRSTlJHTjNUV3BKTkZkb1kwNU5hbGwzVG1wRk5FMUVZM2hOYWtrMFYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVZuUW5aV1VrVnhPVWhxT0M5ekwzVlhhM2RwWlN0c2VtdHFha1JOVEZVelNsbDFVMWNLZVdKVmJVOUJMME01VDIwNFRXUk9MelJFVEUxTllTOVRXSGhtY0VFeFIwcG9Sa0pCYUhSdldFUk1XVEp4Y2swMVdYRlBRMEpvYTNkbloxbFdUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlV2ZEZNMUNsSlBUV04yV0ZaeVVVNUJiVEZLUjJGT2NYYzRNSGRqZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJSUldVUldVakJTUVZGSUwwSkhjM2RoV1ZwdVlVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKb01Wb3laSEJpYldSdFdWZE9iQXBNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk1lVFZ1WVZoU2IyUlhTWFprTWpsNVlUSmFjMkl6WkhwTU0wNXdXakkwZEdJeWVHdE1WMG94Q21GWGVHdGplVFUxV1ZjeGMxRklTbXhhYmsxMllVZFdhRnBJVFhaaVYwWndZbXBCTlVKbmIzSkNaMFZGUVZsUEwwMUJSVUpDUTNSdlpFaFNkMk42YjNZS1RETlNkbUV5Vm5WTWJVWnFaRWRzZG1KdVRYVmFNbXd3WVVoV2FXUllUbXhqYlU1MlltNVNiR0p1VVhWWk1qbDBUVUk0UjBOcGMwZEJVVkZDWnpjNGR3cEJVVWxGUlZoa2RtTnRkRzFpUnpreldESlNjR016UW1oa1IwNXZUVVJaUjBOcGMwZEJVVkZDWnpjNGQwRlJUVVZMUkdob1RtMUtiRTR5U21wT2VtTXhDazVxVm1oYVJGa3hXWHBvYUZwVVNtdGFWMGt3VGxSWk1FOUVTbTFhYWxwb1dWUlZkMXBYVVhkSVVWbExTM2RaUWtKQlIwUjJla0ZDUWtGUlVGVXliRzRLWW1sQ2RtSkhVV2RaYmxad1lrZFNlazFEYzBkRGFYTkhRVkZSUW1jM09IZEJVVlZGU0Zkb01Wb3laSEJpYldSdFdWZE9iRXd5ZEd4amJUVnNZa2hOZEFwWk1qbDBZbGhXZFdGWVVqVk5RakJIUTJselIwRlJVVUpuTnpoM1FWRlpSVVF6U214YWJrMTJZVWRXYUZwSVRYWmlWMFp3WW1wQk4wSm5iM0pDWjBWRkNrRlpUeTlOUVVWSlFrTXdUVXN5YURCa1NFSjZUMms0ZG1SSE9YSmFWelIxV1ZkT01HRlhPWFZqZVRWdVlWaFNiMlJYU2pGak1sWjVXVEk1ZFdSSFZuVUtaRU0xYW1JeU1IZGtkMWxMUzNkWlFrSkJSMFIyZWtGQ1ExRlNjRVJIWkc5a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFpoU0ZadVdqSnNkUXBhTWxwb1dUSlZkbUV5Vm5saWJWWnpZM2t4YW1JeU1YUmtWelZ3WkVocmRreHRaSEJrUjJneFdXazVNMkl6U25KYWJYaDJaRE5OZG1NeWJHNWlhVEYyQ21KSFVYUlpibFp3WWtkU2VreHViR2hpVjNoQlkyMVdiV041T1c5YVYwWnJZM2s1ZEZsWGJIVk5SR2RIUTJselIwRlJVVUpuTnpoM1FWRnZSVXRuZDI4S1QwZEZNbGx0VlROWmJVMHpUbnBWTWs1WFJtdE9hbFpxVDBkR2JFMXRVbXhaYWxFeFRtcFJORTF0V20xT2JVWm9UbFJDYkZwRVFXSkNaMjl5UW1kRlJRcEJXVTh2VFVGRlRFSkJNRTFETTA1c1lrZFpkR0ZIT1hwa1IxWnJUVVZCUjBOcGMwZEJVVkZDWnpjNGQwRlJkMFZOWjNkM1lVaFNNR05JVFRaTWVUbHVDbUZZVW05a1YwbDFXVEk1ZEV3eWFERmFNbVJ3WW0xa2JWbFhUbXhNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk5SR2RIUTJselIwRlJVVUlLWnpjNGQwRlJNRVZMWjNkdlQwZEZNbGx0VlROWmJVMHpUbnBWTWs1WFJtdE9hbFpxVDBkR2JFMXRVbXhaYWxFeFRtcFJORTF0V20xT2JVWm9UbFJDYkFwYVJFRm1RbWR2Y2tKblJVVkJXVTh2VFVGRlQwSkNSVTFFTTBwc1dtNU5kbUZIVm1oYVNFMTJZbGRHY0dKcVFXRkNaMjl5UW1kRlJVRlpUeTlOUVVWUUNrSkJkMDFEYWtWM1RucEZNRTU2VlRGTmFtdDNUR2RaUzB0M1dVSkNRVWRFZG5wQlFrVkJVV2RFUWpWdlpFaFNkMk42YjNaTU1tUndaRWRvTVZscE5Xb0tZakl3ZG1GSVZtNWFNbXgxV2pKYWFGa3lWWGRIUVZsTFMzZFpRa0pCUjBSMmVrRkNSVkZSUzBSQlozbE9WR041VFVSak1FMTZRak5DWjI5eVFtZEZSUXBCV1U4dlRVRkZVMEpIYTAxYU1tZ3daRWhDZWs5cE9IWmFNbXd3WVVoV2FVeHRUblppVXpsdlpGZGtibUZYTlc1YWJVWnFXbE01Y2xwWVNuVmFWM2g2Q2t4WFRuWmlWekV4WW0xc01HVlRPSFZhTW13d1lVaFdhVXd6WkhaamJYUnRZa2M1TTJONU9YcGhWMlIxVEZjNWMxcERNV2xrVjJ4eldraE5kV1ZYUm5RS1lrVkNlVnBYV25wTU1taHNXVmRTZWt3eU1XaGhWelIzVDBGWlMwdDNXVUpDUVVkRWRucEJRa1YzVVhGRVEyYzBXVlJhYVZwVVpHbFplbU16VGxSWk1RcFpWMUV5VGxkTk5GbFhWWGxhUjFacFRrUlZNazVFWjNsYWJWa3lXVmRGTVUxSFZtdE5RMFZIUTJselIwRlJVVUpuTnpoM1FWSlJSVVYzZDFKa01qbDVDbUV5V25OaU0yUm1Xa2RzZW1OSFJqQlpNbWQzV2tGWlMwdDNXVUpDUVVkRWRucEJRa1pSVWxkRVJsSnZaRWhTZDJONmIzWk1NbVJ3WkVkb01WbHBOV29LWWpJd2RtRklWbTVhTW14MVdqSmFhRmt5VlhaaE1sWjVZbTFXYzJONU1XcGlNakYwWkZjMWNHUklhM1paVjA0d1lWYzVkV041T1hsa1Z6VjZUSHBKTXdwT2VsRjRUa1JaTUU5RVVYbE1Na1l3WkVkV2RHTklVbnBNZWtWM1JtZFpTMHQzV1VKQ1FVZEVkbnBCUWtablVVbEVRVnAzWkZkS2MyRlhUWGRTWjFsTENrdDNXVUpDUVVkRWRucEJRa2RCVVRSRVJGcDVXbGhDZGs5dGFERmFNbVJ3WW0xa2JWbFhUbXhNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVUtUMjVLYkZwcWNIbGFWMXA2VERKb2JGbFhVbnBNTWpGb1lWYzBkMmRaYzBkRGFYTkhRVkZSUWpGdWEwTkNRVWxGWmxGU04wRklhMEZrZDBSa1VGUkNjUXA0YzJOU1RXMU5Xa2hvZVZwYWVtTkRiMnR3WlhWT05EaHlaaXRJYVc1TFFVeDViblZxWjBGQlFWbzNXbWxrUlhKQlFVRkZRWGRDU1UxRldVTkpVVVJHQ2xSR1RGQTNVVEpNZEVSSmRqVXZOalZyZDNCM016SjNWeXMxVkUxUUwzTlNZamdyZDJwR2QwZHZVVWxvUVU1VFdEZFlaREphUTNkak9XVllSekEwUW1jS1ZrWlJabk5VYVc1dlYxRXpTbXRRUjAxVWVUVjRaR2R1VFVGdlIwTkRjVWRUVFRRNVFrRk5SRUV5WTBGTlIxRkRUVWhXUkRGMU1HRm5SbXBqV25rMVlncGhZMUZYUTNaV2VYTlZXR2xwT1ZsdllWSk1jV0ZxYVdwU01XaEZXbk4xVXpsSFpXMU9jMk4wWVRGelJWbEtSSHBJVVVsM1lrWlhTVWN3TTIxa1YwbHpDbFJvTVV0WU0yWm9OaTlTT1hoamVIRkpTbVJVY1dkbVUzUjViMFJoWlVwS1RYcHZXRE5KU1c1RlIxZ3pXa2QzWWtOdFQzUUtMUzB0TFMxRlRrUWdRMFZTVkVsR1NVTkJWRVV0TFMwdExRbz0ifX19fQ=="}],"timestampVerificationData":{"rfc3161Timestamps":[{"signedTimestamp":"MIICyTADAgEAMIICwAYJKoZIhvcNAQcCoIICsTCCAq0CAQMxDTALBglghkgBZQMEAgEwgbcGCyqGSIb3DQEJEAEEoIGnBIGkMIGhAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQgxGfNLYFB8XetwPKsObwAWXp/yYR4hHzLg3TK+lvC2tMCFBoVE5Brr/OuOZYyynvIO89rrwFHGA8yMDI2MDYxODA3MDIyOFowAwIBAaAypDAwLjEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MRUwEwYDVQQDEwxzaWdzdG9yZS10c2GgADGCAdswggHXAgEBMFEwOTEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MSAwHgYDVQQDExdzaWdzdG9yZS10c2Etc2VsZnNpZ25lZAIUOhNULwyQYe68wUMvy4qOiyojiwwwCwYJYIZIAWUDBAIBoIH8MBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjYwNjE4MDcwMjI4WjAvBgkqhkiG9w0BCQQxIgQgYCEZMo7EP3gkpoWSMNxt0MMVGQsmoEbJE+WMoF57/8wwgY4GCyqGSIb3DQEJEAIvMX8wfTB7MHkEIIX5J7wHq2LKw7RDVsEO/IGyxog/2nq55thw2dE6zQW3MFUwPaQ7MDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAoGCCqGSM49BAMCBGcwZQIxAIioA3VaYPIxzkZGWzQhQ0pdYe7CfodsK2cFf/uUZR2cbMVkNNHx0juTK8qGCKim5QIwSMR5++zD79OYOtFefaLDoBVIV6l3dZB5y6rdvinrqFf6C8nzU+xOvW9JW+tPVI2T"}]}},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"AvlQTqSm4AtZgv5MJx6wCjnumCis3/iQxs7cyVm1jpY="},"signature":"MEUCICs1UNSu4BmiI9NwKr8lbaa87vZQTCk8101UIlct4AaDAiEA0QtWcFTfGyytaQ6XN/+yLpdZclejnKrcnTdPJfAwINc="}}
|
build/torch211-metal-aarch64-darwin/mlx_quantization_metal_kernels/__init__.py
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import ctypes
|
| 2 |
+
import importlib.util
|
| 3 |
+
import sys
|
| 4 |
+
from pathlib import Path
|
| 5 |
+
from types import ModuleType
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
def _import_from_path(file_path: Path) -> ModuleType:
|
| 9 |
+
# We cannot use the module name as-is, after adding it to `sys.modules`,
|
| 10 |
+
# it would also be used for other imports. So, we make a module name that
|
| 11 |
+
# depends on the path for it to be unique using the hex-encoded hash of
|
| 12 |
+
# the path.
|
| 13 |
+
path_hash = "{:x}".format(ctypes.c_size_t(hash(file_path.absolute())).value)
|
| 14 |
+
module_name = path_hash
|
| 15 |
+
spec = importlib.util.spec_from_file_location(module_name, file_path)
|
| 16 |
+
if spec is None:
|
| 17 |
+
raise ImportError(f"Cannot load spec for {module_name} from {file_path}")
|
| 18 |
+
module = importlib.util.module_from_spec(spec)
|
| 19 |
+
if module is None:
|
| 20 |
+
raise ImportError(f"Cannot load module {module_name} from spec")
|
| 21 |
+
sys.modules[module_name] = module
|
| 22 |
+
spec.loader.exec_module(module) # type: ignore
|
| 23 |
+
return module
|
| 24 |
+
|
| 25 |
+
|
| 26 |
+
globals().update(vars(_import_from_path(Path(__file__).parent.parent / "__init__.py")))
|
build/torch212-metal-aarch64-darwin/__init__.py
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from typing import Optional
|
| 2 |
+
|
| 3 |
+
import torch
|
| 4 |
+
|
| 5 |
+
from ._ops import ops
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
# =============================================================================
|
| 9 |
+
# FP-quantized (MXFP4) operations
|
| 10 |
+
# =============================================================================
|
| 11 |
+
|
| 12 |
+
|
| 13 |
+
def mxfp4_qmm_n(
|
| 14 |
+
x: torch.Tensor,
|
| 15 |
+
w: torch.Tensor,
|
| 16 |
+
scales: torch.Tensor,
|
| 17 |
+
output_features: int,
|
| 18 |
+
) -> torch.Tensor:
|
| 19 |
+
"""Matrix-matrix multiply with MXFP4 quantized non-transposed weight.
|
| 20 |
+
|
| 21 |
+
Computes y = x @ dequantize(w, scales).
|
| 22 |
+
x: [..., M, K], w: [K_packed, N_packed] (uint32), y: [..., M, output_features]
|
| 23 |
+
"""
|
| 24 |
+
return ops.mxfp4_qmm_n(x, w, scales, output_features)
|
| 25 |
+
|
| 26 |
+
|
| 27 |
+
def mxfp4_qmv(
|
| 28 |
+
x: torch.Tensor,
|
| 29 |
+
w: torch.Tensor,
|
| 30 |
+
scales: torch.Tensor,
|
| 31 |
+
output_features: int,
|
| 32 |
+
) -> torch.Tensor:
|
| 33 |
+
"""Matrix-vector multiply with MXFP4 quantized weight.
|
| 34 |
+
|
| 35 |
+
Computes y = dequantize(w, scales) @ x.
|
| 36 |
+
x: [..., K], w: [N, K_packed] (uint32), y: [..., output_features]
|
| 37 |
+
"""
|
| 38 |
+
return ops.mxfp4_qmv(x, w, scales, output_features)
|
| 39 |
+
|
| 40 |
+
|
| 41 |
+
# =============================================================================
|
| 42 |
+
# Affine quantized operations (scales + biases)
|
| 43 |
+
# =============================================================================
|
| 44 |
+
|
| 45 |
+
|
| 46 |
+
def affine_qmv(
|
| 47 |
+
x: torch.Tensor,
|
| 48 |
+
w: torch.Tensor,
|
| 49 |
+
scales: torch.Tensor,
|
| 50 |
+
biases: torch.Tensor,
|
| 51 |
+
output_features: int,
|
| 52 |
+
group_size: int = 128,
|
| 53 |
+
bits: int = 4,
|
| 54 |
+
) -> torch.Tensor:
|
| 55 |
+
"""Matrix-vector multiply with affine quantized weight.
|
| 56 |
+
|
| 57 |
+
x: [..., K], w: [N, K_packed], y: [..., output_features]
|
| 58 |
+
"""
|
| 59 |
+
return ops.affine_qmv(x, w, scales, biases, group_size, bits, output_features)
|
| 60 |
+
|
| 61 |
+
|
| 62 |
+
def affine_qmm_t(
|
| 63 |
+
x: torch.Tensor,
|
| 64 |
+
w: torch.Tensor,
|
| 65 |
+
scales: torch.Tensor,
|
| 66 |
+
biases: torch.Tensor,
|
| 67 |
+
group_size: int = 128,
|
| 68 |
+
bits: int = 4,
|
| 69 |
+
) -> torch.Tensor:
|
| 70 |
+
"""Matrix-matrix multiply with affine quantized transposed weight.
|
| 71 |
+
|
| 72 |
+
Computes y = x @ dequantize(w, scales, biases).T
|
| 73 |
+
x: [..., M, K], w: [N, K_packed], y: [..., M, N]
|
| 74 |
+
N is inferred from w.size(0).
|
| 75 |
+
"""
|
| 76 |
+
return ops.affine_qmm_t(x, w, scales, biases, group_size, bits)
|
| 77 |
+
|
| 78 |
+
|
| 79 |
+
def affine_qmm_n(
|
| 80 |
+
x: torch.Tensor,
|
| 81 |
+
w: torch.Tensor,
|
| 82 |
+
scales: torch.Tensor,
|
| 83 |
+
biases: torch.Tensor,
|
| 84 |
+
output_features: int,
|
| 85 |
+
group_size: int = 128,
|
| 86 |
+
bits: int = 4,
|
| 87 |
+
) -> torch.Tensor:
|
| 88 |
+
"""Matrix-matrix multiply with affine quantized non-transposed weight.
|
| 89 |
+
|
| 90 |
+
Computes y = x @ dequantize(w, scales, biases)
|
| 91 |
+
x: [..., M, K], w: [K_packed, N_packed], y: [..., M, output_features]
|
| 92 |
+
"""
|
| 93 |
+
return ops.affine_qmm_n(x, w, scales, biases, group_size, bits, output_features)
|
| 94 |
+
|
| 95 |
+
|
| 96 |
+
# =============================================================================
|
| 97 |
+
# Affine quantized NAX operations (MetalPerformancePrimitives accelerated)
|
| 98 |
+
# =============================================================================
|
| 99 |
+
|
| 100 |
+
|
| 101 |
+
def affine_qmm_t_nax(
|
| 102 |
+
x: torch.Tensor,
|
| 103 |
+
w: torch.Tensor,
|
| 104 |
+
scales: torch.Tensor,
|
| 105 |
+
biases: torch.Tensor,
|
| 106 |
+
group_size: int = 128,
|
| 107 |
+
bits: int = 4,
|
| 108 |
+
) -> torch.Tensor:
|
| 109 |
+
"""NAX-accelerated matrix-matrix multiply with transposed quantized weight.
|
| 110 |
+
|
| 111 |
+
x: [..., M, K], w: [N, K_packed], y: [..., M, N]
|
| 112 |
+
"""
|
| 113 |
+
return ops.affine_qmm_t_nax(x, w, scales, biases, group_size, bits)
|
| 114 |
+
|
| 115 |
+
|
| 116 |
+
def affine_qmm_n_nax(
|
| 117 |
+
x: torch.Tensor,
|
| 118 |
+
w: torch.Tensor,
|
| 119 |
+
scales: torch.Tensor,
|
| 120 |
+
biases: torch.Tensor,
|
| 121 |
+
output_features: int,
|
| 122 |
+
group_size: int = 128,
|
| 123 |
+
bits: int = 4,
|
| 124 |
+
) -> torch.Tensor:
|
| 125 |
+
"""NAX-accelerated matrix-matrix multiply with non-transposed quantized weight.
|
| 126 |
+
|
| 127 |
+
x: [..., M, K], w: [K_packed, N_packed], y: [..., M, output_features]
|
| 128 |
+
"""
|
| 129 |
+
return ops.affine_qmm_n_nax(x, w, scales, biases, group_size, bits, output_features)
|
| 130 |
+
|
| 131 |
+
|
| 132 |
+
def affine_gather_qmm_rhs_nax(
|
| 133 |
+
x: torch.Tensor,
|
| 134 |
+
w: torch.Tensor,
|
| 135 |
+
scales: torch.Tensor,
|
| 136 |
+
biases: torch.Tensor,
|
| 137 |
+
indices: torch.Tensor,
|
| 138 |
+
output_features: int,
|
| 139 |
+
group_size: int = 128,
|
| 140 |
+
bits: int = 4,
|
| 141 |
+
transpose: bool = True,
|
| 142 |
+
) -> torch.Tensor:
|
| 143 |
+
"""NAX-accelerated gather + matrix-matrix multiply.
|
| 144 |
+
|
| 145 |
+
Gathers weight rows using indices, then computes matmul.
|
| 146 |
+
x: [M, K], w: [num_experts, ...], indices: [M], y: [M, output_features]
|
| 147 |
+
"""
|
| 148 |
+
return ops.affine_gather_qmm_rhs_nax(
|
| 149 |
+
x, w, scales, biases, indices, group_size, bits, output_features, transpose
|
| 150 |
+
)
|
| 151 |
+
|
| 152 |
+
|
| 153 |
+
__all__ = [
|
| 154 |
+
"mxfp4_qmm_n",
|
| 155 |
+
"mxfp4_qmv",
|
| 156 |
+
"affine_qmv",
|
| 157 |
+
"affine_qmm_t",
|
| 158 |
+
"affine_qmm_n",
|
| 159 |
+
"affine_qmm_t_nax",
|
| 160 |
+
"affine_qmm_n_nax",
|
| 161 |
+
"affine_gather_qmm_rhs_nax",
|
| 162 |
+
]
|
build/torch212-metal-aarch64-darwin/_mlx_quantization_metal_kernels_metal_38ff04e.abi3.so
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:2917440f5876e5f88744089b2582892684a1714c48610ac4402bd9c2f02e8f57
|
| 3 |
+
size 40010728
|
build/torch212-metal-aarch64-darwin/_ops.py
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import torch
|
| 2 |
+
from . import _mlx_quantization_metal_kernels_metal_38ff04e
|
| 3 |
+
ops = torch.ops._mlx_quantization_metal_kernels_metal_38ff04e
|
| 4 |
+
|
| 5 |
+
def add_op_namespace_prefix(op_name: str):
|
| 6 |
+
"""
|
| 7 |
+
Prefix op by namespace.
|
| 8 |
+
"""
|
| 9 |
+
return f"_mlx_quantization_metal_kernels_metal_38ff04e::{op_name}"
|
build/torch212-metal-aarch64-darwin/metadata.json
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"name": "mlx-quantization-metal-kernels",
|
| 3 |
+
"id": "_mlx_quantization_metal_kernels_metal_38ff04e",
|
| 4 |
+
"version": 1,
|
| 5 |
+
"license": "MIT",
|
| 6 |
+
"python-depends": [],
|
| 7 |
+
"backend": {
|
| 8 |
+
"type": "metal"
|
| 9 |
+
},
|
| 10 |
+
"digest": {
|
| 11 |
+
"algorithm": "sha256",
|
| 12 |
+
"files": {
|
| 13 |
+
"__init__.py": "RPKCn/crnlxPPRM3jVlrOE93840kDxotM2/B0Tw2Rp4=",
|
| 14 |
+
"_mlx_quantization_metal_kernels_metal_38ff04e.abi3.so": "KRdED1h25fiHRAibJYKJJoShcUxIYQrEQCvZwvAuj1c=",
|
| 15 |
+
"_ops.py": "kQ55lpyV+9iXLIPKBPbo8bvBXlYM3OgwXfrbaMg+t2A=",
|
| 16 |
+
"mlx_quantization_metal_kernels/__init__.py": "DFYPlrhXwYjEqCl/8n0SmWGZV8NFml5DPhMjKfv98GY="
|
| 17 |
+
}
|
| 18 |
+
}
|
| 19 |
+
}
|
build/torch212-metal-aarch64-darwin/metadata.json.sigstore
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"certificate":{"rawBytes":"MIIHdDCCBvmgAwIBAgIUG07UJzvI/htAUyT4Q5OiD92tNWswCgYIKoZIzj0EAwMwNzEVMBMGA1UEChMMc2lnc3RvcmUuZGV2MR4wHAYDVQQDExVzaWdzdG9yZS1pbnRlcm1lZGlhdGUwHhcNMjYwNjE4MDcwMjI5WhcNMjYwNjE4MDcxMjI5WjAAMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE+ZTUV2ptVE6td8II0W9f/cssmubn7LZUDTUu/MYlVU19mBQ2QoXyPMl2tsCz162GsQkdwh4Z1zMqL2mKIypbiaOCBhgwggYUMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQUIqsuGcBY6+IyOIr1goypqHmmQCswHwYDVR0jBBgwFoAU39Ppz1YkEZb5qNjpKFWixi4YZD8wdQYDVR0RAQH/BGswaYZnaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5Ly5naXRodWIvd29ya2Zsb3dzL3NpZ24tb2xkLWJ1aWxkcy55YW1sQHJlZnMvaGVhZHMvbWFpbjA5BgorBgEEAYO/MAEBBCtodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tMB8GCisGAQQBg78wAQIEEXdvcmtmbG93X2Rpc3BhdGNoMDYGCisGAQQBg78wAQMEKDhhNmJlN2JjNzc1NjVhZDY1YzhhZTJkZWI0NTY0ODJmZjZhYTUwZWQwHQYKKwYBBAGDvzABBAQPU2lnbiBvbGQgYnVpbGRzMCsGCisGAQQBg78wAQUEHWh1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MB0GCisGAQQBg78wAQYED3JlZnMvaGVhZHMvbWFpbjA7BgorBgEEAYO/MAEIBC0MK2h0dHBzOi8vdG9rZW4uYWN0aW9ucy5naXRodWJ1c2VyY29udGVudC5jb20wdwYKKwYBBAGDvzABCQRpDGdodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvLmdpdGh1Yi93b3JrZmxvd3Mvc2lnbi1vbGQtYnVpbGRzLnlhbWxAcmVmcy9oZWFkcy9tYWluMDgGCisGAQQBg78wAQoEKgwoOGE2YmU3YmM3NzU2NWFkNjVjOGFlMmRlYjQ1NjQ4MmZmNmFhNTBlZDAbBgorBgEEAYO/MAELBA0MC3NlbGYtaG9zdGVkMEAGCisGAQQBg78wAQwEMgwwaHR0cHM6Ly9naXRodWIuY29tL2h1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5MDgGCisGAQQBg78wAQ0EKgwoOGE2YmU3YmM3NzU2NWFkNjVjOGFlMmRlYjQ1NjQ4MmZmNmFhNTBlZDAfBgorBgEEAYO/MAEOBBEMD3JlZnMvaGVhZHMvbWFpbjAaBgorBgEEAYO/MAEPBAwMCjEwNzE0NzU1MjkwLgYKKwYBBAGDvzABEAQgDB5odHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2UwGAYKKwYBBAGDvzABEQQKDAgyNTcyMDc0MzB3BgorBgEEAYO/MAESBGkMZ2h0dHBzOi8vZ2l0aHViLmNvbS9odWdnaW5nZmFjZS9rZXJuZWxzLWNvbW11bml0eS8uZ2l0aHViL3dvcmtmbG93cy9zaWduLW9sZC1idWlsZHMueWFtbEByZWZzL2hlYWRzL21haW4wOAYKKwYBBAGDvzABEwQqDCg4YTZiZTdiYzc3NTY1YWQ2NWM4YWUyZGViNDU2NDgyZmY2YWE1MGVkMCEGCisGAQQBg78wARQEEwwRd29ya2Zsb3dfZGlzcGF0Y2gwZAYKKwYBBAGDvzABFQRWDFRodHRwczovL2dpdGh1Yi5jb20vaHVnZ2luZ2ZhY2Uva2VybmVscy1jb21tdW5pdHkvYWN0aW9ucy9ydW5zLzI3NzQxNDY0ODQyL2F0dGVtcHRzLzEwFgYKKwYBBAGDvzABFgQIDAZwdWJsaWMwRgYKKwYBBAGDvzABGAQ4DDZyZXBvOmh1Z2dpbmdmYWNlL2tlcm5lbHMtY29tbXVuaXR5OnJlZjpyZWZzL2hlYWRzL21haW4wgYoGCisGAQQB1nkCBAIEfAR6AHgAdgDdPTBqxscRMmMZHhyZZzcCokpeuN48rf+HinKALynujgAAAZ7ZidStAAAEAwBHMEUCIQDsP9kSoxt+dQ9olBCVvE1cYLKw1jmNKIlF6+engfauqwIgctjRD5oGotywMxZSEWBH8e92R4n8diJjkxjTrvOL3ZQwCgYIKoZIzj0EAwMDaQAwZgIxAMBmIaXAn6RVZKkKYuwkxxOVyGeNeDslGlWCWhZ4krZBJjxM2asZirXUqS2Pge12mgIxAMVr3wberCSuibBR2eiWz8DsQRx7hbypUoHYwHcEW/NXz0E92AOV6h812Bie5nSVIQ=="},"tlogEntries":[{"logIndex":"1857857334","logId":{"keyId":"wNI9atQGlz+VWfO6LRygH4QUfY/8W4RFwiT5i5WRgB0="},"kindVersion":{"kind":"hashedrekord","version":"0.0.1"},"integratedTime":"1781766149","inclusionPromise":{"signedEntryTimestamp":"MEUCIQCqu6N6MISNp71D0IBnI/mK1+NGSpJBUpoDwNGlLFuEVAIgY7Y7h0TwBAG9uM8DHGKVmoh97B3Njh2GU3T5y4v9mOw="},"inclusionProof":{"logIndex":"1735953072","rootHash":"Prns2no9bi9CsAL0K1J+QFLB9EWOAQ/sCqUfEq+Gj14=","treeSize":"1735953080","hashes":["0GniM2KvQzovk6vtJcG37fDQuLenD5STWhfP3BOo1eI=","6Rk/gQCo8COsxrotIQhdBq442o4Ya45umtD5ArlTkxM=","dp6IQwCCKFXVee+vaPPISI+k9kU+9igkOgPnWkqUPHk=","9HE/P4gQp7VSW2+pl8lCIHwbL6dRsMaeqhi6vKBtO+I=","JGil2hxCPzux0fcjKpnRvjASkgy8MzEo5oF2Z2z/uYY=","AM+Vf1kRPwSPbKauLbYX/65c3bYM7SF3QrZesxaYA3A=","UNxBNLng9RbCX0SfoxkThY8zQAlaSMaKLLMLJJBvpsM=","MxP2ben8j7HmUks/Fg3tZTUD4FagdrW3Q0g08RNSyMs=","Uz3W676tGaFDolUTU8KKwxGjR9Jyau7jGEZBmJ3zdM4=","95goX8Iw4H4P6V4eHvRqTdVdViLbhEhsF6i7ICnz/+A=","sWDh7SjDHbJf3HWKGRxiURh6iIYrOzn4Zs37yIij6OA=","x7kXd4VRJvVmTHoSla2KyPQdKvGKDX26/7ST9OONR78=","U8wMiVDzFlmyqT7Nw1RSZYU9+fftsSkRhjpbyXnXUk8=","mqM7J+i75IpuD09QejiUBjeH85AZa+fSm4RXXFmj3lI=","72FC5FYLhxB4a4iiC956o0B/fT54ip4R41vsw2QBKtU=","lYGQ9ibwC8+smMkPQ6TchJm3H9Nc/aTYLfdRacGFChw=","daxmZaajRpZV+JxHiOYZhJBiSKN5ucqjh2WnGbHhirw=","DOCeoSMovIvLExkhIvisow9AuNXgeWs4ECkyR6EcqYU="],"checkpoint":{"envelope":"rekor.sigstore.dev - 1193050959916656506\n1735953080\nPrns2no9bi9CsAL0K1J+QFLB9EWOAQ/sCqUfEq+Gj14=\n\n— rekor.sigstore.dev wNI9ajBFAiEApC/4Bhueq2sQqh/aXVDkHNYzu9NhDfnrNOAxYIqXMCkCIFnPrkaW3fftRgDpJiOdtQxT0SAoe/1dZsNLn4Wyhru4\n"}},"canonicalizedBody":"eyJhcGlWZXJzaW9uIjoiMC4wLjEiLCJraW5kIjoiaGFzaGVkcmVrb3JkIiwic3BlYyI6eyJkYXRhIjp7Imhhc2giOnsiYWxnb3JpdGhtIjoic2hhMjU2IiwidmFsdWUiOiIzYjM4MjIxNTAzNDczZmMxYTE2YmU1ZDcxMjhkOTEyNzFiNjQ4OTNjYjJjODUyNTExMWI3NTRjN2EwYjIxNWRjIn19LCJzaWduYXR1cmUiOnsiY29udGVudCI6Ik1FUUNJQlkzMElFREhpYVJVdnlUSGhsZXRJNVYybTZESGVGVEZvSE80MGpzR0NBakFpQkZtbHVNeGVSOFdFY0M2aml3bThoanlJZVZCMTJENXR1TFgvaGUvcHl2QVE9PSIsInB1YmxpY0tleSI6eyJjb250ZW50IjoiTFMwdExTMUNSVWRKVGlCRFJWSlVTVVpKUTBGVVJTMHRMUzB0Q2sxSlNVaGtSRU5EUW5adFowRjNTVUpCWjBsVlJ6QTNWVXA2ZGtrdmFIUkJWWGxVTkZFMVQybEVPVEowVGxkemQwTm5XVWxMYjFwSmVtb3dSVUYzVFhjS1RucEZWazFDVFVkQk1WVkZRMmhOVFdNeWJHNWpNMUoyWTIxVmRWcEhWakpOVWpSM1NFRlpSRlpSVVVSRmVGWjZZVmRrZW1SSE9YbGFVekZ3WW01U2JBcGpiVEZzV2tkc2FHUkhWWGRJYUdOT1RXcFpkMDVxUlRSTlJHTjNUV3BKTlZkb1kwNU5hbGwzVG1wRk5FMUVZM2hOYWtrMVYycEJRVTFHYTNkRmQxbElDa3R2V2tsNmFqQkRRVkZaU1V0dldrbDZhakJFUVZGalJGRm5RVVVyV2xSVlZqSndkRlpGTm5Sa09FbEpNRmM1Wmk5amMzTnRkV0p1TjB4YVZVUlVWWFVLTDAxWmJGWlZNVGx0UWxFeVVXOVllVkJOYkRKMGMwTjZNVFl5UjNOUmEyUjNhRFJhTVhwTmNVd3liVXRKZVhCaWFXRlBRMEpvWjNkbloxbFZUVUUwUndwQk1WVmtSSGRGUWk5M1VVVkJkMGxJWjBSQlZFSm5UbFpJVTFWRlJFUkJTMEpuWjNKQ1owVkdRbEZqUkVGNlFXUkNaMDVXU0ZFMFJVWm5VVlZKY1hOMUNrZGpRbGsySzBsNVQwbHlNV2R2ZVhCeFNHMXRVVU56ZDBoM1dVUldVakJxUWtKbmQwWnZRVlV6T1ZCd2VqRlphMFZhWWpWeFRtcHdTMFpYYVhocE5Ga0tXa1E0ZDJSUldVUldVakJTUVZGSUwwSkhjM2RoV1ZwdVlVaFNNR05JVFRaTWVUbHVZVmhTYjJSWFNYVlpNamwwVERKb01Wb3laSEJpYldSdFdWZE9iQXBNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk1lVFZ1WVZoU2IyUlhTWFprTWpsNVlUSmFjMkl6WkhwTU0wNXdXakkwZEdJeWVHdE1WMG94Q21GWGVHdGplVFUxV1ZjeGMxRklTbXhhYmsxMllVZFdhRnBJVFhaaVYwWndZbXBCTlVKbmIzSkNaMFZGUVZsUEwwMUJSVUpDUTNSdlpFaFNkMk42YjNZS1RETlNkbUV5Vm5WTWJVWnFaRWRzZG1KdVRYVmFNbXd3WVVoV2FXUllUbXhqYlU1MlltNVNiR0p1VVhWWk1qbDBUVUk0UjBOcGMwZEJVVkZDWnpjNGR3cEJVVWxGUlZoa2RtTnRkRzFpUnpreldESlNjR016UW1oa1IwNXZUVVJaUjBOcGMwZEJVVkZDWnpjNGQwRlJUVVZMUkdob1RtMUtiRTR5U21wT2VtTXhDazVxVm1oYVJGa3hXWHBvYUZwVVNtdGFWMGt3VGxSWk1FOUVTbTFhYWxwb1dWUlZkMXBYVVhkSVVWbExTM2RaUWtKQlIwUjJla0ZDUWtGUlVGVXliRzRLWW1sQ2RtSkhVV2RaYmxad1lrZFNlazFEYzBkRGFYTkhRVkZSUW1jM09IZEJVVlZGU0Zkb01Wb3laSEJpYldSdFdWZE9iRXd5ZEd4amJUVnNZa2hOZEFwWk1qbDBZbGhXZFdGWVVqVk5RakJIUTJselIwRlJVVUpuTnpoM1FWRlpSVVF6U214YWJrMTJZVWRXYUZwSVRYWmlWMFp3WW1wQk4wSm5iM0pDWjBWRkNrRlpUeTlOUVVWSlFrTXdUVXN5YURCa1NFSjZUMms0ZG1SSE9YSmFWelIxV1ZkT01HRlhPWFZqZVRWdVlWaFNiMlJYU2pGak1sWjVXVEk1ZFdSSFZuVUtaRU0xYW1JeU1IZGtkMWxMUzNkWlFrSkJSMFIyZWtGQ1ExRlNjRVJIWkc5a1NGSjNZM3B2ZGt3eVpIQmtSMmd4V1drMWFtSXlNSFpoU0ZadVdqSnNkUXBhTWxwb1dUSlZkbUV5Vm5saWJWWnpZM2t4YW1JeU1YUmtWelZ3WkVocmRreHRaSEJrUjJneFdXazVNMkl6U25KYWJYaDJaRE5OZG1NeWJHNWlhVEYyQ21KSFVYUlpibFp3WWtkU2VreHViR2hpVjNoQlkyMVdiV041T1c5YVYwWnJZM2s1ZEZsWGJIVk5SR2RIUTJselIwRlJVVUpuTnpoM1FWRnZSVXRuZDI4S1QwZEZNbGx0VlROWmJVMHpUbnBWTWs1WFJtdE9hbFpxVDBkR2JFMXRVbXhaYWxFeFRtcFJORTF0V20xT2JVWm9UbFJDYkZwRVFXSkNaMjl5UW1kRlJRcEJXVTh2VFVGRlRFSkJNRTFETTA1c1lrZFpkR0ZIT1hwa1IxWnJUVVZCUjBOcGMwZEJVVkZDWnpjNGQwRlJkMFZOWjNkM1lVaFNNR05JVFRaTWVUbHVDbUZZVW05a1YwbDFXVEk1ZEV3eWFERmFNbVJ3WW0xa2JWbFhUbXhNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVk5SR2RIUTJselIwRlJVVUlLWnpjNGQwRlJNRVZMWjNkdlQwZEZNbGx0VlROWmJVMHpUbnBWTWs1WFJtdE9hbFpxVDBkR2JFMXRVbXhaYWxFeFRtcFJORTF0V20xT2JVWm9UbFJDYkFwYVJFRm1RbWR2Y2tKblJVVkJXVTh2VFVGRlQwSkNSVTFFTTBwc1dtNU5kbUZIVm1oYVNFMTJZbGRHY0dKcVFXRkNaMjl5UW1kRlJVRlpUeTlOUVVWUUNrSkJkMDFEYWtWM1RucEZNRTU2VlRGTmFtdDNUR2RaUzB0M1dVSkNRVWRFZG5wQlFrVkJVV2RFUWpWdlpFaFNkMk42YjNaTU1tUndaRWRvTVZscE5Xb0tZakl3ZG1GSVZtNWFNbXgxV2pKYWFGa3lWWGRIUVZsTFMzZFpRa0pCUjBSMmVrRkNSVkZSUzBSQlozbE9WR041VFVSak1FMTZRak5DWjI5eVFtZEZSUXBCV1U4dlRVRkZVMEpIYTAxYU1tZ3daRWhDZWs5cE9IWmFNbXd3WVVoV2FVeHRUblppVXpsdlpGZGtibUZYTlc1YWJVWnFXbE01Y2xwWVNuVmFWM2g2Q2t4WFRuWmlWekV4WW0xc01HVlRPSFZhTW13d1lVaFdhVXd6WkhaamJYUnRZa2M1TTJONU9YcGhWMlIxVEZjNWMxcERNV2xrVjJ4eldraE5kV1ZYUm5RS1lrVkNlVnBYV25wTU1taHNXVmRTZWt3eU1XaGhWelIzVDBGWlMwdDNXVUpDUVVkRWRucEJRa1YzVVhGRVEyYzBXVlJhYVZwVVpHbFplbU16VGxSWk1RcFpWMUV5VGxkTk5GbFhWWGxhUjFacFRrUlZNazVFWjNsYWJWa3lXVmRGTVUxSFZtdE5RMFZIUTJselIwRlJVVUpuTnpoM1FWSlJSVVYzZDFKa01qbDVDbUV5V25OaU0yUm1Xa2RzZW1OSFJqQlpNbWQzV2tGWlMwdDNXVUpDUVVkRWRucEJRa1pSVWxkRVJsSnZaRWhTZDJONmIzWk1NbVJ3WkVkb01WbHBOV29LWWpJd2RtRklWbTVhTW14MVdqSmFhRmt5VlhaaE1sWjVZbTFXYzJONU1XcGlNakYwWkZjMWNHUklhM1paVjA0d1lWYzVkV041T1hsa1Z6VjZUSHBKTXdwT2VsRjRUa1JaTUU5RVVYbE1Na1l3WkVkV2RHTklVbnBNZWtWM1JtZFpTMHQzV1VKQ1FVZEVkbnBCUWtablVVbEVRVnAzWkZkS2MyRlhUWGRTWjFsTENrdDNXVUpDUVVkRWRucEJRa2RCVVRSRVJGcDVXbGhDZGs5dGFERmFNbVJ3WW0xa2JWbFhUbXhNTW5Sc1kyMDFiR0pJVFhSWk1qbDBZbGhXZFdGWVVqVUtUMjVLYkZwcWNIbGFWMXA2VERKb2JGbFhVbnBNTWpGb1lWYzBkMmRaYjBkRGFYTkhRVkZSUWpGdWEwTkNRVWxGWmtGU05rRklaMEZrWjBSa1VGUkNjUXA0YzJOU1RXMU5Xa2hvZVZwYWVtTkRiMnR3WlhWT05EaHlaaXRJYVc1TFFVeDViblZxWjBGQlFWbzNXbWxrVTNSQlFVRkZRWGRDU0UxRlZVTkpVVVJ6Q2xBNWExTnZlSFFyWkZFNWIyeENRMVoyUlRGaldVeExkekZxYlU1TFNXeEdOaXRsYm1kbVlYVnhkMGxuWTNScVVrUTFiMGR2ZEhsM1RYaGFVMFZYUWtnS09HVTVNbEkwYmpoa2FVcHFhM2hxVkhKMlQwd3pXbEYzUTJkWlNVdHZXa2w2YWpCRlFYZE5SR0ZSUVhkYVowbDRRVTFDYlVsaFdFRnVObEpXV2t0clN3cFpkWGRyZUhoUFZubEhaVTVsUkhOc1IyeFhRMWRvV2pScmNscENTbXA0VFRKaGMxcHBjbGhWY1ZNeVVHZGxNVEp0WjBsNFFVMVdjak4zWW1WeVExTjFDbWxpUWxJeVpXbFhlamhFYzFGU2VEZG9Zbmx3Vlc5SVdYZElZMFZYTDA1WWVqQkZPVEpCVDFZMmFEZ3hNa0pwWlRWdVUxWkpVVDA5Q2kwdExTMHRSVTVFSUVORlVsUkpSa2xEUVZSRkxTMHRMUzBLIn19fX0="}],"timestampVerificationData":{"rfc3161Timestamps":[{"signedTimestamp":"MIICyTADAgEAMIICwAYJKoZIhvcNAQcCoIICsTCCAq0CAQMxDTALBglghkgBZQMEAgEwgbgGCyqGSIb3DQEJEAEEoIGoBIGlMIGiAgEBBgkrBgEEAYO/MAIwMTANBglghkgBZQMEAgEFAAQgpxyYNLylzyNP9WpY8X0UJfdmDIvGgglnHCJwszF0PfsCFQDHJ3f8FxJKawQoIf0CaEJk2bYkuBgPMjAyNjA2MTgwNzAyMjlaMAMCAQGgMqQwMC4xFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEVMBMGA1UEAxMMc2lnc3RvcmUtdHNhoAAxggHaMIIB1gIBATBRMDkxFTATBgNVBAoTDHNpZ3N0b3JlLmRldjEgMB4GA1UEAxMXc2lnc3RvcmUtdHNhLXNlbGZzaWduZWQCFDoTVC8MkGHuvMFDL8uKjosqI4sMMAsGCWCGSAFlAwQCAaCB/DAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTI2MDYxODA3MDIyOVowLwYJKoZIhvcNAQkEMSIEID6rabByj3xAUqoBXb91FLoIFGnxY9AzZ6c11oN4/wSMMIGOBgsqhkiG9w0BCRACLzF/MH0wezB5BCCF+Se8B6tiysO0Q1bBDvyBssaIP9p6uebYcNnROs0FtzBVMD2kOzA5MRUwEwYDVQQKEwxzaWdzdG9yZS5kZXYxIDAeBgNVBAMTF3NpZ3N0b3JlLXRzYS1zZWxmc2lnbmVkAhQ6E1QvDJBh7rzBQy/Lio6LKiOLDDAKBggqhkjOPQQDAgRmMGQCMF7QVshtZe83ZSyTVWKz9+//NY0KVQNLUtilfEfjjJCr0jH872HEU1VaGJXHjWQRhQIwCTVJeyTwzpAj0Tzs5TNJNVOQL9rvv6IPFZt6C95Ea4CG1mN5Qke+3fv8sB5J1TSH"}]}},"messageSignature":{"messageDigest":{"algorithm":"SHA2_256","digest":"OzgiFQNHP8Gha+XXEo2RJxtkiTyyyFJREbdUx6CyFdw="},"signature":"MEQCIBY30IEDHiaRUvyTHhletI5V2m6DHeFTFoHO40jsGCAjAiBFmluMxeR8WEcC6jiwm8hjyIeVB12D5tuLX/he/pyvAQ=="}}
|
build/torch212-metal-aarch64-darwin/mlx_quantization_metal_kernels/__init__.py
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import ctypes
|
| 2 |
+
import importlib.util
|
| 3 |
+
import sys
|
| 4 |
+
from pathlib import Path
|
| 5 |
+
from types import ModuleType
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
def _import_from_path(file_path: Path) -> ModuleType:
|
| 9 |
+
# We cannot use the module name as-is, after adding it to `sys.modules`,
|
| 10 |
+
# it would also be used for other imports. So, we make a module name that
|
| 11 |
+
# depends on the path for it to be unique using the hex-encoded hash of
|
| 12 |
+
# the path.
|
| 13 |
+
path_hash = "{:x}".format(ctypes.c_size_t(hash(file_path.absolute())).value)
|
| 14 |
+
module_name = path_hash
|
| 15 |
+
spec = importlib.util.spec_from_file_location(module_name, file_path)
|
| 16 |
+
if spec is None:
|
| 17 |
+
raise ImportError(f"Cannot load spec for {module_name} from {file_path}")
|
| 18 |
+
module = importlib.util.module_from_spec(spec)
|
| 19 |
+
if module is None:
|
| 20 |
+
raise ImportError(f"Cannot load module {module_name} from spec")
|
| 21 |
+
sys.modules[module_name] = module
|
| 22 |
+
spec.loader.exec_module(module) # type: ignore
|
| 23 |
+
return module
|
| 24 |
+
|
| 25 |
+
|
| 26 |
+
globals().update(vars(_import_from_path(Path(__file__).parent.parent / "__init__.py")))
|