1*da0073e9SAndroid Build Coastguard Worker# mypy: allow-untyped-defs 2*da0073e9SAndroid Build Coastguard Workerfrom contextlib import contextmanager 3*da0073e9SAndroid Build Coastguard Worker 4*da0073e9SAndroid Build Coastguard Worker 5*da0073e9SAndroid Build Coastguard Workertry: 6*da0073e9SAndroid Build Coastguard Worker from torch._C import _itt 7*da0073e9SAndroid Build Coastguard Workerexcept ImportError: 8*da0073e9SAndroid Build Coastguard Worker 9*da0073e9SAndroid Build Coastguard Worker class _ITTStub: 10*da0073e9SAndroid Build Coastguard Worker @staticmethod 11*da0073e9SAndroid Build Coastguard Worker def _fail(*args, **kwargs): 12*da0073e9SAndroid Build Coastguard Worker raise RuntimeError( 13*da0073e9SAndroid Build Coastguard Worker "ITT functions not installed. Are you sure you have a ITT build?" 14*da0073e9SAndroid Build Coastguard Worker ) 15*da0073e9SAndroid Build Coastguard Worker 16*da0073e9SAndroid Build Coastguard Worker @staticmethod 17*da0073e9SAndroid Build Coastguard Worker def is_available(): 18*da0073e9SAndroid Build Coastguard Worker return False 19*da0073e9SAndroid Build Coastguard Worker 20*da0073e9SAndroid Build Coastguard Worker rangePush = _fail 21*da0073e9SAndroid Build Coastguard Worker rangePop = _fail 22*da0073e9SAndroid Build Coastguard Worker mark = _fail 23*da0073e9SAndroid Build Coastguard Worker 24*da0073e9SAndroid Build Coastguard Worker _itt = _ITTStub() # type: ignore[assignment] 25*da0073e9SAndroid Build Coastguard Worker 26*da0073e9SAndroid Build Coastguard Worker 27*da0073e9SAndroid Build Coastguard Worker__all__ = ["is_available", "range_push", "range_pop", "mark", "range"] 28*da0073e9SAndroid Build Coastguard Worker 29*da0073e9SAndroid Build Coastguard Worker 30*da0073e9SAndroid Build Coastguard Workerdef is_available(): 31*da0073e9SAndroid Build Coastguard Worker """ 32*da0073e9SAndroid Build Coastguard Worker Check if ITT feature is available or not 33*da0073e9SAndroid Build Coastguard Worker """ 34*da0073e9SAndroid Build Coastguard Worker return _itt.is_available() 35*da0073e9SAndroid Build Coastguard Worker 36*da0073e9SAndroid Build Coastguard Worker 37*da0073e9SAndroid Build Coastguard Workerdef range_push(msg): 38*da0073e9SAndroid Build Coastguard Worker """ 39*da0073e9SAndroid Build Coastguard Worker Pushes a range onto a stack of nested range span. Returns zero-based 40*da0073e9SAndroid Build Coastguard Worker depth of the range that is started. 41*da0073e9SAndroid Build Coastguard Worker 42*da0073e9SAndroid Build Coastguard Worker Arguments: 43*da0073e9SAndroid Build Coastguard Worker msg (str): ASCII message to associate with range 44*da0073e9SAndroid Build Coastguard Worker """ 45*da0073e9SAndroid Build Coastguard Worker return _itt.rangePush(msg) 46*da0073e9SAndroid Build Coastguard Worker 47*da0073e9SAndroid Build Coastguard Worker 48*da0073e9SAndroid Build Coastguard Workerdef range_pop(): 49*da0073e9SAndroid Build Coastguard Worker """ 50*da0073e9SAndroid Build Coastguard Worker Pops a range off of a stack of nested range spans. Returns the 51*da0073e9SAndroid Build Coastguard Worker zero-based depth of the range that is ended. 52*da0073e9SAndroid Build Coastguard Worker """ 53*da0073e9SAndroid Build Coastguard Worker return _itt.rangePop() 54*da0073e9SAndroid Build Coastguard Worker 55*da0073e9SAndroid Build Coastguard Worker 56*da0073e9SAndroid Build Coastguard Workerdef mark(msg): 57*da0073e9SAndroid Build Coastguard Worker """ 58*da0073e9SAndroid Build Coastguard Worker Describe an instantaneous event that occurred at some point. 59*da0073e9SAndroid Build Coastguard Worker 60*da0073e9SAndroid Build Coastguard Worker Arguments: 61*da0073e9SAndroid Build Coastguard Worker msg (str): ASCII message to associate with the event. 62*da0073e9SAndroid Build Coastguard Worker """ 63*da0073e9SAndroid Build Coastguard Worker return _itt.mark(msg) 64*da0073e9SAndroid Build Coastguard Worker 65*da0073e9SAndroid Build Coastguard Worker 66*da0073e9SAndroid Build Coastguard Worker@contextmanager 67*da0073e9SAndroid Build Coastguard Workerdef range(msg, *args, **kwargs): 68*da0073e9SAndroid Build Coastguard Worker """ 69*da0073e9SAndroid Build Coastguard Worker Context manager / decorator that pushes an ITT range at the beginning 70*da0073e9SAndroid Build Coastguard Worker of its scope, and pops it at the end. If extra arguments are given, 71*da0073e9SAndroid Build Coastguard Worker they are passed as arguments to msg.format(). 72*da0073e9SAndroid Build Coastguard Worker 73*da0073e9SAndroid Build Coastguard Worker Args: 74*da0073e9SAndroid Build Coastguard Worker msg (str): message to associate with the range 75*da0073e9SAndroid Build Coastguard Worker """ 76*da0073e9SAndroid Build Coastguard Worker range_push(msg.format(*args, **kwargs)) 77*da0073e9SAndroid Build Coastguard Worker try: 78*da0073e9SAndroid Build Coastguard Worker yield 79*da0073e9SAndroid Build Coastguard Worker finally: 80*da0073e9SAndroid Build Coastguard Worker range_pop() 81