ai-edge-torch-nightly 0.3.0.dev20240822__py3-none-any.whl → 0.3.0.dev20240824__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.

Potentially problematic release.


This version of ai-edge-torch-nightly might be problematic. Click here for more details.

@@ -16,6 +16,7 @@
16
16
  import dataclasses
17
17
  from typing import Any, Dict, List, Optional, Tuple, Union
18
18
 
19
+ from ai_edge_torch import lowertools
19
20
  import torch
20
21
  import torch.utils._pytree as pytree
21
22
 
@@ -53,47 +54,12 @@ class Signature:
53
54
  for i in range(args_spec.num_leaves):
54
55
  names.append(f"args_{i}")
55
56
 
56
- kwargs_names = self._flat_kwarg_names(
57
+ kwargs_names = lowertools.flat_dict_names(
57
58
  kwargs_spec.children_specs, kwargs_spec.context
58
59
  )
59
60
  names.extend(kwargs_names)
60
61
  return names
61
62
 
62
- def _flat_kwarg_names(self, specs, context) -> List[str]:
63
- flat_names = []
64
- if context is None:
65
- for i, spec in enumerate(specs):
66
- if spec.children_specs:
67
- flat_names.extend([
68
- f"{i}_{name}"
69
- for name in self._flat_kwarg_names(
70
- spec.children_specs, spec.context
71
- )
72
- ])
73
- else:
74
- flat_names.append(f"{i}")
75
- else:
76
- flat_ctx = self._flatten_list(context)
77
- for prefix, spec in zip(flat_ctx, specs):
78
- leaf_flat_names = self._flat_kwarg_names(
79
- spec.children_specs, spec.context
80
- )
81
- if leaf_flat_names:
82
- flat_names.extend([f"{prefix}_{name}" for name in leaf_flat_names])
83
- else:
84
- flat_names.append(prefix)
85
-
86
- return flat_names
87
-
88
- def _flatten_list(self, l: List) -> List:
89
- flattened = []
90
- for item in l:
91
- if isinstance(item, list):
92
- flattened.extend(self._flatten_list(item))
93
- else:
94
- flattened.append(item)
95
- return flattened
96
-
97
63
  @property
98
64
  def flat_args(self) -> tuple[Any]:
99
65
  args, kwargs = self._normalized_sample_args_kwargs
@@ -174,7 +174,7 @@ class TestConvert(googletest.TestCase):
174
174
  self.assertTrue(result)
175
175
 
176
176
  def test_12_outputs_model(self):
177
- """Tests conversion of a model that returns multiple outputs."""
177
+ """Tests conversion of a model that returns more than 10 outputs."""
178
178
 
179
179
  class BasicAddModelWithMultipleOutputs(torch.nn.Module):
180
180
  """A model that returns multiple outputs."""
@@ -421,6 +421,37 @@ class TestConvert(googletest.TestCase):
421
421
  SampleModel(), args, kwargs, flat_inputs
422
422
  )
423
423
 
424
+ def test_convert_model_non_flat_output_dict(self):
425
+ """Test converting a model with non-flat output structure."""
426
+
427
+ class SampleModel(torch.nn.Module):
428
+
429
+ def forward(self, x, y, z):
430
+ return {"x": x, "y": TestContainer1(data_1=y, data_2=[y, z])}
431
+
432
+ args = (torch.randn(10, 10), torch.randn(10, 10), torch.randn(10, 10))
433
+ kwargs = dict()
434
+ flat_inputs = {
435
+ "args_0": args[0].numpy(),
436
+ "args_1": args[1].numpy(),
437
+ "args_2": args[2].numpy(),
438
+ }
439
+
440
+ edge_model = ai_edge_torch.convert(SampleModel().eval(), args, kwargs)
441
+ edge_output = edge_model(**flat_inputs)
442
+ np.testing.assert_almost_equal(edge_output["x"], args[0])
443
+ np.testing.assert_almost_equal(edge_output["y_data_1"], args[1])
444
+ np.testing.assert_almost_equal(edge_output["y_data_2_0"], args[1])
445
+ np.testing.assert_almost_equal(edge_output["y_data_2_1"], args[2])
446
+
447
+ interpreter = tf.lite.Interpreter(model_content=edge_model._tflite_model)
448
+ runner = interpreter.get_signature_runner("serving_default")
449
+ output_details = runner.get_output_details()
450
+ self.assertIn("x", output_details.keys())
451
+ self.assertIn("y_data_1", output_details.keys())
452
+ self.assertIn("y_data_2_0", output_details.keys())
453
+ self.assertIn("y_data_2_1", output_details.keys())
454
+
424
455
  def _compare_tflite_torch_args_kwargs(self, model, args, kwargs, flat_inputs):
