@lib.api_call
    def rotate(self, rate):
        """Pass (angular) rate as -100 to +100
        (positive is counterclockwise)."""

        # Validate params
        self.logger.debug("Rotating with angular rate: {}".format(rate))
        try:
            assert MecDriver.min_angular_rate <= rate <= \
                MecDriver.max_angular_rate
        except __HOLE__:
            raise AssertionError("Angular rate is out of bounds")

        # if rate == 0:  # TODO deadband (epsilon) check?

        self.set_motor("front_left", -rate)
        self.set_motor("front_right", rate)
        self.set_motor("back_left", -rate)
        self.set_motor("back_right", rate)

        # NOTE(napratin, 9/17):
        # Set motor directions, based on http://goo.gl/B1KEUV
        # Also see MecanumWheelDirection.png
        # Only 2 wheels need to be turned on for each direction, but using all
        # 4 wheels in a conventional differential
        # rotation works fine
dataset/ETHPy150Open IEEERobotics/bot/bot/driver/mec_driver.py/MecDriver.rotate