xref: /aosp_15_r20/external/executorch/exir/error.py (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 enum import Enum
9*523fa7a6SAndroid Build Coastguard Worker
10*523fa7a6SAndroid Build Coastguard Worker
11*523fa7a6SAndroid Build Coastguard Workerclass ExportErrorType(Enum):
12*523fa7a6SAndroid Build Coastguard Worker    INVALID_INPUT_TYPE = (
13*523fa7a6SAndroid Build Coastguard Worker        1  # User providing invalid inputs to either tracer, or other public facing APIs
14*523fa7a6SAndroid Build Coastguard Worker    )
15*523fa7a6SAndroid Build Coastguard Worker    INVALID_OUTPUT_TYPE = (
16*523fa7a6SAndroid Build Coastguard Worker        2  # User returning values from their models that we don’t support.
17*523fa7a6SAndroid Build Coastguard Worker    )
18*523fa7a6SAndroid Build Coastguard Worker    VIOLATION_OF_SPEC = 3  # User doing something against our assumptions.
19*523fa7a6SAndroid Build Coastguard Worker    NOT_SUPPORTED = 4  # User’s code contains types and functionalities we don’t support
20*523fa7a6SAndroid Build Coastguard Worker    MISSING_PROPERTY = 5  # User's code didn't provide necessary details for us to successfully trace and export. For example, we use a lot of decorators and ask users to annotate their model.
21*523fa7a6SAndroid Build Coastguard Worker    UNINITIALIZED = 6  # User is usingan API without proper initialization step.
22*523fa7a6SAndroid Build Coastguard Worker
23*523fa7a6SAndroid Build Coastguard Worker
24*523fa7a6SAndroid Build Coastguard Workerdef internal_assert(pred: bool, assert_msg: str) -> None:
25*523fa7a6SAndroid Build Coastguard Worker    """
26*523fa7a6SAndroid Build Coastguard Worker    This is exir's custom assert method. It internally just throws InternalError.
27*523fa7a6SAndroid Build Coastguard Worker    Note that the sole purpose is to throw our own error while maintaining similar syntax
28*523fa7a6SAndroid Build Coastguard Worker    as python assert.
29*523fa7a6SAndroid Build Coastguard Worker    """
30*523fa7a6SAndroid Build Coastguard Worker
31*523fa7a6SAndroid Build Coastguard Worker    if not pred:
32*523fa7a6SAndroid Build Coastguard Worker        raise InternalError(assert_msg)
33*523fa7a6SAndroid Build Coastguard Worker
34*523fa7a6SAndroid Build Coastguard Worker
35*523fa7a6SAndroid Build Coastguard Workerclass InternalError(Exception):
36*523fa7a6SAndroid Build Coastguard Worker    """
37*523fa7a6SAndroid Build Coastguard Worker    Raised when an internal invariance is violated in EXIR stack.
38*523fa7a6SAndroid Build Coastguard Worker    Should hint users to report a bug to dev and expose the original
39*523fa7a6SAndroid Build Coastguard Worker    error message.
40*523fa7a6SAndroid Build Coastguard Worker    """
41*523fa7a6SAndroid Build Coastguard Worker
42*523fa7a6SAndroid Build Coastguard Worker    def __init__(self, message: str) -> None:
43*523fa7a6SAndroid Build Coastguard Worker        super().__init__(message)
44*523fa7a6SAndroid Build Coastguard Worker
45*523fa7a6SAndroid Build Coastguard Worker
46*523fa7a6SAndroid Build Coastguard Workerclass ExportError(Exception):
47*523fa7a6SAndroid Build Coastguard Worker    """
48*523fa7a6SAndroid Build Coastguard Worker    This type of exception is raised for errors that are directly caused by the user
49*523fa7a6SAndroid Build Coastguard Worker    code. In general, user errors happen during model authoring, tracing, using our public
50*523fa7a6SAndroid Build Coastguard Worker    facing APIs, and writing graph passes.
51*523fa7a6SAndroid Build Coastguard Worker    """
52*523fa7a6SAndroid Build Coastguard Worker
53*523fa7a6SAndroid Build Coastguard Worker    def __init__(self, error_code: ExportErrorType, message: str) -> None:
54*523fa7a6SAndroid Build Coastguard Worker        prefix = f"[{error_code}]: "
55*523fa7a6SAndroid Build Coastguard Worker        super().__init__(prefix + message)
56