def output_percent_run_target(self,
                                  speed,
                                  target_angle,
                                  stop_type=Stop.COAST,
                                  wait=True,
                                  depth=None):
        """Keep the motor or linked gears running at a constant speed (percentage) towards a
        speicified target degree

        :param speed: Speed of the Motor or Gear (percentage)
        :type speed: int, float
        :param target_angle: Target angle that the Motor should rotate to,
                             regardless of its current angle
        :type target_angle: int
        :param stop_type: Whether to coast, brake, or hold after coming to a standstill,
                          defaults to Stop.COAST
        :type stop_type: Stop, optional
        :param wait: Whether to wait for the maneuver to complete before continuing with the rest of
                     the program, defaults to True
        :type wait: bool, optional
        :param depth: Depth of the gear in the link to set the speed for, defaults to None
        :type depth: int, optional
        """
        if depth is None:
            self.percent_run_target(speed,
                                    target_angle,
                                    stop_type=stop_type,
                                    wait=wait)
        ratio = get_ratio(self.gears, depth=depth)
        super(MotorExt,
              self).run_target(speed_deg(speed, rpm=self.rpm) / ratio,
                               target_angle / ratio,
                               stop_type=stop_type,
                               wait=wait)
    def output_percent_run_until_stalled(self,
                                         speed,
                                         stop_type=Stop.COAST,
                                         duty_limit=100,
                                         depth=None):
        """Keep the motor or linked gears running at a constant speed (percentage) until it stalls

        :param speed: Speed of the Motor or Gear (percentage)
        :type speed: int, float
        :param stop_type: Whether to coast, brake, or hold after coming to a standstill,
                          defaults to Stop.COAST
        :type stop_type: Stop, optional
        :param duty_limit: Relative torque limit, defaults to 100
        :type duty_limit: int, optional
        :param depth: Depth of the gear in the link to set the speed for, defaults to None
        :type depth: int, optional
        """
        if depth is None:
            self.percent_run_until_stalled(speed,
                                           stop_type=stop_type,
                                           duty_limit=duty_limit)
        super(MotorExt,
              self).run_until_stalled(speed_deg(speed, rpm=self.rpm) *
                                      get_ratio(self.gears, depth=depth),
                                      stop_type=stop_type,
                                      duty_limit=duty_limit)
    def output_percent_run_time(self,
                                speed,
                                time,
                                stop_type=Stop.COAST,
                                wait=True,
                                depth=None):
        """Keep the motor or linked gears running at a constant speed (percentage)
        for a specified amount of time

        :param speed: Speed of the Motor or Gear (percentage)
        :type speed: int, float
        :param time: Duration (milliseconds) of the maneuver
        :type time: int
        :param stop_type: Whether to coast, brake or hold after coming to a standstill,
                          defaults to Stop.COAST
        :type stop_type: Stop, optional
        :param wait: Whether to wait for the maneuver to complete before continuing with the rest of
                     the program, defaults to True
        :type wait: bool, optional
        :param depth: Depth of the gear in the link to set the speed for, defaults to None
        :type depth: int, optional
        """
        if depth is None:
            self.percent_run_time(speed, time, stop_type=stop_type, wait=wait)
        super(MotorExt, self).run_time(speed_deg(speed, rpm=self.rpm) /
                                       get_ratio(self.gears, depth=depth),
                                       time,
                                       stop_type=stop_type,
                                       wait=wait)
    def percent_run(self, speed):
        """Keep the motor running at a constant speed (percentage)

        :param speed: Speed of the Motor
        :type speed: int, float
        """
        super(MotorExt, self).run(speed_deg(speed, rpm=self.rpm))
    def output_percent_run(self, speed, depth=None):
        """Keep the motor or linked gears running at a constant speed (percentage)

        :param speed: Speed of the Motor or Gear
        :type speed: int, float
        :param depth: Depth of the gear in the link to set the speed for, defaults to None
        :type depth: int, optional
        """
        if depth is None:
            self.percent_run(speed)
        super(MotorExt, self).run(
            speed_deg(speed, rpm=self.rpm) /
            get_ratio(self.gears, depth=depth))
    def percent_run_until_stalled(self,
                                  speed,
                                  stop_type=Stop.COAST,
                                  duty_limit=100):
        """Keep the motor running at a constant speed (percentage) until it stalls

        :param speed: Speed of the Motor or Gear (percentage)
        :type speed: int, float
        :param stop_type: Whether to coast, brake, or hold after coming to a standstill,
                          defaults to Stop.COAST
        :type stop_type: Stop, optional
        :param duty_limit: Relative torque limit, defaults to 100
        :type duty_limit: int, optional
        """
        super(MotorExt, self).run_until_stalled(speed_deg(speed, rpm=self.rpm),
                                                stop_type=stop_type,
                                                duty_limit=duty_limit)
    def percent_run_time(self, speed, time, stop_type=Stop.COAST, wait=True):
        """Keep the motor running at a constant speed (percentage) for a speicified amount of time

        :param speed: Speed of the Motor or Gear (percentage)
        :type speed: int, float
        :param time: Duration (milliseconds) of the maneuver
        :type time: int
        :param stop_type: Whether to coast, brake, or hold after coming to a standstill,
                          defaults to Stop.COAST
        :type stop_type: Stop, optional
        :param wait: Whether to wait for the maneuver to complete before continuing with the rest of
                     the program, defaults to True
        :type wait: bool, optional
        """
        super(MotorExt, self).run_time(speed_deg(speed, rpm=self.rpm),
                                       time,
                                       stop_type=stop_type,
                                       wait=wait)
    def percent_run_angle(self,
                          speed,
                          rotation_angle,
                          stop_type=Stop.COAST,
                          wait=True):
        """Keep the motor running at a constant speed (percentage) for a
        speicified amount of degrees

        :param speed: Speed of the Motor or Gear
        :type speed: int, float
        :param rotation_angle: Angle (degrees) by which the Motor should run
        :type rotation_angle: int
        :param stop_type: Whether to coast, brake, or hold after coming to a standstill,
                          defaults to Stop.COAST
        :type stop_type: Stop, optional
        :param wait: Whether to wait for the maneuver to complete before continuing with the rest of
                     the program, defaults to True
        :type wait: bool, optional
        """
        super(MotorExt, self).run_angle(speed_deg(speed, rpm=self.rpm),
                                        rotation_angle,
                                        stop_type=stop_type,
                                        wait=wait)
    def percent_run_target(self,
                           speed,
                           target_angle,
                           stop_type=Stop.COAST,
                           wait=True):
        """Keep the motor running at a constant speed (percentage) towards a
        speicified target degree

        :param speed: Speed of the Motor or Gear (percentage)
        :type speed: int, float
        :param target_angle: Target angle that the Motor should rotate to,
                             regardless of its current angle
        :type target_angle: int
        :param stop_type: Whether to coast, brake, or hold after coming to a standstill,
                          defaults to Stop.COAST
        :type stop_type: Stop, optional
        :param wait: Whether to wait for the maneuver to complete before continuing with the rest of
                     the program, defaults to True
        :type wait: bool, optional
        """
        super(MotorExt, self).run_target(speed_deg(speed, rpm=self.rpm),
                                         target_angle,
                                         stop_type=stop_type,
                                         wait=wait)