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
2324from executorch .exir .tensor import get_scalar_type , scalar_type_enum , TensorSpec
2425
2526# pyre-ignore
@@ -43,23 +44,35 @@ class BundledProgram:
4344
4445 def __init__ (
4546 self ,
46- executorch_program : Union [
47+ executorch_program : Optional [ Union [
4748 ExecutorchProgram ,
4849 ExecutorchProgramManager ,
49- ],
50+ ]] ,
5051 method_test_suites : Sequence [MethodTestSuite ],
52+ pte_file_path : Optional [str ] = None ,
5153 ):
5254 """Create BundledProgram by bundling the given program and method_test_suites together.
5355
5456 Args:
5557 executorch_program: The program to be bundled.
5658 method_test_suites: The testcases for certain methods to be bundled.
59+ pte_file_path: The path to pte file to deserialize program if executorch_program is not provided.
5760 """
61+ if not executorch_program and not pte_file_path :
62+ raise RuntimeError ("Either executorch_program or pte_file_path must be provided" )
63+
64+ if executorch_program and pte_file_path :
65+ raise RuntimeError ("Only one of executorch_program or pte_file_path can be used" )
5866
5967 method_test_suites = sorted (method_test_suites , key = lambda x : x .method_name )
60- self ._assert_valid_bundle (executorch_program , method_test_suites )
68+ if executorch_program :
69+ self ._assert_valid_bundle (executorch_program , method_test_suites )
70+ self .executorch_program : Optional [Union [
71+ ExecutorchProgram ,
72+ ExecutorchProgramManager ,
73+ ]] = executorch_program
74+ self ._pte_file_path : Optional [str ] = pte_file_path
6175
62- self .executorch_program = executorch_program
6376 self .method_test_suites = method_test_suites
6477
6578 # This is the cache for bundled program in schema type.
@@ -72,7 +85,13 @@ def serialize_to_schema(self) -> bp_schema.BundledProgram:
7285 if self ._bundled_program_in_schema is not None :
7386 return self ._bundled_program_in_schema
7487
75- program = self ._extract_program (self .executorch_program )
88+ if self .executorch_program :
89+ program = self ._extract_program (self .executorch_program )
90+ else :
91+ with open (none_throws (self ._pte_file_path ), "rb" ) as f :
92+ p_bytes = f .read ()
93+ program = _deserialize_pte_binary (p_bytes )
94+
7695 bundled_method_test_suites : List [bp_schema .BundledMethodTestSuite ] = []
7796
7897 # Emit data and metadata of bundled tensor
0 commit comments