We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
CI failing: `./tools/configen/configen/utils.py:4:1: F401 'typing.Tuple' imported but unused`
```
./tools/configen/configen/utils.py:4:1: F401 'typing.Tuple' imported but unused
nox > [2023-07-24 22:16:52,631] Command flake8 --config .flake8 failed with exit code 1
nox > [2023-07-24 22:16:52,632] Session lint-3.10 failed.
```

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `tools/configen/configen/utils.py`
Content:
```
1 # Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved
2 import sys
3 from enum import Enum
4 from typing import Any, Dict, Iterable, List, Optional, Set, Tuple
5 
6 from omegaconf._utils import (
7     _resolve_optional,
8     get_dict_key_value_types,
9     get_list_element_type,
10     is_dict_annotation,
11     is_list_annotation,
12     is_primitive_type_annotation,
13 )
14 
15 
16 # borrowed from OmegaConf
17 def type_str(t: Any) -> str:
18     is_optional, t = _resolve_optional(t)
19     if t is None:
20         return type(t).__name__
21     if t is Any:
22         return "Any"
23     if t is ...:
24         return "..."
25 
26     if sys.version_info < (3, 7, 0):  # pragma: no cover
27         # Python 3.6
28         if hasattr(t, "__name__"):
29             name = str(t.__name__)
30         else:
31             if t.__origin__ is not None:
32                 name = type_str(t.__origin__)
33             else:
34                 name = str(t)
35                 if name.startswith("typing."):
36                     name = name[len("typing.") :]
37     else:  # pragma: no cover
38         # Python >= 3.7
39         if hasattr(t, "__name__"):
40             name = str(t.__name__)
41         else:
42             if t._name is None:
43                 if t.__origin__ is not None:
44                     name = type_str(t.__origin__)
45             else:
46                 name = str(t._name)
47 
48     args = getattr(t, "__args__", None)
49     if args is not None:
50         args = ", ".join(type_str(t) for t in t.__args__)
51         ret = f"{name}[{args}]"
52     else:
53         ret = name
54     if is_optional:
55         return f"Optional[{ret}]"
56     else:
57         return ret
58 
59 
60 def is_tuple_annotation(type_: Any) -> bool:
61     origin = getattr(type_, "__origin__", None)
62     return origin is tuple
63 
64 
65 def convert_imports(imports: Set[Any], string_imports: Iterable[str]) -> List[str]:
66     tmp = set()
67     for imp in string_imports:
68         tmp.add(imp)
69     for t in imports:
70         s = None
71         origin = getattr(t, "__origin__", None)
72         if t is Any:
73             classname = "Any"
74         elif t is Optional:
75             classname = "Optional"
76         else:
77             if origin is list:
78                 classname = "List"
79             elif origin is tuple:
80                 classname = "Tuple"
81             elif origin is dict:
82                 classname = "Dict"
83             else:
84                 classname = t.__name__
85 
86         if not is_primitive_type_annotation(t) or issubclass(t, Enum):
87             s = f"from {t.__module__} import {classname}"
88 
89         if s is not None:
90             tmp.add(s)
91     return sorted(list(tmp))
92 
93 
94 def collect_imports(imports: Set[Any], type_: Any) -> None:
95     if is_list_annotation(type_):
96         collect_imports(imports, get_list_element_type(type_))
97         type_ = List
98     elif is_dict_annotation(type_):
99         kvt = get_dict_key_value_types(type_)
100         collect_imports(imports, kvt[0])
101         collect_imports(imports, kvt[1])
102         type_ = Dict
103     else:
104         is_optional = _resolve_optional(type_)[0]
105         if is_optional and type_ is not Any:
106             type_ = Optional
107     imports.add(type_)
108
```
--- 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/tools/configen/configen/utils.py b/tools/configen/configen/utils.py
--- a/tools/configen/configen/utils.py
+++ b/tools/configen/configen/utils.py
@@ -1,7 +1,7 @@
 # Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved
 import sys
 from enum import Enum
