prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  FireReset is firing warnings in the CI
  from recent tests runs
  ```sh
  UserWarning: WARN: <class 'garage.envs.wrappers.fire_reset.FireReset'> doesn't implement 'step' method, which is required for wrappers derived directly from Wrapper. Deprecated default implementation is used.
  ```
  
  </issue>
  <code>
  [start of garage/envs/wrappers/noop.py]
  1 """Noop wrapper for gym.Env."""
  2 import gym
  3 import numpy as np
  4 
  5 
  6 class Noop(gym.Wrapper):
  7     """
  8     Noop wrapper for gym.Env.
  9 
  10     It samples initial states by taking random number of no-ops on reset.
  11     No-op is assumed to be action 0.
  12 
  13     Args:
  14         env: The environment to be wrapped.
  15         noop_max: Maximum number no-op to be performed on reset.
  16     """
  17 
  18     def __init__(self, env, noop_max=30):
  19         super().__init__(env)
  20         self._noop_max = noop_max
  21         self._noop_action = 0
  22         assert noop_max > 0, "noop_max should be larger than 0!"
  23         assert env.unwrapped.get_action_meanings()[0] == 'NOOP', (
  24             "No-op should be the 0-th action but it's not in {}!".format(env))
  25 
  26     def reset(self, **kwargs):
  27         """gym.Env reset function."""
  28         obs = self.env.reset(**kwargs)
  29         noops = np.random.randint(1, self._noop_max + 1)
  30         for _ in range(noops):
  31             obs, _, done, _ = self.env.step(self._noop_action)
  32             if done:
  33                 obs = self.env.reset(**kwargs)
  34         return obs
  35
  [end of garage/envs/wrappers/noop.py]
  [start of garage/envs/wrappers/fire_reset.py]
  1 """Fire reset wrapper for gym.Env."""
  2 import gym
  3 
  4 
  5 class FireReset(gym.Wrapper):
  6     """
  7     Fire reset wrapper for gym.Env.
  8 
  9     Take action "fire" on reset.
  10 
  11     Args:
  12         env: The environment to be wrapped.
  13     """
  14 
  15     def __init__(self, env):
  16         super().__init__(env)
  17         assert env.unwrapped.get_action_meanings()[1] == 'FIRE', (
  18             "Only use fire reset wrapper for suitable environment!")
  19         assert len(env.unwrapped.get_action_meanings()) >= 3, (
  20             "Only use fire reset wrapper for suitable environment!")
  21 
  22     def reset(self, **kwargs):
  23         """gym.Env reset function."""
  24         self.env.reset(**kwargs)
  25         obs, _, done, _ = self.env.step(1)
  26         if done:
  27             obs = self.env.reset(**kwargs)
  28         return obs
  29
  [end of garage/envs/wrappers/fire_reset.py]
  [start of garage/envs/wrappers/clip_reward.py]
  1 """Clip reward for gym.Env."""
  2 import gym
  3 import numpy as np
  4 
  5 
  6 class ClipReward(gym.Wrapper):
  7     """Clip the reward by its sign."""
  8 
  9     def step(self, ac):
  10         """gym.Env step function."""
  11         obs, reward, done, info = self.env.step(ac)
  12         return obs, np.sign(reward), done, info
  13
  [end of garage/envs/wrappers/clip_reward.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/garage/envs/wrappers/clip_reward.py b/garage/envs/wrappers/clip_reward.py
  --- a/garage/envs/wrappers/clip_reward.py
  +++ b/garage/envs/wrappers/clip_reward.py
  @@ -10,3 +10,7 @@
           """gym.Env step function."""
           obs, reward, done, info = self.env.step(ac)
           return obs, np.sign(reward), done, info
  +
  +    def reset(self):
  +        """gym.Env reset."""
  +        return self.env.reset()
  diff --git a/garage/envs/wrappers/fire_reset.py b/garage/envs/wrappers/fire_reset.py
  --- a/garage/envs/wrappers/fire_reset.py
  +++ b/garage/envs/wrappers/fire_reset.py
  @@ -15,9 +15,9 @@
       def __init__(self, env):
           super().__init__(env)
           assert env.unwrapped.get_action_meanings()[1] == 'FIRE', (
  -            "Only use fire reset wrapper for suitable environment!")
  +            'Only use fire reset wrapper for suitable environment!')
           assert len(env.unwrapped.get_action_meanings()) >= 3, (
  -            "Only use fire reset wrapper for suitable environment!")
  +            'Only use fire reset wrapper for suitable environment!')
   
       def reset(self, **kwargs):
           """gym.Env reset function."""
  @@ -26,3 +26,7 @@
           if done:
               obs = self.env.reset(**kwargs)
           return obs
  +
  +    def step(self, action):
  +        """gym.Env step function."""
  +        return self.env.step(action)
  diff --git a/garage/envs/wrappers/noop.py b/garage/envs/wrappers/noop.py
  --- a/garage/envs/wrappers/noop.py
  +++ b/garage/envs/wrappers/noop.py
  @@ -19,7 +19,7 @@
           super().__init__(env)
           self._noop_max = noop_max
           self._noop_action = 0
  -        assert noop_max > 0, "noop_max should be larger than 0!"
  +        assert noop_max > 0, 'noop_max should be larger than 0!'
           assert env.unwrapped.get_action_meanings()[0] == 'NOOP', (
               "No-op should be the 0-th action but it's not in {}!".format(env))
   
  @@ -28,7 +28,11 @@
           obs = self.env.reset(**kwargs)
           noops = np.random.randint(1, self._noop_max + 1)
           for _ in range(noops):
  -            obs, _, done, _ = self.env.step(self._noop_action)
  +            obs, _, done, _ = self.step(self._noop_action)
               if done:
                   obs = self.env.reset(**kwargs)
           return obs
  +
  +    def step(self, action):
  +        """gym.Env step function."""
  +        return self.env.step(action)
  
