# Copyright (c) Meta Platforms, Inc. and affiliates. # All rights reserved. # # This source code is licensed under the BSD-style license found in the # LICENSE file in the root directory of this source tree. # flake8: noqa: F401 import functools import inspect import os import random import unittest from typing import Callable, Dict, Optional, Tuple, Type import executorch.exir as exir import executorch.exir.control_flow as control_flow # @manual=//executorch/extension/pytree:pybindings import executorch.extension.pytree as pytree import torch from executorch.devtools.bundled_program.core import BundledProgram from executorch.devtools.bundled_program.serialize import ( serialize_from_bundled_program_to_flatbuffer, ) from executorch.devtools.bundled_program.util.test_util import ( get_common_executorch_program, SampleModel, ) kernel_mode = None # either aten mode or lean mode try: from executorch.extension.pybindings.portable_lib import ( _load_bundled_program_from_buffer, _load_for_executorch_from_buffer, _load_for_executorch_from_bundled_program, ) kernel_mode = "lean" except ImportError as e: print(e) pass try: from executorch.extension.pybindings.aten_lib import ( # @manual=//executorch/extension/pybindings:aten_lib _load_bundled_program_from_buffer, _load_for_executorch_from_buffer, _load_for_executorch_from_bundled_program, ) assert kernel_mode is None kernel_mode = "aten" except ImportError as e: print(e) pass assert kernel_mode is not None class BundledProgramE2ETest(unittest.TestCase): def test_sample_model_e2e(self): executorch_program, method_test_suites = get_common_executorch_program() eager_model = SampleModel() bundled_program = BundledProgram(executorch_program, method_test_suites) bundled_program_buffer = serialize_from_bundled_program_to_flatbuffer( bundled_program ) executorch_bundled_program = _load_bundled_program_from_buffer( bundled_program_buffer ) executorch_module = _load_for_executorch_from_bundled_program( executorch_bundled_program ) for method_name in eager_model.method_names: executorch_module.load_bundled_input( executorch_bundled_program, method_name, 0, ) executorch_module.plan_execute(method_name) executorch_module.verify_result_with_bundled_expected_output( executorch_bundled_program, method_name, 0, )