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