We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Garage does not run without display (pyglet)
Not all use cases require environment rendering. Can we get rid of this default import?

```
Traceback (most recent call last):
    from garage.tf.envs import TfEnv
  File "/home//garage/env/lib/python3.6/site-packages/garage/tf/envs/__init__.py", line 1, in <module>
    from garage.tf.envs.base import TfEnv
  File "/home//garage/env/lib/python3.6/site-packages/garage/tf/envs/base.py", line 4, in <module>
    from garage.envs import GarageEnv
  File "/home//garage/env/lib/python3.6/site-packages/garage/envs/__init__.py", line 1, in <module>
    from garage.envs.base import GarageEnv
  File "/home//garage/env/lib/python3.6/site-packages/garage/envs/base.py", line 7, in <module>
    from gym.envs.classic_control.rendering import SimpleImageViewer
  File "/home//garage/env/lib/python3.6/site-packages/gym/envs/classic_control/rendering.py", line 27, in <module>
    from pyglet.gl import *
  File "/home//garage/env/lib/python3.6/site-packages/pyglet/gl/__init__.py", line 239, in <module>
    import pyglet.window
  File "/home//garage/env/lib/python3.6/site-packages/pyglet/window/__init__.py", line 1896, in <module>
    gl._create_shadow_window()
  File "/home//garage/env/lib/python3.6/site-packages/pyglet/gl/__init__.py", line 208, in _create_shadow_window
    _shadow_window = Window(width=1, height=1, visible=False)
  File "/home//garage/env/lib/python3.6/site-packages/pyglet/window/xlib/__init__.py", line 166, in __init__
    super(XlibWindow, self).__init__(*args, **kwargs)
  File "/home//garage/env/lib/python3.6/site-packages/pyglet/window/__init__.py", line 501, in __init__
    display = get_platform().get_default_display()
  File "/home//garage/env/lib/python3.6/site-packages/pyglet/window/__init__.py", line 1845, in get_default_display
    return pyglet.canvas.get_display()
  File "/home//garage/env/lib/python3.6/site-packages/pyglet/canvas/__init__.py", line 82, in get_display
    return Display()
  File "/home//garage/env/lib/python3.6/site-packages/pyglet/canvas/xlib.py", line 86, in __init__
    raise NoSuchDisplayException('Cannot connect to "%s"' % name)
pyglet.canvas.xlib.NoSuchDisplayException: Cannot connect to "None"
```

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `src/garage/envs/base.py`
Content:
```
1 """Wrapper class that converts gym.Env into GarageEnv."""
2 import collections
3 
4 import akro
5 import glfw
6 import gym
7 from gym.envs.classic_control.rendering import SimpleImageViewer
8 from gym.envs.classic_control.rendering import Viewer
9 
10 from garage.core import Serializable
11 from garage.envs.env_spec import EnvSpec
12 
13 # The gym environments using one of the packages in the following lists as
14 # entry points don't close their viewer windows.
15 KNOWN_GYM_NOT_CLOSE_VIEWER = [
16     # Please keep alphabetized
17     'gym.envs.atari',
18     'gym.envs.box2d',
19     'gym.envs.classic_control'
20 ]
21 
22 KNOWN_GYM_NOT_CLOSE_MJ_VIEWER = [
23     # Please keep alphabetized
24     'gym.envs.mujoco',
25     'gym.envs.robotics'
26 ]
27 
28 
29 class GarageEnv(gym.Wrapper, Serializable):
30     """
31     Returns an abstract Garage wrapper class for gym.Env.
32 
33     In order to provide pickling (serialization) and parameterization
34     for gym.Envs, they must be wrapped with a GarageEnv. This ensures
35     compatibility with existing samplers and checkpointing when the
36     envs are passed internally around garage.
37 
38     Furthermore, classes inheriting from GarageEnv should silently
39     convert action_space and observation_space from gym.Spaces to
40     akro.spaces.
41 
42     Args: env (gym.Env): the env that will be wrapped
43     """
44 
45     def __init__(self, env=None, env_name=''):
46         if env_name:
47             super().__init__(gym.make(env_name))
48         else:
49             super().__init__(env)
50 
51         self.action_space = akro.from_gym(self.env.action_space)
52         self.observation_space = akro.from_gym(self.env.observation_space)
53         if self.spec:
54             self.spec.action_space = self.action_space
55             self.spec.observation_space = self.observation_space
56         else:
57             self.spec = EnvSpec(
58                 action_space=self.action_space,
59                 observation_space=self.observation_space)
60 
61         Serializable.quick_init(self, locals())
62 
63     def close(self):
64         """
65         Close the wrapped env.
66 
67         Returns:
68             None
69         """
70         self._close_viewer_window()
71         self.env.close()
72 
73     def _close_viewer_window(self):
74         """
75         Close viewer window.
76 
77         Unfortunately, some gym environments don't close the viewer windows
78         properly, which leads to "out of memory" issues when several of
79         these environments are tested one after the other.
80         This method searches for the viewer object of type MjViewer, Viewer
81         or SimpleImageViewer, based on environment, and if the environment
82         is wrapped in other environment classes, it performs depth search
83         in those as well.
84         This method can be removed once OpenAI solves the issue.
85         """
86         if self.env.spec:
87             if any(package in self.env.spec._entry_point
88                    for package in KNOWN_GYM_NOT_CLOSE_MJ_VIEWER):
89                 # This import is not in the header to avoid a MuJoCo dependency
90                 # with non-MuJoCo environments that use this base class.
91                 from mujoco_py.mjviewer import MjViewer
92                 if (hasattr(self.env, 'viewer')
93                         and isinstance(self.env.viewer, MjViewer)):
94                     glfw.destroy_window(self.env.viewer.window)
95             elif any(package in self.env.spec._entry_point
96                      for package in KNOWN_GYM_NOT_CLOSE_VIEWER):
97                 if (hasattr(self.env, 'viewer') and
98                     (isinstance(self.env.viewer, Viewer)
99                      or isinstance(self.env.viewer, SimpleImageViewer))):
100                     self.env.viewer.close()
101 
102     def reset(self, **kwargs):
103         """
104         This method is necessary to suppress a deprecated warning
105         thrown by gym.Wrapper.
106 
107         Calls reset on wrapped env.
108         """
109         return self.env.reset(**kwargs)
110 
111     def step(self, action):
112         """
113         This method is necessary to suppress a deprecated warning
114         thrown by gym.Wrapper.
115 
116         Calls step on wrapped env.
117         """
118         return self.env.step(action)
119 
120 
121 def Step(observation, reward, done, **kwargs):  # noqa: N802
122     """
123     Convenience method for creating a namedtuple from the results of
124     environment.step(action). Provides the option to put extra
125     diagnostic info in the kwargs (if it exists) without demanding
126     an explicit positional argument.
127     """
128     return _Step(observation, reward, done, kwargs)
129 
130 
131 _Step = collections.namedtuple('Step',
132                                ['observation', 'reward', 'done', 'info'])
133
```
--- 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/src/garage/envs/base.py b/src/garage/envs/base.py
--- a/src/garage/envs/base.py
+++ b/src/garage/envs/base.py
@@ -4,8 +4,6 @@
 import akro
 import glfw
 import gym
