We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
DEPR: `VisibleDeprecationWarning` considered noisy
Context:
yt doesn't use builtin `DeprecationWarning`s but instead uses a custom class `VisibleDeprecationWarning`, whose sole intent is to work around Python's default warning filters which hide `DeprecationWarning`s by default (the idea being that they should only be made visible if users opt-in).

The design currently used in yt made sense a while back, because we want deprecation warnings to reach all users, not just maintainers of dependent code with high quality standards. The trade-off being that our warnings will surface to users no matter how many layers of dependencies there are between the code being written and yt; for instance, if `yt_astro_analysis` or `trident` uses deprecated yt API, *their* users don't have much control over it and it can be argued they shouldn't see these "noisy" warnings by default. 

Since Python 3.7 ([PEP 565](https://peps.python.org/pep-0565/)), `DeprecationWarnings` attributed to the `__main__` module are again showed by default, meaning they will reach direct users (including in REPLs) but will not surface (by default) when deprecated API calls live in an intermediate dependency layer.

It seems to me that our current solution isn't necessary anymore and that we should use simple `DeprecationWarning`s from now on.

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `yt/_maintenance/deprecation.py`
Content:
```
1 import warnings
2 from functools import wraps
3 from types import FunctionType
4 from typing import Dict, Optional
5 
6 
7 class VisibleDeprecationWarning(UserWarning):
8     """Visible deprecation warning, adapted from NumPy
9 
10     The nose runner does not show users DeprecationWarning.
11     This ensures that a deprecation warning is visible to users
12     if that is desired.
13     """
14 
15     # this class becomes useless after the tests are migrated from nose to pytest
16 
17     pass
18 
19 
20 def issue_deprecation_warning(
21     msg: str,
22     *,
23     stacklevel: int,
24     since: str,
25     removal: Optional[str] = None,
26 ):
27     """
28     Parameters
29     ----------
30     msg : str
31         A text message explaining that the code surrounding the call to this function is
32         deprecated, and what should be changed on the user side to avoid it.
33 
34     stacklevel: int
35         Number of stack frames to be skipped when pointing at caller code, starting from
36         *this* function's frame. In general 3 is a minimum.
37 
38     since and removal: str version numbers, indicating the anticipated removal date
39 
40     Notes
41     -----
42 
43     removal can be left empty if it is not clear how many minor releases are expected to
44     happen before the next major.
45 
46     removal and since arguments are keyword-only to forbid accidentally swapping them.
47 
48     Examples
49     --------
50     >>> issue_deprecation_warning(
51     ...     "This code is deprecated.", stacklevel=3, since="4.0"
52     ... )
53     """
54 
55     msg += f"\nDeprecated since yt {since}"
56     if removal is not None:
57         msg += f"\nThis feature is planned for removal in yt {removal}"
58     warnings.warn(msg, VisibleDeprecationWarning, stacklevel=stacklevel)
59 
60 
61 def future_positional_only(positions2names: Dict[int, str], /, **depr_kwargs):
62     """Warn users when using a future positional-only argument as keyword.
63     Note that positional-only arguments are available from Python 3.8
64     See https://www.python.org/dev/peps/pep-0570/
65     """
66 
67     def outer(func: FunctionType):
68         @wraps(func)
69         def inner(*args, **kwargs):
70             for no, name in sorted(positions2names.items()):
71                 if name not in kwargs:
72                     continue
73                 value = kwargs[name]
74                 issue_deprecation_warning(
75                     f"Using the {name!r} argument as keyword (on position {no}) "
76                     "is deprecated. "
77                     "Pass the argument as positional to suppress this warning, "
78                     f"i.e., use {func.__name__}({value!r}, ...)",
79                     stacklevel=3,
80                     **depr_kwargs,
81                 )
82             return func(*args, **kwargs)
83 
84         return inner
85 
86     return outer
87
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/yt/_maintenance/deprecation.py b/yt/_maintenance/deprecation.py
--- a/yt/_maintenance/deprecation.py
+++ b/yt/_maintenance/deprecation.py
@@ -4,19 +4,6 @@
 from typing import Dict, Optional
 
 
-class VisibleDeprecationWarning(UserWarning):
-    """Visible deprecation warning, adapted from NumPy
-
-    The nose runner does not show users DeprecationWarning.
-    This ensures that a deprecation warning is visible to users
-    if that is desired.
-    """
-
-    # this class becomes useless after the tests are migrated from nose to pytest
-
-    pass
-
-
 def issue_deprecation_warning(
     msg: str,
     *,
@@ -55,7 +42,7 @@
     msg += f"\nDeprecated since yt {since}"
     if removal is not None:
         msg += f"\nThis feature is planned for removal in yt {removal}"
-    warnings.warn(msg, VisibleDeprecationWarning, stacklevel=stacklevel)
+    warnings.warn(msg, DeprecationWarning, stacklevel=stacklevel)
 
 
 def future_positional_only(positions2names: Dict[int, str], /, **depr_kwargs):

{"golden_diff": "diff --git a/yt/_maintenance/deprecation.py b/yt/_maintenance/deprecation.py\n--- a/yt/_maintenance/deprecation.py\n+++ b/yt/_maintenance/deprecation.py\n@@ -4,19 +4,6 @@\n from typing import Dict, Optional\n \n \n-class VisibleDeprecationWarning(UserWarning):\n-    \"\"\"Visible deprecation warning, adapted from NumPy\n-\n-    The nose runner does not show users DeprecationWarning.\n-    This ensures that a deprecation warning is visible to users\n-    if that is desired.\n-    \"\"\"\n-\n-    # this class becomes useless after the tests are migrated from nose to pytest\n-\n-    pass\n-\n-\n def issue_deprecation_warning(\n     msg: str,\n     *,\n@@ -55,7 +42,7 @@\n     msg += f\"\\nDeprecated since yt {since}\"\n     if removal is not None:\n         msg += f\"\\nThis feature is planned for removal in yt {removal}\"\n-    warnings.warn(msg, VisibleDeprecationWarning, stacklevel=stacklevel)\n+    warnings.warn(msg, DeprecationWarning, stacklevel=stacklevel)\n \n \n def future_positional_only(positions2names: Dict[int, str], /, **depr_kwargs):\n", "issue": "DEPR: `VisibleDeprecationWarning` considered noisy\nContext:\r\nyt doesn't use builtin `DeprecationWarning`s but instead uses a custom class `VisibleDeprecationWarning`, whose sole intent is to work around Python's default warning filters which hide `DeprecationWarning`s by default (the idea being that they should only be made visible if users opt-in).\r\n\r\nThe design currently used in yt made sense a while back, because we want deprecation warnings to reach all users, not just maintainers of dependent code with high quality standards. The trade-off being that our warnings will surface to users no matter how many layers of dependencies there are between the code being written and yt; for instance, if `yt_astro_analysis` or `trident` uses deprecated yt API, *their* users don't have much control over it and it can be argued they shouldn't see these \"noisy\" warnings by default. \r\n\r\nSince Python 3.7 ([PEP 565](https://peps.python.org/pep-0565/)), `DeprecationWarnings` attributed to the `__main__` module are again showed by default, meaning they will reach direct users (including in REPLs) but will not surface (by default) when deprecated API calls live in an intermediate dependency layer.\r\n\r\nIt seems to me that our current solution isn't necessary anymore and that we should use simple `DeprecationWarning`s from now on.\n", "before_files": [{"content": "import warnings\nfrom functools import wraps\nfrom types import FunctionType\nfrom typing import Dict, Optional\n\n\nclass VisibleDeprecationWarning(UserWarning):\n    \"\"\"Visible deprecation warning, adapted from NumPy\n\n    The nose runner does not show users DeprecationWarning.\n    This ensures that a deprecation warning is visible to users\n    if that is desired.\n    \"\"\"\n\n    # this class becomes useless after the tests are migrated from nose to pytest\n\n    pass\n\n\ndef issue_deprecation_warning(\n    msg: str,\n    *,\n    stacklevel: int,\n    since: str,\n    removal: Optional[str] = None,\n):\n    \"\"\"\n    Parameters\n    ----------\n    msg : str\n        A text message explaining that the code surrounding the call to this function is\n        deprecated, and what should be changed on the user side to avoid it.\n\n    stacklevel: int\n        Number of stack frames to be skipped when pointing at caller code, starting from\n        *this* function's frame. In general 3 is a minimum.\n\n    since and removal: str version numbers, indicating the anticipated removal date\n\n    Notes\n    -----\n\n    removal can be left empty if it is not clear how many minor releases are expected to\n    happen before the next major.\n\n    removal and since arguments are keyword-only to forbid accidentally swapping them.\n\n    Examples\n    --------\n    >>> issue_deprecation_warning(\n    ...     \"This code is deprecated.\", stacklevel=3, since=\"4.0\"\n    ... )\n    \"\"\"\n\n    msg += f\"\\nDeprecated since yt {since}\"\n    if removal is not None:\n        msg += f\"\\nThis feature is planned for removal in yt {removal}\"\n    warnings.warn(msg, VisibleDeprecationWarning, stacklevel=stacklevel)\n\n\ndef future_positional_only(positions2names: Dict[int, str], /, **depr_kwargs):\n    \"\"\"Warn users when using a future positional-only argument as keyword.\n    Note that positional-only arguments are available from Python 3.8\n    See https://www.python.org/dev/peps/pep-0570/\n    \"\"\"\n\n    def outer(func: FunctionType):\n        @wraps(func)\n        def inner(*args, **kwargs):\n            for no, name in sorted(positions2names.items()):\n                if name not in kwargs:\n                    continue\n                value = kwargs[name]\n                issue_deprecation_warning(\n                    f\"Using the {name!r} argument as keyword (on position {no}) \"\n                    \"is deprecated. \"\n                    \"Pass the argument as positional to suppress this warning, \"\n                    f\"i.e., use {func.__name__}({value!r}, ...)\",\n                    stacklevel=3,\n                    **depr_kwargs,\n                )\n            return func(*args, **kwargs)\n\n        return inner\n\n    return outer\n", "path": "yt/_maintenance/deprecation.py"}], "after_files": [{"content": "import warnings\nfrom functools import wraps\nfrom types import FunctionType\nfrom typing import Dict, Optional\n\n\ndef issue_deprecation_warning(\n    msg: str,\n    *,\n    stacklevel: int,\n    since: str,\n    removal: Optional[str] = None,\n):\n    \"\"\"\n    Parameters\n    ----------\n    msg : str\n        A text message explaining that the code surrounding the call to this function is\n        deprecated, and what should be changed on the user side to avoid it.\n\n    stacklevel: int\n        Number of stack frames to be skipped when pointing at caller code, starting from\n        *this* function's frame. In general 3 is a minimum.\n\n    since and removal: str version numbers, indicating the anticipated removal date\n\n    Notes\n    -----\n\n    removal can be left empty if it is not clear how many minor releases are expected to\n    happen before the next major.\n\n    removal and since arguments are keyword-only to forbid accidentally swapping them.\n\n    Examples\n    --------\n    >>> issue_deprecation_warning(\n    ...     \"This code is deprecated.\", stacklevel=3, since=\"4.0\"\n    ... )\n    \"\"\"\n\n    msg += f\"\\nDeprecated since yt {since}\"\n    if removal is not None:\n        msg += f\"\\nThis feature is planned for removal in yt {removal}\"\n    warnings.warn(msg, DeprecationWarning, stacklevel=stacklevel)\n\n\ndef future_positional_only(positions2names: Dict[int, str], /, **depr_kwargs):\n    \"\"\"Warn users when using a future positional-only argument as keyword.\n    Note that positional-only arguments are available from Python 3.8\n    See https://www.python.org/dev/peps/pep-0570/\n    \"\"\"\n\n    def outer(func: FunctionType):\n        @wraps(func)\n        def inner(*args, **kwargs):\n            for no, name in sorted(positions2names.items()):\n                if name not in kwargs:\n                    continue\n                value = kwargs[name]\n                issue_deprecation_warning(\n                    f\"Using the {name!r} argument as keyword (on position {no}) \"\n                    \"is deprecated. \"\n                    \"Pass the argument as positional to suppress this warning, \"\n                    f\"i.e., use {func.__name__}({value!r}, ...)\",\n                    stacklevel=3,\n                    **depr_kwargs,\n                )\n            return func(*args, **kwargs)\n\n        return inner\n\n    return outer\n", "path": "yt/_maintenance/deprecation.py"}]}