2121 _program_json_to_flatbuffer ,
2222)
2323
24+ from executorch .exir ._serialize .padding import aligned_size , pad_to , padding_required
25+
2426from executorch .exir .schema import (
2527 BackendDelegateDataReference ,
2628 BackendDelegateInlineData ,
@@ -50,19 +52,6 @@ def _json_to_program(program_json: bytes) -> Program:
5052 return _json_to_dataclass (json .loads (program_json ), cls = Program )
5153
5254
53- def _padding_required (offset : int , alignment : int ) -> int :
54- """Returns the padding required to align `offset` to `alignment`."""
55- remainder : int = offset % alignment
56- if remainder != 0 :
57- return alignment - remainder
58- return 0
59-
60-
61- def _aligned_size (input_size : int , alignment : int ) -> int :
62- """Returns input_size padded up to the next whole multiple of alignment."""
63- return input_size + _padding_required (input_size , alignment )
64-
65-
6655def _insert_flatbuffer_header (
6756 flatbuffer_data : bytes , magic_regex : str , header_data : bytes
6857) -> bytes :
@@ -211,25 +200,6 @@ def to_bytes(self) -> bytes:
211200 return data
212201
213202
214- def _pad_to (data : bytes , length : int ) -> bytes :
215- """Returns the input followed by enough zero bytes to become the requested length.
216-
217- Args:
218- data: The data to pad.
219- length: The length of the returned data.
220- Returns:
221- The padded data.
222- Raises:
223- ValueError: If the requested length is less than the input length.
224- """
225- if length < len (data ):
226- raise ValueError (f"Data length { len (data )} > padded length { length } " )
227- if length > len (data ):
228- data = data + b"\x00 " * (length - len (data ))
229- assert len (data ) == length
230- return data
231-
232-
233203def _get_extended_header (program_data : bytes ) -> Optional [_ExtendedHeader ]:
234204 """Returns the extended header of the program data, if present and valid."""
235205 try :
@@ -330,7 +300,7 @@ def _extract_constant_segment(
330300 constant_segment_data .append (buffer .storage )
331301 buffer_length = len (buffer .storage )
332302 pad_length = (
333- _padding_required (buffer_length , tensor_alignment )
303+ padding_required (buffer_length , tensor_alignment )
334304 if tensor_alignment is not None
335305 else 0
336306 )
@@ -432,11 +402,11 @@ def serialize_pte_binary(
432402 )
433403 program .segments .append (
434404 DataSegment (
435- offset = _aligned_size (prev_end , segment_alignment ), size = len (data )
405+ offset = aligned_size (prev_end , segment_alignment ), size = len (data )
436406 )
437407 )
438408 # Add to aggregate segments cord with padding.
439- padding_length = _padding_required (len (segments_data ), segment_alignment )
409+ padding_length = padding_required (len (segments_data ), segment_alignment )
440410 if padding_length > 0 :
441411 segments_data .append (b"\x00 " * padding_length )
442412 segments_data .append (data )
@@ -454,15 +424,15 @@ def serialize_pte_binary(
454424
455425 # Size of the header to insert. Its size is padded to the largest
456426 # force_align value present in the schema.
457- padded_header_length : int = _aligned_size (
427+ padded_header_length : int = aligned_size (
458428 input_size = _ExtendedHeader .EXPECTED_LENGTH ,
459429 alignment = result .max_alignment ,
460430 )
461431 # Size of the program with the header inserted.
462432 program_size : int = padded_header_length + len (result .data )
463433 # Offset to the first segment, or zero if there are no segments.
464434 segment_base_offset : int = (
465- _aligned_size (input_size = program_size , alignment = segment_alignment )
435+ aligned_size (input_size = program_size , alignment = segment_alignment )
466436 if len (segments_data ) > 0
467437 else 0
468438 )
@@ -471,7 +441,7 @@ def serialize_pte_binary(
471441 header_data : bytes = _ExtendedHeader (
472442 program_size = program_size , segment_base_offset = segment_base_offset
473443 ).to_bytes ()
474- header_data = _pad_to (header_data , padded_header_length )
444+ header_data = pad_to (header_data , padded_header_length )
475445
476446 # Insert the header into the flatbuffer data.
477447 program_data : bytes = _insert_flatbuffer_header (
@@ -496,7 +466,7 @@ def serialize_pte_binary(
496466 # - segments data (optional); aligned to segment_alignment.
497467 pte_data = Cord (program_data )
498468 if len (segments_data ) > 0 :
499- padding_length = _padding_required (len (pte_data ), segment_alignment )
469+ padding_length = padding_required (len (pte_data ), segment_alignment )
500470 pte_data .append (b"\x00 " * padding_length )
501471 # The first segment after program data should start at the segment base offset.
502472 assert (
0 commit comments