-from gym.envs.classic_control.rendering import SimpleImageViewer
-from gym.envs.classic_control.rendering import Viewer
 
 from garage.core import Serializable
 from garage.envs.env_spec import EnvSpec
@@ -54,9 +52,8 @@
             self.spec.action_space = self.action_space
             self.spec.observation_space = self.observation_space
         else:
-            self.spec = EnvSpec(
-                action_space=self.action_space,
-                observation_space=self.observation_space)
+            self.spec = EnvSpec(action_space=self.action_space,
+                                observation_space=self.observation_space)
 
         Serializable.quick_init(self, locals())
 
@@ -66,6 +63,7 @@
 
         Returns:
             None
+
         """
         self._close_viewer_window()
         self.env.close()
@@ -94,36 +92,35 @@
                     glfw.destroy_window(self.env.viewer.window)
             elif any(package in self.env.spec._entry_point
                      for package in KNOWN_GYM_NOT_CLOSE_VIEWER):
-                if (hasattr(self.env, 'viewer') and
-                    (isinstance(self.env.viewer, Viewer)
-                     or isinstance(self.env.viewer, SimpleImageViewer))):
-                    self.env.viewer.close()
+                if hasattr(self.env, 'viewer'):
+                    from gym.envs.classic_control.rendering import (
+                        Viewer, SimpleImageViewer)
+                    if (isinstance(self.env.viewer, Viewer)
+                            or isinstance(self.env.viewer, SimpleImageViewer)):
+                        self.env.viewer.close()
 
     def reset(self, **kwargs):
-        """
+        """Call reset on wrapped env.
+
         This method is necessary to suppress a deprecated warning
         thrown by gym.Wrapper.
-
-        Calls reset on wrapped env.
         """
         return self.env.reset(**kwargs)
 
     def step(self, action):
