prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Need support to [...]/personal_access_tokens/self Gitlab API
  ## Description of the problem, including code/CLI snippet
  So far, I'm unable to get scopes information from the 'personal access token' used to authenticate to Gitlab API.
  Ofc, it is easy to get the list of the personal access token of the authenticated user, but I see no way to get the link with the one really used to authenticate.
  
  It seems the dedicated Gitlab API entrypoint for that is [...]/personal_access_tokens/self which is not actually supported by python-gitlab.
  
  Context: the idea is to check with efficiency some required scopes/permissions/rights, instead of trying an operation (like download repository tarball) because it could be time consuming although a simple check could be immediate.
  
  ## Expected Behavior
  
  Get scopes (and roles ?) information of the 'personal access token' currently used to authenticate to Gitlab API.
  
  ## Actual Behavior
  
  Unable to get this information.
  
  ## Specifications
  
    - python-gitlab version: 3.13.0
    - API version you are using (v3/v4): v4
    - Gitlab server version (or gitlab.com): gitlab.com
  
  
  </issue>
  <code>
  [start of gitlab/v4/objects/personal_access_tokens.py]
  1 from gitlab.base import RESTManager, RESTObject
  2 from gitlab.mixins import CreateMixin, DeleteMixin, ListMixin, ObjectDeleteMixin
  3 from gitlab.types import ArrayAttribute, RequiredOptional
  4 
  5 __all__ = [
  6     "PersonalAccessToken",
  7     "PersonalAccessTokenManager",
  8     "UserPersonalAccessToken",
  9     "UserPersonalAccessTokenManager",
  10 ]
  11 
  12 
  13 class PersonalAccessToken(ObjectDeleteMixin, RESTObject):
  14     pass
  15 
  16 
  17 class PersonalAccessTokenManager(DeleteMixin, ListMixin, RESTManager):
  18     _path = "/personal_access_tokens"
  19     _obj_cls = PersonalAccessToken
  20     _list_filters = ("user_id",)
  21 
  22 
  23 class UserPersonalAccessToken(RESTObject):
  24     pass
  25 
  26 
  27 class UserPersonalAccessTokenManager(CreateMixin, RESTManager):
  28     _path = "/users/{user_id}/personal_access_tokens"
  29     _obj_cls = UserPersonalAccessToken
  30     _from_parent_attrs = {"user_id": "id"}
  31     _create_attrs = RequiredOptional(
  32         required=("name", "scopes"), optional=("expires_at",)
  33     )
  34     _types = {"scopes": ArrayAttribute}
  35
  [end of gitlab/v4/objects/personal_access_tokens.py]
  </code>
  
  I need you to solve this issue by generating a single patch file that I can apply directly to this repository using git apply. Please respond with a single patch file in the following format.
  <patch>
  diff --git a/file.py b/file.py
  --- a/file.py
  +++ b/file.py
  @@ -1,27 +1,35 @@
   def euclidean(a, b):
  -    while b:
  -        a, b = b, a % b
  -    return a
  +    if b == 0:
  +        return a
  +    return euclidean(b, a % b)
   
   
   def bresenham(x0, y0, x1, y1):
       points = []
       dx = abs(x1 - x0)
       dy = abs(y1 - y0)
  -    sx = 1 if x0 < x1 else -1
  -    sy = 1 if y0 < y1 else -1
  -    err = dx - dy
  +    x, y = x0, y0
  +    sx = -1 if x0 > x1 else 1
  +    sy = -1 if y0 > y1 else 1
   
  -    while True:
  -        points.append((x0, y0))
  -        if x0 == x1 and y0 == y1:
  -            break
  -        e2 = 2 * err
  -        if e2 > -dy:
  -            err -= dy
  -            x0 += sx
  -        if e2 < dx:
  -            err += dx
  -            y0 += sy
  +    if dx > dy:
  +        err = dx / 2.0
  +        while x != x1:
  +            points.append((x, y))
  +            err -= dy
  +            if err < 0:
  +                y += sy
  +                err += dx
  +            x += sx
  +    else:
  +        err = dy / 2.0
  +        while y != y1:
  +            points.append((x, y))
  +            err -= dx
  +            if err < 0:
  +                x += sx
  +                err += dy
  +            y += sy
  +
  +    points.append((x, y))
       return points
  
  </patch>
