| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- # mypy: allow-untyped-defs
- from contextlib import contextmanager
- from typing import NoReturn
- try:
- from torch._C import _itt
- except ImportError:
- class _ITTStub:
- @staticmethod
- def _fail(*args, **kwargs) -> NoReturn:
- raise RuntimeError(
- "ITT functions not installed. Are you sure you have a ITT build?"
- )
- @staticmethod
- def is_available() -> bool:
- return False
- rangePush = _fail
- rangePop = _fail
- mark = _fail
- _itt = _ITTStub() # type: ignore[assignment]
- __all__ = ["is_available", "range_push", "range_pop", "mark", "range"]
- def is_available():
- """
- Check if ITT feature is available or not
- """
- return _itt.is_available()
- def range_push(msg):
- """
- Pushes a range onto a stack of nested range span. Returns zero-based
- depth of the range that is started.
- Arguments:
- msg (str): ASCII message to associate with range
- """
- return _itt.rangePush(msg)
- def range_pop():
- """
- Pops a range off of a stack of nested range spans. Returns the
- zero-based depth of the range that is ended.
- """
- return _itt.rangePop()
- def mark(msg):
- """
- Describe an instantaneous event that occurred at some point.
- Arguments:
- msg (str): ASCII message to associate with the event.
- """
- return _itt.mark(msg)
- @contextmanager
- def range(msg, *args, **kwargs):
- """
- Context manager / decorator that pushes an ITT range at the beginning
- of its scope, and pops it at the end. If extra arguments are given,
- they are passed as arguments to msg.format().
- Args:
- msg (str): message to associate with the range
- """
- range_push(msg.format(*args, **kwargs))
- try:
- yield
- finally:
- range_pop()
|