-        """
+        """Call step on wrapped env.
+
         This method is necessary to suppress a deprecated warning
         thrown by gym.Wrapper.
-
-        Calls step on wrapped env.
         """
         return self.env.step(action)
 
 
 def Step(observation, reward, done, **kwargs):  # noqa: N802
-    """
-    Convenience method for creating a namedtuple from the results of
-    environment.step(action). Provides the option to put extra
-    diagnostic info in the kwargs (if it exists) without demanding
-    an explicit positional argument.
+    """Create a namedtuple from the results of environment.step(action).
+
+    Provides the option to put extra diagnostic info in the kwargs (if it
+    exists) without demanding an explicit positional argument.
     """
     return _Step(observation, reward, done, kwargs)

{"golden_diff": "diff --git a/src/garage/envs/base.py b/src/garage/envs/base.py\n--- a/src/garage/envs/base.py\n+++ b/src/garage/envs/base.py\n@@ -4,8 +4,6 @@\n import akro\n import glfw\n import gym\n-from gym.envs.classic_control.rendering import SimpleImageViewer\n-from gym.envs.classic_control.rendering import Viewer\n \n from garage.core import Serializable\n from garage.envs.env_spec import EnvSpec\n@@ -54,9 +52,8 @@\n             self.spec.action_space = self.action_space\n             self.spec.observation_space = self.observation_space\n         else:\n-            self.spec = EnvSpec(\n-                action_space=self.action_space,\n-                observation_space=self.observation_space)\n+            self.spec = EnvSpec(action_space=self.action_space,\n+                                observation_space=self.observation_space)\n \n         Serializable.quick_init(self, locals())\n \n@@ -66,6 +63,7 @@\n \n         Returns:\n             None\n+\n         \"\"\"\n         self._close_viewer_window()\n         self.env.close()\n@@ -94,36 +92,35 @@\n                     glfw.destroy_window(self.env.viewer.window)\n             elif any(package in self.env.spec._entry_point\n                      for package in KNOWN_GYM_NOT_CLOSE_VIEWER):\n-                if (hasattr(self.env, 'viewer') and\n-                    (isinstance(self.env.viewer, Viewer)\n-                     or isinstance(self.env.viewer, SimpleImageViewer))):\n-                    self.env.viewer.close()\n+                if hasattr(self.env, 'viewer'):\n+                    from gym.envs.classic_control.rendering import (\n+                        Viewer, SimpleImageViewer)\n+                    if (isinstance(self.env.viewer, Viewer)\n+                            or isinstance(self.env.viewer, SimpleImageViewer)):\n+                        self.env.viewer.close()\n \n     def reset(self, **kwargs):\n-        \"\"\"\n+        \"\"\"Call reset on wrapped env.\n+\n         This method is necessary to suppress a deprecated warning\n         thrown by gym.Wrapper.\n-\n-        Calls reset on wrapped env.\n         \"\"\"\n         return self.env.reset(**kwargs)\n \n     def step(self, action):\n-        \"\"\"\n+        \"\"\"Call step on wrapped env.\n+\n         This method is necessary to suppress a deprecated warning\n         thrown by gym.Wrapper.\n-\n-        Calls step on wrapped env.\n         \"\"\"\n         return self.env.step(action)\n \n \n def Step(observation, reward, done, **kwargs):  # noqa: N802\n-    \"\"\"\n-    Convenience method for creating a namedtuple from the results of\n-    environment.step(action). Provides the option to put extra\n-    diagnostic info in the kwargs (if it exists) without demanding\n-    an explicit positional argument.\n+    \"\"\"Create a namedtuple from the results of environment.step(action).\n+\n+    Provides the option to put extra diagnostic info in the kwargs (if it\n+    exists) without demanding an explicit positional argument.\n     \"\"\"\n     return _Step(observation, reward, done, kwargs)\n", "issue": "Garage does not run without display (pyglet)\nNot all use cases require environment rendering. Can we get rid of this default import?\r\n\r\n```\r\nTraceback (most recent call last):\r\n    from garage.tf.envs import TfEnv\r\n  File \"/home//garage/env/lib/python3.6/site-packages/garage/tf/envs/__init__.py\", line 1, in <module>\r\n    from garage.tf.envs.base import TfEnv\r\n  File \"/home//garage/env/lib/python3.6/site-packages/garage/tf/envs/base.py\", line 4, in <module>\r\n    from garage.envs import GarageEnv\r\n  File \"/home//garage/env/lib/python3.6/site-packages/garage/envs/__init__.py\", line 1, in <module>\r\n    from garage.envs.base import GarageEnv\r\n  File \"/home//garage/env/lib/python3.6/site-packages/garage/envs/base.py\", line 7, in <module>\r\n    from gym.envs.classic_control.rendering import SimpleImageViewer\r\n  File \"/home//garage/env/lib/python3.6/site-packages/gym/envs/classic_control/rendering.py\", line 27, in <module>\r\n    from pyglet.gl import *\r\n  File \"/home//garage/env/lib/python3.6/site-packages/pyglet/gl/__init__.py\", line 239, in <module>\r\n    import pyglet.window\r\n  File \"/home//garage/env/lib/python3.6/site-packages/pyglet/window/__init__.py\", line 1896, in <module>\r\n    gl._create_shadow_window()\r\n  File \"/home//garage/env/lib/python3.6/site-packages/pyglet/gl/__init__.py\", line 208, in _create_shadow_window\r\n    _shadow_window = Window(width=1, height=1, visible=False)\r\n  File \"/home//garage/env/lib/python3.6/site-packages/pyglet/window/xlib/__init__.py\", line 166, in __init__\r\n    super(XlibWindow, self).__init__(*args, **kwargs)\r\n  File \"/home//garage/env/lib/python3.6/site-packages/pyglet/window/__init__.py\", line 501, in __init__\r\n    display = get_platform().get_default_display()\r\n  File \"/home//garage/env/lib/python3.6/site-packages/pyglet/window/__init__.py\", line 1845, in get_default_display\r\n    return pyglet.canvas.get_display()\r\n  File \"/home//garage/env/lib/python3.6/site-packages/pyglet/canvas/__init__.py\", line 82, in get_display\r\n    return Display()\r\n  File \"/home//garage/env/lib/python3.6/site-packages/pyglet/canvas/xlib.py\", line 86, in __init__\r\n    raise NoSuchDisplayException('Cannot connect to \"%s\"' % name)\r\npyglet.canvas.xlib.NoSuchDisplayException: Cannot connect to \"None\"\r\n```\n", "before_files": [{"content": "\"\"\"Wrapper class that converts gym.Env into GarageEnv.\"\"\"\nimport collections\n\nimport akro\nimport glfw\nimport gym\nfrom gym.envs.classic_control.rendering import SimpleImageViewer\nfrom gym.envs.classic_control.rendering import Viewer\n\nfrom garage.core import Serializable\nfrom garage.envs.env_spec import EnvSpec\n\n# The gym environments using one of the packages in the following lists as\n# entry points don't close their viewer windows.\nKNOWN_GYM_NOT_CLOSE_VIEWER = [\n    # Please keep alphabetized\n    'gym.envs.atari',\n    'gym.envs.box2d',\n    'gym.envs.classic_control'\n]\n\nKNOWN_GYM_NOT_CLOSE_MJ_VIEWER = [\n    # Please keep alphabetized\n    'gym.envs.mujoco',\n    'gym.envs.robotics'\n]\n\n\nclass GarageEnv(gym.Wrapper, Serializable):\n    \"\"\"\n    Returns an abstract Garage wrapper class for gym.Env.\n\n    In order to provide pickling (serialization) and parameterization\n    for gym.Envs, they must be wrapped with a GarageEnv. This ensures\n    compatibility with existing samplers and checkpointing when the\n    envs are passed internally around garage.\n\n    Furthermore, classes inheriting from GarageEnv should silently\n    convert action_space and observation_space from gym.Spaces to\n    akro.spaces.\n\n    Args: env (gym.Env): the env that will be wrapped\n    \"\"\"\n\n    def __init__(self, env=None, env_name=''):\n        if env_name:\n            super().__init__(gym.make(env_name))\n        else:\n            super().__init__(env)\n\n        self.action_space = akro.from_gym(self.env.action_space)\n        self.observation_space = akro.from_gym(self.env.observation_space)\n        if self.spec:\n            self.spec.action_space = self.action_space\n            self.spec.observation_space = self.observation_space\n        else:\n            self.spec = EnvSpec(\n                action_space=self.action_space,\n                observation_space=self.observation_space)\n\n        Serializable.quick_init(self, locals())\n\n    def close(self):\n        \"\"\"\n        Close the wrapped env.\n\n        Returns:\n            None\n        \"\"\"\n        self._close_viewer_window()\n        self.env.close()\n\n    def _close_viewer_window(self):\n        \"\"\"\n        Close viewer window.\n\n        Unfortunately, some gym environments don't close the viewer windows\n        properly, which leads to \"out of memory\" issues when several of\n        these environments are tested one after the other.\n        This method searches for the viewer object of type MjViewer, Viewer\n        or SimpleImageViewer, based on environment, and if the environment\n        is wrapped in other environment classes, it performs depth search\n        in those as well.\n        This method can be removed once OpenAI solves the issue.\n        \"\"\"\n        if self.env.spec:\n            if any(package in self.env.spec._entry_point\n                   for package in KNOWN_GYM_NOT_CLOSE_MJ_VIEWER):\n                # This import is not in the header to avoid a MuJoCo dependency\n                # with non-MuJoCo environments that use this base class.\n                from mujoco_py.mjviewer import MjViewer\n                if (hasattr(self.env, 'viewer')\n                        and isinstance(self.env.viewer, MjViewer)):\n                    glfw.destroy_window(self.env.viewer.window)\n            elif any(package in self.env.spec._entry_point\n                     for package in KNOWN_GYM_NOT_CLOSE_VIEWER):\n                if (hasattr(self.env, 'viewer') and\n                    (isinstance(self.env.viewer, Viewer)\n                     or isinstance(self.env.viewer, SimpleImageViewer))):\n                    self.env.viewer.close()\n\n    def reset(self, **kwargs):\n        \"\"\"\n        This method is necessary to suppress a deprecated warning\n        thrown by gym.Wrapper.\n\n        Calls reset on wrapped env.\n        \"\"\"\n        return self.env.reset(**kwargs)\n\n    def step(self, action):\n        \"\"\"\n        This method is necessary to suppress a deprecated warning\n        thrown by gym.Wrapper.\n\n        Calls step on wrapped env.\n        \"\"\"\n        return self.env.step(action)\n\n\ndef Step(observation, reward, done, **kwargs):  # noqa: N802\n    \"\"\"\n    Convenience method for creating a namedtuple from the results of\n    environment.step(action). Provides the option to put extra\n    diagnostic info in the kwargs (if it exists) without demanding\n    an explicit positional argument.\n    \"\"\"\n    return _Step(observation, reward, done, kwargs)\n\n\n_Step = collections.namedtuple('Step',\n                               ['observation', 'reward', 'done', 'info'])\n", "path": "src/garage/envs/base.py"}], "after_files": [{"content": "\"\"\"Wrapper class that converts gym.Env into GarageEnv.\"\"\"\nimport collections\n\nimport akro\nimport glfw\nimport gym\n\nfrom garage.core import Serializable\nfrom garage.envs.env_spec import EnvSpec\n\n# The gym environments using one of the packages in the following lists as\n# entry points don't close their viewer windows.\nKNOWN_GYM_NOT_CLOSE_VIEWER = [\n    # Please keep alphabetized\n    'gym.envs.atari',\n    'gym.envs.box2d',\n    'gym.envs.classic_control'\n]\n\nKNOWN_GYM_NOT_CLOSE_MJ_VIEWER = [\n    # Please keep alphabetized\n    'gym.envs.mujoco',\n    'gym.envs.robotics'\n]\n\n\nclass GarageEnv(gym.Wrapper, Serializable):\n    \"\"\"\n    Returns an abstract Garage wrapper class for gym.Env.\n\n    In order to provide pickling (serialization) and parameterization\n    for gym.Envs, they must be wrapped with a GarageEnv. This ensures\n    compatibility with existing samplers and checkpointing when the\n    envs are passed internally around garage.\n\n    Furthermore, classes inheriting from GarageEnv should silently\n    convert action_space and observation_space from gym.Spaces to\n    akro.spaces.\n\n    Args: env (gym.Env): the env that will be wrapped\n    \"\"\"\n\n    def __init__(self, env=None, env_name=''):\n        if env_name:\n            super().__init__(gym.make(env_name))\n        else:\n            super().__init__(env)\n\n        self.action_space = akro.from_gym(self.env.action_space)\n        self.observation_space = akro.from_gym(self.env.observation_space)\n        if self.spec:\n            self.spec.action_space = self.action_space\n            self.spec.observation_space = self.observation_space\n        else:\n            self.spec = EnvSpec(action_space=self.action_space,\n                                observation_space=self.observation_space)\n\n        Serializable.quick_init(self, locals())\n\n    def close(self):\n        \"\"\"\n        Close the wrapped env.\n\n        Returns:\n            None\n\n        \"\"\"\n        self._close_viewer_window()\n        self.env.close()\n\n    def _close_viewer_window(self):\n        \"\"\"\n        Close viewer window.\n\n        Unfortunately, some gym environments don't close the viewer windows\n        properly, which leads to \"out of memory\" issues when several of\n        these environments are tested one after the other.\n        This method searches for the viewer object of type MjViewer, Viewer\n        or SimpleImageViewer, based on environment, and if the environment\n        is wrapped in other environment classes, it performs depth search\n        in those as well.\n        This method can be removed once OpenAI solves the issue.\n        \"\"\"\n        if self.env.spec:\n            if any(package in self.env.spec._entry_point\n                   for package in KNOWN_GYM_NOT_CLOSE_MJ_VIEWER):\n                # This import is not in the header to avoid a MuJoCo dependency\n                # with non-MuJoCo environments that use this base class.\n                from mujoco_py.mjviewer import MjViewer\n                if (hasattr(self.env, 'viewer')\n                        and isinstance(self.env.viewer, MjViewer)):\n                    glfw.destroy_window(self.env.viewer.window)\n            elif any(package in self.env.spec._entry_point\n                     for package in KNOWN_GYM_NOT_CLOSE_VIEWER):\n                if hasattr(self.env, 'viewer'):\n                    from gym.envs.classic_control.rendering import (\n                        Viewer, SimpleImageViewer)\n                    if (isinstance(self.env.viewer, Viewer)\n                            or isinstance(self.env.viewer, SimpleImageViewer)):\n                        self.env.viewer.close()\n\n    def reset(self, **kwargs):\n        \"\"\"Call reset on wrapped env.\n\n        This method is necessary to suppress a deprecated warning\n        thrown by gym.Wrapper.\n        \"\"\"\n        return self.env.reset(**kwargs)\n\n    def step(self, action):\n        \"\"\"Call step on wrapped env.\n\n        This method is necessary to suppress a deprecated warning\n        thrown by gym.Wrapper.\n        \"\"\"\n        return self.env.step(action)\n\n\ndef Step(observation, reward, done, **kwargs):  # noqa: N802\n    \"\"\"Create a namedtuple from the results of environment.step(action).\n\n    Provides the option to put extra diagnostic info in the kwargs (if it\n    exists) without demanding an explicit positional argument.\n    \"\"\"\n    return _Step(observation, reward, done, kwargs)\n\n\n_Step = collections.namedtuple('Step',\n                               ['observation', 'reward', 'done', 'info'])\n", "path": "src/garage/envs/base.py"}]}