golden_diff: diff --git a/gitlab/v4/objects/personal_access_tokens.py b/gitlab/v4/objects/personal_access_tokens.py
  --- a/gitlab/v4/objects/personal_access_tokens.py
  +++ b/gitlab/v4/objects/personal_access_tokens.py
  @@ -1,5 +1,7 @@
  +from typing import Any, cast, Union
  +
   from gitlab.base import RESTManager, RESTObject
  -from gitlab.mixins import CreateMixin, DeleteMixin, ListMixin, ObjectDeleteMixin
  +from gitlab.mixins import CreateMixin, DeleteMixin, ObjectDeleteMixin, RetrieveMixin
   from gitlab.types import ArrayAttribute, RequiredOptional
   
   __all__ = [
  @@ -14,11 +16,16 @@
       pass
   
   
  -class PersonalAccessTokenManager(DeleteMixin, ListMixin, RESTManager):
  +class PersonalAccessTokenManager(DeleteMixin, RetrieveMixin, RESTManager):
       _path = "/personal_access_tokens"
       _obj_cls = PersonalAccessToken
       _list_filters = ("user_id",)
   
  +    def get(
  +        self, id: Union[str, int], lazy: bool = False, **kwargs: Any
  +    ) -> PersonalAccessToken:
  +        return cast(PersonalAccessToken, super().get(id=id, lazy=lazy, **kwargs))
  +
   
   class UserPersonalAccessToken(RESTObject):
       pass
  
verification_info: {"golden_diff": "diff --git a/gitlab/v4/objects/personal_access_tokens.py b/gitlab/v4/objects/personal_access_tokens.py\n--- a/gitlab/v4/objects/personal_access_tokens.py\n+++ b/gitlab/v4/objects/personal_access_tokens.py\n@@ -1,5 +1,7 @@\n+from typing import Any, cast, Union\n+\n from gitlab.base import RESTManager, RESTObject\n-from gitlab.mixins import CreateMixin, DeleteMixin, ListMixin, ObjectDeleteMixin\n+from gitlab.mixins import CreateMixin, DeleteMixin, ObjectDeleteMixin, RetrieveMixin\n from gitlab.types import ArrayAttribute, RequiredOptional\n \n __all__ = [\n@@ -14,11 +16,16 @@\n     pass\n \n \n-class PersonalAccessTokenManager(DeleteMixin, ListMixin, RESTManager):\n+class PersonalAccessTokenManager(DeleteMixin, RetrieveMixin, RESTManager):\n     _path = \"/personal_access_tokens\"\n     _obj_cls = PersonalAccessToken\n     _list_filters = (\"user_id\",)\n \n+    def get(\n+        self, id: Union[str, int], lazy: bool = False, **kwargs: Any\n+    ) -> PersonalAccessToken:\n+        return cast(PersonalAccessToken, super().get(id=id, lazy=lazy, **kwargs))\n+\n \n class UserPersonalAccessToken(RESTObject):\n     pass\n", "issue": "Need support to [...]/personal_access_tokens/self Gitlab API\n## Description of the problem, including code/CLI snippet\r\nSo far, I'm unable to get scopes information from the 'personal access token' used to authenticate to Gitlab API.\r\nOfc, it is easy to get the list of the personal access token of the authenticated user, but I see no way to get the link with the one really used to authenticate.\r\n\r\nIt seems the dedicated Gitlab API entrypoint for that is [...]/personal_access_tokens/self which is not actually supported by python-gitlab.\r\n\r\nContext: the idea is to check with efficiency some required scopes/permissions/rights, instead of trying an operation (like download repository tarball) because it could be time consuming although a simple check could be immediate.\r\n\r\n## Expected Behavior\r\n\r\nGet scopes (and roles ?) information of the 'personal access token' currently used to authenticate to Gitlab API.\r\n\r\n## Actual Behavior\r\n\r\nUnable to get this information.\r\n\r\n## Specifications\r\n\r\n  - python-gitlab version: 3.13.0\r\n  - API version you are using (v3/v4): v4\r\n  - Gitlab server version (or gitlab.com): gitlab.com\r\n\n", "before_files": [{"content": "from gitlab.base import RESTManager, RESTObject\nfrom gitlab.mixins import CreateMixin, DeleteMixin, ListMixin, ObjectDeleteMixin\nfrom gitlab.types import ArrayAttribute, RequiredOptional\n\n__all__ = [\n    \"PersonalAccessToken\",\n    \"PersonalAccessTokenManager\",\n    \"UserPersonalAccessToken\",\n    \"UserPersonalAccessTokenManager\",\n]\n\n\nclass PersonalAccessToken(ObjectDeleteMixin, RESTObject):\n    pass\n\n\nclass PersonalAccessTokenManager(DeleteMixin, ListMixin, RESTManager):\n    _path = \"/personal_access_tokens\"\n    _obj_cls = PersonalAccessToken\n    _list_filters = (\"user_id\",)\n\n\nclass UserPersonalAccessToken(RESTObject):\n    pass\n\n\nclass UserPersonalAccessTokenManager(CreateMixin, RESTManager):\n    _path = \"/users/{user_id}/personal_access_tokens\"\n    _obj_cls = UserPersonalAccessToken\n    _from_parent_attrs = {\"user_id\": \"id\"}\n    _create_attrs = RequiredOptional(\n        required=(\"name\", \"scopes\"), optional=(\"expires_at\",)\n    )\n    _types = {\"scopes\": ArrayAttribute}\n", "path": "gitlab/v4/objects/personal_access_tokens.py"}]}