-from typing import Any, Dict, Iterable, List, Optional, Set, Tuple
+from typing import Any, Dict, Iterable, List, Optional, Set
 
 from omegaconf._utils import (
     _resolve_optional,

{"golden_diff": "diff --git a/tools/configen/configen/utils.py b/tools/configen/configen/utils.py\n--- a/tools/configen/configen/utils.py\n+++ b/tools/configen/configen/utils.py\n@@ -1,7 +1,7 @@\n # Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved\n import sys\n from enum import Enum\n-from typing import Any, Dict, Iterable, List, Optional, Set, Tuple\n+from typing import Any, Dict, Iterable, List, Optional, Set\n \n from omegaconf._utils import (\n     _resolve_optional,\n", "issue": "CI failing: `./tools/configen/configen/utils.py:4:1: F401 'typing.Tuple' imported but unused`\n```\r\n./tools/configen/configen/utils.py:4:1: F401 'typing.Tuple' imported but unused\r\nnox > [2023-07-24 22:16:52,631] Command flake8 --config .flake8 failed with exit code 1\r\nnox > [2023-07-24 22:16:52,632] Session lint-3.10 failed.\r\n```\n", "before_files": [{"content": "# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved\nimport sys\nfrom enum import Enum\nfrom typing import Any, Dict, Iterable, List, Optional, Set, Tuple\n\nfrom omegaconf._utils import (\n    _resolve_optional,\n    get_dict_key_value_types,\n    get_list_element_type,\n    is_dict_annotation,\n    is_list_annotation,\n    is_primitive_type_annotation,\n)\n\n\n# borrowed from OmegaConf\ndef type_str(t: Any) -> str:\n    is_optional, t = _resolve_optional(t)\n    if t is None:\n        return type(t).__name__\n    if t is Any:\n        return \"Any\"\n    if t is ...:\n        return \"...\"\n\n    if sys.version_info < (3, 7, 0):  # pragma: no cover\n        # Python 3.6\n        if hasattr(t, \"__name__\"):\n            name = str(t.__name__)\n        else:\n            if t.__origin__ is not None:\n                name = type_str(t.__origin__)\n            else:\n                name = str(t)\n                if name.startswith(\"typing.\"):\n                    name = name[len(\"typing.\") :]\n    else:  # pragma: no cover\n        # Python >= 3.7\n        if hasattr(t, \"__name__\"):\n            name = str(t.__name__)\n        else:\n            if t._name is None:\n                if t.__origin__ is not None:\n                    name = type_str(t.__origin__)\n            else:\n                name = str(t._name)\n\n    args = getattr(t, \"__args__\", None)\n    if args is not None:\n        args = \", \".join(type_str(t) for t in t.__args__)\n        ret = f\"{name}[{args}]\"\n    else:\n        ret = name\n    if is_optional:\n        return f\"Optional[{ret}]\"\n    else:\n        return ret\n\n\ndef is_tuple_annotation(type_: Any) -> bool:\n    origin = getattr(type_, \"__origin__\", None)\n    return origin is tuple\n\n\ndef convert_imports(imports: Set[Any], string_imports: Iterable[str]) -> List[str]:\n    tmp = set()\n    for imp in string_imports:\n        tmp.add(imp)\n    for t in imports:\n        s = None\n        origin = getattr(t, \"__origin__\", None)\n        if t is Any:\n            classname = \"Any\"\n        elif t is Optional:\n            classname = \"Optional\"\n        else:\n            if origin is list:\n                classname = \"List\"\n            elif origin is tuple:\n                classname = \"Tuple\"\n            elif origin is dict:\n                classname = \"Dict\"\n            else:\n                classname = t.__name__\n\n        if not is_primitive_type_annotation(t) or issubclass(t, Enum):\n            s = f\"from {t.__module__} import {classname}\"\n\n        if s is not None:\n            tmp.add(s)\n    return sorted(list(tmp))\n\n\ndef collect_imports(imports: Set[Any], type_: Any) -> None:\n    if is_list_annotation(type_):\n        collect_imports(imports, get_list_element_type(type_))\n        type_ = List\n    elif is_dict_annotation(type_):\n        kvt = get_dict_key_value_types(type_)\n        collect_imports(imports, kvt[0])\n        collect_imports(imports, kvt[1])\n        type_ = Dict\n    else:\n        is_optional = _resolve_optional(type_)[0]\n        if is_optional and type_ is not Any:\n            type_ = Optional\n    imports.add(type_)\n", "path": "tools/configen/configen/utils.py"}], "after_files": [{"content": "# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved\nimport sys\nfrom enum import Enum\nfrom typing import Any, Dict, Iterable, List, Optional, Set\n\nfrom omegaconf._utils import (\n    _resolve_optional,\n    get_dict_key_value_types,\n    get_list_element_type,\n    is_dict_annotation,\n    is_list_annotation,\n    is_primitive_type_annotation,\n)\n\n\n# borrowed from OmegaConf\ndef type_str(t: Any) -> str:\n    is_optional, t = _resolve_optional(t)\n    if t is None:\n        return type(t).__name__\n    if t is Any:\n        return \"Any\"\n    if t is ...:\n        return \"...\"\n\n    if sys.version_info < (3, 7, 0):  # pragma: no cover\n        # Python 3.6\n        if hasattr(t, \"__name__\"):\n            name = str(t.__name__)\n        else:\n            if t.__origin__ is not None:\n                name = type_str(t.__origin__)\n            else:\n                name = str(t)\n                if name.startswith(\"typing.\"):\n                    name = name[len(\"typing.\") :]\n    else:  # pragma: no cover\n        # Python >= 3.7\n        if hasattr(t, \"__name__\"):\n            name = str(t.__name__)\n        else:\n            if t._name is None:\n                if t.__origin__ is not None:\n                    name = type_str(t.__origin__)\n            else:\n                name = str(t._name)\n\n    args = getattr(t, \"__args__\", None)\n    if args is not None:\n        args = \", \".join(type_str(t) for t in t.__args__)\n        ret = f\"{name}[{args}]\"\n    else:\n        ret = name\n    if is_optional:\n        return f\"Optional[{ret}]\"\n    else:\n        return ret\n\n\ndef is_tuple_annotation(type_: Any) -> bool:\n    origin = getattr(type_, \"__origin__\", None)\n    return origin is tuple\n\n\ndef convert_imports(imports: Set[Any], string_imports: Iterable[str]) -> List[str]:\n    tmp = set()\n    for imp in string_imports:\n        tmp.add(imp)\n    for t in imports:\n        s = None\n        origin = getattr(t, \"__origin__\", None)\n        if t is Any:\n            classname = \"Any\"\n        elif t is Optional:\n            classname = \"Optional\"\n        else:\n            if origin is list:\n                classname = \"List\"\n            elif origin is tuple:\n                classname = \"Tuple\"\n            elif origin is dict:\n                classname = \"Dict\"\n            else:\n                classname = t.__name__\n\n        if not is_primitive_type_annotation(t) or issubclass(t, Enum):\n            s = f\"from {t.__module__} import {classname}\"\n\n        if s is not None:\n            tmp.add(s)\n    return sorted(list(tmp))\n\n\ndef collect_imports(imports: Set[Any], type_: Any) -> None:\n    if is_list_annotation(type_):\n        collect_imports(imports, get_list_element_type(type_))\n        type_ = List\n    elif is_dict_annotation(type_):\n        kvt = get_dict_key_value_types(type_)\n        collect_imports(imports, kvt[0])\n        collect_imports(imports, kvt[1])\n        type_ = Dict\n    else:\n        is_optional = _resolve_optional(type_)[0]\n        if is_optional and type_ is not Any:\n            type_ = Optional\n    imports.add(type_)\n", "path": "tools/configen/configen/utils.py"}]}