verification_info: {"golden_diff": "diff --git a/garage/envs/wrappers/clip_reward.py b/garage/envs/wrappers/clip_reward.py\n--- a/garage/envs/wrappers/clip_reward.py\n+++ b/garage/envs/wrappers/clip_reward.py\n@@ -10,3 +10,7 @@\n         \"\"\"gym.Env step function.\"\"\"\n         obs, reward, done, info = self.env.step(ac)\n         return obs, np.sign(reward), done, info\n+\n+    def reset(self):\n+        \"\"\"gym.Env reset.\"\"\"\n+        return self.env.reset()\ndiff --git a/garage/envs/wrappers/fire_reset.py b/garage/envs/wrappers/fire_reset.py\n--- a/garage/envs/wrappers/fire_reset.py\n+++ b/garage/envs/wrappers/fire_reset.py\n@@ -15,9 +15,9 @@\n     def __init__(self, env):\n         super().__init__(env)\n         assert env.unwrapped.get_action_meanings()[1] == 'FIRE', (\n-            \"Only use fire reset wrapper for suitable environment!\")\n+            'Only use fire reset wrapper for suitable environment!')\n         assert len(env.unwrapped.get_action_meanings()) >= 3, (\n-            \"Only use fire reset wrapper for suitable environment!\")\n+            'Only use fire reset wrapper for suitable environment!')\n \n     def reset(self, **kwargs):\n         \"\"\"gym.Env reset function.\"\"\"\n@@ -26,3 +26,7 @@\n         if done:\n             obs = self.env.reset(**kwargs)\n         return obs\n+\n+    def step(self, action):\n+        \"\"\"gym.Env step function.\"\"\"\n+        return self.env.step(action)\ndiff --git a/garage/envs/wrappers/noop.py b/garage/envs/wrappers/noop.py\n--- a/garage/envs/wrappers/noop.py\n+++ b/garage/envs/wrappers/noop.py\n@@ -19,7 +19,7 @@\n         super().__init__(env)\n         self._noop_max = noop_max\n         self._noop_action = 0\n-        assert noop_max > 0, \"noop_max should be larger than 0!\"\n+        assert noop_max > 0, 'noop_max should be larger than 0!'\n         assert env.unwrapped.get_action_meanings()[0] == 'NOOP', (\n             \"No-op should be the 0-th action but it's not in {}!\".format(env))\n \n@@ -28,7 +28,11 @@\n         obs = self.env.reset(**kwargs)\n         noops = np.random.randint(1, self._noop_max + 1)\n         for _ in range(noops):\n-            obs, _, done, _ = self.env.step(self._noop_action)\n+            obs, _, done, _ = self.step(self._noop_action)\n             if done:\n                 obs = self.env.reset(**kwargs)\n         return obs\n+\n+    def step(self, action):\n+        \"\"\"gym.Env step function.\"\"\"\n+        return self.env.step(action)\n", "issue": "FireReset is firing warnings in the CI\nfrom recent tests runs\r\n```sh\r\nUserWarning: WARN: <class 'garage.envs.wrappers.fire_reset.FireReset'> doesn't implement 'step' method, which is required for wrappers derived directly from Wrapper. Deprecated default implementation is used.\r\n```\n", "before_files": [{"content": "\"\"\"Noop wrapper for gym.Env.\"\"\"\nimport gym\nimport numpy as np\n\n\nclass Noop(gym.Wrapper):\n    \"\"\"\n    Noop wrapper for gym.Env.\n\n    It samples initial states by taking random number of no-ops on reset.\n    No-op is assumed to be action 0.\n\n    Args:\n        env: The environment to be wrapped.\n        noop_max: Maximum number no-op to be performed on reset.\n    \"\"\"\n\n    def __init__(self, env, noop_max=30):\n        super().__init__(env)\n        self._noop_max = noop_max\n        self._noop_action = 0\n        assert noop_max > 0, \"noop_max should be larger than 0!\"\n        assert env.unwrapped.get_action_meanings()[0] == 'NOOP', (\n            \"No-op should be the 0-th action but it's not in {}!\".format(env))\n\n    def reset(self, **kwargs):\n        \"\"\"gym.Env reset function.\"\"\"\n        obs = self.env.reset(**kwargs)\n        noops = np.random.randint(1, self._noop_max + 1)\n        for _ in range(noops):\n            obs, _, done, _ = self.env.step(self._noop_action)\n            if done:\n                obs = self.env.reset(**kwargs)\n        return obs\n", "path": "garage/envs/wrappers/noop.py"}, {"content": "\"\"\"Fire reset wrapper for gym.Env.\"\"\"\nimport gym\n\n\nclass FireReset(gym.Wrapper):\n    \"\"\"\n    Fire reset wrapper for gym.Env.\n\n    Take action \"fire\" on reset.\n\n    Args:\n        env: The environment to be wrapped.\n    \"\"\"\n\n    def __init__(self, env):\n        super().__init__(env)\n        assert env.unwrapped.get_action_meanings()[1] == 'FIRE', (\n            \"Only use fire reset wrapper for suitable environment!\")\n        assert len(env.unwrapped.get_action_meanings()) >= 3, (\n            \"Only use fire reset wrapper for suitable environment!\")\n\n    def reset(self, **kwargs):\n        \"\"\"gym.Env reset function.\"\"\"\n        self.env.reset(**kwargs)\n        obs, _, done, _ = self.env.step(1)\n        if done:\n            obs = self.env.reset(**kwargs)\n        return obs\n", "path": "garage/envs/wrappers/fire_reset.py"}, {"content": "\"\"\"Clip reward for gym.Env.\"\"\"\nimport gym\nimport numpy as np\n\n\nclass ClipReward(gym.Wrapper):\n    \"\"\"Clip the reward by its sign.\"\"\"\n\n    def step(self, ac):\n        \"\"\"gym.Env step function.\"\"\"\n        obs, reward, done, info = self.env.step(ac)\n        return obs, np.sign(reward), done, info\n", "path": "garage/envs/wrappers/clip_reward.py"}]}