prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Postponed annotation evaluation causes `Annotated` to break
  When using postponed annotation evaluation, annotating resolver arguments no longer works:
  
  ```python
  from __future__ import annotations
  
  import random
  from typing import Annotated
  
  import strawberry
  
  
  @strawberry.type
  class Query:
      @strawberry.field
      def dice_roll(
          self,
          sides: Annotated[
              int,
              strawberry.argument(description="Number of sides the die should have."),
          ] = 6,
      ) -> int:
          return random.randint(1, sides)
  
  
  strawberry.Schema(query=Query)
  ```
  
  The example above raises this TypeError:
  
  ```
  TypeError: Query fields cannot be resolved. Unexpected type 'typing.Annotated[int, <strawberry.arguments.StrawberryArgumentAnnotation object at 0x7fd12e130d00>]'
  ```
  
  When the first line (`from __future__ import annotations`) is left out, everything works as intended. This will probably also break once Python 3.11 lands, since the behavior will become mandatory then. #1586 refers to a somewhat related issue.
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `strawberry/auto.py`
  Content:
  ```
  1 from __future__ import annotations
  2 
  3 from typing import Any, Optional, Union, cast
  4 
  5 from typing_extensions import Annotated, get_args, get_origin
  6 
  7 from strawberry.type import StrawberryType
  8 
  9 from .annotation import StrawberryAnnotation
  10 
  11 
  12 class StrawberryAutoMeta(type):
  13     """Metaclass for StrawberryAuto.
  14 
  15     This is used to make sure StrawberryAuto is a singleton and also to
  16     override the behavior of `isinstance` so that it consider the following
  17     cases:
  18 
  19         >> isinstance(StrawberryAuto(), StrawberryAuto)
  20         True
  21         >> isinstance(StrawberryAnnotation(StrawberryAuto()), StrawberryAuto)
  22         True
  23         >> isinstance(Annotated[StrawberryAuto(), object()), StrawberryAuto)
  24         True
  25 
  26     """
  27 
  28     def __init__(self, *args, **kwargs):
  29         self._instance: Optional[StrawberryAuto] = None
  30         super().__init__(*args, **kwargs)
  31 
  32     def __call__(cls, *args, **kwargs):
  33         if cls._instance is None:
  34             cls._instance = super().__call__(*args, **kwargs)
  35 
  36         return cls._instance
  37 
  38     def __instancecheck__(
  39         self,
  40         instance: Union[StrawberryAuto, StrawberryAnnotation, StrawberryType, type],
  41     ):
  42         if isinstance(instance, StrawberryAnnotation):
  43             resolved = instance.annotation
  44             if isinstance(resolved, str):
  45                 namespace = instance.namespace
  46                 resolved = namespace and namespace.get(resolved)
  47 
  48             if resolved is not None:
  49                 instance = cast(type, resolved)
  50 
  51         if instance is auto:
  52             return True
  53 
  54         # Support uses of Annotated[auto, something()]
  55         if get_origin(instance) is Annotated:
  56             args = get_args(instance)
  57             if args[0] is Any:
  58                 return any(isinstance(arg, StrawberryAuto) for arg in args[1:])
  59 
  60         return False
  61 
  62 
  63 class StrawberryAuto(metaclass=StrawberryAutoMeta):
  64     def __str__(self):
  65         return "auto"
  66 
  67     def __repr__(self):
  68         return "<auto>"
  69 
  70 
  71 auto = Annotated[Any, StrawberryAuto()]
  72
  ```
  --- 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()
  
  ```
  
golden_diff: diff --git a/strawberry/auto.py b/strawberry/auto.py
  --- a/strawberry/auto.py
  +++ b/strawberry/auto.py
  @@ -57,7 +57,7 @@
               if args[0] is Any:
                   return any(isinstance(arg, StrawberryAuto) for arg in args[1:])
   
  -        return False
  +        return instance == "strawberry.auto"
   
   
   class StrawberryAuto(metaclass=StrawberryAutoMeta):
  
verification_info: {"golden_diff": "diff --git a/strawberry/auto.py b/strawberry/auto.py\n--- a/strawberry/auto.py\n+++ b/strawberry/auto.py\n@@ -57,7 +57,7 @@\n             if args[0] is Any:\n                 return any(isinstance(arg, StrawberryAuto) for arg in args[1:])\n \n-        return False\n+        return instance == \"strawberry.auto\"\n \n \n class StrawberryAuto(metaclass=StrawberryAutoMeta):\n", "issue": "Postponed annotation evaluation causes `Annotated` to break\nWhen using postponed annotation evaluation, annotating resolver arguments no longer works:\r\n\r\n```python\r\nfrom __future__ import annotations\r\n\r\nimport random\r\nfrom typing import Annotated\r\n\r\nimport strawberry\r\n\r\n\r\n@strawberry.type\r\nclass Query:\r\n    @strawberry.field\r\n    def dice_roll(\r\n        self,\r\n        sides: Annotated[\r\n            int,\r\n            strawberry.argument(description=\"Number of sides the die should have.\"),\r\n        ] = 6,\r\n    ) -> int:\r\n        return random.randint(1, sides)\r\n\r\n\r\nstrawberry.Schema(query=Query)\r\n```\r\n\r\nThe example above raises this TypeError:\r\n\r\n```\r\nTypeError: Query fields cannot be resolved. Unexpected type 'typing.Annotated[int, <strawberry.arguments.StrawberryArgumentAnnotation object at 0x7fd12e130d00>]'\r\n```\r\n\r\nWhen the first line (`from __future__ import annotations`) is left out, everything works as intended. This will probably also break once Python 3.11 lands, since the behavior will become mandatory then. #1586 refers to a somewhat related issue.\n", "before_files": [{"content": "from __future__ import annotations\n\nfrom typing import Any, Optional, Union, cast\n\nfrom typing_extensions import Annotated, get_args, get_origin\n\nfrom strawberry.type import StrawberryType\n\nfrom .annotation import StrawberryAnnotation\n\n\nclass StrawberryAutoMeta(type):\n    \"\"\"Metaclass for StrawberryAuto.\n\n    This is used to make sure StrawberryAuto is a singleton and also to\n    override the behavior of `isinstance` so that it consider the following\n    cases:\n\n        >> isinstance(StrawberryAuto(), StrawberryAuto)\n        True\n        >> isinstance(StrawberryAnnotation(StrawberryAuto()), StrawberryAuto)\n        True\n        >> isinstance(Annotated[StrawberryAuto(), object()), StrawberryAuto)\n        True\n\n    \"\"\"\n\n    def __init__(self, *args, **kwargs):\n        self._instance: Optional[StrawberryAuto] = None\n        super().__init__(*args, **kwargs)\n\n    def __call__(cls, *args, **kwargs):\n        if cls._instance is None:\n            cls._instance = super().__call__(*args, **kwargs)\n\n        return cls._instance\n\n    def __instancecheck__(\n        self,\n        instance: Union[StrawberryAuto, StrawberryAnnotation, StrawberryType, type],\n    ):\n        if isinstance(instance, StrawberryAnnotation):\n            resolved = instance.annotation\n            if isinstance(resolved, str):\n                namespace = instance.namespace\n                resolved = namespace and namespace.get(resolved)\n\n            if resolved is not None:\n                instance = cast(type, resolved)\n\n        if instance is auto:\n            return True\n\n        # Support uses of Annotated[auto, something()]\n        if get_origin(instance) is Annotated:\n            args = get_args(instance)\n            if args[0] is Any:\n                return any(isinstance(arg, StrawberryAuto) for arg in args[1:])\n\n        return False\n\n\nclass StrawberryAuto(metaclass=StrawberryAutoMeta):\n    def __str__(self):\n        return \"auto\"\n\n    def __repr__(self):\n        return \"<auto>\"\n\n\nauto = Annotated[Any, StrawberryAuto()]\n", "path": "strawberry/auto.py"}], "after_files": [{"content": "from __future__ import annotations\n\nfrom typing import Any, Optional, Union, cast\n\nfrom typing_extensions import Annotated, get_args, get_origin\n\nfrom strawberry.type import StrawberryType\n\nfrom .annotation import StrawberryAnnotation\n\n\nclass StrawberryAutoMeta(type):\n    \"\"\"Metaclass for StrawberryAuto.\n\n    This is used to make sure StrawberryAuto is a singleton and also to\n    override the behavior of `isinstance` so that it consider the following\n    cases:\n\n        >> isinstance(StrawberryAuto(), StrawberryAuto)\n        True\n        >> isinstance(StrawberryAnnotation(StrawberryAuto()), StrawberryAuto)\n        True\n        >> isinstance(Annotated[StrawberryAuto(), object()), StrawberryAuto)\n        True\n\n    \"\"\"\n\n    def __init__(self, *args, **kwargs):\n        self._instance: Optional[StrawberryAuto] = None\n        super().__init__(*args, **kwargs)\n\n    def __call__(cls, *args, **kwargs):\n        if cls._instance is None:\n            cls._instance = super().__call__(*args, **kwargs)\n\n        return cls._instance\n\n    def __instancecheck__(\n        self,\n        instance: Union[StrawberryAuto, StrawberryAnnotation, StrawberryType, type],\n    ):\n        if isinstance(instance, StrawberryAnnotation):\n            resolved = instance.annotation\n            if isinstance(resolved, str):\n                namespace = instance.namespace\n                resolved = namespace and namespace.get(resolved)\n\n            if resolved is not None:\n                instance = cast(type, resolved)\n\n        if instance is auto:\n            return True\n\n        # Support uses of Annotated[auto, something()]\n        if get_origin(instance) is Annotated:\n            args = get_args(instance)\n            if args[0] is Any:\n                return any(isinstance(arg, StrawberryAuto) for arg in args[1:])\n\n        return instance == \"strawberry.auto\"\n\n\nclass StrawberryAuto(metaclass=StrawberryAutoMeta):\n    def __str__(self):\n        return \"auto\"\n\n    def __repr__(self):\n        return \"<auto>\"\n\n\nauto = Annotated[Any, StrawberryAuto()]\n", "path": "strawberry/auto.py"}]}