def METHOD_NAME(self, action):
    # Execute the action
    for wheel in self.__wheels:
        wheel.setVelocity(1.3 if action == 1 else -1.3)
    super().METHOD_NAME(self.__timestep)
    # Observation
    robot = self.getSelf()
    endpoint = self.getFromDef("POLE_ENDPOINT")
    self.state = np.array([robot.getPosition()[0], robot.getVelocity()[0],
                           self.__pendulum_sensor.getValue(), endpoint.getVelocity()[4]])
    # Done
    done = bool(
        self.state[0] < -self.x_threshold or
        self.state[0] > self.x_threshold or
        self.state[2] < -self.theta_threshold_radians or
        self.state[2] > self.theta_threshold_radians
    )
    # Reward
    reward = 0 if done else 1
    return self.state.astype(np.float32), reward, done, {}