9
9
from typing import Dict , List , Optional , Sequence , Type , Union
10
10
11
11
import executorch .devtools .bundled_program .schema as bp_schema
12
+ from pyre_extensions import none_throws
12
13
13
14
import executorch .exir .schema as core_schema
14
15
19
20
from executorch .devtools .bundled_program .version import BUNDLED_PROGRAM_SCHEMA_VERSION
20
21
21
22
from 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
23
24
from executorch .exir .tensor import get_scalar_type , scalar_type_enum , TensorSpec
24
25
25
26
# pyre-ignore
@@ -43,23 +44,35 @@ class BundledProgram:
43
44
44
45
def __init__ (
45
46
self ,
46
- executorch_program : Union [
47
+ executorch_program : Optional [ Union [
47
48
ExecutorchProgram ,
48
49
ExecutorchProgramManager ,
49
- ],
50
+ ]] ,
50
51
method_test_suites : Sequence [MethodTestSuite ],
52
+ pte_file_path : Optional [str ] = None ,
51
53
):
52
54
"""Create BundledProgram by bundling the given program and method_test_suites together.
53
55
54
56
Args:
55
57
executorch_program: The program to be bundled.
56
58
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.
57
60
"""
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" )
58
66
59
67
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
61
75
62
- self .executorch_program = executorch_program
63
76
self .method_test_suites = method_test_suites
64
77
65
78
# This is the cache for bundled program in schema type.
@@ -72,7 +85,13 @@ def serialize_to_schema(self) -> bp_schema.BundledProgram:
72
85
if self ._bundled_program_in_schema is not None :
73
86
return self ._bundled_program_in_schema
74
87
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
+
76
95
bundled_method_test_suites : List [bp_schema .BundledMethodTestSuite ] = []
77
96
78
97
# Emit data and metadata of bundled tensor
0 commit comments