xref: /aosp_15_r20/external/executorch/extension/pybindings/pybindings.pyi (revision 523fa7a60841cd1ecfb9cc4201f1ca8b03ed023a)
1*523fa7a6SAndroid Build Coastguard Worker# Copyright (c) Meta Platforms, Inc. and affiliates.
2*523fa7a6SAndroid Build Coastguard Worker# All rights reserved.
3*523fa7a6SAndroid Build Coastguard Worker#
4*523fa7a6SAndroid Build Coastguard Worker# This source code is licensed under the BSD-style license found in the
5*523fa7a6SAndroid Build Coastguard Worker# LICENSE file in the root directory of this source tree.
6*523fa7a6SAndroid Build Coastguard Worker
7*523fa7a6SAndroid Build Coastguard Worker# pyre-strict
8*523fa7a6SAndroid Build Coastguard Workerfrom __future__ import annotations
9*523fa7a6SAndroid Build Coastguard Worker
10*523fa7a6SAndroid Build Coastguard Workerfrom typing import Any, Dict, Enum, List, Optional, Sequence, Tuple
11*523fa7a6SAndroid Build Coastguard Worker
12*523fa7a6SAndroid Build Coastguard Workerfrom executorch.exir._warnings import experimental
13*523fa7a6SAndroid Build Coastguard Worker
14*523fa7a6SAndroid Build Coastguard Worker@experimental("This API is experimental and subject to change without notice.")
15*523fa7a6SAndroid Build Coastguard Workerclass Verification(Enum):
16*523fa7a6SAndroid Build Coastguard Worker    """Verification maps C++ Program::Verification to Python.
17*523fa7a6SAndroid Build Coastguard Worker
18*523fa7a6SAndroid Build Coastguard Worker    .. warning::
19*523fa7a6SAndroid Build Coastguard Worker
20*523fa7a6SAndroid Build Coastguard Worker        This API is experimental and subject to change without notice.
21*523fa7a6SAndroid Build Coastguard Worker    """
22*523fa7a6SAndroid Build Coastguard Worker
23*523fa7a6SAndroid Build Coastguard Worker    Minimal: ...
24*523fa7a6SAndroid Build Coastguard Worker    InternalConsistency: ...
25*523fa7a6SAndroid Build Coastguard Worker
26*523fa7a6SAndroid Build Coastguard Worker@experimental("This API is experimental and subject to change without notice.")
27*523fa7a6SAndroid Build Coastguard Workerclass ExecuTorchModule:
28*523fa7a6SAndroid Build Coastguard Worker    """ExecuTorchModule is a Python wrapper around a C++ ExecuTorch program.
29*523fa7a6SAndroid Build Coastguard Worker
30*523fa7a6SAndroid Build Coastguard Worker    .. warning::
31*523fa7a6SAndroid Build Coastguard Worker
32*523fa7a6SAndroid Build Coastguard Worker        This API is experimental and subject to change without notice.
33*523fa7a6SAndroid Build Coastguard Worker    """
34*523fa7a6SAndroid Build Coastguard Worker
35*523fa7a6SAndroid Build Coastguard Worker    # pyre-ignore[2, 3]: "Any" in parameter and return type annotations.
36*523fa7a6SAndroid Build Coastguard Worker    def __call__(self, inputs: Any, clone_outputs: bool = True) -> List[Any]: ...
37*523fa7a6SAndroid Build Coastguard Worker    # pyre-ignore[2, 3]: "Any" in parameter and return type annotations.
38*523fa7a6SAndroid Build Coastguard Worker    def run_method(
39*523fa7a6SAndroid Build Coastguard Worker        self,
40*523fa7a6SAndroid Build Coastguard Worker        method_name: str,
41*523fa7a6SAndroid Build Coastguard Worker        inputs: Sequence[Any],  # pyre-ignore[2]: "Any" in parameter type annotations.
42*523fa7a6SAndroid Build Coastguard Worker        clone_outputs: bool = True,
43*523fa7a6SAndroid Build Coastguard Worker    ) -> List[Any]: ...
44*523fa7a6SAndroid Build Coastguard Worker    # pyre-ignore[2, 3]: "Any" in parameter and return type annotations.
45*523fa7a6SAndroid Build Coastguard Worker    def forward(
46*523fa7a6SAndroid Build Coastguard Worker        self,
47*523fa7a6SAndroid Build Coastguard Worker        inputs: Sequence[Any],  # pyre-ignore[2]: "Any" in parameter type annotations.
48*523fa7a6SAndroid Build Coastguard Worker        clone_outputs: bool = True,
49*523fa7a6SAndroid Build Coastguard Worker    ) -> List[Any]: ...
50*523fa7a6SAndroid Build Coastguard Worker    # pyre-ignore[3]: "Any" in return type annotations.
51*523fa7a6SAndroid Build Coastguard Worker    def plan_execute(self) -> List[Any]: ...
52*523fa7a6SAndroid Build Coastguard Worker    # Bundled program methods.
53*523fa7a6SAndroid Build Coastguard Worker    def load_bundled_input(
54*523fa7a6SAndroid Build Coastguard Worker        self, bundle: BundledModule, method_name: str, testset_idx: int
55*523fa7a6SAndroid Build Coastguard Worker    ) -> None: ...
56*523fa7a6SAndroid Build Coastguard Worker    # pyre-ignore[3]: "Any" in return type annotations.
57*523fa7a6SAndroid Build Coastguard Worker    def verify_result_with_bundled_expected_output(
58*523fa7a6SAndroid Build Coastguard Worker        self,
59*523fa7a6SAndroid Build Coastguard Worker        bundle: BundledModule,
60*523fa7a6SAndroid Build Coastguard Worker        method_name: str,
61*523fa7a6SAndroid Build Coastguard Worker        testset_idx: int,
62*523fa7a6SAndroid Build Coastguard Worker        rtol: float = 1e-5,
63*523fa7a6SAndroid Build Coastguard Worker        atol: float = 1e-8,
64*523fa7a6SAndroid Build Coastguard Worker    ) -> List[Any]: ...
65*523fa7a6SAndroid Build Coastguard Worker    def has_etdump(self) -> bool: ...
66*523fa7a6SAndroid Build Coastguard Worker    def write_etdump_result_to_file(
67*523fa7a6SAndroid Build Coastguard Worker        self, path: str, debug_buffer_path: Optional[str] = None
68*523fa7a6SAndroid Build Coastguard Worker    ) -> None: ...
69*523fa7a6SAndroid Build Coastguard Worker    def method_meta(self, method_name: str) -> MethodMeta: ...
70*523fa7a6SAndroid Build Coastguard Worker    def method_names(self) -> List[str]: ...
71*523fa7a6SAndroid Build Coastguard Worker
72*523fa7a6SAndroid Build Coastguard Worker@experimental("This API is experimental and subject to change without notice.")
73*523fa7a6SAndroid Build Coastguard Workerclass BundledModule:
74*523fa7a6SAndroid Build Coastguard Worker    """
75*523fa7a6SAndroid Build Coastguard Worker    .. warning::
76*523fa7a6SAndroid Build Coastguard Worker
77*523fa7a6SAndroid Build Coastguard Worker        This API is experimental and subject to change without notice.
78*523fa7a6SAndroid Build Coastguard Worker    """
79*523fa7a6SAndroid Build Coastguard Worker
80*523fa7a6SAndroid Build Coastguard Worker    ...
81*523fa7a6SAndroid Build Coastguard Worker
82*523fa7a6SAndroid Build Coastguard Worker@experimental("This API is experimental and subject to change without notice.")
83*523fa7a6SAndroid Build Coastguard Workerclass TensorInfo:
84*523fa7a6SAndroid Build Coastguard Worker    """Metadata about a tensor such as the shape and dtype.
85*523fa7a6SAndroid Build Coastguard Worker
86*523fa7a6SAndroid Build Coastguard Worker    .. warning::
87*523fa7a6SAndroid Build Coastguard Worker
88*523fa7a6SAndroid Build Coastguard Worker        This API is experimental and subject to change without notice.
89*523fa7a6SAndroid Build Coastguard Worker    """
90*523fa7a6SAndroid Build Coastguard Worker
91*523fa7a6SAndroid Build Coastguard Worker    def sizes(self) -> Tuple[int, ...]:
92*523fa7a6SAndroid Build Coastguard Worker        """Shape of the tensor as a tuple"""
93*523fa7a6SAndroid Build Coastguard Worker        ...
94*523fa7a6SAndroid Build Coastguard Worker
95*523fa7a6SAndroid Build Coastguard Worker    def dtype(self) -> int:
96*523fa7a6SAndroid Build Coastguard Worker        """The data type of the elements inside the tensor.
97*523fa7a6SAndroid Build Coastguard Worker        See documentation for ScalarType in executorch/runtime/core/portable_type/scalar_type.h
98*523fa7a6SAndroid Build Coastguard Worker        for the values these integers can take."""
99*523fa7a6SAndroid Build Coastguard Worker        ...
100*523fa7a6SAndroid Build Coastguard Worker
101*523fa7a6SAndroid Build Coastguard Worker    def is_memory_planned(self) -> bool:
102*523fa7a6SAndroid Build Coastguard Worker        """True if the tensor is already memory planned, meaning no allocation
103*523fa7a6SAndroid Build Coastguard Worker        needs to be provided. False otherwise"""
104*523fa7a6SAndroid Build Coastguard Worker        ...
105*523fa7a6SAndroid Build Coastguard Worker
106*523fa7a6SAndroid Build Coastguard Worker    def nbytes(self) -> int:
107*523fa7a6SAndroid Build Coastguard Worker        """Number of bytes in the tensor. Not the same as numel if the dtype is
108*523fa7a6SAndroid Build Coastguard Worker        larger than 1 byte wide"""
109*523fa7a6SAndroid Build Coastguard Worker        ...
110*523fa7a6SAndroid Build Coastguard Worker
111*523fa7a6SAndroid Build Coastguard Worker    def __repr__(self) -> str: ...
112*523fa7a6SAndroid Build Coastguard Worker
113*523fa7a6SAndroid Build Coastguard Worker@experimental("This API is experimental and subject to change without notice.")
114*523fa7a6SAndroid Build Coastguard Workerclass MethodMeta:
115*523fa7a6SAndroid Build Coastguard Worker    """Metadata about a method such as the number of inputs and outputs.
116*523fa7a6SAndroid Build Coastguard Worker
117*523fa7a6SAndroid Build Coastguard Worker    .. warning::
118*523fa7a6SAndroid Build Coastguard Worker
119*523fa7a6SAndroid Build Coastguard Worker        This API is experimental and subject to change without notice.
120*523fa7a6SAndroid Build Coastguard Worker    """
121*523fa7a6SAndroid Build Coastguard Worker
122*523fa7a6SAndroid Build Coastguard Worker    def name(self) -> str:
123*523fa7a6SAndroid Build Coastguard Worker        """The name of the method, such as 'forward'"""
124*523fa7a6SAndroid Build Coastguard Worker        ...
125*523fa7a6SAndroid Build Coastguard Worker
126*523fa7a6SAndroid Build Coastguard Worker    def num_inputs(self) -> int:
127*523fa7a6SAndroid Build Coastguard Worker        """The number of user inputs to the method. This does not include any
128*523fa7a6SAndroid Build Coastguard Worker        internal buffers or weights, which don't need to be provided by the user"""
129*523fa7a6SAndroid Build Coastguard Worker        ...
130*523fa7a6SAndroid Build Coastguard Worker
131*523fa7a6SAndroid Build Coastguard Worker    def num_outputs(self) -> int:
132*523fa7a6SAndroid Build Coastguard Worker        """The number of outputs from the method. This does not include any mutated
133*523fa7a6SAndroid Build Coastguard Worker        internal buffers"""
134*523fa7a6SAndroid Build Coastguard Worker        ...
135*523fa7a6SAndroid Build Coastguard Worker
136*523fa7a6SAndroid Build Coastguard Worker    def input_tensor_meta(self, index: int) -> TensorInfo:
137*523fa7a6SAndroid Build Coastguard Worker        """The tensor info for the 'index'th input. Index must be in the interval
138*523fa7a6SAndroid Build Coastguard Worker        [0, num_inputs()). Raises an IndexError if the index is out of bounds"""
139*523fa7a6SAndroid Build Coastguard Worker        ...
140*523fa7a6SAndroid Build Coastguard Worker
141*523fa7a6SAndroid Build Coastguard Worker    def output_tensor_meta(self, index: int) -> TensorInfo:
142*523fa7a6SAndroid Build Coastguard Worker        """The tensor info for the 'index'th output. Index must be in the interval
143*523fa7a6SAndroid Build Coastguard Worker        [0, num_outputs()). Raises an IndexError if the index is out of bounds"""
144*523fa7a6SAndroid Build Coastguard Worker        ...
145*523fa7a6SAndroid Build Coastguard Worker
146*523fa7a6SAndroid Build Coastguard Worker    def __repr__(self) -> str: ...
147*523fa7a6SAndroid Build Coastguard Worker
148*523fa7a6SAndroid Build Coastguard Worker@experimental("This API is experimental and subject to change without notice.")
149*523fa7a6SAndroid Build Coastguard Workerdef _load_for_executorch(
150*523fa7a6SAndroid Build Coastguard Worker    path: str,
151*523fa7a6SAndroid Build Coastguard Worker    enable_etdump: bool = False,
152*523fa7a6SAndroid Build Coastguard Worker    debug_buffer_size: int = 0,
153*523fa7a6SAndroid Build Coastguard Worker    program_verification: Verification = Verification.InternalConsistency,
154*523fa7a6SAndroid Build Coastguard Worker) -> ExecuTorchModule:
155*523fa7a6SAndroid Build Coastguard Worker    """Load an ExecuTorch Program from a file.
156*523fa7a6SAndroid Build Coastguard Worker
157*523fa7a6SAndroid Build Coastguard Worker    .. warning::
158*523fa7a6SAndroid Build Coastguard Worker
159*523fa7a6SAndroid Build Coastguard Worker        This API is experimental and subject to change without notice.
160*523fa7a6SAndroid Build Coastguard Worker
161*523fa7a6SAndroid Build Coastguard Worker    Args:
162*523fa7a6SAndroid Build Coastguard Worker        path: File path to the ExecuTorch program as a string.
163*523fa7a6SAndroid Build Coastguard Worker        enable_etdump: If true, enables an ETDump which can store profiling information.
164*523fa7a6SAndroid Build Coastguard Worker            See documentation at https://pytorch.org/executorch/stable/etdump.html
165*523fa7a6SAndroid Build Coastguard Worker            for how to use it.
166*523fa7a6SAndroid Build Coastguard Worker        debug_buffer_size: If non-zero, enables a debug buffer which can store
167*523fa7a6SAndroid Build Coastguard Worker            intermediate results of each instruction in the ExecuTorch program.
168*523fa7a6SAndroid Build Coastguard Worker            This is the fixed size of the buffer, if you have more intermediate
169*523fa7a6SAndroid Build Coastguard Worker            result bytes than this allows, the execution will abort with a failed
170*523fa7a6SAndroid Build Coastguard Worker            runtime check.
171*523fa7a6SAndroid Build Coastguard Worker    """
172*523fa7a6SAndroid Build Coastguard Worker    ...
173*523fa7a6SAndroid Build Coastguard Worker
174*523fa7a6SAndroid Build Coastguard Worker@experimental("This API is experimental and subject to change without notice.")
175*523fa7a6SAndroid Build Coastguard Workerdef _load_for_executorch_from_buffer(
176*523fa7a6SAndroid Build Coastguard Worker    buffer: bytes,
177*523fa7a6SAndroid Build Coastguard Worker    enable_etdump: bool = False,
178*523fa7a6SAndroid Build Coastguard Worker    debug_buffer_size: int = 0,
179*523fa7a6SAndroid Build Coastguard Worker    program_verification: Verification = Verification.InternalConsistency,
180*523fa7a6SAndroid Build Coastguard Worker) -> ExecuTorchModule:
181*523fa7a6SAndroid Build Coastguard Worker    """Same as _load_for_executorch, but takes a byte buffer instead of a file path.
182*523fa7a6SAndroid Build Coastguard Worker
183*523fa7a6SAndroid Build Coastguard Worker    .. warning::
184*523fa7a6SAndroid Build Coastguard Worker
185*523fa7a6SAndroid Build Coastguard Worker        This API is experimental and subject to change without notice.
186*523fa7a6SAndroid Build Coastguard Worker    """
187*523fa7a6SAndroid Build Coastguard Worker    ...
188*523fa7a6SAndroid Build Coastguard Worker
189*523fa7a6SAndroid Build Coastguard Worker@experimental("This API is experimental and subject to change without notice.")
190*523fa7a6SAndroid Build Coastguard Workerdef _load_for_executorch_from_bundled_program(
191*523fa7a6SAndroid Build Coastguard Worker    module: BundledModule, enable_etdump: bool = False, debug_buffer_size: int = 0
192*523fa7a6SAndroid Build Coastguard Worker) -> ExecuTorchModule:
193*523fa7a6SAndroid Build Coastguard Worker    """Same as _load_for_executorch, but takes a bundled program instead of a file path.
194*523fa7a6SAndroid Build Coastguard Worker
195*523fa7a6SAndroid Build Coastguard Worker    See https://pytorch.org/executorch/stable/bundled-io.html for documentation.
196*523fa7a6SAndroid Build Coastguard Worker
197*523fa7a6SAndroid Build Coastguard Worker    .. warning::
198*523fa7a6SAndroid Build Coastguard Worker
199*523fa7a6SAndroid Build Coastguard Worker        This API is experimental and subject to change without notice.
200*523fa7a6SAndroid Build Coastguard Worker    """
201*523fa7a6SAndroid Build Coastguard Worker    ...
202*523fa7a6SAndroid Build Coastguard Worker
203*523fa7a6SAndroid Build Coastguard Worker@experimental("This API is experimental and subject to change without notice.")
204*523fa7a6SAndroid Build Coastguard Workerdef _load_bundled_program_from_buffer(
205*523fa7a6SAndroid Build Coastguard Worker    buffer: bytes, non_const_pool_size: int = ...
206*523fa7a6SAndroid Build Coastguard Worker) -> BundledModule:
207*523fa7a6SAndroid Build Coastguard Worker    """
208*523fa7a6SAndroid Build Coastguard Worker    .. warning::
209*523fa7a6SAndroid Build Coastguard Worker
210*523fa7a6SAndroid Build Coastguard Worker        This API is experimental and subject to change without notice.
211*523fa7a6SAndroid Build Coastguard Worker    """
212*523fa7a6SAndroid Build Coastguard Worker    ...
213*523fa7a6SAndroid Build Coastguard Worker
214*523fa7a6SAndroid Build Coastguard Worker@experimental("This API is experimental and subject to change without notice.")
215*523fa7a6SAndroid Build Coastguard Workerdef _get_operator_names() -> List[str]:
216*523fa7a6SAndroid Build Coastguard Worker    """
217*523fa7a6SAndroid Build Coastguard Worker    .. warning::
218*523fa7a6SAndroid Build Coastguard Worker
219*523fa7a6SAndroid Build Coastguard Worker        This API is experimental and subject to change without notice.
220*523fa7a6SAndroid Build Coastguard Worker    """
221*523fa7a6SAndroid Build Coastguard Worker    ...
222*523fa7a6SAndroid Build Coastguard Worker
223*523fa7a6SAndroid Build Coastguard Worker@experimental("This API is experimental and subject to change without notice.")
224*523fa7a6SAndroid Build Coastguard Workerdef _create_profile_block(name: str) -> None:
225*523fa7a6SAndroid Build Coastguard Worker    """
226*523fa7a6SAndroid Build Coastguard Worker    .. warning::
227*523fa7a6SAndroid Build Coastguard Worker
228*523fa7a6SAndroid Build Coastguard Worker        This API is experimental and subject to change without notice.
229*523fa7a6SAndroid Build Coastguard Worker    """
230*523fa7a6SAndroid Build Coastguard Worker    ...
231*523fa7a6SAndroid Build Coastguard Worker
232*523fa7a6SAndroid Build Coastguard Worker@experimental("This API is experimental and subject to change without notice.")
233*523fa7a6SAndroid Build Coastguard Workerdef _dump_profile_results() -> bytes:
234*523fa7a6SAndroid Build Coastguard Worker    """
235*523fa7a6SAndroid Build Coastguard Worker    .. warning::
236*523fa7a6SAndroid Build Coastguard Worker
237*523fa7a6SAndroid Build Coastguard Worker        This API is experimental and subject to change without notice.
238*523fa7a6SAndroid Build Coastguard Worker    """
239*523fa7a6SAndroid Build Coastguard Worker    ...
240*523fa7a6SAndroid Build Coastguard Worker
241*523fa7a6SAndroid Build Coastguard Worker@experimental("This API is experimental and subject to change without notice.")
242*523fa7a6SAndroid Build Coastguard Workerdef _reset_profile_results() -> None:
243*523fa7a6SAndroid Build Coastguard Worker    """
244*523fa7a6SAndroid Build Coastguard Worker    .. warning::
245*523fa7a6SAndroid Build Coastguard Worker
246*523fa7a6SAndroid Build Coastguard Worker        This API is experimental and subject to change without notice.
247*523fa7a6SAndroid Build Coastguard Worker    """
248*523fa7a6SAndroid Build Coastguard Worker    ...
249