# Path: src/_pytest/compat.py
# def ascii_escaped(val: Union[bytes, str]) -> str:
#     r"""If val is pure ASCII, return it as an str, otherwise, escape
#     bytes objects into a sequence of escaped bytes:
# 
#     b'\xc3\xb4\xc5\xd6' -> r'\xc3\xb4\xc5\xd6'
# 
#     and escapes unicode objects into a sequence of escaped unicode
#     ids, e.g.:
# 
#     r'4\nV\U00043efa\x0eMXWB\x1e\u3028\u15fd\xcd\U0007d944'
# 
#     Note:
#        The obvious "v.decode('unicode-escape')" will return
#        valid UTF-8 unicode if it finds them in bytes, but we
#        want to return escaped bytes for any byte, even if they match
#        a UTF-8 string.
#     """
#     if isinstance(val, bytes):
#         ret = _bytes_to_ascii(val)
#     else:
#         ret = val.encode("unicode_escape").decode("ascii")
#     return _translate_non_printable(ret)
# 
# Path: src/_pytest/compat.py
# def final(f):
#     return f
# 
# Path: src/_pytest/compat.py
# NOTSET: "Final" = NotSetType.token  # noqa: E305
# 
# Path: src/_pytest/compat.py
# class NotSetType(enum.Enum):
#     token = 0


import collections.abc
import inspect
import warnings
import attr
from typing import Any
from typing import Callable
from typing import Collection
from typing import Iterable
from typing import Iterator
from typing import List
from typing import Mapping
from typing import MutableMapping
from typing import NamedTuple
from typing import Optional
from typing import overload
from typing import Sequence
from typing import Set
from typing import Tuple
from typing import Type
from typing import TYPE_CHECKING
from typing import TypeVar
from typing import Union
from .._code import getfslineno
from ..compat import ascii_escaped
from ..compat import final
from ..compat import NOTSET
from ..compat import NotSetType
from _pytest.config import Config
from _pytest.deprecated import check_ispytest
from _pytest.outcomes import fail
from _pytest.warning_types import PytestUnknownMarkWarning
    from ..nodes import Node
    from ..nodes import Collector
    from _pytest.scope import _ScopeName
            strict: bool = ...,
        ) -> MarkDecorator:
            ...

    class _ParametrizeMarkDecorator(MarkDecorator):
        def __call__(  # type: ignore[override]
            self,
            argnames: Union[str, List[str], Tuple[str, ...]],
            argvalues: Iterable[Union[ParameterSet, Sequence[object], object]],
            *,
            indirect: Union[bool, Sequence[str]] = ...,
            ids: Optional[
                Union[
                    Iterable[Union[None, str, float, int, bool]],
                    Callable[[Any], Optional[object]],
                ]
            ] = ...,
            scope: Optional[_ScopeName] = ...,
        ) -> MarkDecorator:
            ...

    class _UsefixturesMarkDecorator(MarkDecorator):
        def __call__(self, *fixtures: str) -> MarkDecorator:  # type: ignore[override]
            ...

    class _FilterwarningsMarkDecorator(MarkDecorator):
        def __call__(self, *filters: str) -> MarkDecorator:  # type: ignore[override]
            ...



# Path: src/_pytest/compat.py
# def ascii_escaped(val: Union[bytes, str]) -> str:
#     r"""If val is pure ASCII, return it as an str, otherwise, escape
#     bytes objects into a sequence of escaped bytes:
# 
#     b'\xc3\xb4\xc5\xd6' -> r'\xc3\xb4\xc5\xd6'
# 
#     and escapes unicode objects into a sequence of escaped unicode
#     ids, e.g.:
# 
#     r'4\nV\U00043efa\x0eMXWB\x1e\u3028\u15fd\xcd\U0007d944'
# 
#     Note:
#        The obvious "v.decode('unicode-escape')" will return
#        valid UTF-8 unicode if it finds them in bytes, but we
#        want to return escaped bytes for any byte, even if they match
#        a UTF-8 string.
#     """
#     if isinstance(val, bytes):
#         ret = _bytes_to_ascii(val)
#     else:
#         ret = val.encode("unicode_escape").decode("ascii")
#     return _translate_non_printable(ret)
# 
# Path: src/_pytest/compat.py
# def final(f):
#     return f
# 
# Path: src/_pytest/compat.py
# NOTSET: "Final" = NotSetType.token  # noqa: E305
# 
# Path: src/_pytest/compat.py
# class NotSetType(enum.Enum):
#     token = 0


# Path: src/_pytest/mark/structures.py
import collections.abc
import inspect
import warnings
import attr
from typing import Any
from typing import Callable
from typing import Collection
from typing import Iterable
from typing import Iterator
from typing import List
from typing import Mapping
from typing import MutableMapping
from typing import NamedTuple
from typing import Optional
from typing import overload
from typing import Sequence
from typing import Set
from typing import Tuple
from typing import Type
from typing import TYPE_CHECKING
from typing import TypeVar
from typing import Union
from .._code import getfslineno
from ..compat import ascii_escaped
from ..compat import final
from ..compat import NOTSET
from ..compat import NotSetType
from _pytest.config import Config
from _pytest.deprecated import check_ispytest
from _pytest.outcomes import fail
from _pytest.warning_types import PytestUnknownMarkWarning
    from ..nodes import Node
    from ..nodes import Collector
    from _pytest.scope import _ScopeName

            strict: bool = ...,
        ) -> MarkDecorator:
            ...

    class _ParametrizeMarkDecorator(MarkDecorator):
        def __call__(  # type: ignore[override]
            self,
            argnames: Union[str, List[str], Tuple[str, ...]],
            argvalues: Iterable[Union[ParameterSet, Sequence[object], object]],
            *,
            indirect: Union[bool, Sequence[str]] = ...,
            ids: Optional[
                Union[
                    Iterable[Union[None, str, float, int, bool]],
                    Callable[[Any], Optional[object]],
                ]
            ] = ...,
            scope: Optional[_ScopeName] = ...,
        ) -> MarkDecorator:
            ...

    class _UsefixturesMarkDecorator(MarkDecorator):
        def __call__(self, *fixtures: str) -> MarkDecorator:  # type: ignore[override]
            ...

    class _FilterwarningsMarkDecorator(MarkDecorator):
        def __call__(self, *filters: str) -> MarkDecorator:  # type: ignore[override]
            ...



@final