99from typing import Dict , List , Optional , Sequence , Type , Union
1010
1111import executorch .devtools .bundled_program .schema as bp_schema
12+ from pyre_extensions import none_throws
1213
1314import executorch .exir .schema as core_schema
1415
1920from executorch .devtools .bundled_program .version import BUNDLED_PROGRAM_SCHEMA_VERSION
2021
2122from executorch .exir import ExecutorchProgram , ExecutorchProgramManager
22- from executorch .exir ._serialize import _serialize_pte_binary
23+ from executorch .exir ._serialize import _deserialize_pte_binary , _serialize_pte_binary
24+ from executorch .exir .schema import Program
2325from executorch .exir .tensor import get_scalar_type , scalar_type_enum , TensorSpec
2426
2527# pyre-ignore
@@ -43,23 +45,31 @@ class BundledProgram:
4345
4446 def __init__ (
4547 self ,
46- executorch_program : Union [
48+ executorch_program : Optional [ Union [
4749 ExecutorchProgram ,
4850 ExecutorchProgramManager ,
49- ],
51+ ]] ,
5052 method_test_suites : Sequence [MethodTestSuite ],
53+ pte_file_path : Optional [str ] = None ,
5154 ):
5255 """Create BundledProgram by bundling the given program and method_test_suites together.
5356
5457 Args:
5558 executorch_program: The program to be bundled.
5659 method_test_suites: The testcases for certain methods to be bundled.
5760 """
61+ if not executorch_program and not pte_file_path :
62+ raise RuntimeError ("Either executorch_program or pte_file_path must be provided" )
5863
5964 method_test_suites = sorted (method_test_suites , key = lambda x : x .method_name )
60- self ._assert_valid_bundle (executorch_program , method_test_suites )
65+ if executorch_program :
66+ self ._assert_valid_bundle (executorch_program , method_test_suites )
67+ self .executorch_program : Optional [Union [
68+ ExecutorchProgram ,
69+ ExecutorchProgramManager ,
70+ ]] = executorch_program
71+ self ._pte_file_path : Optional [str ] = pte_file_path
6172
62- self .executorch_program = executorch_program
6373 self .method_test_suites = method_test_suites
6474
6575 # This is the cache for bundled program in schema type.
@@ -72,7 +82,13 @@ def serialize_to_schema(self) -> bp_schema.BundledProgram:
7282 if self ._bundled_program_in_schema is not None :
7383 return self ._bundled_program_in_schema
7484
75- program = self ._extract_program (self .executorch_program )
85+ if self .executorch_program :
86+ program = self ._extract_program (self .executorch_program )
87+ else :
88+ with open (none_throws (self ._pte_file_path ), "rb" ) as f :
89+ p_bytes = f .read ()
90+ program = _deserialize_pte_binary (p_bytes )
91+
7692 bundled_method_test_suites : List [bp_schema .BundledMethodTestSuite ] = []
7793
7894 # Emit data and metadata of bundled tensor
0 commit comments