kernels-bot commited on
Commit
1d97d9a
·
verified ·
1 Parent(s): b18056f

Uploaded using `kernel-builder`.

Browse files
.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:4f3cd1fc44fc6b52d4ec5bc275cd8ebbc17bc247256ff0063cf0dc70a7f0e57b
3
- size 40027032
 
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 _mlx_quantization_metal_kernels_metal_0aaded7
3
- ops = torch.ops._mlx_quantization_metal_kernels_metal_0aaded7
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_0aaded7::{op_name}"
 
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")))