425
456
  model.eval()
426
457
  edge_model = ai_edge_torch.convert(model, args, kwargs)
@@ -84,9 +84,6 @@ class TestConvertMultiSignature(googletest.TestCase):
84
84
  )
85
85
  )
86
86
 
87
- @googletest.skip(
88
- reason="Re-enable once the tflite converter issue is fixed.",
89
- )
90
87
  def test_convert_mobilenet_v2_signature_helper(self):
91
88
  """Tests the ai_edge_torch.signature helper function works."""
92
89
  torch_module = torchvision.models.mobilenet_v2().eval()
@@ -97,8 +94,8 @@ class TestConvertMultiSignature(googletest.TestCase):
97
94
  signature_name = "large_input"
98
95
 
99
96
  edge_model = ai_edge_torch.signature(
100
- signature_name, torch_module, args
101
- ).convert(torch_module, large_args)
97
+ signature_name, torch_module, large_args
98
+ ).convert(torch_module, args)
102
99
 
103
100
  self.assertTrue(
104
101
  model_coverage.compare_tflite_torch(edge_model, torch_module, args)
@@ -14,4 +14,5 @@
14
14
  # ==============================================================================
15
15
 
16
16
  from ._shim import *
17
+ from .common_utils import flat_dict_names
17
18
  from .test_utils import *
@@ -14,10 +14,63 @@
14
14
  # ==============================================================================
15
15
 
16
16
  import logging
17
+ from typing import List
17
18
 
18
19
  from ai_edge_torch._convert import signature as signature_module
19
20
  import tensorflow as tf
20
21
  import torch
22
+ import torch.utils._pytree as pytree
23
+
24
+
25
+ def _flatten_list(l: List) -> List:
26
+ flattened = []
27
+ for item in l:
28
+ if isinstance(item, list):
29
+ flattened.extend(_flatten_list(item))
30
+ else:
31
+ flattened.append(item)
32
+ return flattened
33
+
34
+
35
+ def flat_dict_names(
36
+ tree_spec: pytree.TreeSpec, context: pytree.Context
37
+ ) -> List[str]:
38
+ """Given a TreeSpec, this produces a list of names for the leaves.
39
+
40
+ The list of names embeddeds the structure of the tree_spec. A nesting level is
41
+ indicated by an `_` and elements in a list are indicated by `_<index>`.
42
+
43
+ TODO b/361601485: The flattening of names is not collision-free and needs to
44
+ be revised.
45
+
46
+ Args:
47
+ tree_spec: The TreeSpec to extract the names from.
48
+ context: The context used to check if the provided spec belongs to a
49
+ dictionary or a list.
50
+
51
+ Returns:
52
+ A list of flattened names.
53
+ """
54
+ flat_names = []
55
+ if context is None:
56
+ for i, spec in enumerate(tree_spec):
57
+ if spec.children_specs:
58
+ flat_names.extend([
59
+ f"{i}_{name}"
60
+ for name in flat_dict_names(spec.children_specs, spec.context)
61
+ ])
62
+ else:
63
+ flat_names.append(f"{i}")
64
+ else:
65
+ flat_ctx = _flatten_list(context)
66
+ for prefix, spec in zip(flat_ctx, tree_spec):
67
+ leaf_flat_names = flat_dict_names(spec.children_specs, spec.context)
68
+ if leaf_flat_names:
69
+ flat_names.extend([f"{prefix}_{name}" for name in leaf_flat_names])
70
+ else:
71
+ flat_names.append(prefix)
72
+
73
+ return flat_names
21
74
 
22
75
 
23
76
  def _torch_to_tf_variable(torch_tensor: torch.Tensor):
@@ -38,6 +38,7 @@ class MergedBundle:
38
38
  """A bundle of MlirLowered that has been merged."""
39
39
 
40
40
  bundles: list[odml_torch.export.MlirLowered]
41
+ exported_programs: list[torch.export.ExportedProgram]
41
42
  deduped_tf_vars: list[tf.Variable]
42
43
 
43
44
 
@@ -74,12 +75,16 @@ def _extract_call_args(
74
75
  return call_args
75
76
 
76
77
 
77
- def _wrap_as_tf_func(bundle, tf_state_dict):
78
+ def _wrap_as_tf_func(
79
+ bundle: export.MlirLowered,
80
+ tf_state_dict: Dict[str, tf.Variable],
81
+ exported_program: torch.export.ExportedProgram,
82
+ ):
78
83
  def inner(*args):
79
84
  t_outs = [torch_dtype_to_tf(sig.dtype) for sig in bundle.output_signature]
80
85
  s_outs = [_get_shape_with_dynamic(sig) for sig in bundle.output_signature]
81
86
  call_args = _extract_call_args(bundle, args, tf_state_dict)
82
- return tfxla.call_module(
87
+ call_module_return = tfxla.call_module(
83
88
  tuple(call_args),
84
89
  version=5,
85
90
  Tout=t_outs, # dtype information
@@ -87,6 +92,14 @@ def _wrap_as_tf_func(bundle, tf_state_dict):
87
92
  function_list=[],
88
93
  module=bundle.module_bytecode,
89
94
  )
95
+ spec = exported_program.call_spec.out_spec
96
+
97
+ # The module returning a flat array.
98
+ if not spec.context:
99
+ return call_module_return
100
+
101
+ flat_names = common_utils.flat_dict_names(spec.children_specs, spec.context)
102
+ return {name: value for name, value in zip(flat_names, call_module_return)}
90
103
 
91
104
  return inner
92
105
 
@@ -128,8 +141,10 @@ def merged_bundle_to_tfl_model(
128
141
  for bundle, sig in zip(merged_bundle.bundles, signatures)
129
142
  ]
130
143
  tf_functions = [
131
- _wrap_as_tf_func(bundle, tf_state_dict)
132
- for bundle in merged_bundle.bundles
144
+ _wrap_as_tf_func(bundle, tf_state_dict, ep)
145
+ for bundle, ep in zip(
146
+ merged_bundle.bundles, merged_bundle.exported_programs
147
+ )
133
148
  ]
134
149
 
135
150
  tf_module = tf.Module()
@@ -202,7 +217,9 @@ def merge_mlir_bundles(
202
217
  )
203
218
 
204
219
  merged_bundle = MergedBundle(
205
- bundles=bundles.copy(), deduped_tf_vars=deduped_vars
220
+ bundles=bundles.copy(),
221
+ exported_programs=exported_programs,
222
+ deduped_tf_vars=deduped_vars,
206
223
  )
207
224
  for bundle, signature in zip(merged_bundle.bundles, signatures):
208
225
  bundle.state_dict = state_dict
@@ -51,6 +51,7 @@ MlirBundle = stablehlo.StableHLOModelBundle
51
51
  class MergedBundle:
52
52
 
53
53
  bundle: stablehlo.StableHLOModelBundle
54
+ exported_programs: list[torch.export.ExportedProgram]
54
55
  deduped_tf_vars: list[tf.Variable]
55
56
 
56
57
 
@@ -58,9 +59,9 @@ def exported_program_to_mlir(
58
59
  exported_program: torch.export.ExportedProgram,
59
60
  sample_args: tuple[torch.Tensor],
60
61
  ) -> stablehlo.StableHLOModelBundle:
61
- # Setting export_weights to False here so that pytorch/xla avoids copying the weights
62
- # to a numpy array which would lead to memory bloat. This means that the state_dict
63
- # in the returned bundle is going to be empty.
62
+ # Setting export_weights to False here so that pytorch/xla avoids copying the
63
+ # weights to a numpy array which would lead to memory bloat. This means that
64
+ # the state_dict in the returned bundle is going to be empty.
64
65
  return stablehlo.exported_program_to_stablehlo(
65
66
  exported_program,
66
67
  stablehlo.StableHLOExportOptions(
@@ -96,7 +97,9 @@ def merge_mlir_bundles(
96
97
  bundle.additional_constants
97
98
  )
98
99
  return MergedBundle(
99
- bundle=new_shlo_model_bundle, deduped_tf_vars=deduped_tf_vars
100
+ bundle=new_shlo_model_bundle,
101
+ exported_programs=exported_programs,
102
+ deduped_tf_vars=deduped_tf_vars,
100
103
  )
101
104
 
102
105
 
@@ -108,7 +111,9 @@ def _get_shape_with_dynamic(signature: stablehlo.VariableSignature):
108
111
 
109
112
 
110
113
  def _wrap_as_tf_func(
111
- func: stablehlo.StableHLOFunc, bundle: stablehlo.StableHLOModelBundle
114
+ func: stablehlo.StableHLOFunc,
115
+ bundle: stablehlo.StableHLOModelBundle,
116
+ exported_program: torch.export.ExportedProgram,
112
117
  ):
113
118
  def inner(*args):
114
119
  type_info = [sig.dtype for sig in func.meta.output_signature]
@@ -116,7 +121,7 @@ def _wrap_as_tf_func(
116
121
  _get_shape_with_dynamic(sig) for sig in func.meta.output_signature
117
122
  ]
118
123
  call_args = stablehlo._extract_call_parameters(args, func.meta, bundle)
119
- return tfxla.call_module(
124
+ call_module_return = tfxla.call_module(
120
125
  tuple(call_args),
121
126
  version=5,
122
127
  Tout=type_info,
@@ -124,15 +129,16 @@ def _wrap_as_tf_func(
124
129
  function_list=[],
125
130
  module=func.bytecode,
126
131
  )
132
+ spec = exported_program.call_spec.out_spec
127
133
 
128
- return inner
134
+ # The module returning a flat array.
135
+ if not spec.context:
136
+ return call_module_return
129
137
 
138
+ flat_names = common_utils.flat_dict_names(spec.children_specs, spec.context)
139
+ return {name: value for name, value in zip(flat_names, call_module_return)}
130
140
 
131
- def _make_tf_function(
132
- bundle: stablehlo.StableHLOModelBundle = None,
133
- ):
134
- bundle = bundle if bundle is None else bundle
135
- return [_wrap_as_tf_func(func, bundle) for func in bundle.stablehlo_funcs]
141
+ return inner
136
142
 
137
143
 
138
144
  def _make_tf_signature(
@@ -205,7 +211,12 @@ def merged_bundle_to_tfl_model(
205
211
  for func, sig in zip(shlo_bundle.stablehlo_funcs, signatures)
206
212
  )
207
213
 
208
- tf_functions = _make_tf_function(shlo_bundle)
214
+ tf_functions = [
215
+ _wrap_as_tf_func(func, shlo_bundle, ep)
216
+ for func, ep in zip(
217
+ shlo_bundle.stablehlo_funcs, merged_bundle.exported_programs
218
+ )
219
+ ]
209
220
 
210
221
  tf_module.f = []
211
222
  for tf_sig, func in zip(tf_signatures, tf_functions):
ai_edge_torch/model.py CHANGED
@@ -21,6 +21,7 @@ PyTorch models can be converted to this representation through
21
21
  from __future__ import annotations
22
22
 
23
23
  import abc
24
+ import re
24
25
 
25
26
  import numpy.typing as npt
26
27
  import tensorflow as tf
@@ -115,11 +116,18 @@ class TfLiteModel(Model):
115
116
  inputs = {**inputs, **kwargs}
116
117
  outputs = runner(**inputs)
117
118
 
118
- return (
119
- outputs['output_0']
120
- if len(outputs) == 1
121
- else [outputs[f'output_{idx}'] for idx in range(len(outputs))]
122
- )
119
+ # When attempting to run a model, check if all the output tensors are named
120
+ # output_<number>. If so, assume the pytorch model returned a tuple and not
121
+ # a dictionary.
122
+ output_heuristic = lambda key: bool(re.search(r'output_\d+', key))
123
+ if all(output_heuristic(key) for key in outputs.keys()):
124
+ return (
125
+ outputs['output_0']
126
+ if len(outputs) == 1
127
+ else [outputs[f'output_{idx}'] for idx in range(len(outputs))]
128
+ )
129
+
130
+ return outputs
123
131
 
124
132
  def export(self, path: str) -> None:
125
133
  """Serializes the edge model to disk.
ai_edge_torch/version.py CHANGED
@@ -13,4 +13,4 @@
13
13
  # limitations under the License.
14
14
  # ==============================================================================
15
15
 
16
- __version__ = "0.3.0.dev20240822"
16
+ __version__ = "0.3.0.dev20240824"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ai-edge-torch-nightly
3
- Version: 0.3.0.dev20240822
3
+ Version: 0.3.0.dev20240824
4
4
  Summary: Supporting PyTorch models with the Google AI Edge TFLite runtime.
5
5
  Home-page: https://github.com/google-ai-edge/ai-edge-torch
6
6
  Keywords: On-Device ML,AI,Google,TFLite,PyTorch,LLMs,GenAI
@@ -1,13 +1,13 @@
1
1
  ai_edge_torch/__init__.py,sha256=48qP37uHT90YPs4eIUQxCiWVwqGEX3idCUs6mQKvX1U,1168
2
2
  ai_edge_torch/config.py,sha256=PCd9PVrbUNeVIUDFUCnW4goDWU4bjouK28yMYU6VOi0,877
3
3
  ai_edge_torch/conftest.py,sha256=r0GTrhMRhlmOGrrkvumHN8hkmyug6WvF60vWq8wRIBI,758
4
- ai_edge_torch/model.py,sha256=5DYNpFVwvI1w0JbAC1hn83NJVGS1WPX7n742419PMqs,4558
5
- ai_edge_torch/version.py,sha256=DjujCBc63P1BCTPwFWV93QP5GPGWMkSuuTWTRIg5YNA,706
4
+ ai_edge_torch/model.py,sha256=7tox6sdFIlCYPLDYpjFcD8cPTSivURCL_VV6-Dt5Sfc,4910
5
+ ai_edge_torch/version.py,sha256=TyHBQRxFHkzs8hKuWJbACXn7heTqYyvAVukdkUCeg5A,706
6
6
  ai_edge_torch/_convert/__init__.py,sha256=hHLluseD2R0Hh4W6XZRIXY_dRQeYudjsrKGf6LZz65g,671
7
7
  ai_edge_torch/_convert/conversion.py,sha256=kcv_QgNgeyDmrqwdzHicGNP68w6zF7GJg7YkMEIXp4Q,3759
8
8
  ai_edge_torch/_convert/conversion_utils.py,sha256=Sr8qXVcTwc-ZnZmK7yxVrIOOp1S_vNrwzC0zUvLTI2o,2160
9
9
  ai_edge_torch/_convert/converter.py,sha256=ezmaATnQi7NWDo37LUb-hEXtZSmT7_AT6vqXC6Fcq1o,8615
10
- ai_edge_torch/_convert/signature.py,sha256=zSSG4_u38pOw08pHgXssZDK_EanACDx7lcI-PzBgh5A,3313
10
+ ai_edge_torch/_convert/signature.py,sha256=rGpBNss3Y9FCCCcdBwDo16KqavJi8N5P0M_6Wnmoz6Y,2320
11
11
  ai_edge_torch/_convert/to_channel_last_io.py,sha256=_31phf7TYgZY2ftpNbrdlB1RhDium1lz_BXEQ6IsMFc,2893
12
12
  ai_edge_torch/_convert/fx_passes/__init__.py,sha256=hVuNftOcZIpwkUcPab44mhFmi9Z1f1REV5o3j39Sf-w,2818
13
13
  ai_edge_torch/_convert/fx_passes/_pass_base.py,sha256=WVYZuocpygHAzk9u1GNoGowAIOHTlJXyA_NklmYkRms,1672
@@ -26,9 +26,9 @@ ai_edge_torch/_convert/fx_passes/optimize_layout_transposes_pass/layout_partitio
26
26
  ai_edge_torch/_convert/fx_passes/optimize_layout_transposes_pass/layout_partitioners/greedy.py,sha256=L_x8BrF7UDah-SYl-pG11I6CIckdU9kBTUHcmwW4cts,2420
27
27
  ai_edge_torch/_convert/fx_passes/optimize_layout_transposes_pass/layout_partitioners/min_cut.py,sha256=mzfL9cf0qBnpmxM_OlMQFvQsEZV2B_Mia9yEJV4J7rI,7135
28
28
  ai_edge_torch/_convert/test/__init__.py,sha256=hHLluseD2R0Hh4W6XZRIXY_dRQeYudjsrKGf6LZz65g,671
29
- ai_edge_torch/_convert/test/test_convert.py,sha256=y0ZRivdglGx217rnacze8N6nd7aafk28NkbBFUSa9DQ,13121
29
+ ai_edge_torch/_convert/test/test_convert.py,sha256=tvj7fWHHmA9ddtcu-Fp3lJ6emaAQMrtK9wCG0cjgRAo,14413
30
30
  ai_edge_torch/_convert/test/test_convert_composites.py,sha256=CBiOqq-m7QT2ggBI1jBl9MkTIT5d0nK1tA0BUga0LGs,7994
31
- ai_edge_torch/_convert/test/test_convert_multisig.py,sha256=cqXJK1YALC1huw87HJVjrdc9xe0LaahRY8tVm_RsKg4,4817
31
+ ai_edge_torch/_convert/test/test_convert_multisig.py,sha256=0xIkahEU26Qx9GGn6Dm05ObIqJvsCdh692dREcaHEdE,4725
32
32
  ai_edge_torch/_convert/test/test_to_channel_last_io.py,sha256=jLAmyHw5llT2ff8qA8mem3eVN57e_o5EpBnW72ZtP2I,3026
33
33
  ai_edge_torch/debug/__init__.py,sha256=N05Mmvi41KgSuK0JhuMejERESgP8QekiGdp9_PEyuKU,742
34
34
  ai_edge_torch/debug/culprit.py,sha256=7UYVpVWpiCXbMAyThVtHt_kc_poT7sCTh5UUPvcycgk,14832
@@ -124,12 +124,12 @@ ai_edge_torch/hlfb/mark_pattern/pattern.py,sha256=uiYRfzD1T8deCEAGfdAFusRbI41m14
124
124
  ai_edge_torch/hlfb/test/__init__.py,sha256=hHLluseD2R0Hh4W6XZRIXY_dRQeYudjsrKGf6LZz65g,671
125
125
  ai_edge_torch/hlfb/test/test_mark_pattern.py,sha256=e53YNSO2w7Sd9Y717jAr6WKjnXq34Tx_52hXRGtGs3A,4833
126
126
  ai_edge_torch/hlfb/test/test_stablehlo_composite_builder.py,sha256=7Qbba7GJCBc-J1TUwWIvrpBK0Hwza9nift7sKpW2YVE,8449
127
- ai_edge_torch/lowertools/__init__.py,sha256=uKGibEN7n4Tqbe0HiXOEEXWmPL9AUmh34xaYA9yx2sg,719
127
+ ai_edge_torch/lowertools/__init__.py,sha256=A8WBXvWtuFYYWtNTqPD7waVntLaSVAnSMwx5ugjZBIw,761
128
128
  ai_edge_torch/lowertools/_shim.py,sha256=ilL7x1ebUBj1clg7bagrX4y_nVSHiGrvDrOVfuTeenE,3039
129
- ai_edge_torch/lowertools/common_utils.py,sha256=emClsZ_MBlbLG_0BBtyLpkdz4dMWp6SyrNioygRBylk,2973
130
- ai_edge_torch/lowertools/odml_torch_utils.py,sha256=32cak8uiXFIVdkaYFhIW1fWG4NzLrYq-w8xK0pNkhYc,6547
129
+ ai_edge_torch/lowertools/common_utils.py,sha256=Z7p-ivOHtddktpnHrlDm_dSoTxJOdEjFXIGQbzjgwQo,4504
130
+ ai_edge_torch/lowertools/odml_torch_utils.py,sha256=EA2ylE4abCyC1G3lYuNouPGx0lmwtIZe7c42dtX0-3g,7146
131
131
  ai_edge_torch/lowertools/test_utils.py,sha256=vsjaX3Ix2U1163jVUNSJgK9io2WNUtJjRvNFE9DrqF4,1932
132
- ai_edge_torch/lowertools/torch_xla_utils.py,sha256=-g0NldtVOTCQtX3V2XEjuCQO_I52nSNQlu0r_rIS2IE,8635
132
+ ai_edge_torch/lowertools/torch_xla_utils.py,sha256=-SRm9YNsIGsaVd5Cyp2PP-tdLBJH8EDoMFAa2y89a1w,9043
133
133
  ai_edge_torch/quantize/__init__.py,sha256=aB5dXot04bqyUhpsDFvxt9CIi15QAC4euvqOndJ0XLU,714
134
134
  ai_edge_torch/quantize/pt2e_quantizer.py,sha256=CKIEhs9jCcna64qj1jFH9zEbMbRdyeGV_TmSqEBPjes,15741
135
135
  ai_edge_torch/quantize/pt2e_quantizer_utils.py,sha256=eARD1LxLi5m7Z0n_psAkeX_AtUp4fNkE--oECBfivv4,36208
@@ -137,8 +137,8 @@ ai_edge_torch/quantize/quant_config.py,sha256=U0KisSW-uZkoMJcy-ZP9W57p3tsa594fr9
137
137
  ai_edge_torch/testing/__init__.py,sha256=hHLluseD2R0Hh4W6XZRIXY_dRQeYudjsrKGf6LZz65g,671
138
138
  ai_edge_torch/testing/model_coverage/__init__.py,sha256=5P8J6Zk5YYtDvTBucFvB9NGSRI7Gw_24WnrbhXgycEE,765
139
139
  ai_edge_torch/testing/model_coverage/model_coverage.py,sha256=UPB448aMDUyC0HNYVqio2rcJPnDN0tBQMP08J6vPYew,4718
140
- ai_edge_torch_nightly-0.3.0.dev20240822.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
141
- ai_edge_torch_nightly-0.3.0.dev20240822.dist-info/METADATA,sha256=U8torMOW4U2TfZG7j8mwQ3egNgda43VRAtleRwZmyKw,1885
142
- ai_edge_torch_nightly-0.3.0.dev20240822.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
143
- ai_edge_torch_nightly-0.3.0.dev20240822.dist-info/top_level.txt,sha256=5KXRaF2hwkApYxf7Y8y_tVb9aulGTlbOoNdbx1aKRkE,14
144
- ai_edge_torch_nightly-0.3.0.dev20240822.dist-info/RECORD,,
140
+ ai_edge_torch_nightly-0.3.0.dev20240824.dist-info/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
141
+ ai_edge_torch_nightly-0.3.0.dev20240824.dist-info/METADATA,sha256=WpWeYJ2cvcf4g6D4zoXMZeOcEFZLCGtSlByRYn2HWCU,1885
142
+ ai_edge_torch_nightly-0.3.0.dev20240824.dist-info/WHEEL,sha256=eOLhNAGa2EW3wWl_TU484h7q1UNgy0JXjjoqKoxAAQc,92
143
+ ai_edge_torch_nightly-0.3.0.dev20240824.dist-info/top_level.txt,sha256=5KXRaF2hwkApYxf7Y8y_tVb9aulGTlbOoNdbx1aKRkE,14
144
+ ai_edge_torch_nightly-0.3.0.dev20240824.dist-info/RECORD,,