ai-edge-quantizer-nightly 0.4.0.dev20250930__py3-none-any.whl → 0.4.0.dev20251002__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (22) hide show
  1. ai_edge_quantizer/algorithm_manager.py +40 -3
  2. ai_edge_quantizer/algorithms/uniform_quantize/common_quantize.py +28 -0
  3. ai_edge_quantizer/algorithms/uniform_quantize/hadamard_rotation.py +77 -8
  4. ai_edge_quantizer/algorithms/uniform_quantize/hadamard_rotation_test.py +69 -4
  5. ai_edge_quantizer/default_policy.py +4 -2
  6. ai_edge_quantizer/params_generator.py +1 -0
  7. ai_edge_quantizer/qtyping.py +5 -0
  8. ai_edge_quantizer/transformation_performer.py +5 -0
  9. ai_edge_quantizer/transformations/insert_decomposed_hadamard_rotation.py +291 -0
  10. ai_edge_quantizer/transformations/insert_decomposed_hadamard_rotation_test.py +244 -0
  11. ai_edge_quantizer/transformations/insert_hadamard_rotation.py +8 -31
  12. ai_edge_quantizer/transformations/quantize_tensor.py +11 -31
  13. ai_edge_quantizer/transformations/transformation_utils.py +66 -0
  14. ai_edge_quantizer/utils/constrained_ops_utils_test.py +1 -1
  15. ai_edge_quantizer/utils/tfl_flatbuffer_utils.py +1 -0
  16. ai_edge_quantizer/utils/validation_utils.py +29 -0
  17. ai_edge_quantizer/utils/validation_utils_test.py +24 -0
  18. {ai_edge_quantizer_nightly-0.4.0.dev20250930.dist-info → ai_edge_quantizer_nightly-0.4.0.dev20251002.dist-info}/METADATA +1 -1
  19. {ai_edge_quantizer_nightly-0.4.0.dev20250930.dist-info → ai_edge_quantizer_nightly-0.4.0.dev20251002.dist-info}/RECORD +22 -20
  20. {ai_edge_quantizer_nightly-0.4.0.dev20250930.dist-info → ai_edge_quantizer_nightly-0.4.0.dev20251002.dist-info}/LICENSE +0 -0
  21. {ai_edge_quantizer_nightly-0.4.0.dev20250930.dist-info → ai_edge_quantizer_nightly-0.4.0.dev20251002.dist-info}/WHEEL +0 -0
  22. {ai_edge_quantizer_nightly-0.4.0.dev20250930.dist-info → ai_edge_quantizer_nightly-0.4.0.dev20251002.dist-info}/top_level.txt +0 -0
@@ -210,3 +210,69 @@ def raise_deprecated_error(_: TransformationInput):
210
210
  'This transformation is deprecated. Please contact AI Edge Quantizer team'
211
211
  ' if you see this error.'
212
212
  )
213
+
214
+
215
+ def pack_data(bitwidth: int, flattened_data: np.ndarray) -> np.ndarray:
216
+ """Pack the data to the corresponding bit width.
217
+
218
+ Currently only support 4 bits. If no packing is needed, the original data is
219
+ returned.
220
+
221
+ Args:
222
+ bitwidth: Bit width from NonLinearQuantParams.
223
+ flattened_data: The data to be packed.
224
+
225
+ Returns:
226
+ Packed data.
227
+ """
228
+ if bitwidth == 4:
229
+ even_data = flattened_data[::2] & 0x0F
230
+ odd_data = np.left_shift(flattened_data[1::2], 4).astype(np.uint8)
231
+ if odd_data.shape[0] == even_data.shape[0] - 1:
232
+ odd_data = np.pad(odd_data, (0, 1), constant_values=0)
233
+ return np.bitwise_or(even_data, odd_data)
234
+ else:
235
+ return flattened_data
236
+
237
+
238
+ def get_producer_schema_op_id(
239
+ transformation: TransformationInput,
240
+ ) -> int:
241
+ """Checks if the tensor's producer matches the given op.
242
+
243
+ Args:
244
+ transformation: The transformation input to check the producer of.
245
+
246
+ Returns:
247
+ The schema op id of the producer op. E.g.
248
+ schema_py_generated.BuiltinOperator.FULLY_CONNECTED.
249
+ """
250
+ if transformation.producer == -1:
251
+ return False
252
+ else:
253
+ return (
254
+ transformation.op_codes[
255
+ transformation.subgraph.operators[
256
+ transformation.producer
257
+ ].opcodeIndex
258
+ ].builtinCode
259
+ )
260
+
261
+
262
+ def get_schema_op_id(
263
+ transformation: TransformationInput, op_id: int
264
+ ) -> bool:
265
+ """Returns the schema op id of the given op.
266
+
267
+ Args:
268
+ transformation: The transformation input to check the consumers of.
269
+ op_id: The op id in the list of operators to check for.
270
+
271
+ Returns:
272
+ The schema op id of the given op.
273
+ """
274
+ return (
275
+ transformation.op_codes[
276
+ transformation.subgraph.operators[op_id].opcodeIndex
277
+ ].builtinCode
278
+ )
@@ -28,7 +28,7 @@ class ConstrainedOpsUtilsTest(parameterized.TestCase):
28
28
  dict(
29
29
  testcase_name="same_as_input_scale",
30
30
  constraint=_OpQuantConstraint.SAME_AS_INPUT_SCALE,
31
- expected_num_ops=15,
31
+ expected_num_ops=16,
32
32
  ),
