1616 DataEntry ,
1717 DataPayload ,
1818 DataSerializer ,
19- TensorEntry ,
2019 TensorLayout ,
2120)
2221
@@ -29,22 +28,22 @@ def serialize_for_executorch(
2928 emitter_output : EmitterOutput ,
3029 config : ExecutorchBackendConfig ,
3130 data_serializer : DataSerializer ,
32- named_data : Optional [NamedDataStoreOutput ] = None ,
31+ named_data_store : Optional [NamedDataStoreOutput ] = None ,
3332) -> Tuple [Cord , Dict [str , Cord ]]:
3433 """Serialize the output from Emitter into ExecuTorch artifacts; PTE and PTD files."""
3534
3635 # Serialize PTE file.
3736 pte_named_data = None
3837 if (
39- named_data is not None
40- and len (named_data .buffers ) > 0
41- and len (named_data .pte_data ) > 0
38+ named_data_store is not None
39+ and len (named_data_store .buffers ) > 0
40+ and len (named_data_store .pte_data ) > 0
4241 ):
4342 # Create a separate NamedDataStoreOutput with only pte_data; exclude
4443 # external_data, which shouldn't be serialized with the PTE file.
4544 pte_named_data = NamedDataStoreOutput (
46- buffers = named_data .buffers ,
47- pte_data = named_data .pte_data ,
45+ buffers = named_data_store .buffers ,
46+ pte_data = named_data_store .pte_data ,
4847 external_data = {},
4948 )
5049 pte : Cord = _serialize_pte_binary (
@@ -72,22 +71,23 @@ def serialize_for_executorch(
7271 and tensor .extra_tensor_info .location is TensorDataLocation .EXTERNAL
7372 ):
7473 fqn_to_tensor_layout [
74+ # pyre-ignore Undefined attribute [16]: `Optional` has no attribute `fully_qualified_name`
7575 tensor .extra_tensor_info .fully_qualified_name
7676 ] = TensorLayout (tensor .scalar_type , tensor .sizes , tensor .dim_order )
7777
7878 if len (fqn_to_tensor_layout ) == 0 and (
79- named_data is None or len (named_data .external_data ) == 0
79+ named_data_store is None or len (named_data_store .external_data ) == 0
8080 ):
8181 return pte , ptd_files
8282
8383 # Consolidate tensors and opaque data with the same external tag so they
8484 # can be saved to the same PTD.
8585 all_external_tags : Set [str ] = set ()
86- if named_data is not None and len (named_data .external_data ) > 0 :
86+ if named_data_store is not None and len (named_data_store .external_data ) > 0 :
8787 assert (
88- len (named_data .buffers ) > 0
88+ len (named_data_store .buffers ) > 0
8989 ), "External data exists, but there are no buffers provided."
90- all_external_tags = set (named_data .external_data .keys ())
90+ all_external_tags = set (named_data_store .external_data .keys ())
9191
9292 if len (fqn_to_tensor_layout ) > 0 :
9393 # emitter_output.external_constant_map contains the mapping from
@@ -103,35 +103,38 @@ def serialize_for_executorch(
103103
104104 for tag in all_external_tags :
105105 buffers = []
106- fqn_to_tensor_entry : Dict [str , TensorEntry ] = {}
106+ key_to_data_entry : Dict [str , DataEntry ] = {}
107107 # pyre-ignore[16]: Undefined attribute: `Optional` has no attribute `get`.
108108 fqn_to_index = emitter_output .external_constant_map .get (tag , {})
109- # Create a TensorEntry for each external tensor.
109+ # Create a DataEntry for each external tensor.
110110 for fqn , index in fqn_to_index .items ():
111111 assert fqn in fqn_to_tensor_layout
112- fqn_to_tensor_entry [fqn ] = TensorEntry (
112+ assert fqn not in key_to_data_entry # fqn must be unique
113+ key_to_data_entry [fqn ] = DataEntry (
113114 buffer_index = len (buffers ),
114- layout = fqn_to_tensor_layout [fqn ],
115+ alignment = config .constant_tensor_alignment ,
116+ tensor_layout = fqn_to_tensor_layout [fqn ],
115117 )
116118 buffers .append (emitter_output .external_constant_buffer [index ])
117119
118120 # Extract external data.
119- key_to_data : Dict [str , DataEntry ] = {}
120121 # pyre-ignore[16]: Undefined attribute: `Optional` has no attribute `get`.
121- key_to_buffer_index = named_data .external_data .get (tag , {})
122+ key_to_buffer_index = named_data_store .external_data .get (tag , {})
122123 for key , index in key_to_buffer_index .items ():
123- # pyre-ignore[16]: Undefined attribute: `Optional` has no attribute `buffers`.
124- key_to_data [key ] = DataEntry (
125- len (buffers ), named_data .buffers [index ].alignment
124+ assert key not in key_to_data_entry # key must be unique
125+ key_to_data_entry [key ] = DataEntry (
126+ buffer_index = len (buffers ),
127+ # pyre-ignore[16]: Undefined attribute: `Optional` has no attribute `buffers`.
128+ alignment = named_data_store .buffers [index ].alignment ,
129+ tensor_layout = None ,
126130 )
127- buffers .append (named_data .buffers [index ].buffer )
131+ buffers .append (named_data_store .buffers [index ].buffer )
128132
129133 # Serialize into PTD file.
130134 ptd_files [tag ] = data_serializer .serialize (
131135 DataPayload (
132136 buffers = buffers ,
133- fqn_to_tensor = fqn_to_tensor_entry ,
134- key_to_data = key_to_data ,
137+ named_data = key_to_data_entry ,
135138 )
136139 )
137140
0 commit comments