prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  `stevedore_namespace` documentation shows `str`'s doc string
  **Describe the bug**
  
  The `stevedore_namespace` BUILD file symbol has a doc-string, but it isn't shown in `pants help-all`. It instead shows what looks like the doc string for `str`.
  
  https://github.com/pantsbuild/pants/blob/ec86d19cd954cd49a9562880a7c0dbc45632778c/src/python/pants/backend/python/framework/stevedore/target_types.py#L13-L30
  
  To reproduce, enable the stevedore backend and look at `help` or `help-all`:
  
  ```shell
  PANTS_VERSION=2.22.0.dev3 pants --backend-packages=pants.backend.experimental.python.framework.stevedore help stevedore_namespace
  ```
  ```
  `stevedore_namespace` BUILD file symbol
  ---------------------------------------
  
  str(object='') -> str
  str(bytes_or_buffer[, encoding[, errors]]) -> str
  
  Create a new string object from the given object. If encoding or
  errors is specified, then the object must expose a data buffer
  that will be decoded using the given encoding and error handler.
  Otherwise, returns the result of object.__str__() (if defined)
  or repr(object).
  encoding defaults to sys.getdefaultencoding().
  errors defaults to 'strict'.
  ```
  
  ```shell
  PANTS_VERSION=2.22.0.dev3 pants --backend-packages=pants.backend.experimental.python.framework.stevedore help-all | \
    jq .name_to_build_file_info.stevedore_namespace
  ```
  ```json
  {
    "documentation": "str(object='') -> str\nstr(bytes_or_buffer[, encoding[, errors]]) -> str\n\nCreate a new string object from the given object. If encoding or\nerrors is specified, then the object must expose a data buffer\nthat will be decoded using the given encoding and error handler.\nOtherwise, returns the result of object.__str__() (if defined)\nor repr(object).\nencoding defaults to sys.getdefaultencoding().\nerrors defaults to 'strict'.",
    "is_target": false,
    "name": "stevedore_namespace",
    "signature": null
  }
  ```
  
  **Pants version**
  Seems to be visible in 2.16 through to the currently latest.
  
  **OS**
  both
  
  **Additional info**
  
  - Will appear in online docs too after https://github.com/pantsbuild/pantsbuild.org/pull/216
  - Relevant issues:
    - https://github.com/pantsbuild/pants/discussions/18117
    - https://github.com/pantsbuild/pants/issues/14832
  
  </issue>
  <code>
  [start of src/python/pants/backend/python/framework/stevedore/target_types.py]
  1 # Copyright 2023 Pants project contributors (see CONTRIBUTORS.md).
  2 # Licensed under the Apache License, Version 2.0 (see LICENSE).
  3 
  4 from __future__ import annotations
  5 
  6 from dataclasses import dataclass
  7 
  8 from pants.backend.python.target_types import PythonDistribution
  9 from pants.engine.target import StringSequenceField, Targets
  10 from pants.util.strutil import help_text
  11 
  12 
  13 class StevedoreNamespace(str):
  14     f"""Tag a namespace in entry_points as a stevedore namespace.
  15 
  16     This is required for the entry_point to be visible to dep inference
  17     based on the `stevedore_namespaces` field.
  18 
  19     For example:
  20         {PythonDistribution.alias}(
  21             ...
  22             entry_points={{
  23                 stevedore_namespace("a.b.c"): {{
  24                     "plugin_name": "some.entry:point",
  25                 }},
  26             }},
  27         )
  28     """
  29 
  30     alias = "stevedore_namespace"
  31 
  32 
  33 # This is a lot like a SpecialCasedDependencies field, but it doesn't list targets directly.
  34 class StevedoreNamespacesField(StringSequenceField):
  35     alias = "stevedore_namespaces"
  36     help = help_text(
  37         f"""
  38         List the stevedore namespaces required by this target.
  39 
  40         Code for all `entry_points` on `{PythonDistribution.alias}` targets with
  41         these namespaces will be added as dependencies so that they are
  42         available on PYTHONPATH during tests. Note that this is only a subset
  43         of the `{PythonDistribution.alias}`s dependencies, so the `entry_points`
  44         only need to be defined on one `{PythonDistribution.alias}` even if the
  45         test only needs some of the `entry_points` namespaces on it.
  46 
  47         Plus, an `entry_points.txt` file will be generated in the sandbox so that
  48         each of the `{PythonDistribution.alias}`s appear to be "installed". The
  49         `entry_points.txt` file will only include the namespaces requested on this
  50         field. Without this, stevedore would not be able to look up plugins in
  51         the setuptools `entry_points` metadata.
  52 
  53         NOTE: Each `{PythonDistribution.alias}` must opt-in to being included in
  54         this repo-wide inference by tagging the namespaces with
  55         `{StevedoreNamespace.alias}("my.stevedore.extension")`.
  56 
  57         The stevedore namespace format (`my.stevedore.extension`) is similar
  58         to a Python namespace.
  59         """
  60     )
  61 
  62 
  63 class AllStevedoreExtensionTargets(Targets):
  64     pass
  65 
  66 
  67 @dataclass(frozen=True)
  68 class StevedoreNamespacesProviderTargetsRequest:
  69     stevedore_namespaces: StevedoreNamespacesField
  70 
  71 
  72 class StevedoreExtensionTargets(Targets):
  73     pass
  74
  [end of src/python/pants/backend/python/framework/stevedore/target_types.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/src/python/pants/backend/python/framework/stevedore/target_types.py b/src/python/pants/backend/python/framework/stevedore/target_types.py
  --- a/src/python/pants/backend/python/framework/stevedore/target_types.py
  +++ b/src/python/pants/backend/python/framework/stevedore/target_types.py
  @@ -11,20 +11,22 @@
   
   
   class StevedoreNamespace(str):
  -    f"""Tag a namespace in entry_points as a stevedore namespace.
  +    """Tag a namespace in entry_points as a stevedore namespace.
   
       This is required for the entry_point to be visible to dep inference
       based on the `stevedore_namespaces` field.
   
       For example:
  -        {PythonDistribution.alias}(
  -            ...
  -            entry_points={{
  -                stevedore_namespace("a.b.c"): {{
  -                    "plugin_name": "some.entry:point",
  -                }},
  -            }},
  -        )
  +    ```python
  +    python_distribution(
  +        ...
  +        entry_points={
  +            stevedore_namespace("a.b.c"): {
  +                "plugin_name": "some.entry:point",
  +            },
  +        },
  +    )
  +    ```
       """
   
       alias = "stevedore_namespace"
  
verification_info: {"golden_diff": "diff --git a/src/python/pants/backend/python/framework/stevedore/target_types.py b/src/python/pants/backend/python/framework/stevedore/target_types.py\n--- a/src/python/pants/backend/python/framework/stevedore/target_types.py\n+++ b/src/python/pants/backend/python/framework/stevedore/target_types.py\n@@ -11,20 +11,22 @@\n \n \n class StevedoreNamespace(str):\n-    f\"\"\"Tag a namespace in entry_points as a stevedore namespace.\n+    \"\"\"Tag a namespace in entry_points as a stevedore namespace.\n \n     This is required for the entry_point to be visible to dep inference\n     based on the `stevedore_namespaces` field.\n \n     For example:\n-        {PythonDistribution.alias}(\n-            ...\n-            entry_points={{\n-                stevedore_namespace(\"a.b.c\"): {{\n-                    \"plugin_name\": \"some.entry:point\",\n-                }},\n-            }},\n-        )\n+    ```python\n+    python_distribution(\n+        ...\n+        entry_points={\n+            stevedore_namespace(\"a.b.c\"): {\n+                \"plugin_name\": \"some.entry:point\",\n+            },\n+        },\n+    )\n+    ```\n     \"\"\"\n \n     alias = \"stevedore_namespace\"\n", "issue": "`stevedore_namespace` documentation shows `str`'s doc string\n**Describe the bug**\r\n\r\nThe `stevedore_namespace` BUILD file symbol has a doc-string, but it isn't shown in `pants help-all`. It instead shows what looks like the doc string for `str`.\r\n\r\nhttps://github.com/pantsbuild/pants/blob/ec86d19cd954cd49a9562880a7c0dbc45632778c/src/python/pants/backend/python/framework/stevedore/target_types.py#L13-L30\r\n\r\nTo reproduce, enable the stevedore backend and look at `help` or `help-all`:\r\n\r\n```shell\r\nPANTS_VERSION=2.22.0.dev3 pants --backend-packages=pants.backend.experimental.python.framework.stevedore help stevedore_namespace\r\n```\r\n```\r\n`stevedore_namespace` BUILD file symbol\r\n---------------------------------------\r\n\r\nstr(object='') -> str\r\nstr(bytes_or_buffer[, encoding[, errors]]) -> str\r\n\r\nCreate a new string object from the given object. If encoding or\r\nerrors is specified, then the object must expose a data buffer\r\nthat will be decoded using the given encoding and error handler.\r\nOtherwise, returns the result of object.__str__() (if defined)\r\nor repr(object).\r\nencoding defaults to sys.getdefaultencoding().\r\nerrors defaults to 'strict'.\r\n```\r\n\r\n```shell\r\nPANTS_VERSION=2.22.0.dev3 pants --backend-packages=pants.backend.experimental.python.framework.stevedore help-all | \\\r\n  jq .name_to_build_file_info.stevedore_namespace\r\n```\r\n```json\r\n{\r\n  \"documentation\": \"str(object='') -> str\\nstr(bytes_or_buffer[, encoding[, errors]]) -> str\\n\\nCreate a new string object from the given object. If encoding or\\nerrors is specified, then the object must expose a data buffer\\nthat will be decoded using the given encoding and error handler.\\nOtherwise, returns the result of object.__str__() (if defined)\\nor repr(object).\\nencoding defaults to sys.getdefaultencoding().\\nerrors defaults to 'strict'.\",\r\n  \"is_target\": false,\r\n  \"name\": \"stevedore_namespace\",\r\n  \"signature\": null\r\n}\r\n```\r\n\r\n**Pants version**\r\nSeems to be visible in 2.16 through to the currently latest.\r\n\r\n**OS**\r\nboth\r\n\r\n**Additional info**\r\n\r\n- Will appear in online docs too after https://github.com/pantsbuild/pantsbuild.org/pull/216\r\n- Relevant issues:\r\n  - https://github.com/pantsbuild/pants/discussions/18117\r\n  - https://github.com/pantsbuild/pants/issues/14832\n", "before_files": [{"content": "# Copyright 2023 Pants project contributors (see CONTRIBUTORS.md).\n# Licensed under the Apache License, Version 2.0 (see LICENSE).\n\nfrom __future__ import annotations\n\nfrom dataclasses import dataclass\n\nfrom pants.backend.python.target_types import PythonDistribution\nfrom pants.engine.target import StringSequenceField, Targets\nfrom pants.util.strutil import help_text\n\n\nclass StevedoreNamespace(str):\n    f\"\"\"Tag a namespace in entry_points as a stevedore namespace.\n\n    This is required for the entry_point to be visible to dep inference\n    based on the `stevedore_namespaces` field.\n\n    For example:\n        {PythonDistribution.alias}(\n            ...\n            entry_points={{\n                stevedore_namespace(\"a.b.c\"): {{\n                    \"plugin_name\": \"some.entry:point\",\n                }},\n            }},\n        )\n    \"\"\"\n\n    alias = \"stevedore_namespace\"\n\n\n# This is a lot like a SpecialCasedDependencies field, but it doesn't list targets directly.\nclass StevedoreNamespacesField(StringSequenceField):\n    alias = \"stevedore_namespaces\"\n    help = help_text(\n        f\"\"\"\n        List the stevedore namespaces required by this target.\n\n        Code for all `entry_points` on `{PythonDistribution.alias}` targets with\n        these namespaces will be added as dependencies so that they are\n        available on PYTHONPATH during tests. Note that this is only a subset\n        of the `{PythonDistribution.alias}`s dependencies, so the `entry_points`\n        only need to be defined on one `{PythonDistribution.alias}` even if the\n        test only needs some of the `entry_points` namespaces on it.\n\n        Plus, an `entry_points.txt` file will be generated in the sandbox so that\n        each of the `{PythonDistribution.alias}`s appear to be \"installed\". The\n        `entry_points.txt` file will only include the namespaces requested on this\n        field. Without this, stevedore would not be able to look up plugins in\n        the setuptools `entry_points` metadata.\n\n        NOTE: Each `{PythonDistribution.alias}` must opt-in to being included in\n        this repo-wide inference by tagging the namespaces with\n        `{StevedoreNamespace.alias}(\"my.stevedore.extension\")`.\n\n        The stevedore namespace format (`my.stevedore.extension`) is similar\n        to a Python namespace.\n        \"\"\"\n    )\n\n\nclass AllStevedoreExtensionTargets(Targets):\n    pass\n\n\n@dataclass(frozen=True)\nclass StevedoreNamespacesProviderTargetsRequest:\n    stevedore_namespaces: StevedoreNamespacesField\n\n\nclass StevedoreExtensionTargets(Targets):\n    pass\n", "path": "src/python/pants/backend/python/framework/stevedore/target_types.py"}]}