33
33
  dict(
34
34
  testcase_name="same_as_output_scale",
@@ -74,6 +74,7 @@ TFL_OP_NAME_TO_CODE = immutabledict.immutabledict({
74
74
  _TFLOpName.REDUCE_MIN: schema.BuiltinOperator.REDUCE_MIN,
75
75
  _TFLOpName.EQUAL: schema.BuiltinOperator.EQUAL,
76
76
  _TFLOpName.NOT_EQUAL: schema.BuiltinOperator.NOT_EQUAL,
77
+ _TFLOpName.MIRROR_PAD: schema.BuiltinOperator.MIRROR_PAD,
77
78
  })
78
79
 
79
80
  TFL_OP_CODE_TO_NAME = immutabledict.immutabledict(
@@ -38,6 +38,8 @@ def get_validation_func(
38
38
  return mean_squared_difference
39
39
  elif func_name == "median_diff_ratio":
40
40
  return median_diff_ratio
41
+ elif func_name == "cosine_similarity":
42
+ return cosine_similarity
41
43
  else:
42
44
  raise ValueError(f"Validation function {func_name} not supported")
43
45
 
@@ -99,6 +101,33 @@ def median_diff_ratio(
99
101
  return median_ratio
100
102
 
101
103
 
104
+ def cosine_similarity(
105
+ data1: np._typing.ArrayLike, data2: np._typing.ArrayLike
106
+ ) -> float:
107
+ """Calculates the cosine similarity between data1 & data2.
108
+
109
+ ref: https://en.wikipedia.org/wiki/Cosine_similarity
110
+
111
+ Args:
112
+ data1: input data to be used for comparison
113
+ data2: input data to be used for comparison, data1 & 2 must be of the same
114
+ shape
115
+
116
+ Returns:
117
+ a float value representing the cosine similarity between data1 & 2
118
+
119
+ Raises:
120
+ Value error if the two inputs don't have the same number of elements
121
+ """
122
+ data1, data2 = _preprocess_same_size_arrays(data1, data2)
123
+ # special handling for tensor of size 0
124
+ if data1.size == 0:
125
+ return float(0)
126
+ return float(
127
+ np.dot(data1, data2) / (np.linalg.norm(data1) * np.linalg.norm(data2))
128
+ )
129
+
130
+
102
131
  def _preprocess_same_size_arrays(
103
132
  data1: np._typing.ArrayLike, data2: np._typing.ArrayLike
104
133
  ) -> Tuple[np.ndarray, np.ndarray]:
@@ -82,6 +82,30 @@ class ValidationUtilTest(googletest.TestCase):
82
82
  result = validation_utils.median_diff_ratio(data1, data2)
83
83
  self.assertEqual(result, 0)
84
84
 
85
+ def test_cosine_similarity(self):
86
+ data1 = [1, 2, 3]
87
+ data2 = [1, 2, 3]
88
+ result = validation_utils.cosine_similarity(data1, data2)
89
+ self.assertAlmostEqual(result, 1.0, 6)
90
+
91
+ def test_cosine_similarity_perpendicular(self):
92
+ data1 = [1, 0, 0]
93
+ data2 = [0, 1, 0]
94
+ result = validation_utils.cosine_similarity(data1, data2)
95
+ self.assertAlmostEqual(result, 0.0, 6)
96
+
97
+ def test_cosine_similarity_multidim(self):
98
+ data1 = [[1, 2], [4, 5]]
99
+ data2 = [[1, 3], [2, 2]]
100
+ result = validation_utils.cosine_similarity(data1, data2)
101
+ self.assertAlmostEqual(result, 0.86881, 6)
102
+
103
+ def test_cosine_similarity_0d(self):
104
+ data1 = []
105
+ data2 = []
106
+ result = validation_utils.cosine_similarity(data1, data2)
107
+ self.assertEqual(result, 0)
108
+
85
109
 
86
110
  if __name__ == "__main__":
87
111
  googletest.main()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ai-edge-quantizer-nightly
3
- Version: 0.4.0.dev20250930
3
+ Version: 0.4.0.dev20251002
4
4
  Summary: A quantizer for advanced developers to quantize converted AI Edge models.
5
5
  Home-page: https://github.com/google-ai-edge/ai-edge-quantizer
6
6
  Keywords: On-Device ML,AI,Google,TFLite,Quantization,LLMs,GenAI
@@ -1,18 +1,18 @@
1
1
  ai_edge_quantizer/__init__.py,sha256=4pFSkukSwahYyzwqia0yPRyz8TnFQfGRthVJhYpMWas,793
2
- ai_edge_quantizer/algorithm_manager.py,sha256=XkLMG_wQqf_X6swp6YBIhJpIbIdRcOt2LJ_6oTZ3GzU,14956
2
+ ai_edge_quantizer/algorithm_manager.py,sha256=Ri4bNqbSTmtlsYZiJYHtkjNEsl8h5tZ_1uV_stJ3HUY,16156
3
3
  ai_edge_quantizer/algorithm_manager_api.py,sha256=u903TG0s1uIDhJqfeJne3CFl8A93phZrwgV2-hwdcXU,9247
4
4
  ai_edge_quantizer/algorithm_manager_api_test.py,sha256=w6bSONvXkX6bzXAGc0-7b6gNDt9oz9ieq97KP8Sg_JU,7666
5
5
  ai_edge_quantizer/calibrator.py,sha256=Sms7_AIHPH9G5xFaz5Ef3a5gPhxuIWQI8d2LUM8C96I,12071
6
6
  ai_edge_quantizer/calibrator_test.py,sha256=ZLzIMWB2FSFU4TOatDioYuwp_kLh8iSCefZ5_Q9FU7s,11900
7
7
  ai_edge_quantizer/conftest.py,sha256=SxCz-5LlRD_lQm4hQc4c6IGG7DS8d7IyEWY9gnscPN0,794
8
- ai_edge_quantizer/default_policy.py,sha256=wiwBENR6uwZjFmIdDFwzzuciC_tyy9hXtHNndHmDiBY,11730
8
+ ai_edge_quantizer/default_policy.py,sha256=6eJA0eX5Npv8lw_0EDS5iPldInoURQKEDhDZ272VG1Q,11770
9
9
  ai_edge_quantizer/model_modifier.py,sha256=teGa8I6kGvn6TQY6Xv53YFIc_pQEhNvM9Zb4bvhezyw,7110
10
10
  ai_edge_quantizer/model_modifier_test.py,sha256=cJd04SLOG-fQZZNZPcisoBLx3cLtWEwGqUBbLb-pif4,4751
11
11
  ai_edge_quantizer/model_validator.py,sha256=Hj0_5o-Oa3dSlJ3ryVjRhvsyelHNyek1GrtG9buMczg,13153
12
12
  ai_edge_quantizer/model_validator_test.py,sha256=EeqOP_mrZsnZ3rug756s0ryDDqd2KgIDld5Lm_gDuWY,13020
13
- ai_edge_quantizer/params_generator.py,sha256=hcgMHJlERZERUyIAEi6AHJcLJ8gsKIBAEojzFFz-tqk,20098
13
+ ai_edge_quantizer/params_generator.py,sha256=0w-sDGk84sVNkXoduon1wDqq30sGOHVgBVbdg44QVF4,20153
14
14
  ai_edge_quantizer/params_generator_test.py,sha256=RDYoRZDJfEZRtjlTAU2kZ_4t3JHOqEHxfJX9V4ETAhg,40597
15
- ai_edge_quantizer/qtyping.py,sha256=tfrPip-uzJuF_PASgUExx5Oy9gghWUbQaApR0XaBpNw,16882
15
+ ai_edge_quantizer/qtyping.py,sha256=7aEMPA4qr4CGD3NXtZgG2fDoQX5NzK9jwSv1yWNqQV4,17149
16
16
  ai_edge_quantizer/quantizer.py,sha256=ckAEOnnBxuCKZuvlzdChevCKPuE-IeDPHCNtFTWr250,17857
17
17
  ai_edge_quantizer/quantizer_test.py,sha256=m6f4ayyaF3yQb9i4V0aFAbmGw0OKZ2Zam1RoTPh-u24,22917
18
18
  ai_edge_quantizer/recipe.py,sha256=MEkfQ2Sg3KAE9LAORHWcbjYNPg06EUbwc1d-VspQA2U,6461
@@ -21,19 +21,19 @@ ai_edge_quantizer/recipe_manager_test.py,sha256=qjgGUF-wggXnSXqZ5khmqrDMIQI5CShk
21
21
  ai_edge_quantizer/recipe_test.py,sha256=QisyaTol8JRZFcGOGyee7QRCvqj5VbF4guKWdIoMUOE,6213
22
22
  ai_edge_quantizer/transformation_instruction_generator.py,sha256=O0U2aZcB8aXQgOV8r9g1rGNzDUiuI5Ta53XnxZbVffE,31576
23
23
  ai_edge_quantizer/transformation_instruction_generator_test.py,sha256=KW5-WoTTo9IqLEVnWxVC8ut8eWLi_91xfKgGqVQ9QDk,54635
24
- ai_edge_quantizer/transformation_performer.py,sha256=o4J6OUbI0dLoobVYjkOFw5Po3yH0gZJXrfuTIYais4o,13029
24
+ ai_edge_quantizer/transformation_performer.py,sha256=mFsig0E5Isy7cnG1wMO2jzBn3Wql8fElM_PSpaL8okw,13354
25
25
  ai_edge_quantizer/transformation_performer_test.py,sha256=xk6A3LStCyPclN51--9uO7XjSxNfZmpdfvrzOL0maNM,20349
26
26
  ai_edge_quantizer/algorithms/__init__.py,sha256=lpq1g2ayg3lCPLy79t2VicYcnGKw64FfYIj1V7J-4m8,676
27
27
  ai_edge_quantizer/algorithms/nonlinear_quantize/__init__.py,sha256=lpq1g2ayg3lCPLy79t2VicYcnGKw64FfYIj1V7J-4m8,676
28
28
  ai_edge_quantizer/algorithms/nonlinear_quantize/float_casting.py,sha256=Bs9CK7wZAw6jNaZ8xEtbwO2vM34VYXNZSMVWvxJo9nw,9297
29
29
  ai_edge_quantizer/algorithms/nonlinear_quantize/float_casting_test.py,sha256=EqIHGEZ1LgUrTN7zf880RuAzEv3Qy7kgh5ivObJGHSo,22646
30
30
  ai_edge_quantizer/algorithms/uniform_quantize/__init__.py,sha256=lpq1g2ayg3lCPLy79t2VicYcnGKw64FfYIj1V7J-4m8,676
31
- ai_edge_quantizer/algorithms/uniform_quantize/common_quantize.py,sha256=E17cSR-MoUoAgAVIKLMfrjONmqibwOPRLsD521h1Gh0,37946
31
+ ai_edge_quantizer/algorithms/uniform_quantize/common_quantize.py,sha256=rUHraqNi0iJ0AyUQfAiYkyXG2rSy7GlhnqmwJeoLStg,38952
32
32
  ai_edge_quantizer/algorithms/uniform_quantize/common_quantize_test.py,sha256=GGf_n3wIeg3GB_eGsmyNJ0fTcxgpeMMbugTMRONK6TQ,3553
33
33
  ai_edge_quantizer/algorithms/uniform_quantize/dequantized_weight_recovery.py,sha256=BDdn_uBZakfHyzdMJPKadsOqxqyC-s6W2ZzFH99L4fE,8652
34
34
  ai_edge_quantizer/algorithms/uniform_quantize/dequantized_weight_recovery_test.py,sha256=sT5eX5TLZEHTtPfnSkCPDlS0sQxlTFWbCsbvOuj--yY,8889
35
- ai_edge_quantizer/algorithms/uniform_quantize/hadamard_rotation.py,sha256=otKRiZn_C0QH0891pxLsIPIBT1mLDwbKYYP7bI-MXAA,12279
36
- ai_edge_quantizer/algorithms/uniform_quantize/hadamard_rotation_test.py,sha256=_SpP12aDLujv_7tWf_mCt89WknNXTSGE-JpZWO1bYSE,13238
35
+ ai_edge_quantizer/algorithms/uniform_quantize/hadamard_rotation.py,sha256=qxt9CPDcidVWIxp5nSWPN2hKKj1XZcsOOLBd2SYIvW0,14572
36
+ ai_edge_quantizer/algorithms/uniform_quantize/hadamard_rotation_test.py,sha256=mgv6aGIqQouxfA8_GacuGdOftvL75XBF1_h5tlCCYJQ,15468
37
37
  ai_edge_quantizer/algorithms/uniform_quantize/mse.py,sha256=qiIyzogATGVxjYwxzH0cZvgwPSPBJv_3y8NSumHZXTk,4561
38
38
  ai_edge_quantizer/algorithms/uniform_quantize/mse_test.py,sha256=-_P4jQJ7gVo0FNSapP3sIGcnhwfjQHW1AKLfoiAlS_s,7142
39
39
  ai_edge_quantizer/algorithms/uniform_quantize/naive_min_max_quantize.py,sha256=1sB2j1vlvvWDKyjcGvA_JLCpN2KbCmMslGCBUc4--V4,8461
@@ -52,28 +52,30 @@ ai_edge_quantizer/transformations/duplicate_buffer.py,sha256=TvTHbm24IiICNkWOlvR
52
52
  ai_edge_quantizer/transformations/duplicate_buffer_test.py,sha256=YYWl3Q5WF60s8T8pLzzA8TCSxz-i7dqc03dJt1LtMw4,3880
53
53
  ai_edge_quantizer/transformations/duplicate_tensor.py,sha256=WKhf2LIAL0MnZe88b6942A37lvHXe1cFjUDqE5VNmvU,2490
54
54
  ai_edge_quantizer/transformations/duplicate_tensor_test.py,sha256=s-RqSxNBMfVJyCunXz2eb7-KA6UiBmbOmL7phLslENQ,5056
55
- ai_edge_quantizer/transformations/insert_hadamard_rotation.py,sha256=rBbKgcVKHie38NT2UQ7KQ1xCb2tRu_rVl0yFloOAW_A,7562
55
+ ai_edge_quantizer/transformations/insert_decomposed_hadamard_rotation.py,sha256=D47xTbMQM-R2X3SwSG1RjOAKxvGp76y61aaZA1VyN8E,10791
56
+ ai_edge_quantizer/transformations/insert_decomposed_hadamard_rotation_test.py,sha256=Z9Nr5e5aEeEMahhhizFyOkAMEXkEg1EKYZ_bGb5Vbvw,8993
57
+ ai_edge_quantizer/transformations/insert_hadamard_rotation.py,sha256=5D5WwrJCE6hQoANbMwa6YGBbjcG5HcL_rkkoXIAIW9w,6883
56
58
  ai_edge_quantizer/transformations/insert_hadamard_rotation_test.py,sha256=iV1p3nZfHUATV2YRoBOYurnu3pLy8n3aFppLWGQOPdA,7268
57
59
  ai_edge_quantizer/transformations/quant_insert.py,sha256=jn6HsJaV-sqBiFPY-Aqbd64t8zgcYVkEkZI375x_FWY,3958
58
60
  ai_edge_quantizer/transformations/quant_insert_test.py,sha256=X9ptPDvJCFkR5tejKnD1SlHFGPazQTW-wNNMV9MEAuw,10107
59
- ai_edge_quantizer/transformations/quantize_tensor.py,sha256=kjaNrw9mnrn0t8u0vey9S_uPz3iVUicwy4rluxVqV3E,7617
61
+ ai_edge_quantizer/transformations/quantize_tensor.py,sha256=unqInO0we6_cgwPjtHB3tLWIHPajfNuJSLGW-IFnI9E,7029
60
62
  ai_edge_quantizer/transformations/quantize_tensor_test.py,sha256=mHLO3_MRt36A8-ZN8ADn5tBBJlqjTWa7ZUN8Mmu5Rcw,9116
61
- ai_edge_quantizer/transformations/transformation_utils.py,sha256=efJdAkA24wlg6Vj5NFO7_7MDuvQLSNn-l11Vs_JPktI,7123
63
+ ai_edge_quantizer/transformations/transformation_utils.py,sha256=IKrtXJNH0msiTcI7KXkCYn2EkzmbZKWMMX_r5PMEx2U,8857
62
64
  ai_edge_quantizer/transformations/transformation_utils_test.py,sha256=MWgq29t7rvxRQIfi4ny9IoODFCTcbpjnIwoCL40zDKk,8698
63
65
  ai_edge_quantizer/utils/__init__.py,sha256=lpq1g2ayg3lCPLy79t2VicYcnGKw64FfYIj1V7J-4m8,676
64
66
  ai_edge_quantizer/utils/calibration_utils.py,sha256=iMf_bSCf-O86MzDt5D9hLKqbTydqLwirluaC6BJ9yHo,11553
65
67
  ai_edge_quantizer/utils/calibration_utils_test.py,sha256=4BlksXl7b4yptL8xPR67hmJCnjhN9V10a2PunzfHrUE,9372
66
68
  ai_edge_quantizer/utils/constrained_ops_utils.py,sha256=EAITCf7Ku_PFZcw3K-wd-8hGbyuRd5W5UtNdGvalwAE,4478
67
- ai_edge_quantizer/utils/constrained_ops_utils_test.py,sha256=5vWIzWRI-uPi7OBppc8rMXNX32Ph4d5IvXGstOHMV3Y,1756
69
+ ai_edge_quantizer/utils/constrained_ops_utils_test.py,sha256=HNZstSm6-7xgSmM-7ilHRjuOKsq6tivpxayphm9Oghs,1756
68
70
  ai_edge_quantizer/utils/test_utils.py,sha256=a4Nk-wbeB09dFjTDZiA0K67d26j5DD0UDH_GIVmVG_4,8685
69
- ai_edge_quantizer/utils/tfl_flatbuffer_utils.py,sha256=anbxbIKS7t8iIkJZJH7AkAR18xYWLtKTzVJ6tVD4DXQ,11944
71
+ ai_edge_quantizer/utils/tfl_flatbuffer_utils.py,sha256=LN-WonrcJLP9bB4lULd5VIg_8YLTcp891ZuDZ5nDGe8,12006
70
72
  ai_edge_quantizer/utils/tfl_flatbuffer_utils_test.py,sha256=K1SbK8q92qYVtiVj0I0GtugsPTkpIpEKv9zakvFV_Sc,8555
71
73
  ai_edge_quantizer/utils/tfl_interpreter_utils.py,sha256=EoVjI_hplX_Rml3hfRsGmQOihexmizeJqt4SQcET9aA,14925
72
74
  ai_edge_quantizer/utils/tfl_interpreter_utils_test.py,sha256=6fjkM-rycZ95L4yfvlr0TN6RlrhfPzxNUYrZaYO_F0A,12013
73
- ai_edge_quantizer/utils/validation_utils.py,sha256=oYw33Sg547AqtGw-choPUJmp9SAKkV46J_ddqSsum2Q,3950
74
- ai_edge_quantizer/utils/validation_utils_test.py,sha256=V_qNDikPD4OPB-siOLQCWNVWTAu87h2IgNYt7teFd-o,2934
75
- ai_edge_quantizer_nightly-0.4.0.dev20250930.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
76
- ai_edge_quantizer_nightly-0.4.0.dev20250930.dist-info/METADATA,sha256=2ScDdoSyEtkSTdXwzLZehwVjwd9rENGfotDREu05Ec4,1508
77
- ai_edge_quantizer_nightly-0.4.0.dev20250930.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
78
- ai_edge_quantizer_nightly-0.4.0.dev20250930.dist-info/top_level.txt,sha256=8QTfPnFXNVUhScFLaa-NWZMFWMn72M50DVPubpwWB1g,18
79
- ai_edge_quantizer_nightly-0.4.0.dev20250930.dist-info/RECORD,,
75
+ ai_edge_quantizer/utils/validation_utils.py,sha256=yJH9Cvepr_XWn-3Hsh91j7HuC5iLQHAyskyQ48bGNoc,4797
76
+ ai_edge_quantizer/utils/validation_utils_test.py,sha256=1sblJWHLTYTbn1Qi9rwnrREOSXRy5KwHAWSwgI1e_aU,3697
77
+ ai_edge_quantizer_nightly-0.4.0.dev20251002.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
78
+ ai_edge_quantizer_nightly-0.4.0.dev20251002.dist-info/METADATA,sha256=gx_gBIYVh7XDUrBl-uDmPRRRrawHIroH_14pjZmhL4w,1508
79
+ ai_edge_quantizer_nightly-0.4.0.dev20251002.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
80
+ ai_edge_quantizer_nightly-0.4.0.dev20251002.dist-info/top_level.txt,sha256=8QTfPnFXNVUhScFLaa-NWZMFWMn72M50DVPubpwWB1g,18
81
+ ai_edge_quantizer_nightly-0.4.0.dev20251002.dist-info/RECORD,,