prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Move non-core dependencies to dedicated groups
  @la4de has made a very useful playground for Strawberry, available (for now) here -> https://la4de.github.io/strawberry-playground/
  
  Unfortunately some of the default dependencies aren't uploaded as wheels (see https://github.com/la4de/strawberry-playground/issues/1).
  
  Maybe it could time to move some of these deps to specific groups, we definitely don't need python-multipart installed by default :)
  
  Here's a list of proposed groups based on dependencies installed when doing `pip install strawberry-graphql`:
  
  **Default**:
   
  - cached-property
  - sentinel
  - typing-extensions
  - graphql-core
  - python-dateutil (I think we need this because of compatibility with python 3.7)
  
  **CLI**:
  
  - click
  - pygments
  
  **All web frameworks**:
  
  - python-multipart
  
  
  
  
  </issue>
  <code>
  [start of strawberry/utils/debug.py]
  1 import datetime
  2 import json
  3 from json import JSONEncoder
  4 from typing import Any, Dict, Optional
  5 
  6 from pygments import highlight, lexers
  7 from pygments.formatters import Terminal256Formatter
  8 
  9 from .graphql_lexer import GraphQLLexer
  10 
  11 
  12 class StrawberryJSONEncoder(JSONEncoder):
  13     def default(self, o: Any) -> Any:
  14         return repr(o)
  15 
  16 
  17 def pretty_print_graphql_operation(
  18     operation_name: Optional[str], query: str, variables: Optional[Dict["str", Any]]
  19 ):
  20     """Pretty print a GraphQL operation using pygments.
  21 
  22     Won't print introspection operation to prevent noise in the output."""
  23 
  24     if operation_name == "IntrospectionQuery":
  25         return
  26 
  27     now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
  28 
  29     print(f"[{now}]: {operation_name or 'No operation name'}")
  30     print(highlight(query, GraphQLLexer(), Terminal256Formatter()))
  31 
  32     if variables:
  33         variables_json = json.dumps(variables, indent=4, cls=StrawberryJSONEncoder)
  34 
  35         print(highlight(variables_json, lexers.JsonLexer(), Terminal256Formatter()))
  36
  [end of strawberry/utils/debug.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/strawberry/utils/debug.py b/strawberry/utils/debug.py
  --- a/strawberry/utils/debug.py
  +++ b/strawberry/utils/debug.py
  @@ -3,11 +3,6 @@
   from json import JSONEncoder
   from typing import Any, Dict, Optional
   
  -from pygments import highlight, lexers
  -from pygments.formatters import Terminal256Formatter
  -
  -from .graphql_lexer import GraphQLLexer
  -
   
   class StrawberryJSONEncoder(JSONEncoder):
       def default(self, o: Any) -> Any:
  @@ -21,6 +16,17 @@
   
       Won't print introspection operation to prevent noise in the output."""
   
  +    try:
  +        from pygments import highlight, lexers
  +        from pygments.formatters import Terminal256Formatter
  +    except ImportError as e:
  +        raise ImportError(
  +            "pygments is not installed but is required for debug output, install it "
  +            "directly or run `pip install strawberry-graphql[debug-server]`"
  +        ) from e
  +
  +    from .graphql_lexer import GraphQLLexer
  +
       if operation_name == "IntrospectionQuery":
           return
  
verification_info: {"golden_diff": "diff --git a/strawberry/utils/debug.py b/strawberry/utils/debug.py\n--- a/strawberry/utils/debug.py\n+++ b/strawberry/utils/debug.py\n@@ -3,11 +3,6 @@\n from json import JSONEncoder\n from typing import Any, Dict, Optional\n \n-from pygments import highlight, lexers\n-from pygments.formatters import Terminal256Formatter\n-\n-from .graphql_lexer import GraphQLLexer\n-\n \n class StrawberryJSONEncoder(JSONEncoder):\n     def default(self, o: Any) -> Any:\n@@ -21,6 +16,17 @@\n \n     Won't print introspection operation to prevent noise in the output.\"\"\"\n \n+    try:\n+        from pygments import highlight, lexers\n+        from pygments.formatters import Terminal256Formatter\n+    except ImportError as e:\n+        raise ImportError(\n+            \"pygments is not installed but is required for debug output, install it \"\n+            \"directly or run `pip install strawberry-graphql[debug-server]`\"\n+        ) from e\n+\n+    from .graphql_lexer import GraphQLLexer\n+\n     if operation_name == \"IntrospectionQuery\":\n         return\n", "issue": "Move non-core dependencies to dedicated groups\n@la4de has made a very useful playground for Strawberry, available (for now) here -> https://la4de.github.io/strawberry-playground/\r\n\r\nUnfortunately some of the default dependencies aren't uploaded as wheels (see https://github.com/la4de/strawberry-playground/issues/1).\r\n\r\nMaybe it could time to move some of these deps to specific groups, we definitely don't need python-multipart installed by default :)\r\n\r\nHere's a list of proposed groups based on dependencies installed when doing `pip install strawberry-graphql`:\r\n\r\n**Default**:\r\n \r\n- cached-property\r\n- sentinel\r\n- typing-extensions\r\n- graphql-core\r\n- python-dateutil (I think we need this because of compatibility with python 3.7)\r\n\r\n**CLI**:\r\n\r\n- click\r\n- pygments\r\n\r\n**All web frameworks**:\r\n\r\n- python-multipart\r\n\r\n\r\n\n", "before_files": [{"content": "import datetime\nimport json\nfrom json import JSONEncoder\nfrom typing import Any, Dict, Optional\n\nfrom pygments import highlight, lexers\nfrom pygments.formatters import Terminal256Formatter\n\nfrom .graphql_lexer import GraphQLLexer\n\n\nclass StrawberryJSONEncoder(JSONEncoder):\n    def default(self, o: Any) -> Any:\n        return repr(o)\n\n\ndef pretty_print_graphql_operation(\n    operation_name: Optional[str], query: str, variables: Optional[Dict[\"str\", Any]]\n):\n    \"\"\"Pretty print a GraphQL operation using pygments.\n\n    Won't print introspection operation to prevent noise in the output.\"\"\"\n\n    if operation_name == \"IntrospectionQuery\":\n        return\n\n    now = datetime.datetime.now().strftime(\"%Y-%m-%d %H:%M:%S\")\n\n    print(f\"[{now}]: {operation_name or 'No operation name'}\")\n    print(highlight(query, GraphQLLexer(), Terminal256Formatter()))\n\n    if variables:\n        variables_json = json.dumps(variables, indent=4, cls=StrawberryJSONEncoder)\n\n        print(highlight(variables_json, lexers.JsonLexer(), Terminal256Formatter()))\n", "path": "strawberry/utils/debug.py"}]}