text: from typing import Any
  from typing import Generic
  from typing import Type
  from typing import TypeVar
  
  import attr
  
  from _pytest.compat import final
  
  
  class PytestWarning(UserWarning):
      """Base class for all warnings emitted by pytest."""
  
      __module__ = "pytest"
  
  
  @final
  class PytestAssertRewriteWarning(PytestWarning):
      """Warning emitted by the pytest assert rewrite module."""
  
      __module__ = "pytest"
  
  
  @final
  class PytestCacheWarning(PytestWarning):
      """Warning emitted by the cache plugin in various situations."""
  
      __module__ = "pytest"
  
  
  @final
  class PytestConfigWarning(PytestWarning):
      """Warning emitted for configuration issues."""
  
      __module__ = "pytest"
  
  
  @final
  class PytestCollectionWarning(PytestWarning):
      """Warning emitted when pytest is not able to collect a file or symbol in a module."""
  
      __module__ = "pytest"
  
  
  @final
  class PytestDeprecationWarning(PytestWarning, DeprecationWarning):
      """Warning class for features that will be removed in a future version."""
  
      __module__ = "pytest"
  
  
  @final
  class PytestExperimentalApiWarning(PytestWarning, FutureWarning):
      """Warning category used to denote experiments in pytest.
  
      Use sparingly as the API might change or even be removed completely in a
      future version.
      """
  
      __module__ = "pytest"
  
      @classmethod
      def simple(cls, apiname: str) -> "PytestExperimentalApiWarning":
          return cls(
              "{apiname} is an experimental api that may change over time".format(
                  apiname=apiname
              )
          )
  
  
  @final
  class PytestUnhandledCoroutineWarning(PytestWarning):
      """Warning emitted for an unhandled coroutine.
  
      A coroutine was encountered when collecting test functions, but was not
      handled by any async-aware plugin.
      Coroutine test functions are not natively supported.
      """
  
      __module__ = "pytest"
  
  
  @final
  class PytestUnknownMarkWarning(PytestWarning):
      """Warning emitted on use of unknown markers.
  
      See :ref:`mark` for details.
      """
  
      __module__ = "pytest"
  
  
  @final
  class PytestUnraisableExceptionWarning(PytestWarning):
      """An unraisable exception was reported.
  
      Unraisable exceptions are exceptions raised in :meth:`__del__ <object.__del__>`
      implementations and similar situations when the exception cannot be raised
      as normal.
      """
  
      __module__ = "pytest"
  
  
  @final
  class PytestUnhandledThreadExceptionWarning(PytestWarning):
      """An unhandled exception occurred in a :class:`~threading.Thread`.
  
      Such exceptions don't propagate normally.
      """
  
      __module__ = "pytest"
  
  
  _W = TypeVar("_W", bound=PytestWarning)
  
  
  @final
  @attr.s
  class UnformattedWarning(Generic[_W]):
      """A warning meant to be formatted during runtime.
  
      This is used to hold warnings that need to format their message at runtime,
      as opposed to a direct message.
      """
  
      category = attr.ib(type=Type["_W"])
      template = attr.ib(type=str)
  
      def format(self, **kwargs: Any) -> _W:
          """Return an instance of the warning category, formatted with given kwargs."""
          return self.category(self.template.format(**kwargs))
  